pax_global_header00006660000000000000000000000064141134660300014510gustar00rootroot0000000000000052 comment=e7bfb66e48496aa28e47974c33ea9a4579bf723b dune-geometry-2.8.0/000077500000000000000000000000001411346603000143035ustar00rootroot00000000000000dune-geometry-2.8.0/.gitignore000066400000000000000000000001761411346603000162770ustar00rootroot00000000000000*~ /build*/ # ignore files generated during python setup.py sdist MANIFEST _skbuild/ dist # ignore macOS filesystem .DS_Store dune-geometry-2.8.0/.gitlab-ci.yml000066400000000000000000000032551411346603000167440ustar00rootroot00000000000000--- include: - project: 'core/ci-config' ref: master file: 'config/common/master.yml' - project: 'core/ci-config' ref: master file: 'jobs/common/master.yml' before_script: - . /duneci/bin/duneci-init-job - duneci-install-module https://gitlab.dune-project.org/core/dune-common.git debian-11-gcc-9-17-python: image: registry.dune-project.org/docker/ci/debian:11 script: duneci-standard-test variables: DUNECI_TOOLCHAIN: gcc-9-17 # so we need some variables to build the dune-py module during execution of the first python test: # we need to find the dune mdoule DUNE_CONTROL_PATH: /duneci/modules:$CI_PROJECT_DIR # the position for the dune-py module DUNE_PY_DIR: /duneci/modules/dune-py DUNE_LOG_LEVEL: DEBUG # during dune-py build this variable is used - do know a way to access # the CMAKE_FLAGS used to build the modules... DUNE_CMAKE_FLAGS: "-DCMAKE_CXX_COMPILER=g++-9 -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_FLAGS='-std=c++17 -O2 -g -Wall -fdiagnostics-color=always' -DDUNE_ENABLE_PYTHONBINDINGS=ON -DDUNE_MAX_TEST_CORES=4 -DBUILD_SHARED_LIBS=TRUE -DDUNE_PYTHON_INSTALL_LOCATION=none -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_LATEX=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_Alberta=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_Vc=TRUE -DCMAKE_DISABLE_DOCUMENTATION=TRUE" # cmake flags we use for all dune moudle - important is that build shared libs is set (need some better way of doing this) DUNECI_CMAKE_FLAGS: $DUNE_CMAKE_FLAGS # finally set the python path to all modules PYTHONPATH: /duneci/modules/dune-common/build-cmake/python:$CI_PROJECT_DIR/build-cmake/python tags: [duneci] dune-geometry-2.8.0/CHANGELOG.md000066400000000000000000000165211411346603000161210ustar00rootroot00000000000000# Release 2.8 - Python bindings have been moved from the `dune-python` module which is now obsolete. To activate Python bindings the CMake flag `DUNE_ENABLE_PYTHONBINDINGS` needs to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. - The class `AxisAlignedCubeGeometry` has always had a constructor taking two arguments `FieldVector lower` and `FieldVector upper`. This constructor was always to be used in the case `dim==coorddim` only, but this was never enforced. Starting with version 2.8, compilation fails with an error message if this constructor is used with `dim!=coorddim`. - Two new sets of quadrature rules are provided: the left and right Gauss-Radau quadrature rules. These are optimal rules that include only one endpoint of the integration interval (either left or right) and integrate polynomials of order 2n - 2 exactly. - GeometryType has four new methods: `isPrismatic()`, `isPrismatic(int step)` and `isConical()`,`isConical(int step)`. The versions with an argument return true if the corresponding construction was used in step 0 <= `step` <=dim-1. The other two assume a default argument of `dim-1` (the latest construction step). - GeometryTypes has two new methods: `prismaticExtension(GeometryType gt)` and `conicalExtension(GeometryType gt)`. They return an extended GeometryType based on `gt` via the corresponding construction. For example: ```c++ GeometryType gt = GeometryTypes::line; auto square = GeometryTypes::prismaticExtension(gt); auto triangle = GeometryTypes::conicalExtension(gt); ``` ## Deprecations and removals - Remove code needed to use reference elements by reference. - Remove `GeometryType`'s deprecated member functions `GeometryType::make...()`. - Remove deprecated constructor `GeometryType(unsigned dim)`. - Remove deprecated `CompositeQuadratureRule(QuadratureRule, int)`. Use `CompositeQuadratureRule(QuadratureRule, Dune::refinement{Intervals|Levels}(int))` instead. - Removed all structs from `Impl` dealing with the recursive topology construction: `TopologyFactory`, `TopologySingletonFactory`, `Point`, `Prism`, `Pyramid`, `IsSimplex`, `IsCube`, `SimplexTopology`, `CubeTopology`, `PyramidTopology`, `PrismTopology`, `IfTopology`. Deprecated the free function `Impl::isTopology`. Use the geometries provided by `GeometryType` and `GeometryTypes` instead. To simplify the transition you can include the header "dune/geometry/deprecated_topology.hh". # Release 2.7 - The reference elements have a new method `subEntities`. The result of `referenceELement.subEntities(i,codim, c)` is an iterable range containing the indices of all codim-`c` subentities of the subentity `(i,codim)`, e.g., the vertices of an edge. The range also provides the methods `size()` and `contains()`. - The methods `GeometryType(int)` and `GeometryType(unsigned int)` have been deprecated and will be removed after the release of dune-geometry 2.7. Instead, please now use `GeometryTypes::cube(dim)` to construct one- or two-dimensional `GeometryType` objects. - Geometry implementations now export a type `Volume` that is used for the return value of the `volume` methods. So does the generic `ReferenceElement` implementation. - More efficient quadrature rules for simplices are available that need less quadrature points to achive the same order. For now these have to be explicitly requested: ```c++ auto&& rule = Dune::QuadratureRules<...>::rule(..., Dune::QuadratureType::GaussJacobi_n_0); ``` See [!127]. [!127]: https://gitlab.dune-project.org/core/dune-geometry/merge_requests/127 # Release 2.6 - The enum `GeometryType::BasicType` is deprecated, and will be removed after Dune 2.6. - `VirtualRefinement` and `Refinement` now support arbitrary refinements, not just powers of two. Wherever you where passing a parameter `int levels` (now deprecated), you should now pass a parameter `RefinementIntervals intervals`. There are convenience functions `refinementIntervals(int intervals)` and `refinementLevels(int levels)` to construct parameters of type `RefinementIntervals`. See core/dune-geometry!51 - The class `GeometryType` has been cleaned up in major way: See core/dune-geometry!64 and core/dune-geometry!55 - The class and most of its methods are now `constexpr`. - There are new singletons and factory functions in the namespace `Dune::GeometryTypes`. These are now the official way to obtain a `GeometryType`. - The constructor taking a `GeometryType::BasicType` and a dimension has been deprecated and will be removed after the release of DUNE 2.6. - The assorted member functions `GeometryType::make...()` have been deprecated and will be removed after the release of DUNE 2.6. - The reference element interface has had a substantial overhaul that can break backwards compatibility in some corner cases. See core/dune-geometry!52 - `ReferenceElement` has value semantics now: You should store instances by value and can freely copy them around. Doing so is not more expensive than storing a const reference. - As a consequence of value semantics, `ReferenceElement` is default constructible now. A default constructed `ReferenceElement` may only be assigned another `ReferenceElement`; all other operations cause undefined behavior. Moreover, instances are now comparable and hashable to allow storing them in maps. - We have added code that tries to warn you if you are still storing a `ReferenceElement` by const reference; please update all those occurrences. - The meaning of `Dune::ReferenceElement` has changed. It is not a type anymore, but an alias template that looks up the correct implementation for the given template arguments. For now, there is only a single implementation, but we expect people to come up with additional implementations in the future. For this reason, the syntax `Dune::ReferenceElement` is deprecated and will cause compilation failures in the future. If you still need access to that type, use `typename Dune::ReferenceElements::ReferenceElement` instead. - You can now directly obtain a reference element for a given geometry using the free function `referenceElement(geometry)`. This function should be called without any namespace qualifiers to enable ADL and you should normally capture the return value of the function using `auto`, but if you need to explicitly access the type, this is also available as `Dune::ReferenceElement`. In short: If you can, use the following idiom to obtain a reference element for a geometry: ```c++ auto ref_el = referenceElement(geometry); ``` The change to the meaning of `Dune::ReferenceElement` can break compilation if you have function overloads that partially specialize on it, e.g. ```c++ template void f(const Dune::ReferenceElement ref_el) {} ``` Normally, you can just simplify this to the following code that also shows how to extract the missing template parameters: ```c++ template void f(const RefEl ref_el) { using ctype = typename RefEl::CoordinateField; constexpr auto dim = RefEl::dimension; } ``` dune-geometry-2.8.0/CMakeLists.txt000066400000000000000000000016471411346603000170530ustar00rootroot00000000000000# set up project project("dune-geometry" C CXX) # general stuff cmake_minimum_required(VERSION 3.13) if(NOT (dune-common_DIR OR dune-common_ROOT OR "${CMAKE_PREFIX_PATH}" MATCHES ".*dune-common.*")) string(REPLACE ${CMAKE_PROJECT_NAME} dune-common dune-common_DIR ${PROJECT_BINARY_DIR}) endif() #find dune-common and set the module path find_package(dune-common REQUIRED) list(APPEND CMAKE_MODULE_PATH ${dune-common_MODULE_PATH}) #include the dune macros include(DuneMacros) # start a dune project with information from dune.module dune_project() add_subdirectory("dune") add_subdirectory("doc") add_subdirectory("lib") # if Python bindings are enabled, include necessary sub directories. if( DUNE_ENABLE_PYTHONBINDINGS ) add_subdirectory("python") dune_python_install_package(PATH python) endif() # finalize the dune project, e.g. generating config.h etc. finalize_dune_project(GENERATE_CONFIG_H_CMAKE) dune-geometry-2.8.0/COPYING000077700000000000000000000000001411346603000167352LICENSE.mdustar00rootroot00000000000000dune-geometry-2.8.0/INSTALL000066400000000000000000000046661411346603000153500ustar00rootroot00000000000000Installation Instructions ========================= For a full explanation of the DUNE installation process please read the installation notes [0]. The following introduction is meant for the impatient. Getting started --------------- Suppose you have downloaded all DUNE modules of interest to your computer and extracted then in one common directory. See [1] for a list of available modules. To compile the modules Dune has to check several components of your system and whether prerequisites within the modules are met. For the ease of users we have designed a custom build system on top of CMake. Run ./dune-common/bin/dunecontrol all to commence those tests and build all modules you have downloaded. Don't worry about messages telling you that libraries are missing: they are only needed for grid-self-checks we need for developing. You can customize the build to your specific needs by using an options file (see below) ./dune-common/bin/dunecontrol --opts=/path_to/file.opts If you did not tell dunecontrol to install with an options file you need to run ./dune-common/bin/dunecontrol make install to install Dune (you may need root-permissions for the install part depending on the prefix set) A more comprehensive introduction to the build system can be found in [0]. Passing options to the build process ------------------------------------ Using the dunecontrol script the following atomic commands can be executed: - configure (runs the CMake configuration tests for each module) - exec (executes a command in each module source directory) - bexec (executes a command in each module build directory) - make (builds each module) - update (updates the Git or Subversion version) The composite command all simply runs configure and make for each module. As it is often not convenient to specify the desired options after the duncontroll call, one can pass the options via a file specified by the --opts= option. Specify the options via the variable CMAKE_FLAGS= An example of an options file is # use a special compiler (g++ version 5.0), # install to a custom directory, default is /usr/local/bin, # disable the external library SuperLU, # and use Ninja-build instead of make as the build-tool CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-5 -DCMAKE_INSTALL_PREFIX='/tmp/HuHu' -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU=true -GNinja" Links ----- 0. https://www.dune-project.org/doc/installation 1. https://www.dune-project.org/releases dune-geometry-2.8.0/LICENSE.md000066400000000000000000000467431411346603000157250ustar00rootroot00000000000000Copyright holders: 2015--2016 Marco Agnese 2012--2014 Markus Blatt 2013--2014 Andreas Buhr 2014--2019 Ansgar Burchardt 2013 Benjamin Bykowski 2020--2021 Gregor Corbin 2011--2021 Andreas Dedner 2020 Nils-Arne Dreier 2012--2021 Christian Engwer 2011--2020 Jorrit Fahlke 2012 Bernd Flemisch 2013 Christoph Gersbacher 2016--2020 Janick Gerstenberger 2014--2021 Carsten Gräser 2015--2017 Felix Gruber 2011--2021 Christoph Grüninger 2020 René Heß 2018 Max Kahnt 2013--2018 Dominic Kempf 2012--2020 Robert Klöfkorn 2017 Marcel Koch 2012--2014 Tobias Malkmus 2012--2019 Steffen Müthing 2011--2018 Martin Nolte 2018 Santiago Ospina 2011--2016 Elias Pipping 2018--2021 Simon Praetorius 2011--2021 Oliver Sander 2019--2021 Henrik Stolzmann 2020 Kilian Weishaupt The DUNE library and headers are licensed under version 2 of the GNU General Public License (see below), with a special exception for linking and compiling against DUNE, the so-called "runtime exception." The license is intended to be similar to the GNU Lesser General Public License, which by itself isn't suitable for a template library. The exact wording of the exception reads as follows: As a special exception, you may use the DUNE source files as part of a software library or application without restriction. Specifically, if other files instantiate templates or use macros or inline functions from one or more of the DUNE source files, or you compile one or more of the DUNE source files and link them with other files to produce an executable, this 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. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. dune-geometry-2.8.0/README.md000066400000000000000000000016511411346603000155650ustar00rootroot00000000000000DUNE-library ============ DUNE, the Distributed and Unified Numerics Environment is a modular toolbox for solving partial differential equations with grid-based methods. The main intention is to create slim interfaces allowing an efficient use of legacy and/or new libraries. Using C++ techniques DUNE allows to use very different implementation of the same concept (i.e. grid, solver, ...) under a common interface with a very low overhead. DUNE was designed with flexibility in mind. It supports easy discretization using methods, like Finite Elements, Finite Volume and also Finite Differences. Through separation of data structures DUNE allows fast Linear Algebra like provided in the ISTL module, or usage of external libraries like blas. This package contains the basic DUNE geometry classes. More information ---------------- Check dune-common for more details concerning dependencies, known bugs, license and installation. dune-geometry-2.8.0/config.h.cmake000066400000000000000000000024611411346603000170030ustar00rootroot00000000000000/* begin dune-geometry put the definitions for config.h specific to your project here. Everything above will be overwritten */ /* begin private */ /* Name of package */ #define PACKAGE "@DUNE_MOD_NAME@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@DUNE_MAINTAINER@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@DUNE_MOD_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@DUNE_MOD_NAME@ @DUNE_MOD_VERSION@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@DUNE_MOD_NAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@DUNE_MOD_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@DUNE_MOD_VERSION@" /* end private */ /* Define to the version of dune-geometry */ #define DUNE_GEOMETRY_VERSION "${DUNE_GEOMETRY_VERSION}" /* Define to the major version of dune-geometry */ #define DUNE_GEOMETRY_VERSION_MAJOR ${DUNE_GEOMETRY_VERSION_MAJOR} /* Define to the minor version of dune-geometry */ #define DUNE_GEOMETRY_VERSION_MINOR ${DUNE_GEOMETRY_VERSION_MINOR} /* Define to the revision of dune-geometry */ #define DUNE_GEOMETRY_VERSION_REVISION ${DUNE_GEOMETRY_VERSION_REVISION} /* end dune-geometry */ dune-geometry-2.8.0/doc/000077500000000000000000000000001411346603000150505ustar00rootroot00000000000000dune-geometry-2.8.0/doc/CMakeLists.txt000066400000000000000000000001161411346603000176060ustar00rootroot00000000000000add_subdirectory(appl) add_subdirectory(doxygen) add_subdirectory(refinement) dune-geometry-2.8.0/doc/appl/000077500000000000000000000000001411346603000160045ustar00rootroot00000000000000dune-geometry-2.8.0/doc/appl/CMakeLists.txt000066400000000000000000000000361411346603000205430ustar00rootroot00000000000000add_subdirectory(refelements) dune-geometry-2.8.0/doc/appl/refelements/000077500000000000000000000000001411346603000203155ustar00rootroot00000000000000dune-geometry-2.8.0/doc/appl/refelements/CMakeLists.txt000066400000000000000000000006671411346603000230660ustar00rootroot00000000000000set(PICTURES gg_hexahedron.png gg_line.png gg_prism.png gg_pyramid.png gg_quadrilateral.png gg_tetrahedron.png gg_triangle.png gg_hexahedron_edges.png gg_tetrahedron_edges.png gg_prism_edges.png gg_pyramid_edges.png) inkscape_generate_png_from_svg(${PICTURES} OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) add_custom_target(update_images DEPENDS ${PICTURES}) install(FILES ${PICTURES} DESTINATION ${CMAKE_INSTALL_DOCDIR}/appl/refelements) dune-geometry-2.8.0/doc/appl/refelements/SVG.readme000066400000000000000000000002721411346603000221340ustar00rootroot00000000000000These picture were made using inkscape. To export png files you will have to have sketch installed. Please export the picture with a resolution of 60 DPI to achieve common picture size.dune-geometry-2.8.0/doc/appl/refelements/gg_hexahedron.png000066400000000000000000000770271411346603000236420ustar00rootroot00000000000000PNG  IHDR$6` cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATx|e_&݋NJ頃-CApqɩ[Viۮ-^^۶^|}݇ $*(?DD@X?"1md()?![e#zrmd[N0qu[:X3 Gnbt2o=#- $ԓuoC:lDϧ/1yZّk 2mklˎCuRl˟y/E`[fwUrV:lD; E۞7Xa[b[~'UP&9[$|컜GY(PQLh[.!htu]}HKl/1y ٢{6݃yif y ʄ<_r*:.=9UN/_(|rW-b?dwC:bkL$g^}ʴ}![W|w WCZ)й;̱}ʩtM6(i!k9u-HDD] {| 'sbRy˗;l]yG('+!Rh4Dk2N PN-ϱdr2MA*Y^ErV +d}KDD< 7yރZ!ˢ$!:9iPj#"b !r25#Ոr(wq[yΚ%"Ow+a7%jFO{m]ir{qDY*$"_D1QNWQϰ ߕ;g !w; ""t(ZU<r8(SBDf;yـGϻ2;:}>l lȝ&tBDun,ǎ]BBźv$2UcWgɳ~ DD40&>%9Bwr.5C9xڟ`Ϟ4ueMX"`29uDV2JfE9DFإ5P  /iXFVOm[v׼"HQNR(oZ"~!bG[I:P"P`Y ҺA\~O%" g$q`Y=םܩ8y{ #Go;(q|KQ@^"-b/n(V8E]'Eʝ;tsQz#0<)g"J`J KD} I #~"BB$ nn1xoJk F$mU@N*&"j7 J2wNp9(9 msI]Ya !E va'ω@rIm+s8 e+ (.v%UGv_fQwXq.DF>a쇤AUb`)vnG]|n|^/v%j=1z_ܩ4ۇcFiH̀+YDD^M(:xkg׷zG!J(ڭwρZɝ-1X.y|p0ҙs #cō}aR%牲l={t&^,w3[!")[Py?\O8xQ@@4Zq9Զ^vrX1SGÈu^"0rrqNDQx rVvy? S(?vP}>ڦෟKD""nE|nu"|*< YGڶUX  "KBUqjߨ)qŪ%"_ #c8F`}Ok,.if [FL`b(y^>G&#b|1܀ݿǝh #܎7W[Xa"c^@BF6Z偟.$"(^"0{U-.'ԙ'"^@gm81Ə~ɥղzi02;CÖݥ8b0m`lI bNzݺSB+B)a/9ȽIdN\i8_"JZ"I,<i'F#WJ?G.J Fi/ Įn&9MlDRV1ZQq4 ~ 3c2]c彁z $*Ey:\ F>FFs[Ed8yݢLWl=&(qH`X`PXDKaDqub N7}@ˉ $aD40ܘ}Th[#|1:F}f~9.oRQcU" C} $`^Ƴ7a)M~|Q?r=3-#C[%'00Hȩ0A5aqhwIQ];W7zWa !GeOS>??""Zs-#WGr&kj~ #DD{m=Nz]0I\nj0Pˆ?^& Y%DDQG9>d8?\@B#Z,aXĖ""nksa䚅jć)粡ޅ<Hg!"rlۯE8"pSx`<ea*!"r<\؅?92rcl75a [H'saj5 #DDkE}v^Pɯ+~pl/Au8-z` #[H05Ј0I*!"r2*lc{E_ᎨAwQ,OF~ţi#;.7 #39kca ?0a0"[Fdqvn~_k]1ᰶ09FZ[F #egqF[ԡ\_ $ C4 #DDΆ2":z4欄Uwpj%'ZYDDGӴ8FΌڈ{B_4 tF Fst7 f>k #JķBTCuQ$ֱqerl?#;7fd<R1.Ms-,Ӄaqrevu r~0r| 9ku@a@ORUBD89k Ƽ\1O #}9Ix19Nv\mT"k`H5)WÈrm3JZV ara/6}^dȩ`vV-듁ėH@\ƶ ! Ȍy%Hx|""\g`JSaDNzWa !F߱:29NMsv\^#PƌL 0@+ah?h @}UBD9yaFgƚމ::d;/>5@ .arF29Rx)@=QL (ca rbLfS4bH[ܘȭUO3#0M0s.K+ScF43I{(o\D #DDι.@fl1#CFH|ErH|&} c2aG9 yQ0rW8FbJ_1 87lX%j(CmXk aH8Fd O@4X:T JR#C(f # #SFH|)H ,jFQFBr09PH?s]YNM80{7@l`7 ه[&_NCV VWbǙ0X $Cpz|j2GJՊQ,i IY+4xHi_TAcga 02;*Fg!7G|AIưWFhpQN;1EWgS6FH?e(-4fhRa(k$/'!5j䞾C9FDUM[e 0Y hL5 IrM9f|^N9 eWH0NaDd@,r4MX䘑 hj1D03Z-nU0+uZ#k]rr9QLPFH|ŵ&!D #0HͰw1gn;hD~=#p&pcɻta$.Ll*(/‘_"|*!WSi0"a@@^pR"~Eo`+GŸ*M3(e*/h ^%O&[FD)ad;Q܅qx6s%kdSƌ˜ԄF iZ_#aww-C^[ZA# $a$5΅a^`a 0u04!-#.ZhҐr#ZՇ5t0ԲFS&a6㥬Y $w0#ˆF8fFv8rèq],WF݀T&ߎqf?<0@0bf!O%Cu؞d"Lf`N"|e d7M$$Мg+<|Lhu~`k<†<2f(K # $@vӄ`#D=6cF`܀`oTf#kA  !$7!J.Tjˆ&>d5G0St0D?D!6AƘzx.KY)iPUfX+a '{H]"Db!oW' +\v/ 'Gk OֺyպN]Dz4y۱wv9=S-#"d7$wĤGB[%*\fѣaJ|8D3cvO/CyI]e5ɓ olFHw(D CJ|a\F6_)È<rT`i+IF&Os;L Uaa ކXQr! v]&@؞޿{f ꦵIv"x=DJˈ_krh > /5@3a$apҢxUB [.#R*;;,W(ȩDդzƵPO!% 0MZ0U;sGq+ycx4 V!Jl4d@kRW*@mR1€Do#< a6Q%Ud0gafwÈʝHќ'<ECZ)r8f\/ y T6CC (3!:o~*BȎa`_Pp&2 6ϏO $>@3mB$ja\r?h9 Ir #Ӹkv!x.y[?i s<, $F.HhNaG5r2,dˈaDN?R #I #C9Y/19EY 0ZF2 &sG~0i?"¡-#/{ #DD΄klϩnx#0>-XT #l!"rPap4 $>@`p3_F #auېP9 s>b7'w(+9%]zw\3[6Qe#9€WFL2274^h/EyrbQFvӬrEI&|0dM~([:l]׊2$lעw]#؇(͉{q[<>Er=ƍ"R{0TpXAn#'9ۀ7Cmu:$? 2x[ FPQ>bwa{O\i(_}d{^WF"G!Ȑ ^ #0[n2?4ٙaD֔ =!Udm@h30 '=6m]l?޶\aO^ WCG>\F^E2k؇ƛ!wGᘃ(;CX ,~Жao*(M>4&kU!GXd?@\W}(SEC"7тFqf s1SSv\r6^g!w]/kf4Fjۉ=V8|<iƕ$BAxQMqaT6o{۰{z a2W=~Fbcu~ۿX AG?s5H: 0/c&śbcO}soۜj ?gZG;᨟G}xBp{C`MBaw8fIXͷ49q$F,F~Îeˆyc}G"TQH_]#sfjN1EaN)/AW0c+!k]"s8x8hغGҶ=\FAR020 ,ÈIkG@Ƿ@=q> [ .iIŶ!罒WFaDMS\6& ~ov FIH؂wj/T~]P2̶ IDATґ ~_77& U8KDeҩr9 a'ڮn?G(;9|,a$x4;Mg $+lӻؾƶqߟ*22 2ad0B!0QQ]:1F!?y8PCZlZM} kq$B%[?dE/B<-sBTxNٶ!Oyl"˳"Dٌ;_ #- PـƨZeA?9!hk`x fX4&XTh% 0jmm3x^ϣbا(M28'W0:nj yޗ DyɁ< ebI-͎q>`{Ax؞ y9@rBs!D(O%":o cݱxXH_$~(>+RNN8{~F|&c( B7caB"D/QzoWʐus|%€\f"Sȫ}Q>/{>_u2*AF~.gxY~ȿT>u<܋"-1/ HwtQ`7sD8xSv2d ލc00 0"irub8tͫqǛys/Jo9BT~Zm;-#20@ad)&(VDzJHk4=~a7ˆ~gGU`%"r3Y=Mfa 0tXb!Cu{(o03sTޅ9FHke9fs^GE[(j :F<^h"K}b4e3FFBULzDD-#ohV ^ p}C;>TX~ Z0B@ȓٸzFЖE #DDkmiiwhoE< p']0BH"F&c #,0BDLMi)>o0{x#yaw<4Ԋ0C{bQe hz&C:z9" 'G0BHdȉw/?qZ/oM G%_:"aD,:[f#:7X4Ob%\ 3 qPurS"q <` ܱ{_Q=>O*vtu7NwI"$'į|VʫbR;xJeU3> |`o>|Z;Qe9g`͉}Ebns@Hd @26a9kDNq"{Oۛdbz{04 o7CW|7qovnS$!M~!"ꕰ^P=Tf-?W\63F㑬o G)}"h ǽ`跛9 A)ó_kO]6;h|~/ xN,wa!w@_L%ޚ^ԝn xlkHkO!yi_:~_inna`$`DFu&RU3΍7= @x}F\DyV"D?y^("DZ9f̃@p@ 41Q֣D`T;\`J _ #4 v^Pۿ႟6I_6JD6eOpNN@BDԟS_4)""~wሚ-ϚK!!"r)'(ͰgFءD $DD+P Ԉr8hv 7H\췉@ЮW +f!b !" Q@V9^"""7 U@EP7T*KQdYoD $DDb JI,jB܉@S: :aDD.^] ׵3[ ""~"g27_'ٕͺ!b !"G@PYuȜ0  Q?:yݡD  Q?>B@BDԏ׎CY/D $DD1kάa1 0u@'F#"Og)iu3G4:pVBBDtTNwHuAUS"">vqETNH"0;yj;96ÊXD $DD}$Cst#cĝuJ@BD`8؋CvE)Kx Q C άl-"%1xICp df1Ѹ!Be]?P.ܛ|R*'#"">Ӿv*0@]4`ԉ,J `V@U"6H\$X`yC "V"""b !"""b !""""""""""b !"""b !""""""""""b !"""b !""s¶'/eS3qogP 4+׵z K3<qxSNR$T:8/! NCtぢ ~rY=0wr ;~Tɶ@I㏃h Ar~:a"RK!6(#kuю=""AnXG}EyL:~ɶNh^?4D:8?!!"o~[S\uNim}1IJgQmh{D $DD֊@D!FJDˆ[ʲ&w/'}!"""+]o/VءkIǺ$b !"rЈ@DP lP_9Vdd cS*˭ ru0X%Q8|xݍ_.C!n?um jVpL.@a 9ZV_  /B]J(c."""b !"""b !""""""""""b !"""b !""""""""""b !"""b !""""""""""b !"""b !""""""""""b !"""b !""""""""""b !"""b !"""+ CȖh#XDDXkŢBʂߣnnVW#F!h5HruX ""00V_υ7YƱ<Ȇmd +dE"Vu? 9mei("" #U5"ǐQaeh&LDD@Bh+Bŷj = *}ZBy1ph (]0&""rY{Sp!""rIv49e+KH<[?LX #"vg"H<%IЖ `thL_sGDadtV\@!W`ր`Q;5DDFJ/FSQKX!*p!Sx.orMa-6'Tb쨹^Jq=RQmC Cn- aC݄4""OloJJ݀1 #&@Z*]Y?a0fmjf`eyM3:mb~FfzÑkX]c@SU-Ou0ڈ?4DD-Ę,F"iy2 9˿8[H\mZw84k9 I$"T28Z-#΄{\ 0@OL hzs`*O[*%?`\2 &gvFQÊ""P!A݇?ba l2lHchJih[XYDD"(γWƳH4 aNW^nIZXYDDbӎs`hmN׾hA^٠4Z IDAT,2P;7DGqD6''3#zsh~2+hlu%J5Y(?|2FXv#Uiit~Ř8z> D'BY. #_qۍ Y;57tKHuii7NCCjV@S&h/q(`ъF)HE@@YwD^L cɑu rW]S).MFYtL̞1# $F"4M-Xl_1Q?v-l+36:g"x T[ e(3tT!%b=0K I䅂tdELTɑuUXvfKБjU ƍzaijh*Д~ڭ5MIƤ=0dv4G#Y5y] DuJaF10eXu]6 2QX|&F&SbHY芆Xrr4Sl@#w8~a]ܷz$ȃmq"`t%>ju= 9?p5G5 ݄ZH”H~=-5h EIY1撛GRú -ړ 4"\dg΅Qj곐u͹chYy $ާqd!i>y'J7Ԉ30~2Vkw2a4B3"iYӏðϻ #GfgL; m2k 1x%l3 .5MR ْ{*kN䡹]ަ]c\rlv6)1+9qP,[T/fE´sY/D$8Dh*mLS ҒHOiP7ɧwqDM* i ~N9kbGkoƄF8]E%[P?g,#\6;RxuC%#0pd]z gl!qI1jT55NZB 0 age 239=ߵ_7?@"[Ȉ ÈG`+Gr1` oLBKRe<[H8~",by8y>ų32H JFm @8}<_%ƍyYZ'o4uU30a!pKRbDŽQKYD/p;`l #c_X7D:fɖ"/l-cDIǺ!r:xb !n{D(LǾ$nH"FeQU""~ #H>` TϺ!"b !r #cFif.9 ˆ4C~N}BD@BO'Hr]fڗ} %7>HHNzζ00i녈 6#0f1BD@BԏaDz`BNxFD@Bԏ$(a\d_Da#\|ڻ1 """"""p <BD BBDDD $DDDD $DDD@BDDD@BDDD $DDDD $DDD@BDDDĉh3j_*Z8'C#"b !7;( $ؗBD@Bԏ*WW*E֑*KAuAD@BDDD#v b9j%0ϻ<>Y=(%@`3"w P;^DlNn8"N{#1y5(za] U3}&o`ZBMSŶQYc?u`_)bߍK8|l~ث\>ǶeD?HbVƣr&LWQU'WYWs 뚈60TَZ>Yev9FY.r0VE>-  {`aXeVJa H-1M@^ߘ,eKGGQնw-@D-(m>C`Fψ0Q%[sEyIh.*I7e*N)Ov9S)FsV-?7AUYO((CZkk`XShwOQbnc!^C/;:`=Ob+P$~5Yo\IAA٠, Y*^u/\lBD@DŁٖ-{4orҦi&'II!g9$iy޵y]TyMᳫy: v'@ }f⪸N[$/{ڶ%"BBǞCLۣx!yXh;cg[a:pb! =Sq\C%e Wfeq}@8`(?%u!D))E(n.^#^EBdS-e$I~9_Uv@3ΗS c B&g Ys;/i!')jd/61Sexfn4ls "]jRqvu2CBHqPuaNV4'˝u\90G3YG86n  g˯KbBsX:}~X_@κeԶ4hű9q7?z8a,sϏi 6e'Wo9kwf BRF $:tY޿)W۬)sQH!ۏ:(#E6"#cg6[Ľ"VU)PH% +},3$7m}!CHfb @}P%"&8XUC!!UGVCf2ہVy³8n%eg^W"a5̣RϫJ%d ]5ƧpӜ.@ad3};x! HaeNiM_'ѓ=?j)#3#{Wދⱓ}$>K ƛG!d&6-S00 sLjr;`n*E{<'"BB?boCax};om]=JkuU@@B0~Q.qoEV=(bd'^q!3#Ȏח fB "XɈ95"v[k,BfPHH ȖZ7¾CJeFq?!e/^<,uf>=V#irXF _w t>یxR"Of#Btb, =.I!#vڣ/@1h1x1ufVnqBB23[+ Hh>p*t)#9x+/- XD`+. G~j^1ƁiN>FH$QHH8-0<7 ޔ,I.Haed9eBm=?n<{M4sk;z)$SnWQ\,_*#5$ZdI!dB0)܇d/*euWRHocɌ79?ͣkb-RQ)#5q9PBqCF~X BF&^tǿ(u26DZ4i2VS'\RF!D=Ȟ&dd&PtH8@!!-#:!#p$#o 5?nTF?TTMse}ܽ7B 0U< -27LΫ?9 A (kHfBcj*3#Ob 6mF=[G!!>(#nXFRh/o(#kap3.(1Elgj Ay͊ed]R Y!>H\!d$;3ŗoa!kTHurׯy=lCB\K5vPdDH)Yp(RQso6:KV BrI"sh{cY䬿9r9rlFR)EHDIFv"B;2"T8+ (L3 '̳vY޾. [pt{2t}SZΎdLڔBq 뽦|WacDܤZ-+q"/WUqmR1>пN2Rs5ͩΉI!705`22CSL2ygnRYW[ .<2eUu}Sfdˍп2൘9! ➌~ yPJ8im>dj"+" %lcq ̓0 sBBSqEFJ1Ȭ'<2B!423b 3b F#ZrBB%|v%呙je$3ǷĀ(#ـu* 55`}!a2CBl\zs H +## O!bL XW`a >XD35X )EfFHȌr3!ݘp0ٟeBBJ#@*g>Zl%6C/YMC!Hڏc(!~ l93r"oxddIuRt)$HFvvF~XVF^U/C9u=-{d`uȉMĀΜB.Ž.A)22a58״:V'*:pH@Mc@ԔTӌTP;;"^}`}g 5xD yVa9! "_8y}Cp${;7!RgFѦj]xfxEd֝v"E8wː/DLUdD\ɀy-rI")$(#v͈V>hO7Ⱥ:,{TV$eM9q əSǠqbyp;yDa# !Hk7!Ra^fFFc3e P9cnv"~tt-c\m~v[*6BHj:IT>ٱFekEPD_K29 h\xSEb\|])!9Y24܎O#_9u2vN2+56P])$9{NskeRdK B4t -"tw zԜl#=n!UIY*ddY B8@>>_Veic7GY6upAey-$`2#{A ɯ{X*#2zf񳱊GÒ1Vz\Weև/ef}?\esw9Q{\ mPgo%GFR>#m99#O`0w.^GiXY%+ C(#AIGEQrJ ;vlԟ2C]{U8eZ|;N6.qiHNtOF&HF!8'#ʠgS084T4 #&##-m5 !4Va7øX'dU /]p1{22 !G~&"vM2/@:6yBB|?^4jcK!7(Ɍ܉OLmFv02YM)80/#3#ќB;2bɌ8cBF̐*͈F`$!#lJ!ɈiV9S胣8xwB7JIDATٛFuuB\LG0q;yXekHzaeB.-{?4z짌xfH|] @vq0}^FfNHB_5!X>'ZY E~CۣC:"3#>(Ló-T$یPH.͏k!UAtmPmHZG!~!#/.23B! |L];2ŴǓx51::(v{>Z`eB|SoaىdV IȈ)3ֳ-bYҺkP hʽ_sfM6"fdjix I2#D`whENm"PzJjٵwigyg($Ϯ%Yj`ʄfG!^#;.BD+ŦAAkٯM7TW,㌔مȠPH9H! G9k/Q ;dFh[::X{Tg iј7ю4k럺3k/ex0M=l(E$sQEW/QF`ʌAx Wc.k/$@ddM̈4ᬽ"r*. BS#4:)"9b@NnDjcj<\;eT{#RF($%#HH!o#H8}AB4ޖ[eFIJ=afTgJi6BF ywB 2 9QެǚE~nh,uűvA0j Q/-P+z?ٻ2BCBE(#E7п5WcK<]5 ǡA0!q_:mBiiA^f#,G2 22IXZh FWM3c|K 4D贱X62Hl\SutL8֎XMCK5a4`e- {ؤݡ7) @Aq_=aVVDXliPc@,tOlpťa@!#j4r8IhI oCaC(z'DcgHР=Rq")7k/'&ʳHRF($O!ȯVf4D ̈́eUhw2( X eڌ IȂ;L7eD6`W:`c9o4Qv( !Sf' /i3B nF~ˈlcK 8PؓE^|d{fUroeJF`}BX;Sˈy<9e!mp6#T{i($ed2*G7aV22Nh)#ʈ2‰HH46$B4R)F*3#? 2B!8-#MLB)#*4VӐLi@},E qeBe=!#l3B Bj[B#p#A8lh]b8$uLs͈ڻ )ݡ7iBt4MǏȱH_̆",2$2 #L,h(lz$eBZHs!#׸##l3B>SMd[UADdN_FV]{ufiELĿ upZltOF.SFEňAü+8inO?>hy=?!1gFC=#[nzDxu.zyqf4&La8WvB|fdjܥaja> 2B!odٛFZ&ꞌpVb&{\1{tb̵'+qX3vB|YMcu#0P+p'ص7~cǕ(xxz1K!2;R+,5ŚHl"P+A( 5"2N#ز] V̈P^DdrzqLQ02"۷]k@xvb l3(dh.UdO.D b y\0$119}Cp"Q}p!Z G8#R`z13B! f ]MhP$ &A\MD8ϋ1+M3FhBbz$2#R*#o@[q!K@D|Tv̈8C[ǭ3!a8&c Q+={u} ׯ3"`]fFPkoX#,tO͵(dYG (podPja ZVf.ZŚ8_&{ .eF,s,ApB:s3K2"G`I]/t2B!odoی!i8+H?m\^/WJeTM>?鬪i\ȕRFy3æh; `(Ҁhz)23BXHr°sC0v[" X2eP45R-Fxf(N׏6>хl !"|O.,-(5 x r"̈r /Gk C!Dj0kZ Qnr{꟔UAk ' fZfDVȞ=!8XbP0nENe#" Ⳮ56#FZ$DF 91Z?\Ȉl3ҭBb?A=Pg%iCZ&E3aݗ/bD&G]#qYAȏ_v hM̸0\!b&fY)@Bq^1Ho OEBx<\&*(M)FL yMrb)5Z!$ʺ3Hg&&:9kI#>2B*RM.\ynVd<_!)H2D~FL 9^Vgo*.l)0:(@Aψ&ʓse5Ϳp0;)#ĿDVӤ,)쥌B%ei(/}8#[RFʈAeDvxSZH!Xڌa6CqaȐjo]1[ !2#qN0``5 k!2MόeD3B!0>!p"#yw IIfPt>wdmF!2bUyQ,2B!Ȉݑ`L)yH?22Rba 3Cb-#z2Ӟn_BM#G`[hx@twxHF4D3eVBq2sӬFhʌPFKT*6#nȶ =} u榑 XefD37222BPUxaS?Р=Aȗw.y,TFRDퟢNf$ ؀< $}|T3uȈX6`݅"<}Boϋջ^Y יb4&v(#23b{6t ! _&@EXǸxK^)#Q,$B4oP_<.)6W8G՝ƆxIa5 !$9oD`x)Ɍd4JüW*xң`W8{{/jR?;$^!$P| zo+2  #1BODdUzT?e^^Ff>q13B h @|b0h [4V`22 !+$WlEН]qFl3"3#e^BHx#xࢫG0x>4eF4HB2quNb?(aZ?^TKB䐩'3#iK0^6B)3b0*BrN;,uu^F&? =gBQOɠga0c!IH*aM]D]L»b4 Z~:zȈ6Z!'xmMs4~!EH:YRyV;#Qrгff یBzE1+ivĖRW2Bz^>3Q|$_:BQMû@YH(C!"rlB Dle9ٵ?bH9lga<{29B!Db0y _“luA2B!Y> #eNK'3$=;],^[m40/!#h.v@9H/;rᶐ5|!Ľ_*7Zj$Y! S؛eWMײNM! I9Yf`x;"B($ΰκ*ʹκm|! 3D~ UaRB!gYbx2WR&!B($c9.+uX&e"B($*bͺ;]8~5"ve"B($2"b8.ZuB!5(o8qk"b'b;_"B!B`n𨈇*'A! ȋe*CպELEyQc"WC!nc BL{l)"-YnF)a\ox]/ !8TFna^fEŗB!B!B!B!B!B!B!B!B\ǟʵB!Gq40"1@.myVF"U]*h+b%CֿΗB=v֍"Rm}Dyr"(_D|sVugE(GB|ٕ#X^ͯCf)? qZH+D|+bd)_"jxX?RqFDk'DD_zB#rn{D}E|(eKI0/7٤k H ξcjmWĥ,crm#B|~Uč(_eWvh|a,sSrd}"N% uVo [+56P]xKYNk$_Cf?1o5SDsQ2SaΆKÜm;ZNG̤$e&Ieyξ/Y,:|Z,(Yj0KM\peioD%e;| 5Ee'(emvOdՖ,5qIH*"jT!"}/DYV[%!)@T,op6+Ra&!*e='ja$$ke}7(Kt[/q)˰_| !2T ɯʲ}?Ql^lB|ԞYj0KM\/Ddξ`].vN.Q֯("2앣 `5B/FY&y|OdՖDY2KMb[ϗ.bY"E~c!0c;GLGe9s:[FERDv[ | !> szʗd%Wf[w%KfKB"̃$"G |OR'Svr"^rOee8S3e@`kCKNadԋ=P0ˬw:üZ ge-YjⲐHhzr΁i0U e&7*G^8!_,E=fOe&B!/+T;$%,CVgB!9o*9"x~O!#B!?"fx8GIENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_hexahedron.svg000066400000000000000000000443601411346603000236470ustar00rootroot00000000000000 image/svg+xml 2 (0,1,0) 3 (1,1,0) 6 (0,1,1) 7 (1,1,1) rear 3 4 bottom 0 left 1 right 5 top 2 front 1 (1,0,0) 0 (0,0,0) 4 (0,0,1) 5 (1,0,1) dune-geometry-2.8.0/doc/appl/refelements/gg_hexahedron_edges.png000066400000000000000000000601041411346603000247750ustar00rootroot00000000000000PNG  IHDR+* cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATx|[GW;{#W)%FB؄YJK (a! !{8#K9(dVGW^]KGsϕVdV:{_ ڄLԙ6XvMejdo h6u[| wu|К>)]lj adnSWcS.7uL-55TSo5pzPS#V,SzFS?@_J eX:y[4Sfjn>ԃ>{V&Z0u7 ۰yumRfS|E2~so~>f."~vo=Fe{o?13ԻM|lk;_J~)m/R*s6/tQ6ƻy/M=R۰abJ+wvie󽷽#-ގmҀ_J[ e(VZ:>$<6^So3R[NXAQ=i"ح* +mCqt6B^S!o3nKmxoԘH*{;_J[s'am{;4ǽG֘djd|)m]2 +m3:%٦45y25wk 6|N5U}qVZlSטzAvC7aS]LgXo/:BHoǞ7XmmƿRz~Mim) urv>':Ԧ ~~(!o_`@[7tO]~oj[p/?zN-n;숴_89SM١؆W1.`ǗRw|p_*:6|_Jk3o+|)/|)`:ɦFe*NkNs5ПLeZ읞ij3 yu2Dc S=+/M=bkSGԾ4D,w/4 sMkګ!Oփ.phgMR"Unc'&6%/S_oF<.ڔGB!!%ǯDC;KZ.35ti(g@kvLm Ն9 a,? ?ʍgPqz2К ǘ"O0﷎# DLE{gtJ?$hvmvBo\wP?A Ia}M@~oG4^k5 Aq]VvyogsymfߴR@XA]FfA+n7&I2uwچC+K~㯌~P3elWY~C+-Zӕ4GXAsK 0Tә3g{{ =m+ieo=tIސ;& ,OЬ*ӕ}~jj!a-!.wsbKNU5;Rge;YSyi`fe~ c[%&<T~Hm.lLn|SzqVPũ.m6.q?4-??@KE?T em7}:ZIњ]-ڶ ǙCWg>NiNXA]~1uXy2'I=?&ZT)&ϕݳ"u+o ϖ꩞ g/jP)kQ%pm`Pi 0GG+}L^ PoPQWvd~wE] vXz YA]q18>8ԥTy!ؠw->R9SizYA]~g=4z(zH+TW-\ܝ>W:J&Zi{Pis&>L?BVyHy *1qlb;%C.-{˯SK{@m졟+u?Gexrv7;P<-{#س<-SjܷCwv}S9 4L'-:W]GޓjߠGGgK6Viiw(^:]kGF~ Ruzr}vrn&_ @h'! 1Sa,q t/: *I&ܛ|-)_8*7k%^)sz%W%;=w-ٳd*{߆W6qew;6ӓRAT:|1ǹlntW^'a F+m޷Wye[ook4v sX>2Z)]SC@ナ=߱-m;Q}{zR@hŦ4u乴{p {p{{FLtcc{ Ma 4=&-:ӰrMԟ==*>+W%Av;LíO7+-S˞h<πo .tt/A!Ԏ [5V,{]X?jhş?XT rL0l kXX?rD&9>*oRzgQ 'g] SP8Gcb:oAroג2x)֠T&@ٳ~в3;}"ǹ̶T+kPu]J TY?1ĪӓXP8 ph;(C?ڞ7-T%=*KݣrK1 TE=L=2l:Ĕ A%ơw1A岑/)F%4 4=->;*ǫ[\KABXAũtM!@q'%nȣ_ۅPhлG{`=B *]>Ź<9) aayE]1BGW h{Zr}6۠ǕS BT>9.F哆1 4L{SjwW;?GP! tA#sM!@pAŞS.Ŝ5'j*{TaP8sCo##t?AfQQa$9Yw{VXvQg@pAF-*U'th'*ҳR%eYAUPq3T8B\T8*3ؼ%V')!zgSKǕv"ֽ5e mbazqT|i+:|`=89Jhg#~zt'Qu-ML5g>C?(D;ʿ:@>*6t*,>*'i4Asgl *æT+eP'@SJ8*I3r #4N]nA9)N7-PܮЙygukgG&lb!@>*whoAP! t~fWcdZ6ܤEgْۧ BTb8e]EP>*IO޻$VPS Vw~OA%֡/gmJ&>/SA,;!Ge6T⢳mAJT[PYwux{ǜa vWM ,ԩ޺XS HPЖݭ y;*[ݳ}rwװEv$u|siy yzRSO{xQ CKFw *5b8]ٿgV &$$.}:FDJNU3;n4]h9%QK/hBmLewz_Y|ɵXu|$gy*]Okubי=ky9*t7iQ dSSk,_lfSM=P&:tqh˞ךޣ'E;ld\u<|fњN9J&lREw98 ycGy*|T@YPgW=[Lh)Y9HWJopq(WfOc辡m=(""˹~vaU5IZ kܪk:̢ cOns9f-ꗑ!JK VOwYNE&D|&IZzZ.(!˞-:OI *!c7j=+~ҩZ0yhOBIj *?ƒ;.ͣ+6SȴtV1WHi>QA<%~tOxSniķPx]}N.SBm+o-U7qtфںڞvHYm_Wn7#7,y]T5b%O×Jm5G`*bЫ؎,W~K}U:.֟Τ +#8T}{`*Pv #k:uQZFShG,>fcְ<}[/to۹SiaomP3w2Av4nn3jo{Ԛ^XGjS6k iU auh>3E]\#b] }TI> ~nwrXSJT\9f!gܮ%*lU+QPq:͸T!@p TF7z^_]<@xC?K4Ae-Ac,T.!@AŎRuδ 2 *4}Td_|CY9Tk4ZZR(fT xʝC?6枕L]fh|S=L16b>Mn*SURS҄Z?!UT 7-<8>zkaŠ4m45zO){^7Pl:=rA6RǙfS9rSߜO//N >*7iM'3m; Ӫ>;R&z2{,&aZB Ld}֥WLeC3==i|GJ죓T+yM`󽷟֘iu 6|jȮx_9ОݝN}sV>FUϩHYvumox2Z=a1y9{e_{ok 6|*ƻT;#]_]-<{r=hZGUA6~Iy"-AQ٣2 ^(w|aiA=MyLΜ;^};3üK-1?{ۻ?'r0 ;7;{]"ҿz5_)}4=-ZQE6I%*g?rzV}Zk/6;<6$ܬ;*3㝹ʯLGd7__Э;l f.N@qu쵈o`K(,kJcPsV>%TkUUG)c]/h'ۯk@CK|iwz|C?vJ"|Tp4e^KS wuճrs;Mdkrv?Z5M۽^δk҄s?Ѩ~@ڏ*w5NR\GxF1?bM}!ޮ32=%l aJ]hKwS^UOQOR%v{Tn֢I Βҧ ӈvkn{^#ZoX{7:scj?bA m(ei'vֻg7o.+sIQt)UQ1vب { vc g;4:{o1mkdЬ:!JmSԦ»ڸvTLLpm>%mC?}MV vޮlQ;,dyF2?R^SB5">^ԇδ%GY]rTaA$!(笌49'ZuQmkL=j?u[;W.lOr;4k彝m@k^# w7m APeʫvoJvcJ䨼KʢmViorL,O>+c&^rNb=!ϰv`/h;!W{FPPkOlu8MPIT쎺(n )mSYq+rUm`OYG۠-Ҡbs2wfS3ަ66} ceAjۙv.z>jvKܮ 4}WP` IDATϷiU4TU=?X̜Ã\)\B ^谩J:=*uЇәn%GlFkÇi=NQ4˄ȵvUyV)gnĮT3a;o#hsF)Q=KJhڿؠrAwtn]n SWզ>іbkCHz_zVP.K=ݠ[^qOkMjLHbc%!*gNh\%z߳ O VC+L5T _CQ)usN#Nm6.áu+mUE,Y94]c5`*],u$uZa←M_ړ6&v]Rż#ӓВU{j+}T>=m:Po%:S ?=Q;3VltJiXV;-ܢEQYWtT'tZE 4۳~뢗/" Ħkk*gs߮ഗXRǗڅU+Sņ+~BPa%t8̄'.`dZg2æW}X}1/y-݁3#QxS'vZM|Zg}pv-ࣀ/SַV_=hAD:G:-,abأph}V;5MtbDdo|TڙD$}T%E%Fd˘3V ތ5;gw:4nz\ ,We|G?T.f] "ݣrwmδhaA9س~8S%7ܮ Y^).MWr"Nc_L5~C3 mKKYѺ~2}|w=OPAs1#*Ǻ +8ܿ m8z%QA3+ ,TgZTh f'Säf=ӡ9t4 /p䫲/B~9 +ZxAT@sk=+M읾Pg|qY=pf'q?]7mSiO;zkԵW7- "%ܪD'o{WnZ@4ܳ2TMl7gv׋4OE^_S+f#-H *QqmUZ8Sǘ|ogz-ar3ϩhr^kzha;m/7zs;k9o1Zʨ2TIku|WhAtPISƫ{JPAk+g@beOO=ĤZۋv7vPlUh"߬k[f-:wrbV Z*ܦ&;K\ A=lSm *&esj)o-"ioz GzC{69M_JE#|띡orhɠ(\=^$ ¼GӷUoPlz|BWivg"Rӵ_P{JWl\@K䨼;δܳrA}pIݸz2"~Vz#]CK[؄ A$\{VzÊ}Teho'"CUm8l잊_t}q2łJt*7F6[FjSigm* w*Qr8*2u]ajJc +#qW |AK񝴆R!:ZךzVF$G%>ҹQ9?kkifenSoUKzfV@;GK'ey0=ߛ8t-Ti2_䲿\i閫()<'-ٕ>/눌ڀ *NUh`7+mNX U6 43{_-_Pw6r՝S|DX`?i4^qwwاƔvy[n;?F1+tC'o]/ %XgRUP+.QqeJղ%użл,hbfp7s=J귕d4er7h M_Ūw|7_OzXI/yrj}*wU^I/H}7o3+{*Խ+mEjSw lS4q\>|F~Ǣ1ǀy3PgG^d+GgƶcTv8hS9A í ?4cybp+*י0u.M հ]/].aa+Ϛg4)V#ڭe^Viw +Wej<vRw [։A8ʭۋMӜ:9*wvhԥdG!z>:[6IM{׿;G9 4uJSvC=@n[]Foaΰh+F|/3%mu1 $:q8d ? e޾Ш Bgvg,-ӼXvMc. t94`Gs*Liށi}H *hkۨǼi}w;KY~BesOW~e'jB型UivVd&3D@kppFSw0Qfׂ^RAyʯHW݊s)#vƮur4""5Z̄]@V+@X av @[8M К9LŘ4 Soz;T+ݚT* SUQd[:J̪Zfo cںy&*|sk=魿ńg˓^ҥޞR.tw4 SM=0+@=+?R >=!7qfNS鿺.ԍ$36Wѩk^v9T.1ӒM)q6nǃmOv0Wq떪չ9~ԝ'V?RNyJ +Qc{V V:EwZVwғ)&A}bJ _ _'a Ƣih@SCMayv[ +@0*+̿;khZm}1uu (eI;?RoHzRfF5-YG{@H쭧M]a*4ԶG] MJyj3u<M0eG?\p Φ@ډ*0iNE(a $lt]"dP8 "WEQֿ4V%YC9br!i rgG“0"SYn6sʷwgozp$]9&} @cds)>1w8DwտU?oV@p8Rm5|a!S{}ng-urFlzJ?"o#W$Qgbtη}SzǤs"j 8J~6uayV(u88i@X a+@X Va+ Va@X h\4b0S`jLof;9JM45 SZJXATQ5*nҬUܥ}7?1+%Hݳ!RLhjSQumjc3M-$+ݒ=U +&U+kD(tv!qK]H|dQyztSbrKLzdhSzmg25*0Z< ʜ4SeXOYSz4l4f) efJico=h3S=lpyTW+h;=hurRՎjѕҀ*Z,g _iH_c7VQGP~<T+y " 4\D aW3^kFzg:okͫ_6 Z@]Jݜ=Kh?|̦XAX{ Tfy! G+F[My?h 0= P]%r()7(WJGB}p*aӲ]uʢ]|cS ZkM1aj=*ZU#=3w)2ora# J *MP9}' ?v<{H ZwPY%Q}?(?ٚ}/C?{_p*[KiDXP{T z)sCq:"ׯrlOx2gTWI.4 X[a%IC8 akAM4Ats0ۏv]m1y>ېT\~B-|Uag%Z-T^ҀUhLWhfay+h}AeWܧ>@A%G *QJښf-P+$(*2E+4U`^a*D/{wvk5mPQVچ !W% ]g?O+ Rd^$T8*3Z3a-TG|{='GsFJ:Ha?xsPYz.qW.ۘF5!`PNxl ۙЏ܃ݧ>`lboO276Kڢr *|gڽ0o6a7lA GeCjf *IC[@@;s&l&<>%`*vJtd{:w"EfhJvX.{@r;Dumȶ/V[Y?uQ1A<3~9vVՙ)[YVuPŰ0p3M.՗CZ` *gB%ڔ *òCwZEPYQ2\{tUF7yoKXA3>Si!T=P52+ ?|S'zCLS  ?L'DXAF-1A%~|*P;GeS.-TAe<hꯍ{uV^E%/\qT uP@P}TOC1ehpSM/[SkM|==y˗E縝&<ؐUgFA{zi!*53"aa */^ʑϼ=*S5lIDAT =* TK_֕*>} AMer *ՠBXA:x3WCT !M4A¶T+-ۙvWrU9}~ HϚi:L(kVAŵ˜уݧOP{BLPk,Z^i0{ *w,J a *]u;Ϲiuz 2M*>E+{&eOO&@p졟nn0ucjY>2M9Mƍ\ѹ54]*O)42<}s Tib^|xٺ~*Mt* NݖATrs-e]<7乴ӾlGk`'z3lPzMIn3<%g/HxOկMOF(q\^xSsĉ5֝g8S?lj*=*ʑ wLjY/۬R4|Nw<-AHlH 4ĩkN.oP4A%$`n2uh~FSaN07X{LPC>^؋)eV ٳ~\#ܣR|-7F+-=,Tf$ W5a`o7b~Ic\kQ-ڻ\yq|45>*&\bg*,n&n|mK|ZcyMx_a أ2*GGӼ>nUFǫ],eC=7Dv \c}m[>汪2P<{;!M/k{_-SDXAAe3WrㇻϾb*Qʔ["A}6.ЧݔsRṁ@0V߭a!:0~󽷽kyrlQ{PY5yTrua߾k$/M$ Qm$.T`htPyXC7c7CTzjŞ\*Բ:iUG!RmטHelxK\0Aejۡ${o1kIXN=sutl76X1V\~Kmw[y.%36IPшDGobIh{^^1['3ryϮe;ʎ(!Ms^, J.+QEZ3YCwk%A6hkz;fǪru}]s)ҚL%YÖiPktL vkL=j? <5彝mKؾ)%A9%Yѝ 4k]ݎQtOS:F)4Iݮko5Ggmy}Tt ?NV{֬-јb^KZaBW#h[ݮ7#U_7Ba?0uv>PC.:h;W{?'z_TJ[Vՙk\ۥTR%[5tqy@]s~k):]!hs)v N{/C ۴u *ׅkL7<l3܉B y_X"=*!*>i:XuѷsmwςݓmX9n?v th{&Uu}Μ uq~!z\0=c BtPl bچei?eU#>OMւʣOPQ(*ǞT~zOErwT ȠrL BT~~B;A*v *e? a *ٕ_v+ءC@VPXG}RkP"TL A'{}7Ztg'N- c[qge6tә:hU(!qʋO%աgu)-ʹa?~h5Qv7 'MMU}ᲪPۭT"DpLQRGů'@Әgn2u0سI$Z1*HΎH@bku4P;%~ey?YgԀJ{W7i= ?ZkP@Pz4:bLPy[bMu5uiaHc<J?]ިUGu_ePW阂_ԵX l[V9VvUYHJMGP쬝xgHQiAO \<; Ҥ*9FeMC5u!1Ae A/S?XEmPa1-d;TEܠ^a!d dήQY{ƗЇ[t9A/籫-^4i>AcJZ-mQ/ӂٟvʢY*ugTLPyf}5*HYsmP9A!@vAž=Ov af%̨ؠr*)yP`&]oiֱ,E*̬dTZ{T g2AH +EWC+U5fm8 :itg,A*Su;FgFŠ7?]vF-qپTKS[wj`dk;Ӯ+lKZt *T@X(V. { *Iu}ϡ; *1ŠWZvV,&i:[4VCUZ5WiJzYrdO+;bpM}Һy:tY4 m WR*kTfNl1Idw%j_df  δ=o;@)kH}ϟT*FשcgTN׸#v&h$ ~?]}}n0s&B@{UnyZ#:_x4NYmIJ{THp~Po}_'bmtnc+YgrSm{}w^3f!@x{2)OMLM]mn7uK!m6B)|X0ٔE5>,9ӄ6nx73*F0YoOf/= SU3q~<},f.rJϩ>|8NΈ۾ԃ)>>31Tm~lPs?A *4yXao(S7m7Yϳ};?[ĵ5*GP,LM:r #(rgSx 7B{g3"&@vAf&lCL MXשXOf'GcΨ G85`2*vFeX,2TƉ>*D^,h}m L]ӿʙQ*EF{QA}羾U}I?'\}S__?@[S(bgTjУ!]@PA!x1rIKY 9TǴpGOX)4Z{zvU8(Eʢja:}Q~~3{ ŤSUŴ'}kB:Bufe[6f1Ά$7.vm>sS{QA>цޫ5V bo;i;3[ӏޫҕngZ 2gy*3+vF慉/2L5k1:ct~4m`9Le6_ak;3[ӏo&\뇠u JSG3 *O7 *$zǽ4tEbP.Ԩ]'h޲p۩9t?}' H$8L."3l֓GwĶ9ϲWPA壛tٙ-t *ctzB r= tBZ'sYm3*nר 9 ;uGDjڬ뜣渧~*2rYVJHYQ:Q :SBG~A1.n|?T:rPo+Ue ԨzpaW_w۴fmU$?T߭t{=5=$Z_aoޣ?ҬtװR[yW)O9(UE;j)t9o$ kX 14sϙy!D!_짘im ^ywh߻)M-ÊnqOqC̲v>tj۵?ݐ[r^쩞rN;} )7=5Sj S?sj(ewT0޲o3]4ulNXfe+XK:Φ,QNjpY$_.GА/SSL}gqzL,rhKO cr+k[L$e7oa6ob9*gSIr57T9ĥ.nF0U鼜˩!;[>ԽSIJ1hc>\_0VūJN.[bb=ט޾p+ {=ka&v KývƨNx h6W&p +ýg;<ԋLX V^qk.P qo;c<@)#sLpb aBT Nj1hԽePfxgx:PއU<+c<nVOx)O.3mS14JBj4T AK]45?4g7vԀ,cXǹ'R ,ggeb  @mIENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_hexahedron_edges.svg000066400000000000000000000541111411346603000250110ustar00rootroot00000000000000 image/svg+xml 2 (0,1,0) 3 (1,1,0) 6 (0,1,1) 7 (1,1,1) 7 2 3 4 8 11 1 (1,0,0) 0 (0,0,0) 4 (0,0,1) 5 (1,0,1) 0 1 5 9 6 10 dune-geometry-2.8.0/doc/appl/refelements/gg_line.png000066400000000000000000000041601411346603000224300ustar00rootroot00000000000000PNG  IHDR?94a cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+IDATx}U񳫉`RRX-?fX"!ffEjYiobj)ib/HQ`b V"Y<;gh={̹w9ιwΌ{.swTu Jj$mQZ"(#eUx0%%Oɳ8{=#_۵,W%s$z/ۉL - o.#,7ئRZ20RvErF\v JOXrv|"*m_McW$s3__Yo$Y!'ic{'izJ<`;}I;>SPk%ĊB(Čغ\l+E;lBui; ZUm/:..I;JIZ7~&nR{ $n5T(i'&'9F{@qJIvm6G٥4v'Q3uJ蜧N5Du>Itt.G94v'oftZww XO6R3X:y_1❄D;8:fwÓik("M'O~: _Rxx'q, P'# ߧf$\_?d~{i(N5Y뜰n@ u u_G&JpM ci;6Q=pQqO(NB-_+ (NbalDͣ <:o%kbe7:w4G'-i`:6gl]dy7: BK$G7:Es;>o&FJ^l$HG޳Vr0?zS4XO%%L0494PWQ%Lpꍃ&rCK4I787Ӎ\eN='#oHRG3L1ӫ] `FD-0$~:ӝ&xܨĻJ'O:K%@GRttDg|}'h/yq/K^'uL}'?:MI.4亣|n4:s*x}cɋOL̳vq[~I+ͮM ?nML|x|n4:3Uri8?-_GstBVi!yЮ/pWGh$E^kbOc]h,ɒȹ/j :a FJ0/ mYD-xckσ}m(sFsTɊN-p=U'yOᱴeiܜPUMǗ 0u@].ӎ;pO&e;"t"< o Oa%IN9Iv>.kc嵱3񩣧]}L9;"T 7m6zc۵LclOϲN[Qruv٭@U:uP2Vdi=QyMrg[].q,iJuDPtd Fsv~ѯHya'4 JwM3'QNd#V?$=}|.ML1h·9֥9:2>RYc;l9~DY+&vg==HRzz &B'M`:Rd}Mt^w:~[)t&F=?D@qwض"Q)㨶1&w?ᱝNycA<חd/ j~؅IENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_line.svg000066400000000000000000000075571411346603000224600ustar00rootroot00000000000000 image/svg+xml 0 (0,0) 1 (1,0) dune-geometry-2.8.0/doc/appl/refelements/gg_prism.png000066400000000000000000001014201411346603000226300ustar00rootroot00000000000000PNG  IHDR6` cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATxxTUoj&tZ! @Et)YZ׶[V]]յ! ({'$ !=s̄dR${03w\39s*o wX=iXT%Qr'DDWDE0|uADy]gksVMk3hYTE(}EǢ TQ~e(EI*n(#Jl ƪnc(E Y|{ꞚU@r}%N熺Z8oBGZ,\˫ڥ_QeEن=Zh-1x(̄lns.ZeE]|*v?Nߏ< Fnx.u[OpXw{??!]-J#:)s"٢<,{t䱜wDi- 8yk~ۯ*_U~ކ$O6Y|ӣPV׆Z?GEiUې]_>9N>E؆$/0o%XTG٩CDD """x [@z9-b֕}y<j%bU`[U^PX9>bDaQKT"(^^|9tqc'H,j dh Ĵ6r@ "51$O3Xa^4`~tl` GW" Fp3V8`v/Os(RD[@ࡦEZLs3a|Ԏ_/+rxtlDbLcD5&\#ņ͹"?E)s 6!8##̀~T5xF0>DZ;HhMOnh!iYQi^8l*oH *."`/Z?ێiÜ^ ï{sg||Z"1X=ztY/̩(tܪ{/){[d=* 0_QD++~`:`y`) f"1bL2#  AqAL|SQ00<כ O5p<XsoD WqH2ݛU}Q}[v>; {7 G{9]]o ek1xTx`7P, %x$֮+B   ltkΏꪥǢXp_"~)x܂8|KMA86„L9#A yLl -5es^_Fc7R:9K)dKhp#pGo@y(*8:*-~55H $:$T|_>q(o(,}]@ =<ǖ?%$^\hzq4-V R}-\O^N`r`r0Q#C࡚cѐn: )x"[pɆ4m4Z 1Oeۍ@J#!AyoD nKGâ1=>d1$wGFAرq7oGbz~swR9woD !j=5NC M0].am?&L &\o pN`/mY(+:%%b?7ܐMvf , Rpg4т'ʖM3HY<C~nNj~M j"h zpw,?<# e<mރv`iNN4zskOFcHX\TP`a f޽m9$' ض \'3~sQbP3Jܡ=Oq;OSVLu@'Q.xpYbPC6UݒD,1% Œw Nm\ON>z#'`Ugٳނ1x!&BK:h&Gu'N'qP0cgx k Lйʱ8v)j>k+t8/h??twcP ߺ^mwcP;yw)u7i=0. 77bP} [IݰD,S=-;!pl8fߜ #:|oud U@@dC wr{+6Z0xj־nߏAo}!~atCN:xB'> EG9pӂpD -7I^gphp~C~1IumЖǿ'o{ϛ-HFq~#];x^떄pKS;d[Pob5ix ? lJMӬAbPu߽[E<٭+>Khl<yvڍ0cwk L(p|7bP\2।΁a>Nq\gyoGwrہfż61xRg;1O Ev"pzu .Ss؃Y@Ab[D<65 { Ԣ=rGaG^tmus7w#0I$`-F r[y]t iC[:ؓ% 昈~KTƽbfR}u L끧DMyRemmqߍ0tC!,3^fn؞9~ ހb9+tйQm¼EB+zX*'f$ͺ"e3LѲ f@v]:_y1tۓ C Ezم;k!0G7 Q:sak9+?ðv˴=KE–|~ l8 <ςDl0ٽGb:ˍP[Ǡpbw-]j4Qo:MyNփXP[:>N]ppm Ƽd6^- y~#O`S18Jbo4B>}#>T}EMyc-䠂71CeBG8s Fq+߾Knjw4ֆ湞| % _|Z91x&t&BgZ_6@/ \?(ͻr"|/Xe$[.@dS Om4OFˏO_͊MN]X\+*nyBCG"Cbg|bԕ>gS#[8ߠwħ?Dzb#λWS(uL^XKomG0E+&T8:̆,d}]u#b* lPjT~@ O>ҧ a@a8wa%g=gPZ:ޡ Ƣ:d[oUQEH<דy^4<JW*t"p4 j؆5EbŹ؜3Sxt]AؘTL*VA톎/B')wyz`>ϰ*_(5 *ZǸ a*8Ļ ؍q"9h.s )/}ka\f s MZ@Q"|>/dͱC f\0:![.E;e㰄SuIC8}_W5XIuY,W.8Vmj|p !xdK'5T*td#Mw ~q}c37*;z~0ȸس 7C9A;y 4x&KLzOQn%_؆Q䈦ؔMkx_|mu6 .x#GkYt鈌=l1H͹+5З=_a$ Á8ƿHG{M w O=v5 CZcQne(?2 1?$rklc(Cbc+XON>QUVC' 5{ u)U= 6{wydy`~U!I|v.u†wt9[w~,']DDпeC]CZ,DyXDې+,W{sh ݃^-vRP/Qr1:lK)ĈͳaKd ;Nn>xpv{-me^˗B*?!f3Z6IW^sc: "t XE"UDShmSq^0Z*0SO 0Ѯ}s#W`F Ft` xV`H] RWκʛm7fBZ{u~ IDAT(0ǜ=/+}t rS%c82SQ`/IzR5ܾ{[(;xuU?/ W ^C?Qߧ/-V7Cg0CXo=Ma[t&,'/;gN_^d"_`/+ScwSWz6nz"FMk.2>@g>ho(=.c-aF7.yuUJv[E=A{'}7Xc?Q]5?K^wEK' ]"HM-ClJ{׻-#dbPGOt}e mLEor[N]-F9FI⳵_1o/p wퟢJ§N_M6=%C!|/1޲THr62^={q59HcVhPQ_ZU 6F{4lUS{*E;xe-^4swzs m~ _W.[76vdeU~}507y^3}>n- Abh4{3 G`{5Vo@X/i!sW(YN _Q|DKc[_y >MZ؍f[*7jɧ}&`O1;ڻ|Ђ'/LۇN"uo +Kopİcymb}?wᇺO\MƷc:= !xE dkWL/L{F++كP{~AfT]y Lb׼1@qda//UJ\g)WW$R\rX^R)2@/:# __f'w|pO%Fk_0+`ۂףdbXV ʟ5{<9.Q ([xd_,n,ƃ;Wl \Y3dwPrfm9kEnK<{-sOeQS_M2tNB0BtO4eD>8xeQcmD[0p4ky70؜;𵥃=C 1 gR}H mp:!wz+&YICD&||7;x_4N ,gfrK( g<?*Ɣt@-ʥZmTplEդ?q|]0&>  cKTVeGh0x*cT> DhʹJsءgߍxe&]"tnlwgT[4Μ{ s3 S~.-8;xW(3jqPR} ( TNx6d$T'{)xCΈ^L;] ]ɶ]n$梙50M׀&C:tA\vOjOe]msq"X}4'݃=_b=j3Rhi S/>&rFv5o@aR[l逓52M<aBQ&"uMZ.p[S gK')j5n|$o9~+x7 N]fa z]o]+eDYpU &4gQy-jKn8τ' ̀nE \&'>gqD[t!Q{?8 01~2;kbGT {]HǁD9!rj=2˟m(-__ߊ2Y'!]I r-U ydlYq#^JDL^gEv}?W-F}~z0b'0S,z uGN`}ԕ?[Z&zo5CgwugBCw\VgZZ @z~ :/[K?V3SKl,u ^DzoDv/X&QlQ߮'j>nz%rǪ9px8' E~o,s ^DzUxsZoT[+$ @5:lo;%ZUA!?72R_Qm3TJ^#|.ب*m$UvQS_LzΌw19 Wŗoۜǀv𿖇0^w3Pߗy/|]V9 ;v7tig_܀ RNgB ,k<eQ࿔'y,>Ce[*o0?͸Nx{"Q5h*v] >>f-Z/p@PU{d@x-0Dz X!"6n|0 W,u/ru&$J6/=ql: M}= "Ȼ-Y{~[ >U;g>-gWI˾g `&G>/ N'v0S*XKn5mb&w5[iw^G$*lwu6uG^g☫.8yuo\#)臇:DD_ &aRD&et=UzQéylsxFSB5-u#vD2u,6ev9.ĊxBΏGDDUrF5THh^v bM`0 *8 |L =#h7@ Hz:S :+\2eUd@6`Pذ]Sb>OX:sD.`/bg5s4Q~Q.&~1,{NV޻+K+MW< ?QDD*^ߤT88GWQs=Ժ>'VQ]mo"#"FG"t U>V܃K1nԜ~kEeJB>CSDYFTclr _"Xd) ;56O?Q6+fC CDj94"*kr9.٥ߣ5iD6^m>:/ceU d~|F hEy ՝ohLsvԺBy-L5"m8m|oAV&Qx7 Ax/[!"j|jcTN)P | @N ی[÷SUr((&g8a8cCW=""?RaA5v q^=ۀe4Y/ĿBDOeuuwyQ,1$yݲA`7X; !S9gg""$7 }ZxW*ea 1"I* ""1xbQ0% SoqDa]{ V1xT*;tE+7ж{A,k^+ |rߔ6:cisAMXJXs"]n bE4V FMG9SIB;Qs2ecq26 +Cw/Qj.YहPrJ9XN CޚP|4NYvCYy 7{x1+}T]ەʜl%dBqU]wUo$qT]cz:B+`/ ж XY!" >lfJdvju)FDf蔂;T1xNZJ[Oa}&*#ۜRߨI1"}r6 a>΂+YĮ6""bhO+W,%"bP|2V5=VA=t"]uq$+:hBV XK0J"O@%=f#{G)P}d0 d%':`ȩot7Öy@@J"OcPCd/l UHT7ܬ\M,!6r hVCjBWf[{ ӻQI+$O(3t~cSBGkA+@ѮɬbL2;L Y)`y^MviD+GQ~C~ Eϓ6(v3]-H+ٚ-P|8X쏳 j1ttd{Wn5l-`쵪98(x"O`P vT}a`/l} E)=ؽF :YKpCGeU+DŽ"6$!$MC)\ fplO(!V’Żg{<ݐZ#`L鈐=#geR[3Ci95<7UP6!ǡiqI ڔ7ho߅"—C_XU=kG#?Ọ 3m=pi6P*AmˮowP bZkbngb=n1,YAP(oJ5;䱮Y)s!PxǑîEoݾ>ds&8Oie[ :2(Z /bP{Wa8:+ÔK1=h[6Tj B,ApUPTBw1E [EmD9Vª-^C~;7{?$aeQbkf,>rۊ= b;vk06v!3xNZ(gq0XfǝaeQ"g80Ň"wa } IDAT]Ζ~> (<&\P1kH,Za(5;kYJ>exZ&G,0\x3eAqDVjC 84Ȝ9Q{ʥ0j/GL|^洑(;@Cŋ%6}pVAX ΰ4; 5 D$ .TJ/@ r hR{|"ɏ@%YeGD, ML>o ը/<vS+}U :Q׺RpB7^+PrkiQzqp&c%ֳ<;#Cluy* "mʖަj<>oyž+N#!xhٴ,\֢H ghp .E~Tyח,8uaWyM76!KØYiH~g2`; "yeÔ ڭmJS#%S )oZ< QVb=)RCĖ,BVę3G1إ m%/YMG\?v~)9Pcc<` SɰўkXϟ⼔YCj c#J¯-:=o:áyjޏsn57D -a$!!fmϡs YQhi(:<`ي!E]_>޲|RHV$'0hr# lE^0:kphyB}KӷBHBÂUх+q\E<]lCn<Qj &b 9ga= c$՟HUiDTχUZk@bXDl]8f1x(Z۶ &b]8f1xlZfYM"jѭkD&.gʆf,;!,V04,u՟62=L!*-T7vr|N &bc-{"upS6qV0ֲ@8i]dz4+CTZ+y{xªBMTA^C[kkJq9uҁf9%bͼcJC*O=M;YD ":X2eK-&ڤ*>E߭H[:Y3YD  *^(PU"'=K-\J!XGZ6宿>XG:ƉmJT̟Wx.l2CR]dlT^- SsDM@JM[݂s`q()]nJ5aAe=FUlﭳ=gQVԄidjÔ[9. P2vށ+"rĝ}Rہ[lVіuƚw* <;{u.au5T%"ᇅ )YdꜬ)gVMy۬je=鹳!!xQw?Qv֬T"xjs^Y\e1\"xj}1xC!- esX/D Zee1X/D ZraY/D Z TzYc@"Q-]x,\B!fpUѳ@W~nݿ܎`D_,+-j-JCgG4p̅6+p岪b{ao/o7{Ȣc1x΁~Ζ Mw!t&/w^e9F)v~K@X]Xz/"DEQn%XhbLIL?\ލ%"""l\`gYgٙS;{ Q`ZiM%8쯚kaZ: d[c})~?(B.X:wR]b Q"{A1#u}}^D:fÜbY e'zf(?f|91{n' HxJJt=: W,:a޾/D* ~H% >[aȉotCKR,>|9 )23ׂ.A5-҉;lj'+ kUBtRYO0z?Sf[--&nGXPmkPOpħ9"D:X_(pEՋ: q`BNtԃҾrfBLo}f& l>NĶ H$%:QZpm0_~|^Ͽp>oTՇ ~q*CRf% mTl8>M*$AQѠg4h yAx}kPi_"ꉿ *,ACTDT Vd XdjW~_Sʼn1~oACJHү*!HgR'4 2Ce[k fC7X>Jdu>%of_HdX㌦5х~k07cMi_^7ևT'yH S3<S\ =X=~XarQ6n7SETAa&jp>09sVo"_"BLՇHt;>RO앪-:ցM2{gOW 2]=u 3*^ ;q0H+:a⫡~os>ēZzFcsZVHr$En2䋴W~a5l?HG|UyyP/SVy*o6`5úc0ՙ >ACT Nt@?hd ]K[[t"?cy_r>hl  ҬUm1\*Uo:`懆óe>{nu" !^=ojHo6sf t} i/U`[=Z'kkW6Oث\%SoÎ~l*o:/ |6)\P!me7| !^,0tY0'79q7xo6R[^{clsX/"GJ_]>k`a/N4ͱM`K+~9?+/@l0c̩բZƸ/6𹒍Hzk.BvnvUK!Dy܍F1ଊ.<(IPt<ݏPc!R)wz)\:xgQ;ї 9(v$NDGS^~( aD8@#:l=!6OEHgt?fL-7d*3e Oe y SEVY@[EcN__uMQOYmRt).:6w?+暆mM`U®C<4d ,KEL]ٰ1śBl%?C1~)n&t1{J?" E'.Xh`u%\=+*" Fj,yv#F4З\7pī{x$89@PxGyq/73(}%NZap!P|3 B)\JO BHhgddNG#kIE'ze bm~94~ "*%^u$̛~HsWo!}~#HxjwEZ~7Lt62E:TCGKIk8䍠Ps|+zo3v;n#f2CCJAc~:rq.BM_n`' 9L a'F AM {Y"C>ZDp1ڣp'?`,} L⧕g hu N$<lu:$:{l=P{ ĨWFbj""GR9bad£1_ sUwv&ӗ.C1:V ş OT5dW n6ֈl$pv7p+m;fâ#snq ?zW:r,Kj/Q>*gQo|~q/ IDATTg+V#C_ |1x Ncmp/>È-iw,`M/GySv>57r_C2G\Lh-#%ӞJAED w `C>Š$:{YC|x<ȿ4 B9|y5óHX>/LFF!h8J a;C&ѩi?t+3$㱇B8&IQa&M }$CۓWϡQtC,өzG:G#=H>9j$ѩZp)&2S29I_O օ\ymL=٘C׷6ZLE#K<췚 5.01R,:H6@=:U-› YGl鋵r!r]L^ٶrtOa l gcd ~,<x`Eg"$"wAE蹶| Zx?t+[\ncDN|LMSwpQQqΚ fፍ EhP9ް~\1m$?>CE<677OD^xݤcy9L mb0$6`"V/-DNK}"EtADDg`#,G$:Յ#SBRlt^^oX2ZO<ă~_Pxr1d.?$<$: :tb(BԏT@$S2\cxS,/ˁ~ϯZcCd㑧gogCNGĞkMgf# [׏6\tXu%ѩ pjH ̳0'-1 }[a`Zq=W#2 .d\noIk,>dXӺ^\ທ3fιq bDX:&[KXiE'zЙ%Y‰NkG:Lt.VlZ[+BJ 9 VcED.0b.9tˏ=m;\iob #c _HiWfP?s"$ͯ@2#_XctM'2_F@k|0C.v@ s+f>q{ j#SٰoA3wÂh.]\~;v[fadt:4 O5ֱ-8ɅJ'`ڋHGXO:_5R1C{4X=NDMG㊦\) w); YyE .OFdbzu.]ㅵ^m"$" 2E,YDǛDPh&Yv~6vP,DC^(2^[Hᜐϸ4{BZ6D(S]p0/#dDl| Β%p y5dMpB! ]LoF*)B(CωPNO&-R)1>?t9ᛷ%hvx;Tf}cgu:o$< k2-m~|Ht^=HeDsi}\j gJ00,Vgo 21]]GjN^SvdqCE CT ^o |7LJCHuWTd0u>%vs\,8)AT"fbіhmo蟃Di)ýG?n%43Kja G!6;ԉFKtB asŘ}ǩ)>s⸮IP?#AweӤtG:$<"ҙ׵4ֈMFO;l,'f~'FSy:zMw ˄K;5:?r۷ ߾Gq_fN OέS:ZcP.q-1 %zP/s[Z!8_~:7 moAH9Eg-잶T¸Dۘ L`MokGe:HgDO0o*BeF``x:+ī1dbݻ4cq;}S_6MO#.E<<#6ؤaA*>esͤ5co6.[Ze|9wبҺֳJ[OlԇM)f"&?~9̀[Ї%to$ _q'Βeq+UBYNCO4[msDl}І*ѱ̔D=ŵ|=DBdY]nE!8I<_ʇc H,% wl$ޡŧ/`vsb r±NHm׳z3ָ]eNEך!wFۘDEX WzHKtueiVoVV ltqJtzކze#茶X u&>Xse6y %XU?B:j> Ng n|~W3= m1$:eK4}ID`1\碆+xݜ#;Ia,Oi7DֈP\)*:/G2ѱCXONtb3jQ,َzax{EuqmY㈃M㒅nEZ1ѱă׶Upo!; ц{tD)Ntl4"(N}"GlNg&ZmLtQ8}:[?NǦEY:FxY>fOUEx jmlځg5&`7t.b.y;EVl"n5&H2|9Yl15t8,ъt_6wyZaUS ۪P}c4{\VN"r|pz~:|CT6j0{֮.{PD:f($: Od4z6^)R 8)@;+/3S9 cɉOr]!lh ڟ碕.@.FV4ǣ&4v w`빛f_}HgY➌})}"8A\z\`u:nc-DH`-X.^25G|C.Ī1k)eJ½3Q@EU` )ک)[V̛/Gr?FP=g&B-Nw֗/ҙ3S캭1w MY!F($Y @D7f7n>x Ȳ ߒgÍ}g4pK 2͑(sZ&֎ fۯg H˵ O!"$QX{ ~32枅h]٨5}up/t-:Hu:AT*m^l!ֶC,eSKp/ODBKM=_qb"@ܩƯ E]b):{@0b-b ߕOǩt&LCDE7h -ÄM@WM=tǐ G.OMtiqRZEC2HD+KF-^m^&wܱHG _]#DB֘ 6bQ05GS`rDk x|"]!V`_)LU2Pe~ ؠ/8)ZxF'~hl*?<kኮ\0܃/:ƥZUF?" sG# qY7ވP-bVy%č1+NA5s?"^9@[N| <  o4>y!/>,FraA2 A4^O\Z~ x "opNH,x?FQeI :ƺ)BE T5TjYtD0xwtu2% R̾ρ~My1tUyT1ٸ2r40D l~>*60`#jHz%*RAaJ\T_ e4a}v0.l\@ň SVj| KDz$TA$@k2AYDecxl?3\DASl [ŖͣKDASl[s[=KZ DA$< T6^)KsޟSAA07X>Zsg.]S,.M).  (/ cӊ* G_.}Υܦ.rᒜ AE<5.xKj^~AlR]            ۜ~S3AHIHqi&i C5tC.=ZFẹ̈B5T7t ˦q\:ڬjO6f7\ڧwbK*ة>IT 0b봔KrUGO)%OgFf\@~]%ÜjKxzi}8կg-?~ cG2bHal0i%jݳYͥϠ 1G-!ܣп!|"+t Ok/ҨkAys豳UG m \'?#p G:$<W{37IDAT]X#SyhɊ6AFJiSIf>Tdh>Dp|/cAaPVRNW"HqŢ" 63-CsLԢ cŢ"|% &lұbn֗FUQT TcT| )k+]~SlybK*h] \"\'C$<r)K#tl հ4 2:S<\*g1$(.媏 9~+u24O?}t.o\/#V_ΥD::-HUǗGiɃ T*A)̑S 3G5uf!|\'Ci]0a.=gAmPu*Ғ>SVOP_@v,lhQ&ˆaWPN{* ?1N^1: }\'< G:؂.ec |3|1FAP]6PQEWڮAa|4p{.UaVc.+Aqz6p[1ms9"` E;$ ЎN.@IENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_prism.svg000066400000000000000000000374101411346603000226520ustar00rootroot00000000000000 image/svg+xml 2 (0,1,0) 5 (0,1,1) 3 bottom 1 left right 2 4 top 0 front 1 (1,0,0) 0 (0,0,0) 3 (0,0,1) 4 (1,0,1) dune-geometry-2.8.0/doc/appl/refelements/gg_prism_edges.png000066400000000000000000000542341411346603000240110ustar00rootroot00000000000000PNG  IHDR:Ov7 cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATx|Mn颃R 27^D Nd"/" *,{6NJ i}~~&}3>9'=/@dEm7yQ-& ;xNԿD+*e/+]QEaQYE ߢWqw[˽\TM.lJPQDʼn?P2EV1V>Y5g%6!H EvH 0'Q+:l_Q/_Ycs KLkÃm\6A=][jR|%˗!Fu toTO{Tw8+{K=?"bQ4@==jXq_b"]etʹ'?oD 1˹&""9SAzk|K]y|bTwWOl\E=-=9_˵(V=ė!Fu:fKm\r-TCyEe?E5֕:>n͢xqݢrGDe:EMwprI*ק"DuK]zpb#԰MKLDT=T*W핝^oکDD\*N }HP2|)L 44UW'""Cx<1~EDC!FDD#""bC!FDDT9OD/G(QE_\Dw,%(^/Q+q^5MH#rvIE=DE 5JR_/Q)lJÅM@OtTEu^AQKDu(_XQZT~Ғբ:^n5PTvm-E}f$bOѦRT{tDĞ}"LmM# LLj!FymlB# v֑B# N֊B# 6YbDDD 1dk!B6 C6 ~~%r1*Gi#rո6}&%b9ʠ*N& +킨ؤD 1"GyUޞ**ԶwPI"bUZ+ynչ$ydwٜD'v<>$j(ێzL"b9-5SzQpQDݏ's5JT PdrÑ@=$uQ ؔD 1"g _TOXw`n**Vz,jQDmaQmИM@D%  l&!"*.A<l"3Eg rkEJQLEpF"CH60,,Nmo–Hw[O",WC\'Ql2"/lֈ8lCL)0툓a)3"dbD4N6!z)%CX? :nc%D3]i6#C&[8%βZ bёȼl9sx^l'4MJ#r98stN,䋊Xmp23JDOc!L'J1rU{"Q~ff  1ν0ib4 F'D 1"{{X- N׺RECXFH<[/A?b$b1>'shfht:[&a#m,0#Xj6=C:M+W%Ċys_6bIlƓ0Zf1@#Gdl̞!V,*i]clx$Yv8KB#hgTN`+Ċj&7`:R,F"5= TV!&yS+q+b#zlM-@QF"=C)|ɉbT7<mBn;vvkֽx̖U? |bT{[CYjI0t18xxI7 bT {` ޽X BXHrcӸ:< e|11ĨxQ^&bgM-X-p]/l?~M9x UD 1ҴD1QH_\=`lĩø < Egʅb1Or&5-!Vuq[x$L3o"iFP,v9֖+ִηѤ0SŦ?ƷCCB.'q<ִfV⨯!V,%Ƕ3IKb34g11Ĩ $t8t0̖cÈ#C*M!Ni5Ċ!,/YN-IyS^Yj$Kk ֤$e`"G\#oO"{^V`&[wFqa 4!F"]E~ʸFBK=b|PЩ?v\|[bDVo{qLfk1sjv= 2{^!F+"'s'5J=$cWuab U(cCˣE&^J!veqvC""켸h[bT_''q'h!DXcAz1n^8H 1Ɩ4!fNs8NG"Q0c-D 1k{R˓8b}ǾحsEZI 3{` 1CꐷE=P8Cb" U1Ov:+F`Y![bTlFU[bU1CO'`D 8Hu+~{L 0Xd}_XF!ψf2TT19`lBwb凢}&W<"˰84Y|Ѹumj ;#Ĩ z`"8jϼ GG3`{]^j#iTnI+"X=r05j8 8rr7 4ahDi[z#[U 7b jP`nHi_{Zm 9>۴ ]oB? 9e"E"f;EA$[ Ls*3՜ hW|a3R`%>#IF0/]t[bTwr=@{?l qGjJaWe} aeيb_k+z`!$T̕ЪNw4\ G_[CR""EypKY&XVH=SURZWh tXV|1S:(1o\ݧRdLj]U!p}a`H~8yd4d$⇍Pe6Grw0,]N9 r3Q7vm zy WTܞ hwn3]^>V{!;(9]c[A )ccrE;38VwB4tE|plwz:zSI,B)t59| A޶>ñ`[/ ,׳Z4O0FcF8pґuс:ȁêy26ٺ'wLªBT`%1bjp)F@ ztxm6 #kSac2PDhuCN5"Heױ? RQt {Ó[!F$'j7Lƌq1'7ϻ kꍍl"rodv(@{XCRu'y!Ulq(M] ٲ,Q:4n-(QeDepFLFc氍Éui vv7oCT![b` q{k !$?w`fʈ!M='q9b{:C"p14aK! ߋ,é0ĨpvSrRΡ =$g1C̩vhb1ĨlQ-Ҧ;; wa~q%汜 syWShfaF:bdLMLbTyrGۘ WV bT!DUbl/_NnFeF۪gJ(WP˟o *Ϯ IB$On5=Pt7߯8N='_Rz/+]QEaQI)VoQm\UܫooD=0@R ȼpf<=`6q1p7wRCLW6sD=*>Q`f/} v:lQkuAJ@+KyqG^yQ`c1& D!"eXԡ~ssC#ֈ3Qw؃:(%;)H~9!d/}hPh|V[3 0aL(p 71S~9;C^=ok/}rJOW>TXN'"!}+c ~qsE.?ruAguPxN:(fKm\>zF>tzbnuJ Ϣvb,bꠔXBllQwٸ1CDuO nxny }ݑO+!)AguPJvR,2EMwpNqW޷(RR몞. qgg+Q#ԠLs$98z:-c7ea -=t NgV;<6:(r߰غvR.ugwD݀'yF$@^'Eױ}(xr!a[/^wG`n4[ ahM |G)ALZvPTq\us[eUXS}HP ^S@z`U~`rv?|Ȗ G qCF&z0 EkÔ0AXdtŝբwSt+_Mib91Ĩ+ 7`6eaoBU;(0Xhvt4r!Fd4@a!z؋N730&y㹰 EA1 0MH t:tDbtsN9B3zu" b0QEј#23ĈJ MFr1 %.b 01#*Gh#dgf<$dEq!VncC,CpI{K>"3z0 v[!V||O,bD凢6q.ESs vϱb5%P)h7C 1jC`Wv"2/㑏qQ쳬\ۤ(h:<_rCpi8l=`H oα.ֱ$C\89ݕKWgcyDf"AȽi,uVy"5YvPǞk6tVh)l&{`DTZѯbV恦. L=vYlxzrU)55~ʐKJ}\,u_Yܞ!BpQꆲ'Nڪ%o#QӢs߁ -T`Dhr'VD CB! 1fY[~ֺ6!ۖZ(7Q)6w&;#_0umzPԂ 0tm.h!D"rn8פ3foY!eTlr3)4z^TC$ʝ}89ZaQ/PK* YbL+B">s4?Qw24=e`nCuIs`D5CƏ>D7vAGvփ[WPi߁_8HDZ&Ǽy-a %_jy8-e矀(NQÉ_W6rvRz#2+ط# f3t: 8-{PtkzyD";ހ`@j聡 0b|[T f IDAT hc[t V{`TX37?6/3vMe }'~j*MTm>A(q7!E!Vr+B$g=C:K^sN !FՑu^߿OD'EݸݎnCwcF00j~ҙz^K!VNIhZecQ2Bqu?lk0p9 BT!ˎD5(l4{X^_ Ʌ6Jض=09 86/Gߟ-~}|?"dSYY驆!IV{lňl 7Yq\ƪnwVNocJGg`͹=ˁѻ|h,0"gCc_ìm^a(w6~a;u:+ϨL.:X6ѓ=1\gx[>b1;< <Z&} *ЎFz`brΥC&+~`dO'.MV!->_ދ"PPpB\t/Qwr6Vqfهrv{%eMO&-[vUc›X iZH*6if(Qx[XFUnNrfZ{Ύ!]%^xQ%.[.)Q+x_rѮ)'qPMLFTz8Q {Y41` q7aWH#zK(g1vrDiو)pEK=bI(1E!L]׸l-XTb]|+NƳF5d|m՟a,y ̋u|zdžcGΦ(noXYMYxS\zyQg<@Qw%+`/JyDј"*>KUvw eD&GYWFso;S,g"~爞ذR)hRuVKx3x=21Cñsmϴj垑Bق5NYgYV,x"575鉓.nV͈݉=;e D^G.=IaqHFZ6l'v,A|'tŇWpe;4<*}Z~^U,y4ӢnutL\M}+Jn Jl\SGSJ+i|UrP1ҡX^;w\p `8:gb~%L WQ]D%_uc? (;_UTCsr.ܯo M]Rໝ}-Ss7`l֡ Y7jEWT럇|.[okVMLU$$eR(g-~+"dtu0M2;Qh~_@B+Blp?࢘y&ʥ+0x:U-.۰Oؕ^QOZ ZY;Qt5G -&g4vR/#r38ܚ ALj{qY4``DNӭٕ}l?UK^ňQOLjc[D4"Fz=:4 W^wŏ[gR-Uޑ'vh'fn~"/ΧfG`77X(S~1ۺN1aH.BMTzbɗSb#:sFn~NQ׾Mk"ճėAMglЈK!wv:D,ĊA]=1""b1ĈbDD#""b1ĈbDD#""b1Ĉ!FDD#""b1Ĉ!FDD#""bC!FDD#""bC!FDD#""C!FDD#""C!FDD 1"""C!FDD 1"""Cbl""b1ĈbDD#""b1ĈbDD#""b1Ĉ!FDD#""b1Ĉ!FDD#""bC!FDD#""bC!FDD#""C!FDD#""C!FDD 1"""C!FDD 1"""CbDDD 1"""CbDDD 1"""1ĈbDDD 1"""1ĈbDDD 1"""1ĈbDDD 1""b1ĈbDDD 1""\DDLnPZ|%(RbUIcP%<"";6R[z֧)jQnj#,8|BQSʽV=q$_:"*rs#:ZexQhe8qI%~^'EQ[ԟE}˛.܎Qn$"<4B^ ~*dO*q~a̤F_qsw"Qk%z^/Ჯ-'鍐>/!C̙n*q~2_%$"b9SW{m旿?٘/!C̙8k{F\5KHDsV%,~/7f%$"b9{Oy.`YDD 1r- 1""sU!L%˽D!FDs%w.{/wȗ!LGJ-Im %$"b9Ӗ?J{ŞKHDsU%Z]::p_B""3P|^测ջD$DDV[KQ,rr|DDU4gKtV6!fۯ>`lk$""dQ{-Vç֖mzB|G&{bQDQ[E@줕|وӉo!B^6 ihE!V!D=hc{%ĈT:61ĈbDDD 1""biLcwC~ba|Õ,Ew&t^]E7!FWxGcP!B,@Uؘ]` !,}界'%b9_nj3'P\M 3Pp.HT8 6n9cjF%b9Ot9j2f^12ܼ.]fQd@lQ6$Qĉ<~m^3zzD}wrbDE1bDO_ӕ]laWl;F !FM63"یfWψd1Ĉç*6'mAlT;ȱ"G,}ye_-0KĞ)ՇM MD 1"341ĈL.=U[.!F}YrR=0D 1"˶11? C#6}XV~|=.ǓÉD 1";5MS`FtN$bid^)B# \`0y\=BNYbDږWp\=l"E΁.ck!F]IJ#lD"0i8!Ͼ0/Fl>l"bvF_/RE1 ȗ+s%N$mX>U`CD쉑 &{S癃~-C4`r8\|S2q!FW|A._Dt%~'F'g!f#BqE[i^61H v.i^<`9Kw|˜ ewʖ`PU״ c0lH"3L-<屟{)Ե_kG8rпjDdklTÉ3xXU&{`e+:}_o鈵 =ٸD}iD]Nfv&X 8nJ:..cCJ; =Xg#ZEac'Fd_i] 0[2xwx`IչN7}NX';3ld߉cEXz69#̠_61㮽Mw=3[>]71A)xXdDU}sE:.gOX4݉Y$|6<Cz_oDӼX5|oS64K`|bDU ãuNk^oN 3<_ D 1Jo۝:cϝ =z4(/};ɲ0g11Ĉ$N zIWPSh+HD 1"va߈ht" \/W/][oŻ?ݏ@`D 1+L!ƠobGL^ӥhӺc a(2#bQ}vx@`Q^ɏGi\8- x)ظ_D"G;Je&qTE4z&2}m˱$a0^_ S1Ĩ>Ri 0m)#v&,Y5s7 C.&bQw< 翿z[;nr{W^6vLJ6-z5e[Ndl:Ѕo"ډT9iGho6GzZ3%#ILjCM(y~}6=QG DͩxCںtO0.zi_q_ K9\jcS"uK;{A-5]]#q\i_`D^+51{kΛB0hl쏷8\WL'ar6|wǚ6o "6\]L|P~? PQb9!'~erxQ!Yf8(4E(B\EX_Pܶ*QD/ZY)Oz>%z~Yeb|8[(; }7Ӱb@QbEY{lrW髻PG㐑_.kb"㉈+F'0ec_ptMerzP=Dq>7 CB=!'{(1Q:~`^h|A!3"B\(~f ;ϩVwM?yUf>y$|1H Yje_]Bj #sW<4DX!B Ȯ~`]6_׏-0ClNRJ,;2KQxqcL̶8{ro_1AhoF/td vk7CC,;2Y>)gY{:6Us Oa\gz˱˒30CNQCtf"F%푺_6F:XA(b #ݬo25f=0E\jW 1.?o!F"9up"nD&,D7<bbD>NUq!8~jY3lX8l< }=n7C=2r"S7F㗱跫"4?"O p.M.Uqq޲c;Bclaz{+&,2o0|1Ĩ&%md6 UYX1o4I@rp0Jng]^^g`Y|5:}Tq\% ^a3ĠL$x; Q% O~~P4^el\UB14 l-OƮktvZdk(u}{ig Wf @TNNVL:{,y7ۀ;l盎!F_JǟmS`%5ҕ,2`6.oߊGyr E\ ;&-b<;7e/l>~FZ&a)|ÉTnYVP B>3W]6]0ܲCWbC>`0uU§]τ]?M?!Fq{F-U!FKLV*{>hvqE/XՇe(&|.Zjv7xqf"e_nQA\D"ߔdw\Şf-YI?yS4͊AlNjࣽϿe9V+Kƾ1l"`ޮE!ƠoĹuMs;Ow C e(駆Dnj 5t7i 㻯莺{ES|s? CTw`r")ܠpXw;OƲe>'aȔGd:'$Ҟxh0aG4?G_[z`ER#-t5u1_aG2z`_88v ExӜWCavxa<ބ-C 1vf@4?c~-0jkJ߂ٿ GF#5×-C 1&{`E.`a/_mB 1C&;ۏCu{}vdOqx~T8ǖK8"{`u]ܵۥܹk{qoU;t`d~i֋on7^C\Pb O-+ė6|"}VB3upbmT+|݋+I9Fhn'72< -a{bx:Le^w7Ô#)7nd/\3k^K(,sjÈERv #:`ʮtKjr欻&CjPaD{Ե{`KTs~ |4ה]xvX+[bT3. #" ׼ޞd!DtHU٣cxsC87IDATΖڀ߉[Z_F.>6w,Dߋu1m"OynH 10Y&q$3*U  %& 3tG`3\\ 㑂~ :E18X#*W[WQÕā6Su^^maN%n"t0'`ѡHi#]0_p/*2ÐW#{ @hV#IsvvGHYl5b0[ 8`:IdoIA[|R˺H\HFe΢㔮“v1h! liI,u 2ŦFnt=wW9%^z i͖D-*y!/I4?A "՜3r;BNy ,iP`]G . {cq).*v D71r8&; ޽;o/b~"eu!V\0NK_ 0dD^h>N˪؈\AW.NBW:渢~|c`Lqaa6'jU—c&bEs.wG{3b ^zWّ:=:wwQXO` mv>NFq!ZEarSh" //qLE3 }OF>hø"2$-N `ǜvcYjgz``_|UkC'=0KWT{y  _Om7Λ:TQNLS=ԎIB#_BP=˰poÃ8–!X X<!R}4}Ic ?y vdCLm3'+ys{`Dizy/=<o,}OƲe!>#aۻ|{RC|qB1Ĵ`AT9m;gMÊm2sFm(͸Q!YO_Nu?~Cn :e)[JDUa; a|sd 3;u%}`B$.E-ꠟa_bTvi8= ?32ϰb bd7EnSQ"}6{`D5 n;ɓ>7aʱHNg0Ĩ:=ySQhBQd|fy\7(Ŀ~!FU5v̞}^t4#3yAAOo7eVxaTl=Ҝ-}8Z{`B$r <+oeް ~bT^u"҂Ʃ+,|LLeqƛClPvϛ}~d$ei;;X1 [!Fm4gF\Hdfߺ+_w#C !} XN Y=41obdKʮ9QIDeaaҿnOa^\s%||+[Ɖ lX% E{rGf:qo=8~!VgLkr!DnolUtQ7oϻebu0o05#B|项cxGt [F;_ĿfO0] 7vX>§XBQb)"C#|QY˖߂?K00<ВqQM 9X$,x\. 8HD0N qKjx|7cf&O;'۳x #$|車MNO-]"n=a>&[嶭!&'qY4\e#D版ܞ5[7?߈MzbtelpQ#qiIRަ5bAF,j(ou{։Z *չ֓Gd&"jBs7(| h$Z -ScZB%QωqYzCԛ^uNq9;8?I,گǀ;Ԏ1_QW>]GDWCQP-x` %g}Ҿ_v7;-"pk[|_+KâƉ*ʤ<zYmknxSa.,FOiJk,}= |f,>[5zBmQJe\_^?Sz`_O%8HDnѪtGu^xq^lN,s+p;y?OS&N`-swo\8HDMH)'P0bH GQ+Zi9V! jEJy(GP5MRBS,5M܅=ٝ>&93;wvܙ/~~>>M/nLEeXj'Vʖށ]ı -0@,AuPYL+ e;7fB8Uߛq(iӼ+Z;(DǵsWpzqM-0>8.cT.8wM>81sShxN"q|dO;끁PpIUkt<w =V2 D}kƅ;@ݓH)I_0۝ؓf6>kN^FX/7<%X RIpSOU%4oU:f{WuTvqQ'轂6Y,-;4eLA[rsۧp` t_S/$\މ_nF=D ,7J{PsjOe/іmbc[i|G4W Xp (3 y:0G)d f(mUΎ,rNJ.R:VNW?PXXGOȢm*_٦g91.:%[~#Xg"݉ " tZtnZe2m8}j%fXg2#ND۰YUIKNk  8P Rάe=j.g4?I]׬Zրs90G'A Ҝ#4i4{\c?wCKL7:635C[uTH{Ӷ!={ҌQ; Z皱*M8p) /mD8Nfov8n%.';M\k!/hě ]N+鶯QS hOrf^=K slt;h7 r;1= )t˺N_qt# "M<RΎ8j3 R ϴ5j޻P[x׬kБi6ux{OW 6^}sk81mm~:;;}ejZ?C2Ċq{@ qAhP%DQπx1>}QDJe$v-H _4/ /N(;b|^AuNLkٕ; ( zg;1;:˜ Q/YFYK THq>cyNIdAN$\ GJ"ɖX$[;Q1ULe+JTl1nDޜGnyF,@8]*w ,y/^/95M Xx鼼S ^=E kϹ{IX5 eR,z-0q&Ѥʼx͛.!C7lpӍ)[=[{B?RO#eĸgHINr ʳFBo}bN:T$@Y69c4Rj`+pZRgg@l#*8g?Jg{Tuwt@Rp~Fl䑒K nZv TTǭ'mbNA`F1?&&j"567oPPM8zfmzNA[J[uZ@ІwqzN SQ-I'Q)I|!6,+A/x6&>D-.$om 5DN T@Ϭtq N,PP0=6t`>VpJ:n 5rb 虵]eC~~KG[a#]nrb D"gֆn@lor;FU>Fu Tר#3kC7 6mjōc$e$tRԑN-!R֝|ۨq8`z`8ShP.ighCv]q>`ޭ7 iL'iOb ']tmdL'[k]y E†n@l_Iit^_-eBy <66sN|Z+(ɀYr7SZjܗI1D†꽑X`$zfmf?w8פLGhCa '+>ى F"n@@l11`8z `~+C_&i LyspKe/8[qu6١R2p+qFIENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_prism_edges.svg000066400000000000000000000414041411346603000240170ustar00rootroot00000000000000 image/svg+xml 5 4 2 8 7 2 (0,1,0) 5 (0,1,1) 1 (1,0,0) 0 (0,0,0) 3 (0,0,1) 4 (1,0,1) 3 0 1 6 dune-geometry-2.8.0/doc/appl/refelements/gg_pyramid.png000066400000000000000000001333261411346603000231550ustar00rootroot00000000000000PNG  IHDRd$ cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATx|TBncl 0mvƎq؎Mlfw柽ٽ&.^hTE>}$P!"i)gw=  oδAA [~_YN}ƗԘFOܼ jXNjVy  "m?_Qj eWOmrv\_jqIfAA:xߨjw:_;|5NM@o ehJ Rohk5"aA%ڞ`5_jy:q ԍ_mEyAahǣmgtq:~>\@\־QyAah#mN7ڇm?, CK>~jς/{:2C YA|􄱗m} AAF|zC~Nt~O e܍X, CK>N>Ϸ\qm?aA%'~Not~O em?O, CK>M&5vvqY\mпmi?vN;hhi  J:55~Ν]NZ.jĨQƏsޔem?h<Nj֐lO, Cۤ`n?£<5yqǻ G6zi{M] x>*                         : ՈEA{}w!  | lvAAW[  qxG  | *S~fAW(]AD>جFߖM. "I[j&AA5C6  )-j|M6  )^jQ ZAԘF?, `6xE6  -%Ă  |h{:֪Qwe 0~ת[e 05Ӛ5>M+ `5^PIoHVZXyAA3~j}Q/>WZp5T*AAhjLUrnSM(D .ןoUcjT!,oʋ~EaQ3ghU߳@}E|yAa!5ƫj50$dL]0Z9SM&+ iP\S!  |xS/ o-dڡꄷ{Әmd 7E23 ۔SɇSc" #jG7B>~F];J@fbui7`c=%!HAAb]罻к E;U4+j ЮZbAAZܻ͞iY 2KjYQZ<<ŻM|C2')%kԩj=jA>\gw{L;{׋<?'i=yԱ8dZX,?Tӊ_SNC. p?ը2x#vV|,)(oN$+pC 㝭nI&z.% cCR!# F>|٤`RP:*ڵq>_% elL2 qgʙXv %֒9o:P53 AAŗzP|hN YF2S_`ULq;95KIF- ad+`!`5Թ&y: ¨z* 뗸|08@>e9ڞS5L,vuS'`e "+6S礊 ¨>d%/^liKGjL "KX6>ש5Gcݡ$dYqbu-V}pluud1U֩uT ¨>'f}N{\#Mخess0 ԰$15r8G Otg^~h)+1u'$_& 0p v4"lP7.|W|8w }1$~ex$fF^cvdf{=$:vsk24N]G-oL HiZyfuvHFtA&c$`N 4aF+Tv[ILe$' ~<_\fd*n=Dy !^ltWX 2YUը  ||?v .;=xfu,]Tg#b!>ћݸ3g@:dZx1'ԲYzg0YQ!2b%Lv9lTA$SGy-_TM]>4f)/y ԇːbĹ BݡS KTFpղ4gAG8U}&g bR!# I>4^'eA>NUy^ Z, Z̢4BCi3G ۹Or2tG=!2 0 C$c)y7~惹pt=[Ȳe1/8~^og+]éFG8LcٍT>R.ғהTISAaG> Biw.r?7KK}l\/g2cNbRh| oAac.0' b: B\\Q9I͂|[l9 ̭SEOqN=䵈Z꘭$=:f$]e=5RH}  Q} ka[mUq`dυ.ëٮ= }̀tNߧ HW21JdQc"N7yMݫL!K  1cpjWmgJ6vAy ̓n| rGၐ pj)6>xGL=*2 0DcRez;il8\} f'C^s+S->޼+© 2pjїƭR!# M>..0 I>΅dM.NqR. G.}99}vG{8uqILznnY7*dpU$* |o$bJ_ ٠Rs,S@rF %5 ޯ HWx{::©Vgerk.Mt[!sGW[ǁ]Ld' |cv`li=*85 |郀l9B\ׇ`nE N +é>7(kAi>XEbgm2_'Baj:'PtuE ǽ)]\T޹҄8 aS秷P u_1%Iyc@} Hik,W;İ+Lu־U!s,?ǎ,uT "@>4C9Nypu\yaf絇P( /hhѩzLٗmz85s,~rpuv*d^&O)VJrSD'+ | |PTؐqÑ%+q޹eB@%d~TSi)2%ɹxI(tS :-»yRHR!# | |hOΣF˝+\~eJ@=>ffD$R rkND^!IUțJMC1TAD>Z><}옛LuTo`W[q WI Όy.&ͶOD XiJP<]y&Ӆ{" WLHPBrZ8,a`\B-J2x~q/J<A \jĝO+ }7Ҳ/ u9eM5*d\"" jS87,9dJ1b"&qQ22'szB<AVjrad3K ~d<kBkq WNsW26 ؀&}y͜2l#+x\1Ҕ󁒐msȈ "]O{d݄1,õ\p$g} e3#<8I):kVDr*=uf5si/ |+ZSsH}O{2az7̀ؿ$քdݓ Hw23"E5x^Kl4YڱT2F줳DwCFA|h8l;x #u坽?: }@_z 7Y*T;s5E#s %DQB O+:Gk5-9dA^C?(8h3љiπe2 (H~ IΤJ}0tZ'sպͤxN]N>:H`  u6I^ GJ}Q]w> 9J R 9!# ,I۷WPdy\ QLf}8%oV2 %!q搑p  -a(we=:&YdV׽?: :=$D.,JgFxFOM9$yEDqG2/s4b){,mCFAhOYw! Z@%_{J{*d)pU\eQi,&JLI\h)`,'ۅk|y "O.QK(%Ic!mS?: ;`rۑr9t8YyzvjLl8䵈B,JBJƩOdE|ԓXه+rAD>?\}+;}}V!|pZv R=|#u2tcHIH:'AF|hO*9IŇ69*X Ȁy4ʐZLIyG I&YI\٥β*~$$WòFy9 O>@mDb MvMùPñ*dpjJMIr>L:j$4LdYAF|hN4K9zUj-rt6--owD2LD=UxzQaAi>x<%*d=|2 |LWAB]Q(Xw(К4¾_(v RS zs׬;İ©WHӡt ̈́I5ս+p7F Xޮa/ *#oYg1q4i2oSJAβ*BFtAD>F|~TQvarXPyZVIq w9,k_СۈéObD3X@|NBbg:A18&cpn9ut^5z.F chGZԘb-=tb[\ UJBUY89y:6mD H;Z8u ]T25lgq\"p|]2LN}IH:皼DAD>|hS3¶s]/^?>RWewd,5D?V}{\HM e7qSN]~j2qKlq%H 0唝ۀFTz C"w(Z[ƦX5uS,FkHr>)8,5,WzoU!c  \j}SL^`%# !w|##zH;Z8uVDbNHI2OrC+A8xB^̠cR6WAcGX+'ZwڛrH /̀|"ߌHSB@4p VLH3jS,Y'0W= ,r$/) .( k]TXAcʇF"ʎ}&@d7MՇ}u,-7J@velvbT4"a~TayO [l`,|E%uv톼AD>|FZn'^hZmY@9. GhD6Bi83= S$'X\J].BWA+_éfZAchɇFx\˰;`v7VfÁ͐޿!& 0;FhSD+ 1Rd\i32)Ũe^4-2X ٪%!=!NA"s?3Eo*/G= ȷFv|Af#f]Tt,\^w# |6DC^z8ui|jXM΢_t>vKoA1Ǟù,+dñݐFĬO=-oɡ56>6l&ÏX%!ZTLEIT1\RWòry |J=T;j1-wV΀w8RYbjYs5oI"4sD>F<8F{-Ŧs<y8X\L֒yTIGA'i( zq<·iV# Xv' n1ju\HhӦ262|R;9`XI ,Tk)X79.0jB& A'O˧çZ6•5uݹ`ގU.y-Q" =޾=ؖwƶ IDAT7jsY]JBs$gX*d OSi.@*dAD>2z? [E j*/ުæG#hV@Ȁhe lC0}!̿Ei̎h ׼Æ]1tBfO2Mع[JBOlDA%(#>zxnnP-o%5.]-^V}zMItV:|L-%Q H+jۮ5 A@ v)i{g 6&5 1Zvq_Bf,:^),$,=쨐Yt a2H ]W@Q?K4Bqd.\ZO% p7q89+dOH:I?dž MBH&8TBFA䣿[ہQKӑ>ԍ~r. qs.tz #/QeUSzL/S2 mY+*2 " 4 0w>mLkZw;"pV!hy G IU2ygLz=eT |T|n>W_Btx73 owKFd" wV!3oU=UsgٮdC*dAD> =|Z-}\S]Jrs\KƸy)2W,9I"jOs0F=zg*c2 A^STl8mIl= n1*NVȭ}YXhG0骐IJ GSTF3}@ TN6cƧR!# >]Uf/ksz3/!{N]N6rxGL=TTQ,Q} jDepk[wVR5#s?SGdq'ۻ%L!2 ||tЧi{] VGIɖd=z8UknuVPfO}/<'輽B].2yz82 |j§'>zz N>  D@Z̔R=Iq}XHʎ"JB@?PKH5 Ǩޏ2.a>|nhreAwO7@TPcR @)|jx|m2>Βb>pSe# 1C?c݇O{dle电7|}=:5:§շmg_Gƃ>ip{t7 pVL8A Ei.sc(r!}.I!yoo9dA򡡇Oh/8Q}z ac潻Ȁ -&T2a~i'i!Jr< t4)JJ2IVJJBpJvAD>F|hӃ>Q#*aPe" CF\"" :s-O( B)"}|,vqQ:mmOHlDAD>F|O/N/:\ )$!a{~NRD@cXԙ|aa.=E^!!eKHIq2AcȇFhL1{aNRS% I@MýybSճ2T&+dL:81f$d cSr]cdM?jm%FAc8ˇsksiJ:.Bv%JTBqJwJ e E,>^Ceg{8jC35Lw/uw*,\u}ԷSAv򡡇O?ll#Ow?: !f}:ʨ4 =P䴰Bq%#D#oI "U>obS?_Q )ςG̫7 OtB.ąwT&$ s$gN]M#oB4y$V>PbSkkT 1lh[te$SSS"ҕ) N Ac>/ ~?Y1Xw=Aկ^ &͑B.hs̏bFxF/,) 43^']ꜳ,_* FAcHoQ;ZO?aaFW)`Bf@8ql)SD@>捻̎:MItRpVUr Ay@Ac(+4A5J.wy2w悉c}>e93,2#eTYfj}[85 Q~s 3%9dA2C 9=A v/Vx0`7'=I 2LiNilڷṣX"m+)GY+,/~A+jD(M`d@> /}"2©s#<N-4=eǓ6,P RlYyS\&B~$d)R+}$hl.UG 9|:^}Yؕ̀gk#EAS O<*L3I.Q}zLcjBF{_2?g>՚UV&̭7N[Q/Sp 1%dbHN ɢ2-p8z |UW]("ǽ$lr!e{ b{h(^?2s;Jɀh!-QO_DwSkMZK@éQJBK"02H ||܋-L'aG| _3OC- hKyag!ۣދ՛!fĶM̨B N +éZ cm[԰,qb=ꪐIFe6 sED>D>yRRstN -"BɀLs ŭ" }©Aܴlé N^!MxmJ5FÆs1;n%mhw5x [E@F)pjNn&߼D>>[CEk?޹CO@i;SSlxڙQS*-sH3 *n,y#II\:,QD>D>Ab>36N]k~rR3;f_/ E-҈L} zҖdڟS*C)1Xx%!a:ö9d=AC䣯{a\Gwh׳pey;g!6ΩƟ'/K8֝0l⊇7syLĤW|r : e<>}s8h<HyU04Zw% }=P*A T{&//BlFyq"YD{F~4oOlğ }N5ENAC[Bc]% _P˅]PfCi`Qo_2\]GOt(!ZA"oÀKG8j0]&M hq*yL 즕՚mb(""]|/uaۥ{bת`A@nMf4L60UP26O\ʍ3bߥW+ YB9S0+"QWPkkzو !N>=2gpt-`.z?: `C@aV1D`;#Za!պ?SL^!3II+%meQ-PD>D>::&l{^xQ`9»-`)3}KcSGr:?0= wFz<ׇs3 ȵ߽Y Ȳ*doVr;x:*1zw,WI UF C+X>,>7(3$4 )BJ.92%!ZfH |ΧjOo񽼫o0-yĭC0wZAߔ%8,DY)(Ĥ'BxHc2~L K_ &"ImGG^!UrOUzn,Wkfj*PD>F6Z˫pֻf59ph66_Pz|x+ !Gu/k¥rBxӃlMX 4z{3Q#0VEDśL.>6L'qJB9d5;XY֬@*dAcD46ïTo~ X1Lɀjm߭C0Z I.ZY~7a3XX^x;Ic4kbn5fG&Pk4P`yC$INA#۩҄+|]I>6Bl@AyO$O=|eCΆÕ`7;\0d{X}\^ 1:b,>R"Rz[#jqgсV!IȲ7#ѱ3hL16Sw84rIT2kS*dAcW@ɽFK /QoHؒ6|;g?z>d@ c0\Blv<؎#/U>hyi,#".ڟaҌJBfMCf\Aꕄ8 o Hx8U4vhҞ0wv C0LRSqTvz%8c/G$21eyjx.Y#:`,e xS_5C AhӲsz{DGu> 玺B=NY1)g9; v1 443$OQV!8&E0)>1l"=:ֶ2d1~&2 12ç'9|f;f1O\ HwM fs\.ZGw(&5^D[+d,7sİKG+S`Eze(GJBj"$*"i7XJ Okp~0i}sw7:32C.+Jw-5k%~nD/BV4mY$ PL29NfxB@$DD>)"!z^i `˹qi=Aw]ԲSӛᰕt'Cl_[e(Z#Ob-2 9s,>^KAN6]5&T"" -3ZV%w0Nd}~&߿| t[1/^CuyLƙ؟a)J0p6%rYI Wk!2ȇǰ $+aeQ k?.@Y@9y)m/Gv̎lUH-wxs N<.% K49zؘH9htWpTR!Md(QQuKDәMkl<<;`jr !C%{6luz7b,|>A%Ƣn3#qkLq,׭Opİd;]騐g8YּD>D> z󅙽w> Bs$?>=͝C0Zهt7C"}ohg#1zTG?>^!3;2^oߞoHOrp}V!Iȷ8WJB5Kp !1§e'^ٗ61]X<8zW@C03d~_N4uyxKoD3oG{v -Ioxuqv۷k2Mq83UMdwl u|MBD>D>ӆ;`W|1)cqw2 Z5 }S!M$"J_ Kz^X}'wX%Swm 2{Zo4ΟJMBB+X1!'Tbş Ts1%#L$\`Fk->1Kzɼy#q]BG #k8z7k}W#~2̿Em I_Oo_H IDAT Lگ+ '9hUGpUCU DHRټLGfU+xV%,N{$"Ȟq_[{SkpiλѪ`~Dֿ}QG#xGup[<=U4Yвc,z8u%| ) Q{ ""={tr3d:ר,ob=I1T I Tv̒1Ja$d޸lDh5Rdz=r ռF_Vj7viN2]AC㞡O*< O}j26q'Q q'³Ag_,5xQFE |<̊cai.̼$s2QKJ=>Uy<ι'4ʌ} ^W֍5xo7[|ʅD+ PbdEJ`JXiG84+|lxHiF#9dZi =x WeN=rȇ w>=xWsZ_Y@j~ Xr$aq{C+ jo'0(L ddQo %Ӳ?6vTZ5Ygj-"Px:§f+2>ûǭh`* Z?vy`cdT{=ک$ZeʓT;©U0r[#xZ$G9Y${8Qkj^"ǂȇw>=,4WG[q@S $aY0~;U0\8^`.!#p1y~S:ƭ⡡? n[}8 &YI* Z8uaT޾fдDN}lT zw4 K%!՚9jD>D>-|,蓰=c':xV0UPΩTӃsvV!2ȇǀSKU⾅O5d]Pc͑!lޛh3 S1Ro.a"0hizpE>!1)(yB&wlU#S"ܭDRq,zE}P?s.@*xn3 >;!vcphPcu p_*1y BAi|3{$_6 ! 3e˽8MO\YC0z~DLP-Kbpjq,8bF*>S y=>ZyWn2 !>=_7C>heW@:`eo>u0io߮Skr͛)""S;l%&k8h0DvȇGcSb=16 GXi;M@*ϓtD{3-PFZ8un5%! uVQfӬc]$+1YB^L D>1f|-s+XU Z!{q+d@a3'rY*`'!3 X}*LR9lX@6_)ebDIb\egW` ?san ){Dx#mV!|B>)mUvQ%JE^UCr\]SkVQ,PF 6WybLZ{_Gz42Z߭x0?e|jcW-OaNK./2giN&{(-mjl'E5z`HѐUo5-q|F±oAvr74y{jiMp<| A̸Hflj tpKI$YՀXK9FkJN}=E5-p7)C^I+WxOF*dQLؔ"N=3(oSg՗ %edo=^론A`zUs3X=HE4t,lE;Jl3i{Dʼi֚C[c"5xU^ALTc<۪l{8;q$0B̲W[FQl(-m_@) {ĎG㽗lk9^ٱ[>|N$߫{%]=qd#V S!)N>014PEDtFQdN6Eo=eNE8!Ty+uXfwı2d|(h'BP=?*.Yd8QlA+иj@ TL_'`f @R[ȑ5sŐzl 6Wm #|!"J]1TNYHPh3ܐGvX\VX8j 'ۈ5aX s%3~Sj`R&s1"p|{<2C9!&~ʐQ xD]abʧcܓ/0I\ĉYz8x@6[Q/N1mgFxFXhؼ2bͅȢ&be˱Ё.P1T|gCIe1;k3PH]@" hQRל:5e f{ylr^ &HPd4eX*!ʜࣟGp^_@t\O36f>'`l%p ?K~ T EÔL##'FbMidۆ8Ɖ{D#qh5$Pe/TH_ǖ9싘JfxƦ v@̥Mo1TA~h2$[ZCz.s,nuRi|tc"r]2W U q/Ak2v࢝'_@Ji"~^" _D֯PP4 ^v.)!$E$!#1 B4;v=jFm4\fwf>a+ GwuHod$8QciJJ]wxl˜*3d*̓8ho9CؘEʐM,F٨ >" 'TχrO7]3"7L~ ρK6Gy`֞`Vڌr+`% >`Y/gc'fyCR> D{ cE.l̕DSF}#ԋ飨 fhȈR_̐6`!ۂ6_\T~5Zd,KeNUiY}){pyWRHw?VPr6[ y<9?- .6ɈQ;>h=;„LRCac)jBSHcm bС d#ok(x4Aԑ`W2>p=%ʷ{3dl 2d|%|Ddl?C*24l9O5B2v~}!(v|\E2L|cB IFO#ZF[yC)F5Z=NJ`SхLM`b$7t $YC*Z4 M \eZ v3C$^[`;9+=hD a0 1\$`TFa40~8ZPajb*(eb 7w4*)E,pڗ% 8& rW#( d=#y TwCc z8JǖX/C*!⍗ ?t\G_z)D$J~ۄJ- '!dI6-X~8y.,m^*!McGkQ~ 7 ɂQԭԩ̩(ZI$  !$6K#ge}|\Vf>?vD+Wl%n41ddz|9e5#'9ʐln̝ =*gi >.̂Qo°f)y5 .7^g= ;f/DI%ͩc̩Vgl2`9/ʐXJ2d|TGя!%l &Tp!H\t2V7^g`/ƾ6c%n4-vUN22RukWS^K%!C8`C ]siaqXl?F@|[m:,gNNX]rC"k%cGy\fJ16  >N27̧R`եp f \zUDI%ͩ ުeI9u50M$Q+8ʐQ4**UwվO͐_φZ z@Xfדfp FI!dBR˜ZmP`9Υ4!ϸ2dVQ ~]e(Pqz0Ө7a\;wfd3.$Ǐ3[;ݿDIt\O<Ȍk0k(4uoQ8)QW4d+uԐ y3&kF)s=l7T,~ aQ;eDI4IzF2d(1ca velf)FK"U=tPVPFzo ~';o폮mWvϓYm?%!+2dʍCȲ_ɷ!l#<' d${gET=5TMVEswg dؾN!;ՙw3?:Se()ΐI =L%˕!ITX"Y4YYS|(E%PJܵ|׷] ~^:3) ٯDI ɛ!3,f3zfwV1~>eq0!CG7UΊa"lo  c!V!; aYV8[E@Ψ"M.s7C2U}CV x ;נ2d|t >teQh4N::,X~) V%(֍|Q&Pu@ΰZfUgݹLH%aϱ!΃XY,%[2CFب#+1~^*P\HKzVN"YbT폖l!/YQ%^rNlΐɥ4}kLP`!J2Bl >|4Çx~{ZS, >("4ZƁ~&aTMC<>+!Z<;ʊ?  JJBZfXȲ^7 ;/ӕ!0Ԋ%5jFLLwT|qź񅴓 ȹMH%^&!3uw1cŬ:q?"c+KY:&[8E"s)y \#xi::4qŢ=( VD C pQjŨ7c\-.&07`H /dNnKx/, AwJ33{`X]?e~t%^(!3%ec׹̩2CfWdFrW^%;I,@HiMB qϴk ў%6z@gHƈv74nOPq"8ZxEngPi7Clrw|~& S3!%#e)˜Q;|ade}@TRoל*3d̎Lgʷd[VpH@W"1@N˳-s\ǛeӺ[GvsˁBhWtņE4'!sJFs8P<Fv #ei_/ / ǦNz@,kYULI@Ȩ<9h2kXDfg'ϱV|"ZHZD@.E벂˔=A\$(C r\Ixi'„c%tr0:>t-gƘPRfeN-6%~9rA Nk'W)FXN|* qmyeĝ^GOHfD웏e^jmUGE'U9`=5afHq\ 8Ceb9Uf4X!ײU}3IL"7$MoDvWKc |HzK~f!TPe_L1㰝.RUENvJ,wTE px$ ^Bal,  IDATX~%3d&$4o/&լcv-1 W4>;+u6z#+N[v5Zx)G) /z]VoƷf9+GmT:[_&Vd߭DIuj3U=H`l Vq!S؅wϴ&3d^R] ڋ e 9#.KاLJJ}T^sA<{[oEsX߱ep>NA=_Jn2=) @J!Iq 5<~W/m1Q* *N%b W:GV݅aq~/2 F5l;רw*Z9ubA'~$PGZ&`V!<]:+ mh{M4h?]'Dө!8oje bb$ 8[ qDw~;~%Nij)eKx'N+˲g6YC *8ҕETmjKW2{"I"ztq?sr4:f?` J=8_ |6uzφLY0uGT.'ӮE`%|YG4TˣV]-uj"( C.] *b7_"XmPLqߩ;ɀSrmcKAQY]-֚B3f&N}:ͳ\TJATT{/Yzl3@gp@  z\ԎXgbJ7ڛc[Rk0FG ?0gf!5+$̨tO'6va8O~gS0Ux]|G;tU;}[E#oh!'|mџ[m4x]w#{^sJ:-nr,PW@kt eƵn_3*Hv9]<c9Prr4GGBG*rq?ߔyHz^6moIUK+؝`$G=9ٽs!5`ɖՑI 2/@[N[B0 a bSx$Oq^Ȉ ? #>IG‰`dde3of阿e)<ƅ.p ۉ]c4s$bq'ڢ%KD+9?!|Y%x<SXu{#ކ)!WΕR%bZ+Q{!eW>#ƘLN,~oP150ڦas '3hz.lө0߰'b)g1:!0.pui^Hhd y#}c~*"UR{) 7Z:XZqL,YWjyt$ ?U,!5|F~_L&3[][e gMw4P'*c5|_qxjv}Kg&j`'1;@̃Ĭ^ m9idv/xu9a9K_;  a 3`8 ZǢ)Go߳`|8<҄j ߷Mt`*}lځ)k>.\_JJxuu|/ixO]ͥ5nm3MV>b OJԎy22iv=e`5@Gq!6ˤμ4mNDZKq<|xxvx T4q޶P:=&/(f:R|3;e_P_˨ PR-.,:l.E?Ʋn 9GC\Bv~5Ux<^;utN+ey];Vw׽bkmT䣻TeGdQC)zxHFeuzG#؆ujEqlǕC㋚Y@܃ȵ_ԝIG@48+#,g 3{X-li(_L G<ʦ'#ФN%} @|/DR̻ͪ= G{5Y*uu}CfdDAjSj~;g:yeM5k+TCn0$zlIŮSi|xCve{wWKɬDxIQODy WN/5!8u N.wrsot,PuyKk )y#x7Y.=ʥ7<&*x,_v>'G;W?rلr@W߱t)NCF<\1&}}&Ki\2u"pӊʼ )C8sA>FPj6v4g< wRY T۾Bz]vދ6y9D$%b1#$J/쪹 x0?Uѯ" fxhq7qlBPx3^/cm3n#>;_K2}WmѾ!Y/>b]oW{񳮖DnEU&5FSoFq`ϟM _͹ ĩx ^\YNtz]piDdAMuU'3aSm+ wsWͿ^ "}Vh] Cc0-ό{@Ms4r6E1#+Rs!_UGGSJ}J>[3nSY0ݛt,54뤹4c'OHGy!dNCJz<}i|^?eW{|5Ƈ0)Vpđ]Kp `s8ۑqhTܯDhu:~%.mEz@vxGؠࣿ,aØ!`9pm"Z2 eqr z) '! `>ڎ!NN,|T|qLۘO94-BV9(CNvVqaeZ3hp bi'dpVt[-gjIH"UL0q{Lwqw 3yvˮG%w !qySs9Ș$N^G'63됇*Gн]mh_y^OE+U.A\ژ=xe! cAQ<>@U [L Ebc<׮:Ή`\ޕ!G_9kkt5r` }N:U{1EdwNˇp!Si]tu<t{z($]-l#!/S0Nu== Է],-$u~fS~lG|7l:w5xlIO:Ϙ/4_>*q]* a@Ig>Gv's!wfH1smM]e̥'Y| \uIDkh`JUE_&Hcmfʥ/3sx(w')~S]Lßqw:u <]2iU-CLO!@S#K[_ԇNV|*A{Jt>Fg?DwPNg@|O-w"*2 ϋ=s ix `x@wrP_5?3:r:x;ӥ;~S]\6{t\{Qg_ W58<1\$7[.@սiq Q/mԫ̗3@tG]01h?8GDz×^S.9y[N;C @# |-Zw qy{saǶ#7xGtQ}E s5F]]-G`{UHǿ08<8cb7O~G!ͥGa{7tߢvm4 s(W_Rq'?O(: /mC={)`c.nogN]K$Yc6n߹nyu9ݸɼP݇3 aQVqme獥vx${%Mt's[Oa^čaSf47IG|A QQ6ꝍZ*CZ_:F 8")l*O-ֲh֓5;]z:3NVQǹpN'JV f38CSl@ .g5%'QV̰0q&}s{B%[<twU+Wrly,mֲD $|݁7~FWE;1uda3YYAi(6kX> g-~j (iCu*6GrV&.>4QÖ sueXBs|T~Q(s☟vޭ,LwD;k4xf&ԍ:܆FNi2s#vi4frRbah\ߌrF\SBv~o n7xMx,:4~ʱGt)&|5àȵĄnp !Ψ `]'aѴfAy9*aڊl%xX~˰V㸈 uE u#b$`MµDYݰ*Y}n 3D1Y!o= ިuLIZ~uv##ٓBDV^[lV-A*#ddBD'L?(#ѥdx}%6 8/캑~&t:Aˡ"}M[@U(l,P4'qx$lɋkt" E7I;ЏSAOvoW{>N湌>Yyu0*cQV'\wU${TҫG&%%,1ZJf LH[HD$ujjhdruIŅ\+^P0tdʭ1e6Eoxt]*նD<`{ծjk.UR40 ~ԚEl*eBjJ*N9F艬1e1Yt6~t4[Hm)nLҳC+ <|ǣv 7~(4tYkI.ƛM'!2Y,djha4bLL᰿z<$xDpWT.Uf~~@9۫oveKr ʥ+ŝbq6͂&P=\pbtJ@@ż& (U%` 2G,Y]Y`rZÏeN$N?@V|U/wR׻N+#?Lx(W9YV>n%Aej%3ScE$DcH,*rPLEL"'# n*ࣗ(,o%K8, qo* PJ\8"=;)=*X v(uEJ.\4bnLH3 ηK5vPd` } 9ԊR'A!aQO..G YEF<x.(sZ bjʻd~~<px|MW!D}% 6mY1=-燐;YGP-0 Z@x.#Ч?NnfXIa;a?qKZAtn~\_y;u(ٱ쭮`L]- hOrGpP`D~C=ceE̯$\K?zhVʈIgc=t:r" C ))iKX-|?S=\r2k7JV<ycd*C>*? QŦil04$ډ*10ns3sO# L101=(yQ;t:{O}F_`d'߼SUC,_d~iZ&Ac\[_|p{y[FfCE%S',pB j5O&N1=Yv 7"ş= 9, F_gQD(hAHJe{u9ή$>.#&!2a0wdSTYP$Ů< >>c~,M(1|Q:LVÒV}6/`oia@1WH ņ\]0wrmMH'bCG `WUɍ̩dc6i ۼ㚂<."cXՇ9s} RXq/qZ* :"I|8"XkF;*$fk S>L&ja{kL@3]|bWiX?Ơx9?W籮 5\Y-)'u35#[F=~+@Z]#M}`|'Gۈ;~&x 1m gتr7׌?]4;&ߥn'ȑN@F=l- )s?,`}_h1A,LO ( rg%R `Si:"r r S?PP0% JIf'+>73Q?4#CZH֟ՙRW#drp8 ҳ:hK('[62,WdM`SyD|IVMzK 0Gex }pGg̥Q2֊3UN eIinSSQl˲aJAσR6ץODϹ;s{rl;6n`x G{Xh0rOi!O\GKEѧMYOr1heCX- >T܀Icp9-_sj.̉F}LATRŅ!3[b\Yy) fvԯc?H|".bnyY{H?mK-̥EjNWCj>ndhքQ#̓P jϪti55t%/ep=DoG,__:J`Q ;]<,Q~~ Z|8ҥ$Nr(%Wk1xYw?'o`)Nk\@Tvx Z|1x"˱@LaJҩ(-4B;װxMg*Ʋjv4` ez|]%mu:;H''Ei+S2[: >gttAVeS7ptdsaQdG67QD"`R-i;7i4M?wޜ{{=$.u؎"d--۫2\(ւ1 B ݄/K\-#^/ cSoMJGnBb^e-28,[ 5rFZ-:mku9͂Jŭq W;C m=#iHs!G2xaFy=MdƊ~Q8mbxx *5^N z~|)AÁ0+m P?o?B/qj f4Z'jy j{#.VA]x̞HAM):¢c0cc\"kT0Z  )@PQ%TYm?wO`L‡_ !GCG)4!Q&<9suZޞRR$$Kp,?y@f|vOZrGYd j:_8DMPxmQyhXZ]xʥo>? b@un-z2 Cf|9BxY@Lxr)!"@άϣ+?9%|pN++Bx Q|%e1 ǔ}M,<AHh ݆lC!\Մ\*xb(Aǃ#()+t4l;\:qYǃƒ` ֌V PMH1Bx=AQ=[=0<޷Nwr` ޗb?dsWkO΃P, fjGp }n߇Z:g9Gh#'i˥c_?` ,z~2O@~r1tR  DxHamK>d:mhmq(lF4XljFnJ<~Jw7wDi;D.bO#o.c@9m/,Aυ:1ӁM`GP/X=ʥD!:Zn(BMB|_&b{VZu'L喊 ǀH ]/F: :,c뢐 h+tWߩDq|s]e.CֳR\0mؼ(l(I!q-t@Wō? j PxHa9OWDŽ`$bp(B⡝}7[_[7[aq@!\ d|Ixߌzg]x Y7KXMH>d|6P Mbd^#]5w:;y7Nwhv84EV8}5 Fz<>@z]z<o?G)<(>\x:CyeϚkxI( QZiB OGt䝊aO0t,<"O8i[_)'C= &oy{vv7:~PO^v; 9clz%B* GRto!(@KÕ*d,ex0{x.Q6;Ѱa LUGxA . m)EكHM$)"皈w-Wz7,|  T(M0ڣZq~x'`G/*Ec8uhCcgOO"_E18b Nj&YfNJ[@*^E\ I#ZH7Q8\ M,-e 1z)Rb 16D` +KťX'-^f't0x<-- eE0K,Fy·x[:_4ic#1p)xBZakh[~4h1DthwmP_Q3CD/EBxVY Cfh ]kl`[U]AcDFv3Ztb4qQ]hq>V=נs !3a{2ijBjM Q,7#傽iG 81> KʆZVE 4qKNK fg~g{z9 ^g2h7|.O+GzftL<{5 4L*`ExWe.fB9WAre0M/q DtCV.@A <R3Y!եxv==7[ L)(x['2卧2{= =?V&@^Կqյ#=93J\-# )>2RN;!}1ƃD%V m6|a ƹғ't%@8W n᧡Mj˘B D4+ʝۮ\#b UBJU:Ne Cf? %tviï؂o=.W`hqpHz}LxI?IE@ &Q 2Jw"*Ǹps!:znÕ 2]xȬ0 Wcn煭vP-Z21h+Ars "s% #Uxg2C BH svFٰE 7 3FZuHrno1 +z .=6Ncx)Oej!&>F9¢4C'SK)<$)7oGlJ֓9 ri2H_|&4ANt++'q%ٸI+7^#w:y^҄Lcc|w^f<~+(<!uUx Wz@ض[<v⧜ G牷1ƬA:6#b24w&}€Qf., 0Ӓ@3>We 0<{ `ANe]=M@^A/riȬǷƀe:.@<tJ.<Qi0va$E%~ǷǷ+qKeLx(KGE6{:0 ^Nr J_3K%2aka?./5!⨄ZYa@49 ,چyxN(4yTExlu3^ . t1e]aŕ*Klʹc#mqBBC\.DVYWLx=`jM&G4%608iY@h%֙^;1^'R:XOӑ:/BRY)@3ZKN\:4 \*Gx<AY| sY;z?qanY-3kX@ĻRO_o;t\ʔʄd=F:c8zatBHp 1 `G^3agp[縦~Oĝ! 1d',>3O&=H8aw4 1`'#Q< b“ǧអPSK1)0̒(n¤#n!܍%)7I#ykMry1oRʥj!giFfHmEM\-Q8*RU1 ƵF ě!~Z6 c_nnښ#75 Lr3: GBeޝ&@` ?#|Pܖ6a9Q^:BL0P>GWGH̐+L-iry!{Nr.aShz-pj L;k'Yǃ6|1n7Ww#x`)/!_])o\~BQ^*B!\oI!K,tYu?"kD!P|Ta\RﲾEA^&B! siKD!P|T>a3ㄽ!,i}DBŇ7<eXayAa8cB!AFX -QdJSBaw6N}6 0 /!T[?+H^}K_ž22n &aV^B!$8ZjVJꭣz۱DX1/ !B!B!B!B!B!B!B!B 1d=A> !B=-l(?Pfm.,W{PVGaR^rB!vQi.uap>I\,vPo%c/y8'lpy^B dVV~^X߇>H$ĭe7 [-l?޲?%G{⏩68+IVKO `YuWal@'6ŇPJg\c|< BT.<;̾Ҿe'jU6HnGa> %,XN)Ǒ߯~VHK܉N7+7ڗ[\ڿ/{qc{$@Cz;˙9ž2, =x%xPzHRym_uCe]5u^68f_N P.@œk?> 2;?ؗ.L힨>J};/;!$DhWپfw,,힨>wyhx>x}gR@XJ sY6{\p&}Ǘ>$w #!"[g_I/}& M@ 3nWX)(p\Lb_.wsLoOU/;!$@}>\KϰL NU>ϤB!7B7 ^ ڤM9! o{e%'03;ycN;{7م7g>|gQ|Hd:Y.rUa4;eW?=܃c!$P]g)_^lz !gapְt'yY !FV Jbaq|!يQ !B?sk{dIENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_pyramid.svg000066400000000000000000000342211411346603000231620ustar00rootroot00000000000000 image/svg+xml 2 (0,1,0) 3 (1,1,0) rear 4 0 bottom 1 left 2 right 3 front 1 (1,0,0) 0 (0,0,0) 4 (0,0,1) dune-geometry-2.8.0/doc/appl/refelements/gg_pyramid_edges.png000066400000000000000000000705531411346603000243260ustar00rootroot00000000000000PNG  IHDR0dΙ cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATxx[y6Ap=E-Y{KDDD`pݵo;Q EZ81Q-F4W_gmܩJ |ډB+D#17qS v"" 07c """byM.a f6ZVyu=: vӰof,nNM=Ƨ( G_w ;ǰof,nN-(DO'RS_??İRwy7;Ԁ1Q~OԋR/xljէ}l?ǻZsqoHk"Rv""?rՖ*̻cu; |ZB;9_R32LW 6J"""f QR/) ""` 0 )|Vj|/DDDD`fH}| (IEKH8""" .fq(L_OJODDD`)![W8DDDf>a'""@0R?R5v""" EyR?9z09DDD RfHpQeTԗ8DDD&]/QGj""" &SLf""" [T b""" %=?jQfww9DDDfg)L>뇥V"""O1=3)#M l~Q$E#"" O I|tR[na#""0 0Dc+Rǧ&p9db VXb7ߐoLV""_ஊLlO؆]-gWXBLpn1-iGim*CTKRS~-~VKmLDDZ&p屘n7=&^|gVaVTyp;T D_DkT3Ǥ_I76հkۍuǑϮDkCdṩǰ'[RΣk6\3w vDA|V~vԀTƧ(8ۄq0t %[ooGdU%R/n )-0G9]V77{YAzWQ=V-I 'au5VJ5`1{s@o5W[| CiRK46dBs\a~K_"""q 0J¬ tWl:{[q? {ӋnxɑNlNƞShšZRL6 25 _s/""" 0ro>DG& 1)b oz5ɍx"$N M0a> 3R_"""1 0 GEukOep?,Mlþs0ih4sL!rOf5ɗ%}i xmEHLBe<8t bOUSl%""be, ^ᵌf &g;j65.ފF8eÞ4H~{23^랁ngb`S 䀯O DDD 0#,7׌ڄYpTx޻%hzbF`v+ؗ{Mh R !rCR} 5`[ﵧN藦{NOQC289'ܨb1."xm̀Å V,j)bdw ~眂3恙Ќ} ߤ*`/(0WU&񅘓Qh+&!&FBL]߳1~hĔHY蟃% Pޅ$bѮ)N6RŠڝ4jݛu [SϠ7)H{x~`nȒ{u22`vgJqw3'nG}:⣮m n-f!""bY"4Ob`q߮$o NNvwe4lLchF> VDD~? 61(Ѐ@R-7nd({>x0][ Qmpx_ KDDs]L^˧^w ȴ}8o9џp[3.xi_o,شXG~P.}_%"" $Ͼ;] ڝ䟱X_ʸljwIb!2Ab 2ˡ{*jT9#=@_z7mw^KS4*b6nK= t:"R 1G-U[Jp_"" 0JZt-l-㍷zIލ%2#rE27#d~Ƈ/_""b 㽥"~>pw#N' { OIDE|L6yXaQY2&""p 0v#_QU`nǻĜE%f(?$bMhIDBt5le~nF&< -g7SWzyb&'f$⺽ O{d:ӑ{ vm.4M5.R:eMDD 0`ثh/s v'{b&3xCW1(@RTTh?ȥv/1d聵*k'97L -OFKCu,MO52wg%"" 0JB4 t7;f3hyb+D `0wd\qQK%""b c00j+{/(O ȋl@eL8H[a'TUp""b ͨCׅUp8aڝ4Ԙ~o䋨F; 1eW\R ȥZ L0%1"Z.^ t+XOH"؝Q2Oa ݮ E_SM\CT'u DDF n2_JJ.fu:,& Skp0$Nanaǭ*'ߑK,&7/Gٍp]\ua ,Ml s6 MDzm\w;r3L%& ʷ7fx Ié#9:T̀np"2R-U\iiRzgBDD 0`0WF1ʐI%ĤňΌ6I, >O#%Ȭ< vL %my4 h*АIb~y h] {)<k;r6DDF cvNFi/l 7ቜh䘂hsAܚ"s qᗈ`+( 3qq\EkoQ!fКFoï[Eu>";rD.U * "" 0JlJJv@/v'f$Kڽ S,kB v:Z-U \2l%""08j`_|wp3nM=tj1 & RDD3B1oCc[S^F-\\ YC'nBpwp :p $DUj Vooʥ"x1LcVtWl:UwbBpwp JbME's=r$ᗈ`&Fܴ&t.j` u7v'AQ؝QmQ5W*Mpo|ᗈ`YBN1ZvB/Nv_ មҾch`zhڵEdKDD 0co! ֚@r 0n( zbl}*: SLX=/_.U@DD 0c.uA)ϭh)aϬy I 6ƚbπcA.jT"KDD 0c,6 w.`CŝPNn^\2IDTd-^?5`/1>تaXy Hq ٝtOBLFQؽUblO=dx1V 2۽;XNDD 0 0w#e~1vj.C`Ù$訷OM%\cT 10 QՌk;|n!!F4oܣqȂfpaǣZDR59/ mڂYpJa!FQG.In6FG4:͈H\vߩ-2l%"bagx>2 rw҈us]ځ|ybg| juEDs+jWiC_Nz3R{ qOY4☂8E )udX+f ~q\=0C {bn(-ҁi؟m&:3in3KrRMR,""b~%Z:67:d$>)u8{6 0z`D[_KDDq^? db&V9)Q©`0y Ԗ 2DD 0 0C,3[9x0N-OᬋXXTyb\Œj`10(Q5(VՍ eZ?3NnA#r)""b ӁpmaNm&6VܣhBn̆_.U@DFIwMgvAvlo=1wL5~҅F{D@˨-2jջ&c LY 3<Ą*caIB;eEW9pfXLQpjKJ `&( j~n0ܹEhqġǝ~=Oɥ27/* "b 17ߝswrlؕ^]'`F3y*&U.""b 3ns IcJ5nI¾cFÝ>TA KDFa17sނ݇:{L&L\FEDzFab&69Ҟ7^w>DDBf\b3nTެK{-8 QV87̹)'fGY; [SϠr {R\v^9*PGr"" 0jn=Ww;u~w'M_ܣh먷"&nm4 6^\"" k? 踴uAgUAFtKɀdQ 9D9l@6 0o|!{b&„<}3JQ9ǂ(N]5RܪO DD 0A"eAnR7rwҤQ ȥmPiC+ fCrk CD^AqIf̣hsjކߨNxРdf DD 0`2[M@cڝ3,&{N'Ziy~K˫9XDD 0)}y44`ϩ wMr#䜀Є[3Lpj\RA DD 0`avb}nPTӘWʁTX=Q+yL S?7IewiE8"JGIT-W~~& $N0CqwR@ʴؽ SB-d"M:4}4d_"baT>7PCv'(ԑK;* ;90cK $ sf#<'hn kSp(|׆zk.ta.\ R6+` 10L fxaOL[Ў9Y*kbٓY{ϢNWbqpKUӯ.uA``Fʼkh>U+i0İ'&E:3s00@ L.G-V- 7>5'1i5sT" 0K+$K6'!g+h-D>6,!1؛uKϣaD3 Qxnz[Fjl鿒:$b 2hdb$-l\쉡!2-vʸiQ@w 2'\"R3N'=8D 0 0V/"n9X2a1b%+,{b&8"3NW,D 2R/"D#4"@_6 3kKFcsY2+') @B߅N b`< m7z3#bgqkxqw(7\Xk7B7V-O`N!XFj(c3f7\{\W^610Lx;Cs$xwu!nn) PRG`J9:0{bՁ,> H0GXQlN gbG1:hvFKy\zB)7fҞXyOށ+3ldt{DF\$$9$HcOLX{}7z3,'*WW3nIoF#K@dm;fE ݭ5@B[W[:9o=w'%_$dXȴy3j]ԂCQzG<ogyRR|"3>\x{w3=^FZZ4;VxOG'cvjbDz"#jm k0b< TJP͆_" 1Ӛ]ͦA'Ww7n{i~e, WV` -6'&]5VYk̎13d_B# lҕx{_" ` ӤX~ 7e[onDA1x|"i4آ 8ӽ'Z=iUd3遳̓̀^ ,j ; imiؗ{N9 }2p"I2WqOaO ~{kC%@T ^`10Lh+ Dtgaq6P}2rN##ն$]eؖz]nZdҟK>.U@3!*ye*םgO MBٔZo͑w%{HdT ̸BWLj kPdO M'rzR#|2RjTM3nR]@m˧O2#NI0sNbV\ $IV–).U@3N8W)!&XhGYHylJ$|G.Hs``R´&_Zw* 0ep.N@[{=سa6,L5KCc$.;2A0P_8LIW  2D 0t,6V%Q Þ wMJ#=c= pi]/H~`.̿3jnEcp쉡~ бI76~`:tw jA$ Po7G5ݮ|xV ȥv ݎĩ-,W* R CAB(ެrёnR["Ś"bQB4_,`CbҰ! 5l\u n)+ D 0tK.8;m6S6?'ΠcYRw_M$R&TuK 0 0tC)hZ ` -4;f_B56Oė>:Jz9PC#I/A{VEqwpEoo]G3F}=,5 K 0 0aN c2WrDx`쉡 d; dz4tK@ L3nZ b;\A\漅Y񅨱Š=G* !V10Kh:G=4w'QP e]=)Qg3ם6Ã˥RuR(ba WK'+7ہuU;BHZeèjhwpy*X_o-``GJAZίV Xq\p0(51ִJ<&<sd7>(xl%0U-:Z=1V&5wZRӠ釠c?|K\d!fIla N`U}h=@PSG.9YQaCˑزW K LJwMgA\ 8s Ig]|նH3`ĽriUp_ba Irt],^BLq=@ #Ue0~G j)i0$<-ƀ Ԓ7"xjVN 1쉡043h #v{)JT/``O"m^9ԑKga{QTYpMEn(ΐ D 0 0A%2kconk 1C w'QS 2ʰ?h[ȗ&K rZ*@x2&Ug^O_:7n=w d[onDA1xˣ ǿ[EEA9${@ 4s Rn@~iH}"cfWc!ezb~\mg/* ;Dä)DelSǔ1P8l_JE;&fJukBwnn'BԘ~4Mv͖4w/E?%kz~( >i|?,KWF\ys#\=I=DlmR+hߩVCӾ r+R_%;[`ԮOzzepfQN[W(ߝx|P.M~)u;H>z_AЯ-Ro34Օ><4lkm`7`yR3~( ྌ5y"8 sbvEY$~;//%_8P 0mpבLv.,e W0 WnkYx 'SQ6|e=$XL% 0*pgw[Bc[z3rNcG\E{6 >.j+~?ȰfB u~c Izi< ˁQ.;$Wtzi؟s/ "dTchhu. 2o^ˁb/Cw)MJh 779z6ߖv-xx< hqL[Ƨk 3]}΄h#5bL>7LJm};!&=1%77|@5nL6PiмKj~CdM4-?ƅpk+0ܻ f${%ХA:LM4ZG;' n0sXJ9@at׷0Yb|sl^^s uoWnFmt=0DẢ?&k zc~){鄯O 0 0t|s0C̰I?]_<= IY&B"QV7L f) A Fɟ Ȫ_{iGtybhl̋~+^&>oUGHr-04b3{25tVo7 zopyW^یgKChMje?B|5tn{@`!n MizՋ'BVF-5hh;P wɛ4r;"+um3IXݔVyDM)p$ȼ 9P 0 0v%u| mV#Z9(\;ƇZ`mJ彁5ٳ`%mmQ`O&%.FЯ=QDDoAB'y sbΣb %0@M:|kG.10+2  kE;.sPbJ~>)PNlG8-Y@ 0 0a%iz#ZӸ/ :9(!=1D#9҉Y؟ju4;"6I)+Vp k=7bc/QQ}2[ӯzLMн K f L8qުָz0 \.I9783889Oj>pj'o(YU$Kڰ(`Z"k1^u%K9A2 {bj?뒷O߃o]?rI>A޷`@1P(I] W9)/ .Fwf Xv' L<rt! Ofs5<<-Γ Ug;r*x ʫT hGjLJ`@4 -C7m7 }ܝDt'7ɼaD=piR[6q.IcR_K"-1a䙟քKi^IJKN߸}=Q;((-IlyG8420k4''suGAoEQw3""y")u?!Bq00V$P;fwiIYSŞk`{F)=n4٧BwA Б/(74$u~%a%F!#g0ZMЋ a[`ZF#E}pg9܃ݛZ9EPeDۄlK' ۪:{ Yl ~/z̿3Z*ĤHr^Tԑ 0 eA=_a*:eip.-ƻѮ(R;ϋW`1Cc ,7/J]͟U[mvJ?;f 'hrUď*; }(L62[Cc*(tm%OlTOtb8tS;eO)VCa,o'5ƿw3#miY5Vw(8įy|1YيUЋ3w7'fR ;q"86ʤ)"sgyf"8fo@s1#>*ԑ?wTWu' ުyiyj ̟3PxK֌tϺ]Iu2sg IDATBk;i,Iٱ5b:碾F{JۃN-Ksh үxguQg+?$E&S|^ ;O |i 9#/30Gf yC> ȧOG\`Xf\YԈS#SD7U~{\M*>MR/ ;O4&=0 0:]pam[ J<6'J7Xe;@Cڝp4g8(tW%c_q̍=\ h+U1yo ~\0{=`9h:y@r 06a2+mȍ΅'&Z6 鬨̉ИȋޜS؞vZ # 2,>1-dZ K TtuQ1Ox {b&PkK6l?"јR e]Yo߈V"@'ACri_m{SCŤ "9[Wp98xi cŌ&[ D}-E4aG/i@ѸQKl(6~ 6ۥ Ԃ/I}}yjRˇC#if/l,/#_: oud3s;iB2 lL#r9H4a ^6LS YFT| .C.Ss<*urzY=M 9GL,_y.Uo 6+Jx9p{ajJ"s@3^k[4& 4RP }:[[#ŀG2Vexq}}[НGoܒ݆: ^vGE s  _*!hI /{ 'Hq)E#w'NV<^&+pwQp(vwVR>a+Wo1<C6K_Fh!=1DLXA w&.ž{m,w!Q`w.W܉ז?Uspg 1! r| ъ;M}D۸fHgyj1Y[`(*2 g S /(!Eg;5+yxQ:Fu?4zԪc: Vxi9[OӴ]/H0N" j^x[Dn='PZ.|aHqyI$^@FLC,ԾF=L_gb[](},")sVQ!8G^ .'^2H%÷E-;O)u|=6,5}X>VP@0\كz{H# !jщb{u|1se^h±~CT!t6ZztrD_&vqK ĩV6Mvޥလ5ꈡ·?÷Em1Hy5 W5>ƖxCp_0D4tj҃~ꯀM1|9l8ݯmFk<(?d B EjD:"RwV) rD<=AxbAѳHM%@&!dn ,Mv7dvޙywo}W(^|Wp`/!#a&0?e<&xΛeKּb?5HRL",D@TԟD{ϘFM:U߰~Cz!ĕ%a&f.)1| O(:{2w]hr=~)MVxoszz-ێD -xڜ@"d5T_xgRQڙ*^tp6鞎ʈ/ Ůqd@S\amyt5!_5Gx`~#kkz|uC }ΜcQsv8MR̓21bjP?dG?[9ztUQ{raqk j?M~m0={FSa]TEݭsM Բ `@4Bg ^\S{XSRmBUgBل1pMW.$,J9篾F8/$ʼn`+M1 (?jԥGv nH(zl?;shFa0+Bu}r5fLfL@'U!ژ~")ӗ7F+B Evl9IjQ6WEoz:yIڊp D Rj1_,2ISP"ž<|a2@fDvuL((mh..m[VT$)gϣ욌КDU"!ք83=&,EUÄ.aRVg4Qx&(JqEK0]o.v'ϣ욤*RpL ix@h, h1e 7Z֮fvQL xI^t]#s&j^:ź BZlZn=rkҰف։s\& .vmTvW׶vl!`I2@8kX02lƸ꘺#M0\358'$0R`ߛ-cJ\em}#rZ;Wp\ qkJ!K* p'~p`:B1!zH[}9?Sjsiu8s*:VτT>018"}=z'7FKi+]JNB^Q\FBh"%}Lcskצ*46^5-čbWQ!cB05ð+V'G0u]uyXJ75"c(z8)%~E)3:Wq{OtU3ꆐ+nDr]Qg0`s0 oJQu@mS n/T:a/MkQN LS 扙+Y(ɈkȰ;Pe`?nQzZT)v_GRxS9HW2b!!cR |APǾ!T:C1N"@ң;w b}EemՃݱǶcW>n=*;NJ%Zfw˘u,0&\lqkCI#ID 3o4A0A gVa`  k2Ɩ?XJO&#+m|wW%^^}#h_Pab@]&BA?iö~X)-0B0iL.:zx^-AxB,J,JujP|ak x '`[nDTUGec]ԁQa`y$UH^,D ;.KVX .@J|R n[9/Y*'kMql҄ C\:tFt7GDI fltV,TJs+K F R!Y J*ӧ!r 㧴qt(>kR{\:iւqƀxG)`Henwx 8~иucQ(V#-:|a=Ϫұ/$_8;<~e$zC%f(bH}(jS@&=~)~u`ch3i#BeBSJ-{Fi#KKҺ҅a^x!"b'8]p{$w͡?⯕&?jE7-0ތL3[[$ Z\-lEPXJZIo?㯷g= !p6,jعxR)DlPOt-0ތ6ׁBS>M(Bdw ˚e/7E:w[b(9`-Z x!5'_ eu1kmkawq9{0XIPa6: y*RZ)!Yf4 E !5#+t?Ԙ1lY!׍:eWx3~~trgJPicp:43hE q@&* <ʥ'9ҾcVGe[]\"s7i@"cbkb R+T:td=J|O%b؝Dj8J/PڢNWtc}TO IB"IO 0 RbK.@:":P\"te0kuci"FN!΋g2YAC\H`,־lht~tHtK7>$ [İ;8F)?X!.0.ȢSw_ 5L/O_r֠qHr%h/Z|`2!zfMBmeʆv##hE!ڎ dR  .u>%ḠmL$_]MkdDv):v'+7"2,~Y F{GEKљE7Tl[:At`!E 2ijk1߂ G(`;KҺ9;*˰ 隁(FJYRGd೻Rvl8 !@|߆AfNx%~|?Yy"u6,DWfB~lWhgEB+J7\yt>xxABt}zF ;.KVw/ >` +Oa ; 7ǞI{wdX7NCo,,3%0HO94Rɫa٨۠Bnqcc#Shv\Na  { BcM1&tD} "܏+S Rl¤7%Q$;N;Qsv8{N|_LI"YW@ԃx9 ;m|OGn؝T?2 p\ Ncc,_h*_u!WD 15cU0:|IPwBg- Gd!=BE 9c^ɯp !X$׋A/a{>Jw2F#E$BCERܻ/Z`&sD ĸ4 YQ G+0]CJf?X!!v'Sh0OgK!Ӭ/ 3+h}rrvʵ! kuRXQΙ v]zlD)*Vl-F')L;ny5Jnj.b'A0]RrYC]brxt)'ch4}<%IB*1jwE=&b1oCaazPRMmvKBawRj q?EQ*B.e#--=7R!LpLJa$

OBN,jt 3zL)̫&[KزJ? !„TA8gVrv>&&br#*q?ϼ[U0dF+|X`FQtw WE!AG{5S)*>VW!}=A>{';YF#B/+Ȏ#9m#}z䣈j ;#7G WVX㊅oW޼qx>yC%Q#|<!/b͝4Ms;߫  Cv>{\U%f0AP P|V7حYH k+c!!ijD_R%bR_CpCqz?mJV2LPG'qmt [}~ǀ]" 8[];aqҠQp͓mB OxHs3u~˺,(Xc1YN)z\+ Mn./)߁[1'x31Xy\l4[swMc߂'Vn9-ns/09-2AYKˡJyza6r4zBo_"yL,$w_0"{ tx!^*`qPl͎2%Q34B|O Rt<ʝ"&ܗo Oc/S(^H}ʜIZdf5ä ]` (kaĕ %$, 1.i1?s3:)2^oLϭvC%Kɛ ÏL}aa+mSJ-NU- 끥9>,;:a&χ]Ybē?4jۅs r܄h)qpKx!KPܙG7;>w۴/ăm ō"A~gW%zm2ao1qhi%-.#\J.HhŎ "Բ"ď9u!zQ|~E'(}7Sx ;Ա+!n:Hiܨd2l ä?-l3y¶ u}Œj8_Ĭ$ 䢔#it'q]!]Hzj]x9)Nr Iw n sٴs_/ L jgLEvT+F| YVi=.zԝY-cB7᦬1 z981ʣ0طk. # yK'@q@-=B[_JT0@zW )7k֎NӮu_B.ů}!=<x! 8i0ڦ#E̊M;`,FP쇘 ML|'ċ:505wvU>r~0Lx2F:-Gavzԓ4C{yhA|_ 8KFJHS۾}_kXO?eE56X$o#dCTi4V1h-袢䓣<7:PKg iH&f˕sv'xG+<@'BMl,k>38'k9 L&aO[w&Fu:B3U!3X%϶y/ēb.`ipC;&ư\\ UvG.(,@x8r%~.#Iu5>vaɼ5KQRN BKXx5 6îl>o R +:;񲋮!0 ^-XK8EaaW m!^aqi@:E6™FiXxD؜J.r Poʶ-l I"]X"Ka UX0u^sPCrn6Hun&ص>aF7ARx TX8a { ֮i6sDW-"Qa[?j/t !x)c>XհԱFcax+ۭw=oMB 0Ym3B!0B<Jt#!{6!B!B!B!B!B\W/ BR>a:]~:kt{agkܚPWu 3y !ߣl.^6W3/a6qE7|CHoOao3![Q)W ,n3M؛~`PC/֒B=flr}mٮ|ʨ:]TfB!$ۇږ-T=꫎֤1̈́B QשGۖzYt;W=꫎4zfB Q*%N΅l{-;R㫢(F̈́|Ԩ#"Eۏ?gӹ`(qRT `{xJ Q˄Ǖ)/FQK-5E,ϰM,+a]MwCv^ZbR.$}uەmz̈́Q7-5%3W)#GSfuWؖaGmNfBPYԨJaբ#O9Jj,` +vax5>Lؖw+:TVb>BFٖn?ڶSF6_a~ՙmaQa@f?Z|me*j3$m&E]Q #GI5T5Z&(ωTQgM">]Q #G !B(Z%䄰zC%v-OB!vǪ-85_q){/!B!]P ,IENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_pyramid_edges.svg000066400000000000000000000350651411346603000243400ustar00rootroot00000000000000 image/svg+xml 3 0 7 6 2 (0,1,0) 3 (1,1,0) 1 (1,0,0) 0 (0,0,0) 4 (0,0,1) 2 1 4 5 dune-geometry-2.8.0/doc/appl/refelements/gg_quadrilateral.png000066400000000000000000000140261411346603000243350ustar00rootroot00000000000000PNG  IHDRq cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+mIDATx $Uy;ÀGQ͈čQD2EETPdwE"z)9,A HY`'@&," |7uz^/~~sSzUuVJO0i\V!Bۿ:4jǨkurQE^ܻSOņ.ϯ3QE]_椨v5jIQ/g󨳣Dk .:=ꎨkl"07QGDu]e⨨ ʸJ`&~ȨK '/Ùeo96Fkȇjx~26Y?.̲L;D[_&exImegY&fk4/jQ/Çk㗖:>3,!1 \Q?M)CZrUyyZ˲ 0FHG&sQ>Ƕݚ?, 2=)ڶa«NX[ʸ<ܫ6Q `z,l$FHƽQDuXZD˞%az~Suticc<7v(tph5=!UgϏ2-ߔ됆hOCnL l`i<Ymn6]wzSuQw`ߕ^sfKp!Zexy»if-f>/,l- 2=i04:5B!ͳ}xZAM/M?:5겨۾GGVN`.먛4:8wӣHUWǖݢWћSu mo/ߕ}#ꦨkSG3mɹBz^{ݥ=:OGn{WM`|J˞E~Auiw/a[ E{h]ﺺנq\a[^s^ø-G]wx.mQts9iȶfHOF?Nա&P?ˏ4[iP1M m4-J7jTݟ>7E7-kjWQwZU#Lw^Gm7@6d|T]4?V#f~øk)00ۍ!pO,"Ff >$aEӬqO2j>^{|GZ%al ?'TԫkvM4=y m;>exUȭ>u`۸SӸMs20r'n{/e[~}Nr5_`qn2IZYsgE}&UNWTP9ٶdGQV 3̏Rա`|Tu'rk738j ÃmSXkmeoL])Ly: 9N&4L)'=]kғaU?ڴV 3L>Ěon?v.=eTf$/hn{fۿۆ/Ru+Sf|}TXmM[mA3^L|ϊQ$y.+ÅV#Ym ˞Zy'7̶bg0"Lu`!gEk,øqY !F6.`#۶g/5_L}QuXw*FLӍv]|QQǿI}ck0QMU+eVQD`U1bndF=,z{; zG~y"߻%˨F]gU1.~d%,ZrPI܈?GdF8`fZ6/g[-LJUPwF]i}|.u5ƍ G]fWRw'/׼3U=ֶWgP{Mz:ʌ<ö5@7=7lLi7]P VXsϹ%x]6>@/nݰa OD`,(a8ƕ6tzY=(èw@{]:֋rhj.wujz]m|nz\v!,W>| räp`[ʍV4VzNDD@ܰ0k߿[POs/Ymn7@~ni1w5?/jTqM{D; yGO̵ @` 0  @` 0@` 0 @` 0  @`@` 0 @` 0 0 @` 0  @` 0@` 0 @` 0  @`@` 0 @` 0 0 @` 0  @` 0@` 0 @` 0  C`g^U:긨fi9E)NQGDm. `ʭU~Y¢/8$_ԎQ:%R+㷏:vRE]uE&aj +.hx\f `|)j˨jƻV:4g]m?)9~c24Kp0e \^xI>ae 0{c2\aeiG&0ijZiZ-fo`Pvfڴ _aV먋n??UW|eʴX77<\>`Fvh:5jTu>gU`f0S"@Du 0-g\W7SNCe gJo@` 0@` 0 @` 0  @`@` 0 @` 0 0 @` 0  @` 0@` 0 @` 0  @`@` 0 @` 0 0 @` 0  @` 0@` 0 @` 0  @`@` 0 FʼQ;E-Zj`ԥQGbLWDʶqs;0>_* =#jR_:6tFauV٫h~QQהF[ OUi'EԩQLQF]TxJKWmfϨJX:L7=Nq?eJbQD2|հQn{@xeWoO} Qw|K`V{ .Qa[eͨF-({k`fZk?y;<7@rcwE=Yok`_,zvdAm/-ëXT(KJ$5z0sR#4g0sKm '/0}M0:fø_fq>&h,m ^z]aܣYeOK,OSK`4y؊)m{ha ;|FnB{[s:tB#ºa4#_wcOǿDfU1[rL|/]z=yTf-ÏYM4]4urM4:vsڪB`tF=̧??$!Z]/}@ot{!a^lU 0Ww{VexUɵ]~ E4{ .{wo%j$7QNju 0zD1׭Gm>6C&NsmEi 0zw]am ._ zG]kS0Ddw ͽ!\0wpI㽣>aݣ>Ҥo"xiQY%P3`q'GuMydwi&7Q|GR! Suj3㓝 KOo'ڭTR!Iw UMUM=>Y0#VHU3V8pޫz%,V 3М0܋ FMni^Rwݦ0IjS_|D6T]ݍcA9`Vhg76K}/ڝsPKʗ~ʓ;GzVxy|Rô(%>T-&ۤ / 7:j0Q#Nkkwdԁ:eЋe==_.^EeE4{6u?u&2 adG:S˰> *ygU'`u:3ws7:MoS4Q LaOGyњܱ^жҲZNzGkyFړK_GyMY2|'Σ<< 4L{|o6|'cNGy<^Q6Tu/{K{Wզ<-nѲ}eF%e$Ϳ:絍Q'L_ixH`޵1o- r؏YF\>T族FkGy.*1<+QWnYpJ7"}Y ȝ澤NU_zM!pPJڰ|rPF}- 3c,{6_p+z|jeoᶨXe9IW=6>%j>!Do ZxøIENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_quadrilateral.svg000066400000000000000000000202531411346603000243470ustar00rootroot00000000000000 image/svg+xml 0 (0,0) 1 (1,0) 2 (0,1) 3 (1,1) 1 2 3 0 dune-geometry-2.8.0/doc/appl/refelements/gg_tetrahedron.png000066400000000000000000000722141411346603000240250ustar00rootroot00000000000000PNG  IHDR8A / cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATx\[ Il2`gpM:;iOMڦmڦ}ۦM6MYhbgOvc2`hK{  s"{B~МRۅ͞ ⅨԾ+RKkϥvJ@jIw ?!JmphmڋnBH'Ԟ\u="vԲԇIS?/Oe\_]ԶJmԊvB¤ޕک^Sjml{Kne[[,b}{xbRBx^w6Bw ςݍ\ OC`Wxn̈́]3}V+7[,k|gxb:BKxڱ(_gxbp|x !Ļ= You3<B!Hxew_A-ַ'Qmm&Pkp{y !Ļg{ѭuQZoO7nm&7V+om'6.?b{j:aZjG!KeR-Kj1R+Ӹڤw[O(5`5VL!0ʍAyE؇`tyBQE`":ٞ؇@L0B!B!B!B!B!B!B!B!B!T̓H%91-b0K-WjipNԶQjYBQBn-R"5?ڏB!WpC#=R+k\kdpIͷ&}*ՄBz!>ׯ/b=+Rkh&lmzqpʼnP!^ik.l+: -y"x{! (:MBlpV-! +lqVM!އƃHe:Bӕa! Og1ex{!Ymeٗ=B,mbo!Px:HmBeHBznl =dY{)لBz.~pN0]jJ-:Lprx[!OGŸUj;%[KGQx!w1!6%ѹ\M3Bz/]jB7r8k -fP$ nBz>]yb8&y_jY _3iRI@ 86!PxBfKlTLIrN)>v,2֢N?$;Q1BRtq[,؍!>_$;}!mq46W\+"ZYV~XO%/Kv?OYpx !o[wpfQpK3˥wx[ !`P mp%<`«҄^$y^;+O)UM>JZ(> BH}\ )EvqZI-xw@b=poZa,9LcBd4ndLiɪZ+Y>MY&vJK.BH1@^ʠhw "A-N #G1Ku=\x_#ĭ؏hXDt4ȧBU/"m+D؝s{Ho~ d JV?1Iо)(o5!x1"4`ޔd7o{=0WXd C-L! |Q|~&!4R|~5יM!_oLB| Ȑ_8)!x]?q<;v8Od;jL8p݊ad3Ed]ÄBU, % gؠ=.W B}.{]۸1(yBqtysk33鿻+>"! UՖq}C5(afa]dJ!fČG@T*.qԣ˱]W|! 5$ߴ ̅%4bIgR|!:Z "G}A;tXq؃5B(#aQh;]cАGdۍB(<`Tu6rnFL͘!Px1a?vӺTj _a2C!e+f\cY&o-!2 ^}N aߋggb}v# 2/89xa}?^ B YԇW^@omտ-mϦØ!PxK2e_zU0`w+#! K$߲y QZtB5DEM j`vwec>Bq9|rO7njć|!OJ\c}EȞjvBMDAp+]4{#f)>BqC;[ }+F|.W8BUIz;E:ve̿f!PxD$hL!\.ʰ?+UۍB(<2xdlQh`{H͟k1C!vJK\Pӧ1B˨[:H uG_s1BH4]omؓ~s=-Ňn7B'W|~N&tBMw>uļ= R"k܆n7BJİE]zh#lnF! O$. *Wٱܸc>BiH4?vÊMEɷ! 5 ~s0h;;}ؖ:纛F!kH.ԛVh`ѻ(!Px6~VAEhy͜B"q(;K)S9c>BṂ O^z'C9,"ږF!}\x#o*}*DZ4EŘ!PxN [PHC!a w:t>5l?XF!}\x}GSzGW)"ږC!>,<5Ȁe9/Nǥ@!Pxb#5S "JaO_u3!Px0& ՟%3)B(<}Z\؞ŇB$/Tͱ=B@_ 0ͱ=-Ň1Bxv mDi kB(<}h7KKYB(<}7Ak%)ב=-Ň1B0 7}KY'1gflOg!''v ]ۍBC$- ǙʦN[X/\ו1B`ϠzneK%4'y8!Px!Ry^({8!Px#o{FU1]lI[`̇B#D~PM'7Aᜑ;!>[u‰3zB(< >d;B(<}w (⑱=-Ň1BV41Bv|(> O/DOB(<}hUyA'i)>B( Oohʼnx-N!^ĕD?PqB?̩~tB(<۠\~B1|q J Vd}NḋBE [#l,B8!Pxz .hP7=}^+n O/a-PeIPǁ B.ȄQz}Y0X]*>B(<=hc ^|؆o33xYۍB1T_?)'(eQBh}z K]:h[Ø!ӃI\+ܗSȳB# LS,E|v#Pxz(fBc^*'l9r܌B(<=7@^OnF5 vF@xPyq8sIi c> OOzl:o&pHaga>ӧt۱3C@D'o^~HyWmO!:7Zxa_膱=--!cl {sGtS|!hs x.7s!Ň1BxPMRh0"Cas ~B(<=Ǝ>^Wlz\GFIn?!Ҡ(":-XͧσC |UʭGìŮ^qB(<=9 85;?2r&+΅1B '{bK5psۍBD?Fz~:ylOKۍBrM;L4x~⾎u@jn+"RBȉnS>uMap_MȧBrDAP1św~t.DNy?:'|!/g[\l(":eJ_حED!/JEPC0\=MۍBbDE9M7tdNCy7mB(<^B!^ [^^5)B!^\`GnT4,QD=?/DT45wQRKBvD6!>JnŇB(< NyY?c{4WCt7nx`ڀ( 1F!C:yꄉ@փA,9aE^=)Jc>B(<S'j kӔw~d?LR߽#z*P|N`ϡڷNy஗7stB!݌h0{ ‘%6֣Ιn7B(Px  TEK4x| *;_#ϝ1B(<Ωvo3ah{3Ctb_]{ a_OO! t4Ѡ<{Ft!W ^ZTǬ`E=pJB(<+L(^}5;ށB!]h0{w^Bvl\? XA7R!+R)܏Iv q/nXoO\B٩ZBeT O؜Y9o!a0 z |J򱻼 PY( ۡ}Hms۩B(I=JK B(!qGP]^ vk/')|s̅Q!2(nPxH]),zGuDNQٮa Ͳ Z~v#C"Ѡ48DyUGW(6^cD;sG`JB!ބH48C{0[(+z@Hc. d> sͨ=|3.ZeCtq2[ 2]yƱ=[M>8U5.#h~{ xf2CtrKOyGc!v?=6[.oxC0.FHt꾂.Ȅ2~R(tcBu9hxrmtXR4 *BhB?j]]fGJL& F,Յ)x坧‘_"4m=T0]ȧ ,AcG yOQ]hIHoLh8eam7B(<_ Y;79kg+ GЄ ߄Ų?B(<I\əhNEUE1^{~>a%`GC 2ۍ $DEWᅤQjsuGe.c!IXI%=?Ħ-wHOlcW8ۍ 0W*vf4p${͹vċ ~3 p2}Y '-饊2CtrE%,ɇ#~ŏ]zoma<;c>Px ˽l=*F#Z5dlogXt~)!C|O4ޫ˛*j_ƾ#m̕#V̽?B(<ă%TWh0J٩^q.bYo7fSg_Z!CB!$O:ʽDylϫn9vCۉ3N>'`\SaG>1B(<5 | Ků[ v@;-#,UyϬ8cŇ N4-dgC5~}M? SMV9T*Ro2cC!|Dip$mƦ]~܁>ɢiݧZ0=8`G]ZX=ToS*.>]܏Iv q/nXCE+Bi IDAT\a^H k؂M} FipXO`j6[G@)4t݁pث(m]|LP+2:E K?~|TّRx3C%BBqN9ذWZRį&B/ס"REPAI\)T'ݬho|lbl{pJo;$@t6$:5>Cݔsaګe`OH4(? ˉH f04`pP^O݀,4O؜k7 X+FIyjPBy10T F6π40{'T'Vh ?HXc{dfNyky֦"!A%ØAB$çraD5뭁~͑F <+ 1x-/IK^/Y=P[&˯ i<~  O7/` ?_ri[G @S9D|ʲ1VDw@>`ps|?>lUɰTDz!>ʪ~jްߥ>ֈ|>&0pgP}{E9oEDk3ߔ^А_~>6_֐1SC(<}qPSU-P W[1i qꄇ[͹#ZJ^7{Aݑa876U+^n뎊c>K.6)rt_vQx"aRV)P;BO8rolc? :YۍPxzshUkh>,I;EڂJa11itMcKh@?m|ˮYoܪ BegsqXr\Q@c,Oݜ0ñwXƱ:tv@m⎵u~f Oo:&5O z4< * TKV9ʗq6s~%\0 _wG3􅯍u>fXC/)_G'±r_t8"Y2$J"0v6B.ǧgbU!h<0-oHҏc`7ַ+> I|LX-?Px /+6IJ}8r(B$2c8$h ,#8·+2M@!5hAQ|<րȑ[PƏ=|e@ 0"TL.uf9HsHP(F>->jsCz}'MΪ?hTT,U|<T`Iz?< ̾xUt:^ܗXfNr骒(ާ)c>C1EW|';O!ӋN_^+l/41|;½`LyCq'>i C!Gel 4 Y#y\$v͇rt4u1G w2B2A+$˳'fCǏU#Xu4f:Wc> 9 5 m>q@F | I CɃ;ZKEEC,*Z8?_%Rgx>'uVuc>厂CcD}r9*;OGLS' @hNu3`~.)sj~db&$FkF(<=mQ(4Q Hn5QΈ9;: tSuHv^"mAaAW`鏆$A:" 9BMԍI F |Vu&f:šv^Ʊ[M&7SPƌ OO:{$` [#!rZ #n/׉( N!vs =.k|X;'\ \ 85ix!wm)|Ytػ.UvT/ ?GX>Br|`RAQT` -A.77h$`ib]W-GAp N?Az;: S#8z<nňTi(4*A( AJen|ճOQb-GVݗ>sGt1j/B{Ilk߈0יh Z; چW3dAʅxҳq?xmoTI +n! ዜD:!]r||kapCEPk N7\v5ACڔkぺc>mg]ߒDfhvZ@:TSt<&:۾ ڿK(*X2 ;.` kW#"³φ >rr嬶f⓰NQ0FR8u7r֗KVحם1t2 Su;ݸQ7n_ӎAp 4P7i7u8c:>Yo?*',tb;p%W9c L$I|kXql J&}ɫEBBGU=ڨ|y!CrhӠR4As`2oOP)F|D߁Iİ.#ft/wL#BWGIIt뀉D*D'sݰ?`Y^[*ɻ":7of+Y76ҏ mz/D^sgD%|l >E@qXJb` ,6?#O,11cZ~?yot x_kh@p t뿾]xbxj&oNX&ZO50`)+*]3Cht{QX8`QWSB|<$:;l9|"YƩD1oISۏƜ7J2.8yIT`Q5hbxXgoت`H* #NH‥h4tqRK㨃δ62D,:3w*3!:H.hcԒU*ozDoذg0&SmTgS<CX1*Ƭ? ŝ [~`sC-G>. |7/"3G8{MSCħ+ctqPT Ès+bpqU 5->Hk'*<L$"lX]31~QrLwp 8]7"0<ݨ$*%Z d |!Iڪ~a Pi]>|a. [~].b>҅tj~rڴkb͋"ZCS]P?M/_s~}YrzPmCk":3Ym*Bt`Yw>>cs'W烇Qq̯ SS 0X vSv]I;bS! :mX'w?,,Jhx+k@N؎0$jaT)PPp3ѵ^wkM=Z#]GNIt$&%ot: XL_+n>:Eg򇮊vīxZaXAsvM.n{qM01 C{}dD"h(+/Y: ȂOPLE%GT 3Be-Rl&l!u5v# %$en1ңnBVhB5"dVG`uDB*q~:gmλc~ƛ[ Qc) Ṍ7$2Ou!` B ~b,- LX bA7 eKL &wYYl{u(QЄJ”~#4% Fs`.u@|\|!6ȖoA?TǜW5ʞ:jU-QoCy$YOvLGvѹMB0dXֹk4QX kTx*ˣ{x H΁1;iQ{h$6$ȥu"dxS1bpfOL #|!cΕr<] c>I]yςi`dy1_{vG05)od 'jkEG:YaE@EW]@DLºC0([l`HÛGn=T ; `Y՘, ߰}P*a<;]N4bc7DEGE]8]AX2#i牓 O#2|Ơf+5EXBX/BJa_ cDX:f#-opa(?+ۃM)&|pz7]%SO\*[2 +Q-F?c| ?[CySQ`aQ) VEEP7~7ѭ?Nzz&1aȢ3ŲU~p$E$b>#*S&lrO]Cps.[a=k 'áVMB Ð$ |>1o5cpQ!>noW| Zz_(uJBrpӂh#,+=):G䘎"ѹeD2~k5v?4RbȽn̢3̒_ITj GvţۍPx:M9_^e!h'@t -wtN RHt1i{؜z3>89u)b?AބOh/|7ϙF(<% wT)7-/b:O/t0hY6UʳKP۲Fu/dž ;z'@Y> ^q(>!DPWL90J_2UsSzwd HP8wMVX:[-ָ~G. FoG x*dEu䄄)_PNʓ,>L&oMA#lJag 6q 5$f4bӢ(hK 5E'W߸^~d(Ez DD]ƟG3[os:WOo>#@fE$C᧵T-*U|쒵] sXha X^PxáTA]juLqm OO=7Eg?k"A[ `4n/S$Fbй*|u [I@t 0 BZj:0P_DktƼ1'a3v',CܤoDߋziY,.،YW.mS{-TIt~k喎i_K"o惡}L~_?/Vo?9k5Hກ~ vK0,Ecb1Ch!:a_ sj]gCc]m'`bhˣarʲf؎4c.lO֝BX,8YMȉ3୵*8Hb NO ގP +qە: |Z_$|XۍFtçy7 YDT$I/Cͨ+hА|ʲHq"X;#,4cpG2O7 ¡)*o+xjfwoO&8·울!}ڲ5!4<,3aḢ"v?+6.a!ԍ;ktkch֜t~X KaŖ󇢳E#!H p`b9kNgA_"zEḃsqh DR<,FC n㰳JtdBE;l\ݺ!x|ctdYr<~V2wsO+ۃ(`#{6=EnVjM#a/3^x猃BӰ4M̖ H)`W KTuӭY<eH_fk7[܃ư~P>܂*?ƉkA5R`)/aߘJ%qhR~ XQqGʣ0\5-bt稟1,dYR CK; Tk|gd(F":9$b. ϻ]k '-#1~XGZM7bp 4Ms=2W`$zgJ gQDŽX بCEIa6!³<:[APy% ;05VsBK9yLs ᣭ@Ç|H;>δWɨ{ke=A$Lj1?9d(6#YrBbEnBpWY3-cfwNC|ߕ㐶!"&[QWWiA&zؖ?CgᝣK{քӈ],/+tVkTQs 6ٳWU$e7_wa}%^K=idςtS9~8c IDAT10n{Xg^xLΘuoTg4.U~ϏiSØ8S̢[os=c2Jf;^ME6M +n>H^nAu?WGuDs:3(ٗ\L=Ab6_~5~so_}N琩֤ qd>zhjbay{̀/pmNE 8@âm6r)i}Pfp8$譨ɸ8Dks=>s)3ݢsa 9:^)U4/@ }xm@vyQMw6GWY}3Tx}F#sŽ2>_g<]-1gp)ƈLjDQl}y}vp8L(Su/},Vl[rQ-Ň;ǪF) {|9բ&v Vɀ 0љ|b7*-M)uZۇj `'&baH{wF+C=ƘOw ̈ǂکWta =Eccb3QA1ZG=2W$3ʢ1L$k%!#Alυ_x/Z9j "mj`p@!)Ӏ#Mt" NT|r,d >Vgm[CӫϮaE84St>_ʲ5w,0NA&o=&faE1jcit[A*&a6qɕ}\8NQ8:=ᶎ[,tɎtpoɃvc,?qp sTX>~od&*GUN{,nѹ3Vt6|nZkcxT PsV!yǧHVBêi*X"h&wNL9 Ť!ۣ+Y?:ج5xkg5kW eGPgR]~A%3z(wO/$9T6 HJzǠ]4B K֊S;{bE8>[f|:ǁ 뭸ezdr} /AOtDL4HЖe7֪X@D pfl/bm^~ vn7Zdrҩ@_o%C] JeVI2So~=lNU\ILχhjM4ش yu.syNB=0 @bp)T #3(_ofeKW.uyMZwc1j'â@@yj.D.iwGO CҲM1O5 V5ʕ"L-as"o7q< %ZdvPxڱt+:˹<@):*|Hf(KB  ,m3N ĤeA ~ЁޙGU}?I&LH `BŽ ;eS *ھťumv~V T(ʎAd {$BHBȞLs&$ݿ39̹:پ0}`"^ xiI1-=;|8`c&>O1Qp?2o 1_# K< R6A83jy KJ2g !-K QaQrN}( R4$3#0IDЅ=N%-W"j02q *źE?ǿg2KsՉ=Tgv<=#:jO_DG]W 2j骯a QA?՗ѺHCt$wf!fw}u5N0'5C ,aQͿ2% ÁAdc[1+ OQԁdE?k"Jbt2='aDdh~v{21B Q. C|X 䲞k|J|@vx岗^@؄WΫL$ZIm0@'o Pϖ</bRCESd,rׄ% GYYМ(`Շq.@rYM;֣LCILGݦ8o OIJQW#~wDpo1ݚ9ah&(j0uG+2#T[{)tvG їjWwq(I@FgN+01C8]<f({!EG?Ɖl2fG81P7 #7ca1mV8hGY nDg;xm-ցQL ;ZoBD7"TΒ[D:u0nwR2fJ%yH#cV0`yTX52h|=Ih3wIGg7cja@yx>2]{0$>4jUߨ̇ ]t{IOa\)ݎ7&aضDᰕQv0z0Q!89)Y`d]Ԋ ?߄K0<(RanN@饐[hy18hL)[(q0CCwW\͸=O-]D0xP3}fDxX4_$x>Z'`r `V"Wf FQ OS?CDD&:$:nnvOFɴkԎpOBC@4\"FG@߆ 3ݓ/q$=نcuEJ/k-z *!gY wŘF`YPDaKn d:$qLގKe/ 6k@gԊ$ak ߌ-r*lbHU8 Sgʠ`C0%9)0vK*fFZƄbaI+oQce(2ԏ6O$i{Ҫl\d6$ еaeS_U8 3sD&:/#1nN,8 3? SQ"W4yjdeS CDd0-_) "0} V%Ck! щ=5.:/2;Itnw2щu-Fy&E-N׆gl 0.Jbvg3N{&@[~ ߨ̇DԆa~W6":4f[{_, @[kLtJQvmHN_r-ߊ mkmx5=8g.GDH-‚4Be>$<7S~sL NrvcxSѱ4tՊ[;D&$d1*F fx;;`!IQU^ߨ̇E:﯅1|)_FaA֙)1^{T5jV)lЄOuYKg8*nA4vY%~C-7I!^~@i78t0%^!}tN48ށ0գvN2*#kz i3PRsJɐj6df湓b P]h>r0E9SβhHgw`#qΈ+|Lѳ[ڒ~3U hE۽Pڍ+,e:< -{agNoǁgLzc^DTj0μ"B8v/Jf YZC*p~Gz yӍؕ]mD|JX$>$<mFp( ަ4=YX#Ce;b$\tãɴp[ AFW1!OهHC ^?]f6,PSq rbNN2wCe>$4`( F9G03Ǧqn̐v SiDSC8jQlBu6M" oKX׌QZ]|Hx!s+yγPdsEx*b!b?n;F [TR؊i1@BixjKYjŞ~XeIi QtzZb Hx0/D({H->ͬjY0J&5vKY^ \2o3$:?ʠZD*ںJt|P(겱 iD' ]"{1)֘Y~[JYDD#$uMC*\/:xN0$LDLѯGBsn)Th[ -Lx,}mIamlxL\ b`$d4,<1Ua6hCPt>(6H8N0< A>DA \Vr>X%DIݯo3K L Ձ 8UXkq_B] 9]*! !:DVm-2n`aK(G|x52@=LyO>]hּ3XDw TK"#NE"b089A8N6cڹ۠-Ṟ5hT %ʒ~2&:1YXIAñj@9.#gJA Bi" 6cdhW fSH@D eFA5>] dA(_xέ&:O<&E[8zWȗ! ǶYҊ{86 IaFwgӵ`N)e>&h4Qf1|0a0KdY9l{;5 ۳vӹ҇!d&2ZvzmlUEccMAAxF(T8Ƒ#͌.}EGc ;F`I&:ϭA.DEG } %!(eFTmo6CX|JT1B PHĠ2ysr-9t/e { /kÄS|LfIDATepl)N@pleAO׈epQS0 21fLð"`RGb)@+9޺F}'/,8EspB eOt_TnB_D50{?o*d˿.1?)|a%5ѹmkxŕRTg|H B1#lNeko+qh< Flŭ[ 94.`!]b1TQ#mrJ"+pr&M`&UVIh F2A FGFDylDfu ĈKh|"X5Ҫ|%Qq;!c{IFAr%~Ԅ\s}cT0Lqd2ƌacw|nc`OLutMt.7DE]X kÌjd]rL)x0#kBP8, ;HsLq#o:!cQJ"yFDWkϡyDU`[~-ɗ\4镎,Jc nt0yO;r.d;lt`6L+W\Ȅqq\Hi 9["2Ϫ?NP\6 ݪmYPJjQR;s8=nOx^{y=D'X4ӌ۷*4R(&6h Q(9rov^lSJtxJLLt"/0"6m`>ԝw<5禰u+U{oG\1: kVM|l&U[䲊 l1el V^-C[e R~7δ2{ajZ>g/^%yyn5LK±, dFDv8.þr\AT%6&:RS7L&p?ԹcQ]ηlyxu+C$ˏ>,4DDZl."щlOH'[rVޮG|kg)؎dV\ۇ JǾ[0cMnH~SKڱ~P0}1Z]lMfv ?cQ|D7i;g6Uu {zA<Y|RB2 ɃA!?L2 "Vٽ@ R{14aW1x/xg" -|5(Bqpj4skyE","J 7Z/IJjǤ]2k;y1}]txzWPa.E4Y8te1JeQљ8EL'(*ԏ0j&x,vȂチ<'(ÌWfȺٚp3*YKŎp3-kHP":? 0ŕbTL,L+| Y 5C0J`JP7D\b :G5&_!FS0c*&FEw b0 peI\Ti-gۓb((1Ih""h<uux+/xȅ-=U )'@i`cH5D>Ùi멍Kl`nafo#vvV\E]ď~`":b\<«BO ~=Y:Y&>k> 6Lu/>?`xN"%<=Uu-s]1&;o!,d\4P EM,v?5ᢓo;9AL1*Ie*|q {G.yf>޿fgSS;P ՠs] G̞.fϹ/0{a?Y2=] u#Xo9G}pmᙃߦqd9JXke HۂDT'>{X4Rfe9< +pj Bћ = 9'(Jc2ȖzM2QyZ4a7~>C$k$>[XSk0[줃^qј4#5z':')(FD% svktF޿?_ldK P mhIio9*z%x#GbMoHxo:=!["{yEVD9@_bQ$>&<,b^]py#p/HQ#¶`: ;F ;_?72D ^%<,{T4؛ψ̦:+]t"cmiGu9뷉iXH-K@ADdq%`>eQ0*>HwGo{ > :l1/8ek%{gxJwY͞~Fp }rc?AmCmds+v#H"; gЛ>D5) dcJxaS;vf:-aWo&b⯌O~g3wa4M9NH.u֏+yY.V:k4"80Sێ /gL!:y'sOlJ&fU6trmCwGw~`Xxo}MDgd~k?~3F image/svg+xml 2 (0,1,0) 0 bottom 2 left 3 right 1 front 1 (1,0,0) 0 (0,0,0) 3 (0,0,1) dune-geometry-2.8.0/doc/appl/refelements/gg_tetrahedron_edges.png000066400000000000000000000540721411346603000251760ustar00rootroot00000000000000PNG  IHDR#Q cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+ IDATx|ǙF`hDIToVn_;INq..w%seEVduY%{(DQER,~WB g{_!^?mWD|SDω~PCr>t.#gB =qS^ou EXJoe4]/ym"qM!ދ,q/85Y.O][6wnC[A_EFD8B_X2fqG*b">սo_cuB kTY~ի|qa?>g(!q bOGB!^,>^~U~Џu |RV7!x_.]?>g(1XɗM!/FhB(Mu} ,W֍_翊XcB_X܏}w彞*b%M!/>^qM5*beV}$""bS9J]&.?aX`QD{ !x)ݽD<*Iƅ]au?Q&WpǗXGZkLAyn1ֱ !dCH~L@D ?(M{_~j%uAOfg[E^g:S,buB!B!B!B!B!B!B!B!B!Bc(ø+p4&S#iMDȀkrEJ!&Y"xLDBp Ku/+]fpg_rEx}BqE?"2Ex."Oć"("l23gBq^Kn ku̪'rnPV!UOiWY0\SB!&W([*"2xG|V!nw9(3! g5T*"iJB >cB4a}rXEBIDtI P* ! o"Dumgg y-ꈈR;ҩz]ŠѓntЋ=hLӐBfa;X柂]?-"Ӓg=*%k|57y"˒ӒYĝRB< sd3|R?-1W("d VB<- {{b.UK!9Ehlf4'bUiDE!g5'jP *Ř](ЉLKJ[bBƳ0Ζ/;^ l/NiXR,B ag kFhl! M"J?@!̰F9&89ssyp۝C;A? Ba+v_{sRZW}%!-t  kt螂i"/x>nR{x+tzw)-BF3 e]}^nSa0v%  kdqNAr Zq({FHj^.uQO BF؅e#t0zj|IHMH<=!yRoQcU}MX<~(ڻD` !PX#8#6ODvyE_'d;r(y" kdpaжpU_V-0BѬ%/T! kpvX 6?˜YpٿAdZ7iB5r0|d`kZ~Zim !Q&Fņ]'V_2W̓!PX#C SQT?ip;E!3ib  J>!~d+^p0O^_p JQ&E!;/ڀ\d^v_1ڰ yɎWeD!2y0(;n (FF|DiB5!kf!x@Һg!$HAiB5LZ]+~@7씖̴vSZBa /ዷ3 & XZ7<[Z)-BǿF7ƀ.lxCiB5|Lihz9|" kx0EY݌~їnktB,u% kpNh؟y͠/i]ݏ]EI%EB58 Y, |=}Ғ̓!EhSJB(9_!Npnd @-ul$ kș|0OO:d3V!JB({Av E!ְ2ڿàk/{]KsJB(Cv]wD!$tRD2!PXCCĔR q4~Mi%L/Ja#! kHIhT->=bHw2o%bfZBa )cAHֹ}I;( kZ<ЄBa]> ނ'uG0 T i}FiBuѫƶXdOLk=BZl$ khL/!0sݬ@i!º|Rn W z.TH+\,} %B(Abkߔ7QX5!];>w!PXīB`ח|״H' kD,ۂWEeu@QD.l$PX<$jfAY8qÐv抍'1sPU9O+Ba|V8Ξ1,Қ|.e}̴!F7Ub;`tLK66vQZ uYĺa W󠔖"PXdD.݂ WKk< y ޓsIPLBaE63>;3sإׄP4gESNY%WgX?+}e>N@H#tmulݰKZoȴ>!K_@e°v02 q}"cB(,?d aD>OJkN8K!"'eج<{|ޔX{vh4z!V!" S'8Uj;`t8 oy ^%KY \A¾+F3-+Ē*XĊ PXZ4Hh4P(-BE.s SZ{ ZCdZRZX |5)CWWuF^Z{h"{~Aő0hZwvv(?ͬBE.쀡XGvh _DCBEFv\4GFoiVQ%wR!雘91xҺᑭ1LyQ+BaIt&,ނoAJK_V !"";`8;`[+-̴^%?fB(,r!7쀱QۆniMBZ !#t_PZ? *~uBZAiB(,r! KN`.;9 BZ 6B(,r6mJ"PXL1 ];0zgZ!P4%O!nyEb߉MRZ7|"J(w'XQ k#;`يºYn 1ڰo (XHAQ<+Baw>ey̳f>'"!bYa k<3i0̛Ҋ*MJBagp`t8OZ`ii%PZBMQsll_#& 2>OYn_gofWP9R_'B3LB(0YY!Pupt/#)-6Krz"# 6 z#n#ۣSN呕"N]nkm^{>W 6k[l$PXcsX 1{?ssu[p]礕,;c& kL3ס}'-1k&U{NZEd0"PXc9F에W3fgYg~NZ` !$8 /K>\JiX0kX:FiB(N?-'2砱jrߠrŷ|YއPZKnN_偰5Fu>4,2u3oq ѵ#.4Z_\Z5lfTKwxMD#p Ob_qm8 I2"j>V+6Z0wJV>!'l+T; K>Z~),xl$M1&ZC.Ppԙa-@ؼOPLI8=~Sro;4:1ME BUK2Δŏ}JQu,epKk+ x; >ϬSuNZ<%YلPXI۴]v#dsҺmltL x;FfٕcF7j0L x; {sԄZ9cfg + xu6i5NuNA2MdZN+JV ";`OaƆ11Fo1yZ]2""̴۟qvwjј?)?|S;V:!F$! Է>[p&NDmxB(,⍤ 4?nc Nim%7 7Ϩ*jK(oo #(20zJkcn|B(,mڭ85gL倫-?}P4O1""ކsv~L97%43xBaobZuc~_6?̴(J @E g(Һ񱗜҂7< ;``ɍbn_U")JI@E=KW0Nk ¦b@Q PX0u" C,\;;`tcac#8ZHKOx"Bao@vk:qNiL+0\dZ(J'!W>i+i Ғ׳~ x:3 GnWӗ]1E<3?8n:`̴6=WS<'#;`ce׎;im|5EKi#J^ AE< Ctbױnߝ֏^EpLKYPXēI\ f)p\J֟BZw3""LԜ\g]6c"25ÝiQZPXc0:p`Ҹ=&'c8w혞#RZPXәN,AJ+y!AE$Ļui&wtIpą z8oEʂ}+DE<ʃHXyhȃ=jbYʃ-aҢ=HKHK6]wD42?KoV(` l_N|w5FV}WyPp"ҒMs;x?!cNX-zf-?p͆`wcU鷼. ,R탊LM "#`/1rJ!{~YH-> oF@a{9"l8)"x{9LǑ-ZTje\}}e1=e6$B7L}>KmMQٱ C8 Z9ƟDMҪa베2XzP-Fs9Y.q>,BHX#\7M]u47~>: IDAT/r@.ì y@zKkJ*r`Mt#\k]4 7 q81.ҹY=9̸e v4*oeÅ1!cHX0 ^>|t!0r8a0y⫗$J)-BΫ>kS40O/n[y@Ԗnvu8s5@N~w%˩F3/0eӓD~Y<!’<;ܞ3S0G6 27`B ml97n9E<鷾C{[%vϝtvVCU'l9 č'vk?*Bu%UQ,!Gh/Ӣ;tҮhlH}c9ʂ'aV {=&E_}+P9_QYvk'ă38C3uq+Բ:=eQ{; ̇{_ AHx5,_-=U==(vӖb@r|&8\-"ܙzSI_"j[W8c z2>h(Ca̚p7(VBn-Žc٬< @n [ƺx#d\ydU/db\u6htF(J(IA!!#Cg*c`UX/(A!!#A?%0@r,gME(,BFF <l  f*<cA)-Yi &zs8U0!u)Q2PX 'r cQ6 ^Z~!J˶WD" cL;ϋ L8#W8ZXB\X4V%|"*P!*Y*^M cV PU<Ea׉AP BNmQj Qk)GlN7G&0[gJiODӅ%Eaž(6]#9h m-F`D“ $&*oȨ:a:E&fj<92r< J("<Earz*7ODoB߀&LPs+"2;`l@@X:ۍNY9WGkȼG||Mц"JҺG']|khۑؒZKl畷'*zðx 6<"&Gf(YPX I;P/")]ye 8ƣ? z"!CM>r6Π̴A畩v+cqHjmuK('J)qhwp(c`9if[am_os*`"rug(:׽TQrt^rAYW{X[q{jI؍״ns h_wEm<EPOhMDiud^ E0wg_(-Ba2'/S9տ,f_P7@-?}^dZjo}-vF{serD ;6Qr *"f/˖T[.^xQiՉvQr'  R|+ɡM}~|.ZltE˃B(,BDZW=2K /2ܒAaq KQw i _'E<("r N9f/v0˒/5$WV6K` ¦G_u7>-JA!!WMsv`jDX|!2["3-E(,B7qp,fxrܨԓw\mP}Pi5kQ _HMQ1qa& ǡgnBaQX(RFD8B}T tXQVimU6XMR6 >*_֔%( Ak$b (,-gbTpGh z40ana*i:KCѿFx /#Ӛ4?r(> (,Kf*?|DS % Ǫ:P5SjƦ)jqk^f?̈́!)KN!EܲR*?^cqfkVXp/2,jBp[ r8lJE{*E54RZiWdLZ%a(,̬>N*Wu&=Daa~eJHRk2UY"8-j )Q,2-)xA!5>i9ʏULLH`QWnlEdN&FZK5uICѰpL)kZ¢%š({!MTC3Y~r$s<Gg'uc|ZtLlV7׷!24UntQWBaQXGVo=w#.Yi?f=]懨=h7Y*fjjZ"׷>u*GVA}Ubi<(¢Ƽ!:UCc͘P=%s'ORefmi0wO4'j0UZORfFAC "#:[VXͧWdmr-ʔ/tmOBqڻІSKXǃBa1zJtBV'e5aĈ9qhK-PXK*F} G” 4Ԃ(nDŽ4OZ>b>R&1uAminՠ&&UJyeAei ;B(u!E*1zh %;B10DM>li *Ɗ)ZmR ̈́_Eܔ*uh \#JA!Áeۛ$9ֱHVů_S'on%*_`շ+tHIk/dE^}okůI\QŽ,3,j8CtaohhLԨ0Vϻ!iuv*1e;bvJ(, nBZiJS *UV%4:YNi Y)ůPSQV {e'J&يβi#ZTsP=+SkM=sp(yl$XY}VfVVV=1!E6GeKM )]SeAZ8FTd/IfZ"%HS0$`юyci_: 4 FPI#{;<([(-BaϒUK"%aӱ9cq75ШaH A!41 -iCTjW`*r i,JE|fD6׶L_6_oQ?*^=|MK}ȸ=gT_2Cd0~ELVqt&_妺~+ΗALy/E4n?vs&p-82\2 ;mTVtGWk]+{@!3B(,ryJ?8Φd/x)/R*Ab|e5 v; Q}Xy%.cCەZZOH+e%o nCs2N,y 0Yfv;KHl^lTT2˕Ji]X=.uw@?Y"$鷬m3'Rj/9t_RuιmG>|9I.}Fɰཌt'?F7ιIuXs 6^)" |5αݙU?OK\#:UeMk 2?\}6htzQOg$~! E..—~;:(vw\xBZ 2aGbn;ItT\gz}+C3;kwCSS8ni5g"Xt_U 5#F>!N (p3GѮ #fwndm>ȾVwqLԄk:T~A),BG^)`.21/Qݏ͘1=˻n qcXTnm3^É/nf[1. 5kZBZ EaUGP*Y8^HS4sHAdCZ be|˲\>2lr6u t;e`%I?zZnsE@m꾺t'A[^0-C3Յ*l(n@hg7)%6XVj±"4!tV9_šb@{JQ3N^sZG\UlA?ER'V)Sa R JR5wԉĩ8,o9J9 ˶W[ N! 88 ESCqFD7 ȑhWõ*LuUyP5!>+KNzKIC9v2# ߞ6ctz=_kKw֡+Dɗ3b5Pmm3KY=1ď{&/*ZðfWGrg =TSlh--](K;U5(jL]ܣ=L3q"+%GQ3̊x&7jkg(Z̙^=&wVfZo]롪KE<a1Ӳ7<"]QyG hm(`+]tV*aEV7weZgDδ8%5f3+j bFxs:jWVCq bTC[#'غ%@aQX̬(uΞҀEY56dCbzrMqŬ} fdFMk pK.Q"ob xjђ[jbա?,;=YQ̸M]8L+r̘>>}߈}QF^ F_G{#WUƚf k(~tVS`o3~][S[YK ^cU,E ռyOatTѠV+F"d˷D,{21~Z JQTztmTztoJ'p aP4l>O~-#C:;&BXۿ.JE`MSXP|lA%0W &DĺՋCMkBScnOq2\[m9e5- jxp1.ƝAPd `8˔W9Xjc8mV=F|DIBZwRZ5Ӳ7ZD6\2Um[f형ӛ w֗Lsd-QMfEk Bo.u~|1*;98rLFWDIceo mJYM*v CFf̳?莙(Ҕ7wߣsȀhnzeGTo˳们] {Ֆ RVQß 9َEPm!|wwjMzPhM2KŷwEFCVUM)+29UIkShlP?I0yIDATdǪؙwk~/kRP,Co]}ϧPd.iWZyx㰧IY%;oa7f\So*_~q5H[)PXc̰%JKzU48"\F"ArM-2ۡ)G>՞~Kث&Ci8c{PxVomo[7&* ۝Z SVY]ɽfeA!Qޘ#NOi%8țjPV\ Yk4]ՑjxxvOR.k KDƮ !d5"n#&Gƚ+ŊMаQV ҄ʜ5bi%EaMaIYUV]AY20lq=֒5(6 Aq6"[ޛTV5vuNV H VˣԙZZ;s V+:ZQ}5^δ% ˫YXXGx~d)[ G #LRj])A(XEC9=OiQX^',}Vd3`#d董G;}Qh+ȻV.0M#[_92BEayzʊ׬^䤑꤂pGƖd[vj:1y#6idDR##Qpbȴn%(,R,[XD,t#dddv:jjY/St*#Fdba-A+UNOkZ˪[PQRfV!c` jBM2 fJiɉ acPX&nCEg0!K:,1swK[_gn5JSĄ{7ȄDJ(ޟ(,իQ^<^]D,>SOsuqL8Ԕ7ٞh6!"bx4?\H(*Eay5?2"3131s7RyfXCӰv״c |7ES"XeVRVBV (+B<?D59~ޖsRY2A0;CZD>:bt&(U˷|9"USմHkVJW]0b󇥙0XH+2!_.ҺKlFLVfҕ,(+B >1u&k\v"4j?,0 1g}d ̴ֳ(UyUel$d `Bp[:h.μA)/`rͭCA툟3Ki= J^GV݀uBV[":ZֶҀΜ\!܁iBZW@GiQX(5*eEXEN˒sykGCv}؉\]<ҢNVkV"n19e7ʬ5/X -SF,am/ i=Di3)+BW&V[ #9땦hFB;I#s%]WED*FSX4g;XBcwDb@G9kkZdsJ+pt=(J^Ei%x_5ZRJ^M X{ZCtPeHiM{GgN="""_D0!r̿.α$\%~`Fx Rב Ue) ˇa`e85ȴf3wET.Dսr+]~4=f m?~.gd0ofu:"֋]G=՝YmZqsc3fEJnm4giS!%#o V:$JV &etwV7qݲNk].{SVx@kP]^" !H bەi!2v@1.aSD|1 5dFYZ'}@4n!)yos699KN+En e]M%a397( GCӏAu]1N" 8:5puJx{//(N~"ރW]&̗my,Jw&SϮZuk%ʊ2ق~:PM<|fTZE!::{7AZ_5̔>v Vo$2H (3+ Hd7XC:9|ͩUrY.)INiMsKK6 & aZ= W_#"BE,t/E|4r$;X$7 !Gdc}.k5mJuEȶa.!S8sLH]JKu1V5Tez,~ڏ+QoԲ[b0$,?Ư !ēHq><~?}W?8veGI6ojX=6C%_Z7g2٧^eV|:ODDz'!3Fα$뵿֜iLV^[,t7hus0E4 iߤFFW{-pshwEjoD:fm}V/ ˯οŶڮ_v|1 ~!!-4Fa]HokKC!U;bϦ`a~ !DcG P^> n`z Vz~8u|kyÐ`ij싞d3 !ěIoXh·h>Fnyl+|#ī%ߦ\LpGO3~aM읫JS< !ގ5'&w\;DquҺ/LFH :y=;4>>zQ6qObBGŨs5+2T ivt2-M&$eF]XWʣD.PLX1音޿#ѷT]6m֋xwR?p ޼ϗ{lWؗ3$Lw.UTg%JH$$ń`X&<-(P!ؗN:mZBQB `)iZ ygfs;7={~{wwseo*WUsaTm*%XꦏI R,M-gi'T1z}_(-åL>(=Q;HmO>Qm9izwU6u1fO0.ԸgrpI2kv:2yT5E@q %\׹iEOմe(]Cǚ_))Ko;O]F/g8$mN瑔ZF4f} ڱNMUVuSy-Jd|O; NJrm;-EW$^n7]FmcoW4,NY':R0-M(v*nQ’Bi|l (9 s+ot|ώ:T_v,㹮p3X&ix/V)3E QAhinj}Sߺ:w =M^ҟKoT Kv\{Go;p x5JnFd. o.+p6T%KlANh]eO];&]Mb[hߵ(ALFӕfv/+NvK)q!/5"m^PY \\,m?=(߿A Q Y]Y7l~۞"'%OaҲjzۺ<C)E'X0s8JVht6%B5~(T'42]ވur!G{[mRhU΂ MGO =?4 _/dԮ/lDXh͑k{s6Ei㔼7p&oʱ~ (Smeq Gѯcr[wŽ0 @Q}3T 0{> fckBƄj1IQO4 t{$'Y 9"KY^橗[V"ڠqDYHq~IR7!#atKMٷoۀ"3V]-O|Ip{@_ :/ס2?9+hA:AkP|x.:)Ec\,@y_rKBvx8/}DJεER 9:d{?8yY^@[X--9Rs ;QNS@5Bn&A+ י~>ג!]HWH4 9N٠ 1B%u>lZYg$6:EG8s6X+gm!] wuu ;~*$,a'YuL"57Ra|Aa!-B6.b\x\u_w sօfUQ7u,#:`sօfU樻u tВH4~ǝ.6:|e@='I.ņБ7XsGnN ͪZF]8r$/BCB`蘡7XutYա](e@ëX =@ARGe⻷4ޮԵ=[G[$X|@F! hƘrݐΣɹ7BR$ut@`x]Ҩ,fD,V|l|uC樻 LﷅDC(y얟<A:Okz,O:odlu[@i~Mz!@`ru<[ GG>n.dG)­e~~J IENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_tetrahedron_edges.svg000066400000000000000000000277471411346603000252220ustar00rootroot00000000000000 image/svg+xml 2 1 5 2 (0,1,0) 1 (1,0,0) 0 (0,0,0) 3 (0,0,1) 0 4 3 dune-geometry-2.8.0/doc/appl/refelements/gg_triangle.png000066400000000000000000000145201411346603000233070ustar00rootroot00000000000000PNG  IHDRq cHRMz&u0`:pQ<gAMA|QsRGBbKGD pHYs+IDATx $Uy,₀T4 WB"W`4% EDcA%@ !r.Pb!!)Pp |vOz==g߯={{>ң-2͝m`,{>]FU˽.:9_W`āqhǣEu`AQD}:QD]8AqgԊs!DmsnhnQuY:0NGD[m8n;G]bΫ-o -!XZo_?>X~aDukC0>hV#ڮ޶lO`]0£5| " Uw׻} `|ce^?~\Xz^P?t'0ΊuԾ^6̨#^U/ˏ˯mmԯ:خE[oc tOQQ:){w6$UԨGub}ԏLN|Acyo:vϻ0inY6nn۰ކ˭S0Y0NM ωzFsSug<nukwR5Q%̋xVQN Yjn&70X?ujj|gG=3zOv?ƣM+ayyқN6Z?LG=~-wY"jTuU0q`g ?&Q;D=oP063+SuIcR5)CZ%D0Lf`\67hbo`m :yXall 0J~ރhzҀe7; iɀe+4茨3/_cWnrF< !4iο~WE`~G^QQ/ˮ=6F=~~o>YQMG].z|#,6N F^Xkn-4i"B&4i"A= BC 0(bL S)@`Ъ!4݇1 @`PĘ 0h@hCØ 0(bLji @`PASV{ 1 Z)@`PD 0h@hCØ 0(bLji @` 4AaL1 0`4aL1 Z)@`PĘ 0hAcUhEtOV-   0>4i"4Aa 4AaL1Z4 ( S 0A`@=BC ({ ji  4@`@aL1Z4  00{  00BC (bL S 01 *4tO"@`@Bt4@`@c 0UKCh c 01 Ъ!4@`@qhELZ)PĘ h@`@S 0UKChHlj04 qpOnQK_뮩6NJA`-w9^nJ+ӂtx<[0#ݸ3jYeQ:*ꈨnt$0l8y>R?a#0`~Fn=߭_h#0`c sS mvW 3yKxI\â.Oi 0`SD}9U {j˨vzm\LُilT vIầr"W<;Qؙ t4rX\=RF+FN̯WhuOmըm oEQzF+wO-M05:,irySgD4񕨥ng1t%:,`rBc2;-~ =tZ 0',\Fe`4  007a=c UKCh 0=l{ S 1 *4tO!0"p]czX ӀyN*4i 0"4@@`Bt4@sO!0F4@ UhB`Ei 0V{ 1Z)PDh @h 0CØ(bLji  4@aL1Z4( S @=@`BC({ ji  4@aL1Z4 0{  00G`BC(bL S 1 *4tO!0"@@`Bt4@c UKCh 0 c1 Ъ!4@qhEL.0Z)PĘh@SUKCh !0 c1 Ъ!4݇1 PS@h ф1 P@h@cUhEi V{J`=%0Z40!0ZBC` }hEi V- !0CC(bjt*4tO "4@=%0ZBC` }hEi V- !0>4i "BC`&4i "@=%0BC(bLC` S)Ъ!4݇1 PĘh@h Cci R|LC`miÄ<ØS ل<14@1@A貥1!0И1 0 8!0FҘBC`MhL= C:vc !=2Cc$46M;^6QD-ZEXJ+mFƞiaz[;Ee :0ި}Pi-4FX\9XXu 12UQF]_?%갨@?O}Kci<^9HD.u g<rEK $jm]FneTI;FLM`~:8pA:T sIYxOzTMsU+U?1{hMg<Opꝣ~Z?u}lTϮ4¹ۡ@;O ϖdΎZaw1v ,rTTuM\ F}$d:sޗNII'O./z9jTfۛTM[+1w9TҨE}خB`_LUj>{P7]Q7G`Iz`0 /ję fuܙ΍#=27˽+yf6^دy*<5¿E」d?ԿEV_Կo/mK|.9kD]ώbATUM?'!tM3vh>aq^]o=&\9!i!Ao~^~>hF: Դ{q v74`^<9}噕MՐ0-S#mi?]/_26ci8b4{|uC[=| 6S/OsųXzy~t׳!%v `3LYEy I~㷯iFo%LVHϖg2:z )`-%1Y4Lqh2x}&î}ڬzy~\<ཧ׏˗5^ɰxAc&L<]U/OsΊuԾ>pmн^_xڴۮuQ0VՏ;hiWuTgNJ|h@E=5ǩ9.9~p:zidաr0r/>yϽ8ܫsI^AgK^ֽ4Di/ ~Ngq2..| U<_`}'m]?YQFq/i^&ꛩm7)6 |H\#`cy<KoP,{RԿ?P>ũltxO坻w[֭ۢv,h`|嫮>g8QrMvw(h# S"yjIENDB`dune-geometry-2.8.0/doc/appl/refelements/gg_triangle.svg000066400000000000000000000147521411346603000233310ustar00rootroot00000000000000 image/svg+xml 0 (0,0) 1 (1,0) 2 (0,1) 1 0 2 dune-geometry-2.8.0/doc/appl/refelements/referenceelementspage.txt000066400000000000000000000275121411346603000254150ustar00rootroot00000000000000/** \page GeometryGenericGeometry Generic Geometries @ingroup GeometryReferenceElements \section GeometryGeometryIntroduction Introduction In the following we will give a definition of reference elements and subelement numbering. This is used to define geometries by prescribing a set of points in the space \f$ \mathbf{R}^w \f$. The basic building block for these elements is given by a recursion formula which assigns to each set \f$ E \subset \mathbf{R}^d \f$ either a prism element \f$ E^\vert\subset \mathbf{R}^{d+1} \f$ or a pyramid element \f$ E^\circ\subset \mathbf{R}^{d+1} \f$ with \f$ E^\vert = \lbrace (x,\bar{x}) \mid x \in E, \bar{x} \in [0,1] \rbrace \f$ and \f$ E^\circ = \lbrace ((1-\bar{x})x,\bar{x}) \mid x \in E, \bar{x} \in [0,1] \rbrace \f$. The recursion starts with a single point \f$ P_0=0\in\mathbf{R}^0 \f$. For \f$ d=1,2,3 \f$ this leads to the following elements - \f$ d=1 \f$: \f$ L_1 = P_0^\vert = P_0^\circ = [0,1] \f$ is a line. - \f$ d=2 \f$: \f$ Q_2 = L_1^\vert \f$ is a cube and \f$ S_2 = L_1^\circ \f$ is a simplex. - \f$ d=3 \f$: \f$ Q_3 = Q_2^\vert \f$ is a cube, \f$ S_3 = S_2^\circ \f$ is a simplex, \f$ \mathrm{pyramid}_3 = Q_2^\circ \f$ is a pyramid, and \f$ \mathrm{prism}_3 = S_2^\vert \f$ is a prism. . In general if \f$ Q_d \f$ is a cube then \f$ Q_d^\vert \f$ is also a cube and if \f$ S_d \f$ is a simplex then \f$ S_d^\circ \f$ is also a simplex. Based on the recursion formula we can also define a numbering of the subentities and also of the sub-subentities of \f$ E^\vert \f$ or \f$ E^\circ \f$ based on a numbering of \f$ E \f$. For the subentities of codimension \f$ c \f$ we use the numbering - \f$ E^\vert \f$: the first numbers are assigned to the entities parallel to the \f$ x_d-\f$axis in the same order as the subentites of the same codimension in \f$ E \f$; then to the subentities of codimension \f$ c-1 \f$ in the bottom followed by those in the top. - \f$ E^\circ \f$: in this case we first number the subentities of codimension \f$ c-1 \f$ in the bottom, followed by each subentity based on a subentity of codimension \f$ c \f$ in \f$ E \f$. . For the subentity of codimension \f$ cc \f$ in a codimension \f$ c \f$ subentity \f$ E' \f$ we use the numbering induced by the numbering the reference element corresponding to \f$ E' \f$. Here is a graphical representation of the reference elements: -# One-dimensional reference element. For d=1 the simplex and cube are identical \image html gg_line.png -# Two-dimensional reference simplex (a.k.a. triangle) \image html gg_triangle.png -# Three-dimensional reference simplex (a.k.a. tetrahedron)
\image html gg_tetrahedron.png "Face Numbering" \image html gg_tetrahedron_edges.png "Edge Numbering"
-# Two-dimensional reference cube (a.k.a. quadrilateral) \image html gg_quadrilateral.png -# Three-dimensional reference cube (a.k.a. hexahedron)
\image html gg_hexahedron.png "Face Numbering" \image html gg_hexahedron_edges.png "Edge Numbering"
-# Prism reference element
\image html gg_prism.png "Face Numbering" \image html gg_prism_edges.png "Edge Numbering"
-# Pyramid reference element
\image html gg_pyramid.png "Face Numbering" \image html gg_pyramid_edges.png "Edge Numbering"
In addition to the numbering and the corner coordinates of a reference element \f$ \hat{E} \f$ we also define the barycenters \f$ b(\hat{E}) \f$, the volume \f$ |\hat{E}| \f$ and the normals \f$ n_i(\hat{E}) \f$ to all codimension one subelements. The recursion formula is also used to define mappings from reference elements \f$ E \f$ to general polytop given by a set of coordinates for the corner points - together with the mapping \f$ \Phi \f$, the transpose of the Jacobian \f$ D\Phi^T(x)\in\mathbf{R}^{d,w} \f$ is also defined where \f$ d \f$ is the dimension of the reference element and \f$ w \f$ the dimension of the coordinates. This suffices to define other necessary parts of a Dune geometry by LQ-decomposing \f$ D\Phi^T \f$: let \f$ D\Phi^T(x) = LQ \f$ be given with a lower diagonal matrix \f$ L\in \mathbf{R}^{d,d} \f$ and a matrix \f$ Q\in\mathbf{R}^{d,w} \f$ which satisfies \f$ Q Q^T = I \f$: - Jacobian inverse transpose \f[ D\Phi(x)^{-T}:=Q^T L^{-1}. \f] - Integration element \f[ \sqrt{\mathrm{det}(D\Phi(x)^T D\Phi(x))} = \sqrt{\mathrm{det}(LL^T)} = \Pi_{i=1}^d l_{ii}. \f] - Volume \f[ \int_{\hat{E}} \Pi_{i=1}^d l_{ii}(x) d\;x = |\hat{E}| \Pi_{i=1}^d l_{ii}(b(\hat{E})). \f] (Here some assumptions on the degree of the integration element is used.) . The next sections describe the details of the construction. \section GeometryGeometryTopology Reference Topology We define the set \f$\mathcal{T}\f$ of reference topologies by the following rules: - \f$\mathcal{T}\f$ contains an element \f$\mathbf{p}\f$ that we call the point topology. - For \f$T \in \mathcal{T}\f$, \f$\mathcal{T}\f$ contains an element \f$T^\vert\f$ that we call the prism over \f$T\f$. - For \f$T \in \mathcal{T}\f$, \f$\mathcal{T}\f$ contains an element \f$T^\circ\f$ that we call the pyramid over \f$T\f$. . For each reference topology \f$T\f$ we define the following values: - \b Dimension: The point topology has dimension zero and the dimension of a prism or a pyramid topology over \f$t\f$ has dimension \f$d(t)+1\f$. - \b Size: For \f$c=0,\dots,d\f$ with \f$d=d(T)\f$ we define the number \f$s_c(T)\f$ through - \f$s_0(T)=1\f$. - If \f$T=t^\vert\f$ then \f$s_d(T)=2s_{d-1}(t)\f$ and for \f$c\in \{1,\dots,d-1\}\f$ we have \f$s_c(T)=s_{c}(t)+2s_{c-1}(t)\f$. - If \f$T=t^\circ\f$ then \f$s_d(T)=s_{d-1}(t)+1\f$ and for \f$c\in \{1,\dots,d-1\}\f$ we have \f$s_c(T)=s_{c-1}(t)+s_{c}(t)\f$. . - \b Subtopology: Given a reference topology \f$T\f$ of dimension \f$d\f$ and a codimension \f$c=0,\dots,d\f$ we now define the subtopology \f$S_{c,i}(T)\in\mathcal{T}\f$ for \f$i=1,\dots,s_c(T)\f$: - \f$S_{0,1}(T)=T\f$ and \f$S_{d,i}(T)=\mathbf{p}\f$ - For \f$T=t^\vert\f$ and \f$c\in \{1,\dots,d-1\}\f$ we define using the abbreviations \f$p=s_{c}(t),q=s_{c-1}(t)\f$ \f[S_{c,i}(T) = \left\{\begin{array}{ll} S_{c,i}(t)^\vert & \mbox{for}\; i=1,\dots,p, \\ S_{c-1,i-p}(t) & \mbox{for}\; i=p+1,\dots,p+q, \\ S_{c-1,i-p-q}(t) & \mbox{for}\; i=p+q+1,\dots,p+2q. \end{array}\right. \f] - For \f$T=t^\circ\f$ and \f$c\in \{1,\dots,d-1\}\f$ we define using the abbreviations \f$p=s_{c}(t),q=s_{c-1}(t)\f$ \f[S_{c,i}(T) = \left\{\begin{array}{ll} S_{c-1,i}(t) & \mbox{for}\; i=1,\dots,q, \\ S_{c,i-q}(t)^\circ & \mbox{for}\; i=q+1,\dots,q+p. \end{array}\right. \f] . Notice that the number of vertices (i.e., subtopologies of codimension\f$d(T)\f$) of a topology \f$T\f$ does not uniquely identify the topology. To see this, consider the topologies \f$T_1 = \mathbf{p}^{\vert\vert\vert\circ\circ}\f$ and \f$T_2 = \mathbf{p}^{\circ\circ\circ\circ\vert}\f$. For these topologies we have \f$s_d( T_1 ) = s_d( T_2 ) = 10\f$. \section GeometryGeometryElement Reference Domains For each reference topology \f$T\f$ we assosiate the set of corners \f$\mathcal{C}(T):=(p_i(T))_{1=1}^{s_d(T)}\subset\mathbf{R}^d(T)\f$ defined through - \f$T=\mathbf{p}\f$: \f$p_0(T)=0\in\mathbf{R}^0\f$ - \f$T=t^\vert\f$: \f$p_k(T)=(p_k(t),0),p_{d'+k}(T)=(p_k(t),1)\f$ for \f$k=1,\dots,d'\f$, with \f$d'=s_d(t)\f$. - \f$T=t^\circ\f$: \f$p_k(T)=(p_k(t),0)\f$ for \f$k=1,\dots,d-1\f$ and \f$p_d(T)=e_d\f$ with \f$d=s_d(T)\f$ . The convex hall of the set of points \f$\mathcal{C}(T)\f$ defines the reference domain \f$\mathrm{domain}(T)\f$ for the reference topology \f$T\f$; it follows that - \f$\mathrm{domain}( \mathbf{p} ) := \lbrace 0 \rbrace \subset \mathbf{R}^0\f$, - \f$\mathrm{domain}( T^\vert ) := \mathrm{domain}( T ) \times [0,1]\f$, - \f$\mathrm{domain}( T^\circ ) := \lbrace ((1-\bar{x})x,\bar{x}) \mid x \in \mathrm{domain}( T ), \bar{x} \in [0,1] \rbrace\f$. . \section GeometryGeometryMappings Reference Elements and Mappings A pair \f$E=(T,\Phi)\f$ of a topology \f$T\f$ and a map \f$\Phi:\mathrm{domain}( T ) \to \mathbf{R}^w\f$ with \f$w\geq d(T)\f$ is called an element. The reference element is the pair \f$E(T)=(T,{\rm id})\f$. For a given set of points \f$\mathcal{C}:=(p_i)_{1=1}^{s_d(T)}\subset\mathbf{R}^w\f$ we define a mapping \f$\Phi_T(\mathcal{C},\cdot)\mathrm{domain}( T ) \to \mathbf{R}^w\f$ through \f$\Phi_T(\mathcal{C};p_i(T))=p_i\f$ for all \f$p_i(T)\in \mathcal{C}(T)\f$. This mapping can be expressed using the recursive definition of the reference topologies through: - \f$\Phi_{\mathbf{p}}( (p_0) ; x ) = p_0\f$, - \f$\Phi_{T^\vert}( (p_1,\ldots,p_{s_d(T^\vert)} ; (x,\bar{x}) ) = (1 - \bar{x}) \Phi_T( p_1,\ldots,p_{s_d(T)} ; x ) + \bar{x} \Phi_T( p_{s_d(T)+1},\dots,p_{s_d(T^\vert)} ; x )\f$ with \f$x\in \mathrm{domain}( T )\f$ and \f$\bar{x}\in[0,1]\f$. - \f$\Phi_{T^\circ}( p_1,\ldots,p_{s_d(T^\circ)}) ; (x,\bar{x}) ) = (1 - \bar{x}) \Phi_T( p_1,\ldots,p_{s_d(T)-1} ; x ) + \bar{x} p_{s_d(T^\circ)} \f$ with \f$x\in \mathrm{domain}( T )\f$ and \f$\bar{x}\in[0,1]\f$. . \section GeometryGeometryNumbering Numbering of Subelements Given a reference topology \f$T\f$, a codimension \f$c\in\{0,\dots,d(T)\}\f$ and a subtopology \f$S_{c,i}(T)\f$ we define a subset of the corner set \f$\mathcal{C}(T)\f$ \f$ \mathcal{C}_{c,i}(T)= (p_{k_j}(T))_{j=1}^{s_{d(S_{c,i}(T)}(S_{c,i}(T))} \f$ given by the subsequence \f$ \mathcal{K}_{c,i}(T)=(k_j)_{j=1}^{s_{d(S_{c,i}(T)}(S_{c,i}(T))} \f$ of \f$ \{1,dots,s_{d(T)}(T)\} \f$: \f$ \mathcal{C}_{0,0}(T) = \mathcal{C}(T)\f$, \f$ \mathcal{C}_{d(T),i}(T) = (p_i(T)) \f$, and for \f$c\in\{1,\dots,d(T)-1\}\f$ we define \f$ \mathcal{K}_{c,i}(T)=(k_j)_{j=1}^{s_{d(S_{c,i}(T)}(S_{c,i}(T))} \f$ through the recursion - \f$T=t^\vert\f$: \n For \f$ i=1,\dots,s_c(T) \f$ we define \f$ \mathcal{K}_{c,i}(T)=(k_1,\dots,k_n, k_1+s_{d(t)}(t)\dots,k_n+s_{d(t)}(t)) \f$ with \f$ \mathcal{K}_{c,i}(T)= \{k_1,\dots,k_n\} \f$. \n For \f$ i=s_(T)+1,\dots,s_c(T)+s_{c+1}(T) \f$ we define \f$ \mathcal{K}_{c,i}(T)=(k_1,\dots,k_n) \f$ with \f$ \mathcal{K}_{c-1,i}(T)= \{k_1,\dots,k_n\} \f$. \n For \f$ i=s_c(T)+s_{c+1}(T)+1,\dots,s_c(T)+2s_{c+1}(T) \f$ we define \f$ \mathcal{K}_{c,i}(T)=(k_1+s_{d(t)}(t),\dots,k_n+s_{d(t)}(t)) \f$ with \f$ \mathcal{K}_{c-1,i}(T)= \{k_1,\dots,k_n\} \f$. - \f$T=t^\circ\f$: \n For \f$ i=1,\dots,s_{c-1}(T) \f$ we define \f$ \mathcal{K}_{c,i}(T)=(k_1,\dots,k_n) \f$ with \f$ \mathcal{K}_{c-1,i}(T)= \{k_1,\dots,k_n\} \f$. \n For \f$ i=s_{c-1}(T)+1,\dots,s_{c-1}(T)+s_c(T) \f$ we define \f$ \mathcal{K}_{c,i}(T)=(k_1,\dots,k_n,s_{d(T)}(T)) \f$ with \f$ \mathcal{K}_{c-1,i}(T)= \{k_1,\dots,k_n\} \f$. . Given these subsets we define subreference elements \f$E_{c,i}(T)=(S_{c,i}(T),\Phi_{c,i}(T))\f$ of \f$E(T)\f$ given by the following mapping \f$ \Phi_{c,i}(T,\cdot)=\Phi(S_{c,i}(T),\mathcal{C}_{c,i}(T),\cdot) \f$. Furthermore we define a numbering of the subreference elements of each subreference element in \f$T\f$. This is the number \f$ k=\mathrm{index}_{c,i,cc,ii}(T)\f$ for \f$c\in\{0,\dots,d(T)\}\f$, \f$ i\in\{1,\dots,s_c(T)\} \f$, and \f$ cc\in\{0,\dots,d(S_{c,i})\}\f$, \f$ ii\in\{1,\dots,s_{cc}(S_{c,i})\} \f$ for which \f[\Phi_{c,i}(S_{c,i}(T))\circ \Phi_{cc,ii}(S_{cc,ii}(S_{c,i}(T))) = \Phi_{c+cc,k}(T).\f] */ dune-geometry-2.8.0/doc/doxygen/000077500000000000000000000000001411346603000165255ustar00rootroot00000000000000dune-geometry-2.8.0/doc/doxygen/CMakeLists.txt000066400000000000000000000001121411346603000212570ustar00rootroot00000000000000# shortcut for creating the Doxyfile.in and Doxyfile add_doxygen_target() dune-geometry-2.8.0/doc/doxygen/Doxylocal000066400000000000000000000030131411346603000204030ustar00rootroot00000000000000# This file contains local changes to the doxygen configuration # please us '+=' to add file/directories to the lists # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT += @srcdir@/mainpage.txt \ @srcdir@/modules.txt \ @top_srcdir@/dune/geometry \ @top_srcdir@/doc/appl/refelements/referenceelementspage.txt # see e.g. dune-grid for the examples of mainpage and modules # INPUT += @srcdir@/mainpage # @srcdir@/modules # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE += @top_srcdir@/dune/geometry/quadraturerules # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). # EXAMPLE_PATH += @top_srcdir@/src # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH += @top_srcdir@/doc/appl/refelements \ @top_srcdir@/doc/refinement dune-geometry-2.8.0/doc/doxygen/mainpage.txt000066400000000000000000000006401411346603000210470ustar00rootroot00000000000000/** \mainpage dune-geometry Automatic Documentation \section intro Introduction Welcome to the %Dune documentation pages. This documentation has been generated using Doxygen, a free source code documentation system for documenting C/C++ code. \section mods Modules The best way to start is from the page \subpage modules which gives you access to the documentation by category. */ /** \page modules Modules */ dune-geometry-2.8.0/doc/doxygen/modules.txt000066400000000000000000000014261411346603000207410ustar00rootroot00000000000000// -*- mode: c++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=8 sw=8 sts=2: /* This file determines the order how things appear in the doxygen documentation within the Geometry group. It works like this: @defgroup commands appear only in this file here which is parsed before the other files (because it is mentioned first in the Doxyfile). Only @addtogroup is used in the code documentation. */ /** @defgroup Geometry dune-geometry */ /** @defgroup GeometryType Geometry Type * @ingroup Geometry */ /** @defgroup GeometryReferenceElements Reference Elements * @ingroup Geometry */ /** @defgroup GenericGeometry Generic Geometry * @ingroup Geometry */ /** @defgroup Quadrature Quadrature * @ingroup Geometry */ dune-geometry-2.8.0/doc/refinement/000077500000000000000000000000001411346603000172045ustar00rootroot00000000000000dune-geometry-2.8.0/doc/refinement/CMakeLists.txt000066400000000000000000000003601411346603000217430ustar00rootroot00000000000000set(PNG_IMGS simplexvertexindex.png referencetokuhn0.png kuhntriangulation.png) inkscape_generate_png_from_svg( DPI 180 ${PNG_IMGS}) dune_add_latex_document( SOURCE refinement.tex FATHER_TARGET doc INSTALL ${CMAKE_INSTALL_DOCDIR}) dune-geometry-2.8.0/doc/refinement/kuhntriangulation.svg000066400000000000000000000236771411346603000235120ustar00rootroot00000000000000 image/svg+xml dune-geometry-2.8.0/doc/refinement/referencetokuhn0.svg000066400000000000000000000744141411346603000232060ustar00rootroot00000000000000 image/svg+xml $Id: referencetokuhn0.svg 2248 2006-02-10 15:30:52Z joe $ Copyright (C) 2005 Jorrit Fahlke <jorrit@jorrit.de> 2005-03-17 x0 x1 x2 x0 x1 x2 x0 x1 x2 x0 x1 x2 referencetetrahedron step 1 step 2 Kuhn0tetrahedron dune-geometry-2.8.0/doc/refinement/refinement.tex000066400000000000000000000647441411346603000221010ustar00rootroot00000000000000\documentclass[english,a4paper]{article} \usepackage[latin1]{inputenc} \usepackage{babel} \usepackage{listings} \usepackage{float} \usepackage{type1cm} \usepackage{paralist} \usepackage{graphicx} \usepackage{amssymb} \usepackage[hyphens]{url} \floatstyle{boxed} \restylefloat{figure} \setcounter{topnumber}{5} \setcounter{bottomnumber}{5} \setcounter{totalnumber}{10} \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \newfloat{Listing}{tbp}{pro} \lstset{language=C++, columns=fullflexible, basicstyle=\sffamily, commentstyle=\itshape} % This command does two things: % #1 ensure that non-keywords are printed non-bold, even in titles. % #2 fold newlines into spaces before they are given to \lstinline so % I don't need to care where I break my lines in normal text. \newcommand{\code}[1]{\textnormal{\lstinline{#1}}} % don't use the dash in enumerations because it look too much like a % minus \setdefaultitem{\textbullet}{\textbullet}{\textbullet}{\textbullet} \author{J.~Fahlke} \title{Implementing Local and Temporary Refinements in Dune} \date{6th February 2006} % % Structure of the document: % - Introduction (What is Refinement, and what is its purpose) % - Design of the Interface % - Refinement % - Why are the Iterators not dereferenceable % - VirtualRefinement % - buildRefinement() % - Extending Refinement % - Overview of the implementation % - hcube % - simplex (short) % - triangulation % - Implementing Refinement of simplices % - Kuhn triangulation % - Refining simplices % - Terminology % - Kuhn simplex <-> permutation % - Permutation <-> Integer % - Counting vertices % - Numbering vertices % - Counting Elements % - Numbering Elements % - Transformation reference <-> Kuhn simplex % \begin{document} \maketitle \section{Introduction} Refinement is a subsystem of Dune\cite{dune} which allows for local and temporary refinements of arbitrary grid entities without having to modify the grid or the entity itself. This allows to interpolate nonlinear functions into linear pieces. It can also be used to partition entities of one geometry type into subentities of another geometry type, e.\,g.\ quadrilaterals into triangles. This is useful if we want to write a grid and associated data into a file, but the file format can only deal with one geometry type. \section{Design of the Interface} \subsection{Terminology} \begin{description} \item[Entity:] An entity is an arbitrary polytope which is a member of a grid. It may have the same dimension as the grid itself or any lower dimension. \item[Element:] An element is an {\em entity} of the same dimension as the grid it belongs to. \item[Vertex:] A vertex is an {\em entity} of dimension 0 (a point). \item[Codimension:] Let $d_G$ be the dimension of a grid and $d_e$ the dimension of one of its {\em entities}. The codimension $c_e$ of that entity is defined as $c_e:=d_G-d_e$. That means that the codimension of a {\em vertex} equals the dimension of its grid, while the codimension of an {\em element} is alway 0. \item[Subentity:] When we refine an {\em entity}, we can view it as a grid consisting of smaller entities of the same or lower dimension. To distinguish these smaller entities from those who belong to a full-fledged grid, we call then subentities. Subentities also have a codimension: let $d_e$ be the dimension of the refined entity and $d_s$ be the dimension of one of its subentities, than $c_s:=d_e-d_s$ is the codimension of the subentity. \item[Subelement:] A subelement is a {\em subentity} with a codimension of 0. It has the same dimension as the {\em entity} it refines. \item[Subvertex:] A subvertex is a {\em subentity} with a dimension of 0. Its codimension equals the dimension of the {\em entity} it refines. \end{description} The prefix ``sub-'' may be omitted when it is clear that we are talking about subentities instead of entities. \subsection{General Considerations} What data do we need to refine an entity, and what data do we want back? We want the subelements. That means: how many subelements are there, what are their indices within the refined entity, and what are their corners. That leads to the next topic: we want the subvertices. That means: how many subvertices are there, and what are their indices and positions within the refined entity. To get this data, we need the geometry type of the entity we want to refine and the geometry type of the entities we want back. Of course, we need the dimension of the entities as well. We will do the refining on Dunes reference elements, so this is all the information we need about the entity to be refined. Finally, we need to know the refinement level, that is, how fine the subentities should be. There is one addition: each grid in Dune may have its own C++ type for its coordinates. We pass that to Refinement as well, so it can do the calculation with the same precision as the grid itself. \begin{Listing} \begin{lstlisting}{} template class Refinement { public: enum { dimension }; template struct Codim { class SubEntityIterator; }; typedef Codim::SubEntityIterator VertexIterator; typedef Codim<0>::SubEntityIterator ElementIterator; typedef FieldVector IndexVector; typedef FieldVector CoordVector; static int nVertices(int level); static VertexIterator vBegin(int level); static VertexIterator vEnd(int level); static int nElements(int level); static ElementIterator eBegin(int level); static ElementIterator eEnd(int level); } \end{lstlisting} \caption{The interface of \code{class Refinement}.} \label{intf_stat} \end{Listing} \subsection{\code{class Refinement}} We chose an interface somewhat similar to the grid interface in Dune, so our users don't have to learn totally new concepts. The \code{class Refinement} has methods to count the number of subelements and the number of vertices on a given refinement level. It also contains iterators which iterate over the subelements and subvertices of the refinement. But that is where the similarity ends. There is no support for subentities other than subelements and subvertices. \code{class Refinement} needs no information about itself at runtime, so it contains only static methods and we can't actually create instances of it. Listing \ref{intf_stat} shows the interface of \code{class Refinement}. To make compiler optimisation possible, it gets the geometry type and the dimension of the refined entity, the geometry type of its subelements and the coordinate type as template parameters. The only runtime parameter is the refinement level. \begin{Listing} \begin{lstlisting}{} template class VertexIterator { public: typedef Refinement; int index() const; Refinement::CoordVector coords() const; }; template class ElementIterator { public: typedef Refinement; int index() const; // This is a FieldVector for Refinements iterators // but a std::vector for VitualRefinements iterators Refinement::IndexVector vertexIndices() const; } \end{lstlisting} \caption{\label{intf_iter}The interface for the iterators of \code{class Refinement} and \code{class} \code{VirtualRefinement}. In addition to what is shown here, these iterators can do all the usual things iterators can do, except dereferencing.} \end{Listing} \subsubsection{The Iterators} We decided to deviate from the usual scheme of an iterator in one respect: the iterators are not dereferenceable. Instead, you get the information by directly calling methods of the iterator (see listing \ref{intf_iter}). The reason is that the subentities do not actually exist as data within the grid; everything can be calculated on the fly while incrementing the iterator. The solution to maintain an entity object within the iterator and return a reference to that is non-satisfactory, since we have no control over the lifetime of that reference. \begin{Listing} \begin{lstlisting}{} template class VirtualRefinement { public: template struct Codim { class SubEntityIterator; }; typedef Codim::SubEntityIterator VertexIterator; typedef Codim<0>::SubEntityIterator ElementIterator; typedef std::vector IndexVector; typedef FieldVector CoordVector; virtual int nVertices(int level) const; VertexIterator vBegin(int level) const; VertexIterator vEnd(int level) const; virtual int nElements(int level) const; ElementIterator eBegin(int level) const; ElementIterator eEnd(int level) const; }; \end{lstlisting} \caption{The interface of \code{class VirtualRefinement}.} \label{intf_virt} \end{Listing} \subsection{\code{class VirtualRefinement}} \code{class Refinement} needs to know the geometry types of the entities and subelements as compile time, which can make it cumbersome to use if the grid which is refined contains elements of more than one geometry type. To make this easier we created \code{class VirtualRefinement} which defines the interface for a set of wrapper classes. Each wrapper provides the functionality of one corresponding \code{class Refinement} with the interface of \code{class VirtualRefinement}. The advantage is that our users can treat all \code{VirtualRefinement} classes the same, so they only have to write their code once. The disadvantages are that the class is no longer static and it is now decided at runtime which object is called, so the compiler cannot inline these methods. Of course, Refinement was developed with disk-based input/output in mind, which is slow anyway, so there is not much lost. Listing \ref{intf_virt} shows the interface of \code{class VirtualRefinement}. As can be seen it still has the template parameters \code{class CoordType} and \code{int dimension}. It does not make sense to make the coordinate type selectable at runtime. As for the dimension: the user most probably knows it at compile time, and it enables us to use fixed-size vectors for the coordinates. \subsubsection{The Iterators} The interface of the iterators (see listing \ref{intf_iter}) is the same as for the iterators of \code{class} \code{Refinement}. There is one thing to note though: \code{class Refinement}s \code{IndexVector} is an instance of Dunes \code{FieldVector}, while \code{class VirtualRefinement}s \code{IndexVector} is an instance of \code{std::vector}. \begin{Listing} \begin{lstlisting}{} template VirtualRefinement & buildRefinement(NewGeometryType geometryType, NewGeometryType coerceTo); template VirtualRefinement & buildRefinement(NewGeometryType::BasicType geometryType, NewGeometryType::BasicType coerceTo); \end{lstlisting} \caption{The interface of \code{buildRefinement()}.} \label{buildref} \end{Listing} \subsection{\code{buildRefinement()}} The \code{VirtualRefinement} wrapper template class still has the geometry type of the refined entity and its subelements as template parameters. Moreover, each class is a singleton since only one instance of it is ever needed. \code{buildRefinement()} is used to actually get an instance of any of the wrapper classes. It receives the geometry type of the refined entity and the subelements as runtime arguments and makes a big \code{switch} statement to select the right wrapper class. The interface of \code{buildRefinement()} is in listing \ref{buildref}. \section{Extending Refinement} \subsection{Namespace Layout} To separate Refinement from the rest of Dune, we kept most of its implementation within its own \code{namespace Dune::RefinementImp}. In addition to separate implementations for different geometry types from each other, each implementation keeps its details within its own subnamespace below \code{Dune::RefinementImp}. We put the \code{class Refinement} itself, however, and the whole of \code{VirtualRefinement} and \code{buildRefinement()} into \code{namespace Dune} itself for easy access. \subsection{File and Directory Layout} When we chose the directory layout the focus was again on separating the implementations for different geometry types from each other and not to clutter the rest of Dune with files that nobody will use directly anyway. For the former, we put each implementation into its own file, named after the implementation. All these files have to include the file {\tt base.cc}, which defines \code{class Refinement}, so they can properly specialise that class. Our users will usually include {\tt refinement.hh} when using the static part of Refinement, so that file includes all the implementation files. \code{VirtualRefinement} and \code{buildRefinement()} don't contain much that needs to be extended when adding a new implementation, so we put them both together in one single file {\tt virtualrefinement.cc}. We split the declarations for \code{class VirtualRefinement} and \code{buildRefinement} out into {\tt virtualrefinement.hh}. As to the second goal, we put the files which are important to the user, namely {\tt refinement.cc} and {\tt virtualrefinement.hh} as well as {\tt virtual\-re\-fine\-ment.cc} into the directory {\tt dune/geometry}, and the files containing implementation details into the subdirectory {\tt dune/geometry/refinement}. \subsection{Writing a new Refinement Implementation} The process of writing a new Refinement implementation, consists of creating a new file named after the supported geometry types and preferably putting it in {\tt dune/geometry/refinement}. This file should specialise \code{class Refinement}\footnote{All the current implementations use a \code{struct Dune::RefinementImp::Traits} to map from \code{geometryType}, \code{coerceTo} and \code{dimension} to the matching Refinement implementation. This is no longer necessary since Dune switched to the dimension-independent geometry types \emph{simplex} and \emph{cube} and \code{class Refinement} can now be specialised directly.} for the template parameters \code{geometryType} and \code{coerceTo} and probably \code{dimension}. Implementation details like the iterators should be kept in a subnamespace below \code{namespace Dune::RefinementImp} named after the implementation. Then an \code{\#include} statement for the new file has to be added to {\tt refinement.hh}. To make the new implementation known to \code{buildRefinement()}, the new combination of geometry types has to be added to \code{buildRefinement()}s back end, \code{RefinementBuilder::build()} in {\tt virtualrefinement.cc}. If the new implementation supports only a limited number of dimensions, \code{class RefinementBuilder} needs to be specialised for those dimensions. \section{Existing Refinement Implementations} \subsection{Refinement of Hypercubes} We implemented refinement of hypercubes by simply using the SGrid available in Dune as a back end. For each dimension of hypercube refinement requested, an SGrid is created in a singleton wrapper class. It is then refined to the requested refinement level using SGrids \code{globalRefine()}. If a higher refinement level it requested later, the grid is simply re-refined to the new level. The advantage of this approach is that it is very simple to do. One notable disadvantage is that the \code{CoordType} template parameter is misleading -- internally SGrids coordinate type (currently \code{double}) is used. \subsection{Refinement of Simplices} We had to implement this from scratch. The implementation is described in detail in the section \ref{simplex}. \subsection{Triangulation of Hypercubes into Simplices} We implemented this by wrapping the existing simplex refinement in a Kuhn triangulation (explained in section \ref{kuhn}) of the hypercube. Any coordinates and indices returned from the simplex refinement are transformed to the hypercube. This has the disadvantage that there may be more than one subvertex for the same position, but it was the easiest to do. \section{\label{simplex}Implementing Refinement of Simplices} To implement the refinement of simplices we used Freudenthals algorithm. It works by mapping the simplex to be refined to the first simplex of the Kuhn triangulation of a hypercube, refining that hypercube in the canonical way and then Kuhn triangulating the sub-hypercubes. See J.~Beys dissertation\cite{jbey} for details. \begin{figure} \centering \includegraphics[width=.5\hsize]{kuhntriangulation.png} \caption{\label{kuhntria}Kuhn triangulation in three dimensions.} \end{figure} \subsection{\label{kuhn}Kuhn Triangulation in a Nutshell} Kuhn triangulation of the unit $n$-cube $[0, 1]^n$ is done by starting in the origin $(0, \ldots, 0)$ and advancing by $1$ in direction of the first dimension to the point $(1, 0, \ldots, 0)$, then by advancing in direction of the second dimension by $1$ to the point $(1, 1, 0, \ldots, 0)$ and so on until all dimensions have been advanced by $1$ and point $(1, \ldots, 1)$ is reached. All the $n+1$ points visited make up the corners of the first simplex of the triangulation. The other simplices are constructed in the same way, the only difference is to permute the order in which the dimensions are advanced. Each permutation in the order of the dimensions corresponds to exactly one member of the Kuhn triangulation and vice versa. Figure \ref{kuhntria} shows the resulting simplices of a Kuhn triangulation in three dimensions. \subsection{Terminology} \begin{description} \item[Kuhn simplex:] We call the members of a Kuhn triangulation we call {\em Kuhn simplices}. \item[Kuhn0 simplex:] The Kuhn simplex corresponding to the identity permutation. \item[size of a Kuhn simplex:] We define the size of a Kuhn simplex to be equal to its extension in direction $x_0$ (which is equal to its extension in the direction of any of the coordinate axes). \end{description} \subsection{Describing Kuhn Simplices by their Permutation} We describe a simplex of size $s$ of a Kuhn triangulation in $n$ dimensions by the corresponding permutation $P$ of the vector $\vec{v}:=(0,1,\ldots,n-1)$. To get the coordinates of the corners $\vec{x}_0,\ldots,\vec{x}_n$ of the simplex, we use the following algorithm: \begin{compactitem} \item Let $\vec{p}:=P\vec{v}$. \item Start at the origin $\vec{x}_0:=0$. \item For each dimension $d$ from $0$ to $n-1$: \begin{compactitem} \item $\vec{x}_{d+1}:=\vec{x}_d+s\cdot\vec{e}_{p_d}$ ($\vec{e}_i$ is the unit vector in direction $i$.) \end{compactitem} \end{compactitem} \subsection{Index of a Permutation} To give indices to the Kuhn simplices it is sufficient to index the $n!$ permutations of $\vec{v}$. All we need is a way to calculate the permutation vector $\vec{p}$ of the permutation $P$ if given the index. $P$ can be made up of $n$ transpositions, $P=T_0\cdots T_{n-1}$. Each transposition $T_i$ exchanges some arbitrary element $t_i$ with the element $i$, where $t_i\leq i$. That means we can describe $P$ by the integer vector $\vec{t}=(t_0,\cdots,t_{n-1})$, where $0\leq t_i\leq i$. Now we need to encode the vector $\vec{t}$ into a single number. To do that we take $t_i$ as digit $i$ of a number $p$ written in a ``base faculty'' notation: \[p=\sum_{i=1}^{n-1}i!t_i\] This number $p$ is unique for each possible permutation $P$ so we could use this as the index. There is a problem though: we would like the identity permutation $\vec{v}=P\vec{v}$ to have index 0. So we define the index $I$ of the permutation slightly differently: \[I=\sum_{i=1}^{n-1}i!(i-t_i)\] I can easily calculate the $t_i$ from $I$ ('/' denotes integer division): \[t_i=i-(I/i!)\bmod{(i+1)}\] Note that $\vec{t}\not=\vec{p}$. $\vec{t}$ obeys the relation $t_i\leq i$, which is not necessarily true for $\vec{p}$. To get $\vec{p}$ we have to apply each $T_i$ in turn to $\vec{v}$. \subsection{Number of Subvertices in a Kuhn0 Simplex} Let $N(n,s)$ be the number of grid points within an $n$-dimensional Kuhn0 simplex of size $s\in\mathbb{N}$ grid units. The number of points in a $0$-dimensional simplex is $1$, independent of its size: \[N(0,s)=1\] We slice the $n+1$ dimensional simplex orthogonal to one of the dimensions and sum the number of points in the $n$-dimensional sub-simplices. This gives us the recursion formula \[N(n+1,s)=\sum^s_{i=0}N(n,i)\;.\] This formula is satisfied by the binomial coefficient\cite{bronstein} \[N(n,s)=\left({n+s}\atop s\right).\] Observations: \begin{compactitem} \item $N(n,0)=1$ \item $N(n,s)=N(s,n)$ \end{compactitem} \begin{figure} \centering \includegraphics[width=.5\hsize]{simplexvertexindex.png} \caption{\label{simplexindex}The image shows the Kuhn0 tetrahedron of width 2 (wire-frame). It is partitioned into a tetrahedron (green), a triangle (red), a line (blue), and a vertex (black), each of size 1 and each a Kuhn0 simplex in its respective frame.} \end{figure} \subsection{Index of a Subvertex within a Kuhn0 Simplex} Let $I(\vec{x})$ be the index of point $\vec{x}\in\mathbb{N}^n$ in the $n$-dimensional Kuhn0 simplex of size $s$. The coordinates measure the position of the point in grid units and thus are integer. Let us explain the idea in 3 dimensions (refer to figure \ref{simplexindex}). We want to calculate $I(2,1,1)$, which is 6 according to the figure. \begin{itemize} \item First we take the biggest tetrahedron not containing subvertex 6 (which is the green tetrahedron in the figure) and count the number of vertices it contains, which gives us 4. For the following we confine ourself to 2 dimensions by fixing $x_0=2$, which leaves us with a triangle consisting of the subvertices 4 to 9. \item Now we count the number of vertices in the biggest triangle not containing subvertex 6. The triangle consists solely of subvertex 4, so the count is 1. Again we confine ourself, this time to 1 dimension be fixing $x_1=1$. This leaves us with a line consisting of subvertices 5 and 6. \item We count the subvertices in the biggest line not containing subvertex 6. The line consist only of subvertex 5 so the count is 1 again. If we confine ourself any further we're left with 0 dimensions, so we stop here. \item We add the counted stuff together and get indeed 6. \end{itemize} This can easily be put into a formula. We sum up all the vertices in the sub-simplices not containing the point in question. We know how to count the subvertices from the previous section: \[I(\vec{x})=\sum_{i=0}^{n-1}N(n-i,x_i-1)\] Substituting $N$, we get \[I(\vec{x})=\sum_{i=0}^{n-1}\left({n-i+x_i-1}\atop{n-i}\right)\] Since the coordinates of a vertex within the Kuhn0 simplex obey the relation $x_0\geq x_1\geq\cdots\geq x_{n-1}$, they cannot simply be swapped so the sum is somewhat ugly. \subsection{Number of Subelements in a Kuhn0 Simplex} In $n$ dimensions, when we refine the $n$-dimensional hypercube of size $s$ we get $s^n$ sub-hypercubes of size 1. When we do a Kuhn triangulation of the sub-hypercubes we get $n!$ sub-simplices for each sub-hypercube, in total $s^n\cdot n!$ for the hypercube of size $s$. When we triangulate this hypercube directly we get $n!$ Kuhn simplices, each one of equal size, so each contains $s^n$ of the sub-simplices. \subsection{Index of a Subelement within a Kuhn0 Simplex} We didn't come up with a way to simply map a subelement of a Kuhn0 simplex to an index number. Luckily, the iterator interface only requires that we are able to calculate the next subelement. Each subelement is a Kuhn simplex which triangulates a hypercube. We need to remember the vertex which is the origin of that hypercube and the index of the permutation that identifies the Kuhn sub-simplex. Now to get to the next subelement, we simply need to increment the permutation index, and if it overflows we reset it and increment the origin to the next vertex (we already know how to do that). Some subelements generated this way are outside the refined Kuhn0 simplex, so we have to check for that, and skip them. \begin{figure} \centering \includegraphics[width=.5\hsize]{referencetokuhn0.png} \caption{\label{ref2kuhn0} Transforming Dunes reference simplex into the Kuhn0 simplex. Step 1 moves each point by its $x_2$ value into $x_1$ direction. Step 2 moves each point by its new $x_1$ value into $x_0$ direction.} \end{figure} \subsection{Mapping between some Kuhn Simplex and the Reference Simplex} Dunes reference simplex is defined as having one corner at the origin and the others at 1 at each coordinate axis. This does not match any Kuhn simplex, but the transformation can be done quiet easily. \subsubsection{Kuhn0 Simplex} The algorithm to transform a point $\vec{x}=(x_0,\ldots,x_{n-1})$ from the reference simplex of dimension $n$ to the Kuhn0 simplex (as illustrated in figure \ref{ref2kuhn0}) is as follows: \begin{compactitem} \item For each dimension $d$ from $n-2$ down to 0: \begin{compactitem} \item $x_d:=x_d+x_{d+1}$. \end{compactitem} \end{compactitem}\vspace{2ex} The reverse (from Kuhn0 to reference) is simple as well: \begin{compactitem} \item For each dimension $d$ from 0 up to $n-2$: \begin{compactitem} \item $x_d:=x_d-x_{d+1}$. \end{compactitem} \end{compactitem} \subsubsection{Arbitrary Kuhn Simplices} For arbitrary Kuhn simplices we have to take the permutation of that simplex into account. So to map from the reference simplex of $n$ dimensions to the Kuhn simplex with the permutation $P$ (which is described by the vector $\vec{p}=P(0,\ldots,n-1)$) we do: \begin{compactitem} \item For each dimension $d$ from $n-2$ down to 0: \begin{compactitem} \item $x_{p_d}:=x_{p_d}+x_{p_{d+1}}$. \end{compactitem} \end{compactitem}\vspace{2ex} And for the reverse: \begin{compactitem} \item For each dimension $d$ from 0 up to $n-2$: \begin{compactitem} \item $x_{p_d}:=x_{p_d}-x_{p_{d+1}}$. \end{compactitem} \end{compactitem} \begin{thebibliography}{0} \bibitem{dune} Distributed and Unified Numerics Environment \url{http://www.dune-project.org}. \bibitem{jbey} J\"urgen Bey: ``Finite-Volumen- und Mehrgitterverfahren f\"ur elliptische Randwertprobleme.'' The relevant part is available in english at \url{http://www.igpm.rwth-aachen.de/bey/ftp/simplex.ps.gz}. \bibitem{bronstein} Bronstein, Semendjajew, Musiol, M\"uhlig ``Taschenbuch der Mathematik'' (1999) \end{thebibliography} \end{document} dune-geometry-2.8.0/doc/refinement/simplexvertexindex.svg000066400000000000000000000430061411346603000236770ustar00rootroot00000000000000 image/svg+xml $Id: simplexvertexindex.svg 2249 2006-02-10 16:24:33Z joe $ 2005-03-17 Copyright (C) 2005 Jorrit Fahlke <jorrit@jorrit.de> 0 1 2 3 4 5 6 7 8 9 x0 x1 x2 dune-geometry-2.8.0/dune-geometry.pc.in000066400000000000000000000004361411346603000200230ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ CXX=@CXX@ CC=@CC@ DEPENDENCIES=@REQUIRES@ Name: @PACKAGE_NAME@ Version: @VERSION@ Description: @DESCRIPTION@ URL: @URL@ Requires: ${DEPENDENCIES} Libs: -L${libdir} -ldunegeometry Cflags: -I${includedir} dune-geometry-2.8.0/dune.module000066400000000000000000000004561411346603000164520ustar00rootroot00000000000000Module: dune-geometry Version: 2.8.0 Author: The Dune Core developers Maintainer: dune-devel@lists.dune-project.org Description: Geometry Transformations, Reference Elements and Quadrature Rules URL: https://gitlab.dune-project.org/core/dune-geometry Depends: dune-common (>= 2.8) Whitespace-Hook: Yes dune-geometry-2.8.0/dune/000077500000000000000000000000001411346603000152365ustar00rootroot00000000000000dune-geometry-2.8.0/dune/CMakeLists.txt000066400000000000000000000002461411346603000200000ustar00rootroot00000000000000add_subdirectory(geometry) # if Python bindings are enabled, include necessary sub directories. if( DUNE_ENABLE_PYTHONBINDINGS ) add_subdirectory("python") endif() dune-geometry-2.8.0/dune/geometry/000077500000000000000000000000001411346603000170715ustar00rootroot00000000000000dune-geometry-2.8.0/dune/geometry/CMakeLists.txt000066400000000000000000000013721411346603000216340ustar00rootroot00000000000000add_subdirectory("quadraturerules") add_subdirectory("refinement") add_subdirectory("utility") add_subdirectory("test") install(FILES affinegeometry.hh axisalignedcubegeometry.hh dimension.hh generalvertexorder.hh multilineargeometry.hh quadraturerules.hh referenceelement.hh referenceelementimplementation.hh referenceelements.hh refinement.hh topologyfactory.hh type.hh typeindex.hh virtualrefinement.hh virtualrefinement.cc deprecated_topology.hh DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/geometry ) # install the header as done for the auto-tools install(FILES test/checkgeometry.hh DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/geometry/test) dune_add_library(geometry OBJECT referenceelementimplementation.cc ) dune-geometry-2.8.0/dune/geometry/affinegeometry.hh000066400000000000000000000510571411346603000224260ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH #define DUNE_GEOMETRY_AFFINEGEOMETRY_HH /** \file * \brief An implementation of the Geometry interface for affine geometries * \author Martin Nolte */ #include #include #include #include namespace Dune { // External Forward Declarations // ----------------------------- namespace Geo { template< typename Implementation > class ReferenceElement; template< class ctype, int dim > class ReferenceElementImplementation; template< class ctype, int dim > struct ReferenceElements; } namespace Impl { // FieldMatrixHelper // ----------------- template< class ct > struct FieldMatrixHelper { typedef ct ctype; template< int m, int n > static void Ax ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, n > &x, FieldVector< ctype, m > &ret ) { for( int i = 0; i < m; ++i ) { ret[ i ] = ctype( 0 ); for( int j = 0; j < n; ++j ) ret[ i ] += A[ i ][ j ] * x[ j ]; } } template< int m, int n > static void ATx ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, m > &x, FieldVector< ctype, n > &ret ) { for( int i = 0; i < n; ++i ) { ret[ i ] = ctype( 0 ); for( int j = 0; j < m; ++j ) ret[ i ] += A[ j ][ i ] * x[ j ]; } } template< int m, int n, int p > static void AB ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix< ctype, n, p > &B, FieldMatrix< ctype, m, p > &ret ) { for( int i = 0; i < m; ++i ) { for( int j = 0; j < p; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = 0; k < n; ++k ) ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ]; } } } template< int m, int n, int p > static void ATBT ( const FieldMatrix< ctype, m, n > &A, const FieldMatrix< ctype, p, m > &B, FieldMatrix< ctype, n, p > &ret ) { for( int i = 0; i < n; ++i ) { for( int j = 0; j < p; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = 0; k < m; ++k ) ret[ i ][ j ] += A[ k ][ i ] * B[ j ][ k ]; } } } template< int m, int n > static void ATA_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, n > &ret ) { for( int i = 0; i < n; ++i ) { for( int j = 0; j <= i; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = 0; k < m; ++k ) ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ]; } } } template< int m, int n > static void ATA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, n > &ret ) { for( int i = 0; i < n; ++i ) { for( int j = 0; j <= i; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = 0; k < m; ++k ) ret[ i ][ j ] += A[ k ][ i ] * A[ k ][ j ]; ret[ j ][ i ] = ret[ i ][ j ]; } ret[ i ][ i ] = ctype( 0 ); for( int k = 0; k < m; ++k ) ret[ i ][ i ] += A[ k ][ i ] * A[ k ][ i ]; } } template< int m, int n > static void AAT_L ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, m, m > &ret ) { /* if (m==2) { ret[0][0] = A[0]*A[0]; ret[1][1] = A[1]*A[1]; ret[1][0] = A[0]*A[1]; } else */ for( int i = 0; i < m; ++i ) { for( int j = 0; j <= i; ++j ) { ctype &retij = ret[ i ][ j ]; retij = A[ i ][ 0 ] * A[ j ][ 0 ]; for( int k = 1; k < n; ++k ) retij += A[ i ][ k ] * A[ j ][ k ]; } } } template< int m, int n > static void AAT ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, m, m > &ret ) { for( int i = 0; i < m; ++i ) { for( int j = 0; j < i; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = 0; k < n; ++k ) ret[ i ][ j ] += A[ i ][ k ] * A[ j ][ k ]; ret[ j ][ i ] = ret[ i ][ j ]; } ret[ i ][ i ] = ctype( 0 ); for( int k = 0; k < n; ++k ) ret[ i ][ i ] += A[ i ][ k ] * A[ i ][ k ]; } } template< int n > static void Lx ( const FieldMatrix< ctype, n, n > &L, const FieldVector< ctype, n > &x, FieldVector< ctype, n > &ret ) { for( int i = 0; i < n; ++i ) { ret[ i ] = ctype( 0 ); for( int j = 0; j <= i; ++j ) ret[ i ] += L[ i ][ j ] * x[ j ]; } } template< int n > static void LTx ( const FieldMatrix< ctype, n, n > &L, const FieldVector< ctype, n > &x, FieldVector< ctype, n > &ret ) { for( int i = 0; i < n; ++i ) { ret[ i ] = ctype( 0 ); for( int j = i; j < n; ++j ) ret[ i ] += L[ j ][ i ] * x[ j ]; } } template< int n > static void LTL ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype, n, n > &ret ) { for( int i = 0; i < n; ++i ) { for( int j = 0; j < i; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = i; k < n; ++k ) ret[ i ][ j ] += L[ k ][ i ] * L[ k ][ j ]; ret[ j ][ i ] = ret[ i ][ j ]; } ret[ i ][ i ] = ctype( 0 ); for( int k = i; k < n; ++k ) ret[ i ][ i ] += L[ k ][ i ] * L[ k ][ i ]; } } template< int n > static void LLT ( const FieldMatrix< ctype, n, n > &L, FieldMatrix< ctype, n, n > &ret ) { for( int i = 0; i < n; ++i ) { for( int j = 0; j < i; ++j ) { ret[ i ][ j ] = ctype( 0 ); for( int k = 0; k <= j; ++k ) ret[ i ][ j ] += L[ i ][ k ] * L[ j ][ k ]; ret[ j ][ i ] = ret[ i ][ j ]; } ret[ i ][ i ] = ctype( 0 ); for( int k = 0; k <= i; ++k ) ret[ i ][ i ] += L[ i ][ k ] * L[ i ][ k ]; } } template< int n > static bool cholesky_L ( const FieldMatrix< ctype, n, n > &A, FieldMatrix< ctype, n, n > &ret, const bool checkSingular = false ) { using std::sqrt; for( int i = 0; i < n; ++i ) { ctype &rii = ret[ i ][ i ]; ctype xDiag = A[ i ][ i ]; for( int j = 0; j < i; ++j ) xDiag -= ret[ i ][ j ] * ret[ i ][ j ]; // in some cases A can be singular, e.g. when checking local for // outside points during checkInside if( checkSingular && ! ( xDiag > ctype( 0 )) ) return false ; // otherwise this should be true always assert( xDiag > ctype( 0 ) ); rii = sqrt( xDiag ); ctype invrii = ctype( 1 ) / rii; for( int k = i+1; k < n; ++k ) { ctype x = A[ k ][ i ]; for( int j = 0; j < i; ++j ) x -= ret[ i ][ j ] * ret[ k ][ j ]; ret[ k ][ i ] = invrii * x; } } // return true for meaning A is non-singular return true; } template< int n > static ctype detL ( const FieldMatrix< ctype, n, n > &L ) { ctype det( 1 ); for( int i = 0; i < n; ++i ) det *= L[ i ][ i ]; return det; } template< int n > static ctype invL ( FieldMatrix< ctype, n, n > &L ) { ctype det( 1 ); for( int i = 0; i < n; ++i ) { ctype &lii = L[ i ][ i ]; det *= lii; lii = ctype( 1 ) / lii; for( int j = 0; j < i; ++j ) { ctype &lij = L[ i ][ j ]; ctype x = lij * L[ j ][ j ]; for( int k = j+1; k < i; ++k ) x += L[ i ][ k ] * L[ k ][ j ]; lij = (-lii) * x; } } return det; } // calculates x := L^{-1} x template< int n > static void invLx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n > &x ) { for( int i = 0; i < n; ++i ) { for( int j = 0; j < i; ++j ) x[ i ] -= L[ i ][ j ] * x[ j ]; x[ i ] /= L[ i ][ i ]; } } // calculates x := L^{-T} x template< int n > static void invLTx ( FieldMatrix< ctype, n, n > &L, FieldVector< ctype, n > &x ) { for( int i = n; i > 0; --i ) { for( int j = i; j < n; ++j ) x[ i-1 ] -= L[ j ][ i-1 ] * x[ j ]; x[ i-1 ] /= L[ i-1 ][ i-1 ]; } } template< int n > static ctype spdDetA ( const FieldMatrix< ctype, n, n > &A ) { // return A[0][0]*A[1][1]-A[1][0]*A[1][0]; FieldMatrix< ctype, n, n > L; cholesky_L( A, L ); return detL( L ); } template< int n > static ctype spdInvA ( FieldMatrix< ctype, n, n > &A ) { FieldMatrix< ctype, n, n > L; cholesky_L( A, L ); const ctype det = invL( L ); LTL( L, A ); return det; } // calculate x := A^{-1} x template< int n > static bool spdInvAx ( FieldMatrix< ctype, n, n > &A, FieldVector< ctype, n > &x, const bool checkSingular = false ) { FieldMatrix< ctype, n, n > L; const bool invertible = cholesky_L( A, L, checkSingular ); if( ! invertible ) return invertible ; invLx( L, x ); invLTx( L, x ); return invertible; } template< int m, int n > static ctype detATA ( const FieldMatrix< ctype, m, n > &A ) { if( m >= n ) { FieldMatrix< ctype, n, n > ata; ATA_L( A, ata ); return spdDetA( ata ); } else return ctype( 0 ); } /** \brief Compute the square root of the determinant of A times A transposed * * This is the volume element for an embedded submanifold and needed to * implement the method integrationElement(). */ template< int m, int n > static ctype sqrtDetAAT ( const FieldMatrix< ctype, m, n > &A ) { using std::abs; using std::sqrt; // These special cases are here not only for speed reasons: // The general implementation aborts if the matrix is almost singular, // and the special implementation provide a stable way to handle that case. if( (n == 2) && (m == 2) ) { // Special implementation for 2x2 matrices: faster and more stable return abs( A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ] ); } else if( (n == 3) && (m == 3) ) { // Special implementation for 3x3 matrices const ctype v0 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 1 ][ 1 ] * A[ 0 ][ 2 ]; const ctype v1 = A[ 0 ][ 2 ] * A[ 1 ][ 0 ] - A[ 1 ][ 2 ] * A[ 0 ][ 0 ]; const ctype v2 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 1 ][ 0 ] * A[ 0 ][ 1 ]; return abs( v0 * A[ 2 ][ 0 ] + v1 * A[ 2 ][ 1 ] + v2 * A[ 2 ][ 2 ] ); } else if ( (n == 3) && (m == 2) ) { // Special implementation for 2x3 matrices const ctype v0 = A[ 0 ][ 0 ] * A[ 1 ][ 1 ] - A[ 0 ][ 1 ] * A[ 1 ][ 0 ]; const ctype v1 = A[ 0 ][ 0 ] * A[ 1 ][ 2 ] - A[ 1 ][ 0 ] * A[ 0 ][ 2 ]; const ctype v2 = A[ 0 ][ 1 ] * A[ 1 ][ 2 ] - A[ 0 ][ 2 ] * A[ 1 ][ 1 ]; return sqrt( v0*v0 + v1*v1 + v2*v2); } else if( n >= m ) { // General case FieldMatrix< ctype, m, m > aat; AAT_L( A, aat ); return spdDetA( aat ); } else return ctype( 0 ); } // A^{-1}_L = (A^T A)^{-1} A^T // => A^{-1}_L A = I template< int m, int n > static ctype leftInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, m > &ret ) { static_assert((m >= n), "Matrix has no left inverse."); FieldMatrix< ctype, n, n > ata; ATA_L( A, ata ); const ctype det = spdInvA( ata ); ATBT( ata, A, ret ); return det; } template< int m, int n > static void leftInvAx ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, m > &x, FieldVector< ctype, n > &y ) { static_assert((m >= n), "Matrix has no left inverse."); FieldMatrix< ctype, n, n > ata; ATx( A, x, y ); ATA_L( A, ata ); spdInvAx( ata, y ); } /** \brief Compute right pseudo-inverse of matrix A */ template< int m, int n > static ctype rightInvA ( const FieldMatrix< ctype, m, n > &A, FieldMatrix< ctype, n, m > &ret ) { static_assert((n >= m), "Matrix has no right inverse."); using std::abs; if( (n == 2) && (m == 2) ) { const ctype det = (A[ 0 ][ 0 ]*A[ 1 ][ 1 ] - A[ 1 ][ 0 ]*A[ 0 ][ 1 ]); const ctype detInv = ctype( 1 ) / det; ret[ 0 ][ 0 ] = A[ 1 ][ 1 ] * detInv; ret[ 1 ][ 1 ] = A[ 0 ][ 0 ] * detInv; ret[ 1 ][ 0 ] = -A[ 1 ][ 0 ] * detInv; ret[ 0 ][ 1 ] = -A[ 0 ][ 1 ] * detInv; return abs( det ); } else { FieldMatrix< ctype, m , m > aat; AAT_L( A, aat ); const ctype det = spdInvA( aat ); ATBT( A , aat , ret ); return det; } } template< int m, int n > static bool xTRightInvA ( const FieldMatrix< ctype, m, n > &A, const FieldVector< ctype, n > &x, FieldVector< ctype, m > &y ) { static_assert((n >= m), "Matrix has no right inverse."); FieldMatrix< ctype, m, m > aat; Ax( A, x, y ); AAT_L( A, aat ); // check whether aat is singular and return true if non-singular return spdInvAx( aat, y, true ); } }; } // namespace Impl /** \brief Implementation of the Geometry interface for affine geometries * \tparam ct Type used for coordinates * \tparam mydim Dimension of the geometry * \tparam cdim Dimension of the world space */ template< class ct, int mydim, int cdim> class AffineGeometry { public: /** \brief Type used for coordinates */ typedef ct ctype; /** \brief Dimension of the geometry */ static const int mydimension= mydim; /** \brief Dimension of the world space */ static const int coorddimension = cdim; /** \brief Type for local coordinate vector */ typedef FieldVector< ctype, mydimension > LocalCoordinate; /** \brief Type for coordinate vector in world space */ typedef FieldVector< ctype, coorddimension > GlobalCoordinate; /** \brief Type used for volume */ typedef ctype Volume; /** \brief Type for the transposed Jacobian matrix */ typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed; /** \brief Type for the transposed inverse Jacobian matrix */ typedef FieldMatrix< ctype, coorddimension, mydimension > JacobianInverseTransposed; private: //! type of reference element typedef Geo::ReferenceElement< Geo::ReferenceElementImplementation< ctype, mydimension > > ReferenceElement; typedef Geo::ReferenceElements< ctype, mydimension > ReferenceElements; // Helper class to compute a matrix pseudo inverse typedef Impl::FieldMatrixHelper< ct > MatrixHelper; public: /** \brief Create affine geometry from reference element, one vertex, and the Jacobian matrix */ AffineGeometry ( const ReferenceElement &refElement, const GlobalCoordinate &origin, const JacobianTransposed &jt ) : refElement_(refElement), origin_(origin), jacobianTransposed_(jt) { integrationElement_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ ); } /** \brief Create affine geometry from GeometryType, one vertex, and the Jacobian matrix */ AffineGeometry ( Dune::GeometryType gt, const GlobalCoordinate &origin, const JacobianTransposed &jt ) : AffineGeometry(ReferenceElements::general( gt ), origin, jt) { } /** \brief Create affine geometry from reference element and a vector of vertex coordinates */ template< class CoordVector > AffineGeometry ( const ReferenceElement &refElement, const CoordVector &coordVector ) : refElement_(refElement), origin_(coordVector[0]) { for( int i = 0; i < mydimension; ++i ) jacobianTransposed_[ i ] = coordVector[ i+1 ] - origin_; integrationElement_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jacobianTransposed_, jacobianInverseTransposed_ ); } /** \brief Create affine geometry from GeometryType and a vector of vertex coordinates */ template< class CoordVector > AffineGeometry ( Dune::GeometryType gt, const CoordVector &coordVector ) : AffineGeometry(ReferenceElements::general( gt ), coordVector) { } /** \brief Always true: this is an affine geometry */ bool affine () const { return true; } /** \brief Obtain the type of the reference element */ Dune::GeometryType type () const { return refElement_.type(); } /** \brief Obtain number of corners of the corresponding reference element */ int corners () const { return refElement_.size( mydimension ); } /** \brief Obtain coordinates of the i-th corner */ GlobalCoordinate corner ( int i ) const { return global( refElement_.position( i, mydimension ) ); } /** \brief Obtain the centroid of the mapping's image */ GlobalCoordinate center () const { return global( refElement_.position( 0, 0 ) ); } /** \brief Evaluate the mapping * * \param[in] local local coordinate to map * * \returns corresponding global coordinate */ GlobalCoordinate global ( const LocalCoordinate &local ) const { GlobalCoordinate global( origin_ ); jacobianTransposed_.umtv( local, global ); return global; } /** \brief Evaluate the inverse mapping * * \param[in] global global coordinate to map * * \return corresponding local coordinate * * The returned local coordinate y minimizes * \code * (global( y ) - x).two_norm() * \endcode * on the entire affine hull of the reference element. This degenerates * to the inverse map if the argument y is in the range of the map. */ LocalCoordinate local ( const GlobalCoordinate &global ) const { LocalCoordinate local; jacobianInverseTransposed_.mtv( global - origin_, local ); return local; } /** \brief Obtain the integration element * * If the Jacobian of the mapping is denoted by $J(x)$, the integration * integration element \f$\mu(x)\f$ is given by * \f[ \mu(x) = \sqrt{|\det (J^T(x) J(x))|}.\f] * * \param[in] local local coordinate to evaluate the integration element in * * \returns the integration element \f$\mu(x)\f$. */ ctype integrationElement ([[maybe_unused]] const LocalCoordinate &local) const { return integrationElement_; } /** \brief Obtain the volume of the element */ Volume volume () const { return integrationElement_ * refElement_.volume(); } /** \brief Obtain the transposed of the Jacobian * * \param[in] local local coordinate to evaluate Jacobian in * * \returns a reference to the transposed of the Jacobian */ const JacobianTransposed &jacobianTransposed ([[maybe_unused]] const LocalCoordinate &local) const { return jacobianTransposed_; } /** \brief Obtain the transposed of the Jacobian's inverse * * The Jacobian's inverse is defined as a pseudo-inverse. If we denote * the Jacobian by \f$J(x)\f$, the following condition holds: * \f[J^{-1}(x) J(x) = I.\f] */ const JacobianInverseTransposed &jacobianInverseTransposed ([[maybe_unused]] const LocalCoordinate &local) const { return jacobianInverseTransposed_; } friend ReferenceElement referenceElement ( const AffineGeometry &geometry ) { return geometry.refElement_; } private: ReferenceElement refElement_; GlobalCoordinate origin_; JacobianTransposed jacobianTransposed_; JacobianInverseTransposed jacobianInverseTransposed_; ctype integrationElement_; }; } // namespace Dune #endif // #ifndef DUNE_GEOMETRY_AFFINEGEOMETRY_HH dune-geometry-2.8.0/dune/geometry/axisalignedcubegeometry.hh000066400000000000000000000257721411346603000243320ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH #define DUNE_GEOMETRY_AXISALIGNED_CUBE_GEOMETRY_HH /** \file \brief A geometry implementation for axis-aligned hypercubes */ #include #include #include #include #include #include namespace Dune { /** \brief A geometry implementation for axis-aligned hypercubes * * This code is much faster than a generic implementation for hexahedral elements. * All methods use the fact that a geometry for axis-aligned cubes is basically just * a(n affine) scaling in the coordinate directions. * * If dim < coorddim then local coordinates need to be suitably mapped to global ones. * AxisAlignedCubeGeometry uses a special std::bitset 'axes' for this. 'axes' has coorddim * entries, of which precisely 'dim' need to be set. Each set entry marks a local * coordinate, i.e., a coordinate in which the cube has extension. The cube is flat * in all other directions. Its coordinates in these directions is taking from * the array called 'lower', which specifies the lower left corner of the hypercube. * * In the case of dim==coorddim, the code goes into overdrive. Then special code path's * are taken (statically) which omit the conditionals needed to sort out the embedding * of local into global coordinates. Aggressive compiler/scheduler optimization becomes * possible. Additionally, the types returned by the methods jacobianTransposed * and jacobianInverseTransposed are dedicated types for diagonal matrices (DiagonalMatrix). * * \tparam CoordType Type used for single coordinate coefficients * \tparam dim Dimension of the cube * \tparam coorddim Dimension of the space that the cube lives in */ template class AxisAlignedCubeGeometry { public: /** \brief Dimension of the cube element */ enum {mydimension = dim}; /** \brief Dimension of the world space that the cube element is embedded in*/ enum {coorddimension = coorddim}; /** \brief Type used for single coordinate coefficients */ typedef CoordType ctype; /** \brief Type used for a vector of element coordinates */ typedef FieldVector LocalCoordinate; /** \brief Type used for a vector of world coordinates */ typedef FieldVector GlobalCoordinate; /** \brief Type used for volume */ typedef ctype Volume; /** \brief Return type of jacobianTransposed This is a fast DiagonalMatrix if dim==coorddim, and a FieldMatrix otherwise. The FieldMatrix will never contain more than one entry per row, hence it could be replaced by something more efficient. */ typedef typename std::conditional, FieldMatrix >::type JacobianTransposed; /** \brief Return type of jacobianInverseTransposed This is a fast DiagonalMatrix if dim==coorddim, and a FieldMatrix otherwise. The FieldMatrix will never contain more than one entry per column, hence it could be replaced by something more efficient. */ typedef typename std::conditional, FieldMatrix >::type JacobianInverseTransposed; /** \brief Constructor from a lower left and an upper right corner \note Only for dim==coorddim */ AxisAlignedCubeGeometry(const Dune::FieldVector lower, const Dune::FieldVector upper) : lower_(lower), upper_(upper), axes_() { static_assert(dim==coorddim, "Use this constructor only if dim==coorddim!"); // all 'true', but is never actually used axes_ = (1< lower, const Dune::FieldVector upper, const std::bitset& axes) : lower_(lower), upper_(upper), axes_(axes) { assert(axes.count()==dim); for (size_t i=0; i lower) : lower_(lower) {} /** \brief Type of the cube. Here: a hypercube of the correct dimension */ GeometryType type() const { return GeometryTypes::cube(dim); } /** \brief Map a point in local (element) coordinates to world coordinates */ GlobalCoordinate global(const LocalCoordinate& local) const { GlobalCoordinate result; if (dim == coorddim) { // fast case for (size_t i=0; i > referenceElement ( const AxisAlignedCubeGeometry & /* geometry */ ) { return ReferenceElements< ctype, dim >::cube(); } private: // jacobianTransposed: fast case --> diagonal matrix void jacobianTransposed ( DiagonalMatrix &jacobianTransposed ) const { for (size_t i=0; i dense matrix void jacobianTransposed ( FieldMatrix &jacobianTransposed ) const { if (dim==0) return; size_t lc = 0; for (size_t i=0; i diagonal matrix void jacobianInverseTransposed ( DiagonalMatrix &jacobianInverseTransposed ) const { for (size_t i=0; i dense matrix void jacobianInverseTransposed ( FieldMatrix &jacobianInverseTransposed ) const { if (dim==0) return; size_t lc = 0; for (size_t i=0; i lower_; Dune::FieldVector upper_; std::bitset axes_; }; } // namespace Dune #endif dune-geometry-2.8.0/dune/geometry/deprecated_topology.hh000066400000000000000000000123261411346603000234520ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_DEPRECATED_TOPOLOGY_HH #define DUNE_DEPRECATED_TOPOLOGY_HH namespace Impl { // Basic Topology Types // -------------------- // PointDeprecationHelper can be used to prevent a deprecation warning for Point struct PointDeprecationHelper { static const unsigned int dimension = 0; static const unsigned int numCorners = 1; static const unsigned int id = 0; static std::string name () { return "p"; } }; using Point [[deprecated("Use GeometryTypes::vertex instead.")]] = PointDeprecationHelper; template< class BaseTopology > struct [[deprecated("Use GeometryTypes::prismaticExtension(GeometryType gt) instead.")]] Prism { static const unsigned int dimension = BaseTopology::dimension + 1; static const unsigned int numCorners = 2 * BaseTopology::numCorners; static const unsigned int id = BaseTopology::id | ((unsigned int)prismConstruction << (dimension-1)); static std::string name () { return BaseTopology::name() + "l"; } }; template< class BaseTopology > struct [[deprecated("Use GeometryTypes::conicalExtension(GeometryType gt) instead.")]] Pyramid { static const unsigned int dimension = BaseTopology::dimension + 1; static const unsigned int numCorners = BaseTopology::numCorners + 1; static const unsigned int id = BaseTopology::id | ((unsigned int)pyramidConstruction << (dimension-1)); static std::string name () { return BaseTopology::name() + "o"; } }; // Properties of Topologies // ------------------------ template< class Topology > struct [[deprecated("Use GeometryType::isSimplex() instead.")]] IsSimplex : public std::integral_constant< bool, (Topology::id >> 1) == 0 > {}; template< class Topology > struct [[deprecated("Use GeometryType::isCube() instead.")]] IsCube : public std::integral_constant< bool, (Topology::id | 1) == (1 << Topology::dimension) - 1 > {}; /** \brief check whether a specific topology construction was used to create a * given codimension * * \param[in] construction construction to check for * \param[in] topologyId id of the topology * \param[in] dim dimension of the topology * \param[in] codim codimension for which the information is desired * (defaults to 0) * * \returns true, if construction was used to generate the codimension the * topology. */ [[deprecated("Use GeometryType::isPrismatic() or GeometryType::isConical() instead.")]] inline static bool isTopology ( TopologyConstruction construction, unsigned int topologyId, int dim, int codim = 0 ) noexcept { assert( (dim > 0) && (topologyId < numTopologies( dim )) ); assert( (0 <= codim) && (codim <= dim) ); return (codim >= (dim-1)) || (((topologyId >> (dim-codim-1)) & 1) == (unsigned int)construction); } // SimplexTopology // --------------- template< unsigned int dim > struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] SimplexTopology { typedef Pyramid< typename SimplexTopology< dim-1 >::type > type; }; template<> struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] SimplexTopology< 0 > { typedef Point type; }; // CubeTopology // ------------ template< unsigned int dim > struct [[deprecated("Use GeometryTypes::cube(dim) instead.")]] CubeTopology { typedef Prism< typename CubeTopology< dim-1 >::type > type; }; template<> struct [[deprecated("Use GeometryTypes::simplex(dim) instead.")]] CubeTopology< 0 > { typedef Point type; }; // PyramidTopology // --------------- template< unsigned int dim > struct [[deprecated]] PyramidTopology { typedef Pyramid< typename CubeTopology< dim-1 >::type > type; }; // PrismTopology // ------------- template< unsigned int dim > struct [[deprecated]] PrismTopology { typedef Prism< typename SimplexTopology< dim-1 >::type > type; }; // IfTopology // ---------- template< template< class > class Operation, int dim, class Topology = PointDeprecationHelper > struct [[deprecated("Use IfGeometryType instead.")]] IfTopology { template< class... Args > static auto apply ( unsigned int topologyId, Args &&... args ) { if( topologyId & 1 ) return IfTopology< Operation, dim-1, Prism< Topology > >::apply( topologyId >> 1, std::forward< Args >( args )... ); else return IfTopology< Operation, dim-1, Pyramid< Topology > >::apply( topologyId >> 1, std::forward< Args >( args )... ); } }; template< template< class > class Operation, class Topology > struct [[deprecated("Use IfGeometryType instead.")]] IfTopology< Operation, 0, Topology > { template< class... Args > static auto apply ([[maybe_unused]] unsigned int topologyId, Args &&... args) { return Operation< Topology >::apply( std::forward< Args >( args )... ); } }; } // namespace Impl #endif dune-geometry-2.8.0/dune/geometry/dimension.hh000066400000000000000000000010661411346603000214020ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_DIMENSION_HH #define DUNE_GEOMETRY_DIMENSION_HH #include namespace Dune { //! Static tag representing a dimension. template struct Dim : public std::integral_constant { typedef Dim type; }; //! Static tag representing a codimension. template struct Codim : public std::integral_constant { typedef Codim type; }; } #endif // DUNE_GEOMETRY_DIMENSION_HH dune-geometry-2.8.0/dune/geometry/generalvertexorder.hh000066400000000000000000000153411411346603000233250ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_GENERALVERTEXORDER_HH #define DUNE_GEOMETRY_GENERALVERTEXORDER_HH #include #include #include #include #include #include #include "type.hh" #include namespace Dune { /** * \brief Algorithm to reduce vertex order information * * \code * #include * \endcode * * \param inBegin Start of the range of ids to reduce. * \param inEnd End of the range of ids to reduce. * \param outIt Start of the sequence where to store the result. * * \c inBegin and \c inEnd must be ForwardIterators; their \c value_type may * constant. \c outIt must be an OutputIterator and must allow \c * std::distance(inBegin,inEnd) increments. Complexity is quadratic. * * \sa GeneralVertexOrder, VertexOrderByIdFactory */ template void reduceOrder(const InIterator& inBegin, const InIterator& inEnd, OutIterator outIt) { for(InIterator inIt = inBegin; inIt != inEnd; ++inIt, ++outIt) *outIt = std::count_if(inBegin, inEnd, [&](const auto& v) { return v < *inIt; }); } //! Class providing information on the ordering of vertices /** * \tparam dim Dimension of the entity this class provides ordering * information for. * \tparam Index_ Type of the indices. Must be integral, may be * non-negative. * * This class provides ordering information for all codimensions, including * the element itself. * * \warning The Interface of the VertexOrder stuff is subject to change. It * is currently needed to use some global-valued finite elements * from dune-localfunctions. * * \sa reduceOrder(), VertexOrderByIdFactory */ template class GeneralVertexOrder { typedef ReferenceElements RefElems; typedef typename RefElems::ReferenceElement RefElem; RefElem refelem; GeometryType gt; std::vector vertexOrder; public: //! Type of indices typedef Index_ Index; //! Iterate over the vertex indices of some sub-entity class iterator; //! export the dimension of the entity we provide information for static const std::size_t dimension = dim; //! get type of the entity's geometry const GeometryType &type() const { return gt; } //! construct a GeneralVertexOrder /** * \param gt_ Geometry type of the entity we provide information for. * \param inBegin Start of the range of vertex ids. * \param inEnd End of the range of vertex ids. * * \c inBegin and \c inEnd denote the range of vertex ids to provide. * This class stores a reduced copy of the ids, converted to type Index. */ template GeneralVertexOrder(const GeometryType& gt_, const InIterator &inBegin, const InIterator &inEnd) : refelem(RefElems::general(gt_)), gt(gt_), vertexOrder(refelem.size(dim)) { reduceOrder(inBegin, inEnd, vertexOrder.begin()); } //! get begin iterator for the vertex indices of some sub-entity /** * \param codim Codimension of the sub-entity. * \param subEntity Index of the sub-entity within that codimension. */ iterator begin(std::size_t codim, std::size_t subEntity) const { return iterator(*this, codim, subEntity); } //! get end iterator for the vertex indices of some sub-entity /** * \param codim Codimension of the sub-entity. * \param subEntity Index of the sub-entity within that codimension. */ iterator end(std::size_t codim, std::size_t subEntity) const { return iterator(*this, codim, subEntity, refelem.size(subEntity, codim, dim)); } //! get a vector of reduced indices for some sub-entity /** * \param codim Codimension of the sub-entity. * \param subEntity Index of the sub-entity within that codimension. * \param order Where to store the result. This function resizes the * vector to the suitable size. */ void getReduced(std::size_t codim, std::size_t subEntity, std::vector& order) const { order.resize(refelem.size(subEntity, codim, dim)); reduceOrder(begin(codim, subEntity), end(codim, subEntity), order.begin()); } }; //! Iterate over the vertex indices of some sub-entity /** * This is a random access iterator with constant \c value_type. */ template class GeneralVertexOrder::iterator : public Dune::RandomAccessIteratorFacade { const GeneralVertexOrder *order; std::size_t codim; std::size_t subEntity; std::size_t vertex; iterator(const GeneralVertexOrder &order_, std::size_t codim_, std::size_t subEntity_, std::size_t vertex_ = 0) : order(&order_), codim(codim_), subEntity(subEntity_), vertex(vertex_) { } public: const Index &dereference() const { return order->vertexOrder[order->refelem.subEntity(subEntity, codim, vertex, dim)]; } const Index &elementAt(std::ptrdiff_t n) const { return order->vertexOrder[order->refelem.subEntity(subEntity, codim, vertex+n, dim)]; } bool equals(const iterator &other) const { return order == other.order && codim == other.codim && subEntity == other.subEntity && vertex == other.vertex; } void increment() { ++vertex; } void decrement() { --vertex; } void advance(std::ptrdiff_t n) { vertex += n; } std::ptrdiff_t distanceTo(const iterator &other) const { // make sure we reference the same container assert(order == other.order && codim == other.codim && subEntity == other.subEntity); if(vertex < other.vertex) return other.vertex - vertex; else return -static_cast(vertex - other.vertex); } friend class GeneralVertexOrder; //! public default constructor /** * The constructed iterator object will have a singular value. The only * valid operations will be assignment of a non-singular value and * destruction, all other operations will result in undefined behavior. */ iterator() { } }; } // namespace Dune #endif // DUNE_GEOMETRY_GENERALVERTEXORDER_HH dune-geometry-2.8.0/dune/geometry/multilineargeometry.hh000066400000000000000000001010041411346603000235070ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH #define DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH #include #include #include #include #include #include #include #include #include #include #include namespace Dune { // MultiLinearGeometryTraits // ------------------------- /** \brief default traits class for MultiLinearGeometry * * The MultiLinearGeometry (and CachedMultiLinearGeometry) allow tweaking * some implementation details through a traits class. * * This structure provides the default values. * * \tparam ct coordinate type */ template< class ct > struct MultiLinearGeometryTraits { /** \brief helper structure containing some matrix routines * * This helper allows exchanging the matrix inversion algorithms. * It must provide the following static methods: * \code * template< int m, int n > * static ctype sqrtDetAAT ( const FieldMatrix< ctype, m, n > &A ); * * template< int m, int n > * static ctype rightInvA ( const FieldMatrix< ctype, m, n > &A, * FieldMatrix< ctype, n, m > &ret ); * * template< int m, int n > * static void xTRightInvA ( const FieldMatrix< ctype, m, n > &A, * const FieldVector< ctype, n > &x, * FieldVector< ctype, m > &y ); * \endcode */ typedef Impl::FieldMatrixHelper< ct > MatrixHelper; /** \brief tolerance to numerical algorithms */ static ct tolerance () { return ct( 16 ) * std::numeric_limits< ct >::epsilon(); } /** \brief template specifying the storage for the corners * * Internally, the MultiLinearGeometry needs to store the corners of the * geometry. * * The corner storage may be chosen depending on geometry dimension and * coordinate dimension. It is required to contain a type named Type, e.g., * \code * template< int mydim, int cdim > * struct CornerStorage * { * typedef std::vector< FieldVector< ctype, cdim > > Type; * }; * \endcode * By default, a std::vector of FieldVector is used. * * Apart from being copy constructable and assignable, an \c const corner * storage object \c corners must support the expressions \c * begin(corners), \c end(corners), and subscription \c corners[i]. \c * begin() and \c end() are looked up via ADL and in namespace \c std: * \code * using std::begin; * using std::end; * // it is a const_iterator over the corners in Dune-ordering * auto it = begin(corners); * FieldVector c0 = *it; * auto itend = end(corners); * while(it != itend) { * //... * } * * // elements must be accessible by subscription, indexed in * // Dune-ordering * FieldVector c1 = corners[1]; * \endcode * This means that all of the following qualify: \c * FieldVector[1<,(1<, \c * std::vector>. * * \note The expression \c end(corners) isn't actually used by the * implementation currently, but we require it anyway so we can add * runtime checks for the container size when we feel like it. * * It is also possible to use a \c std::reference_wrapper of a suitable * container as the type for the corner storage. The implementation * automatically calls \c corners.get() on internally stored \c * std::reference_wrapper objects before applying \c begin(), \c end(), * or subscription in that case. * * \note Using \c std::reference_wrapper of some container as the corner * storage means that the geometry has no control over the lifetime * of or the access to that container. When the lifetime of the * container ends, or the container itself or its elements are * modified, any geometry object that still references that * container becomes invalid. The only valid operation on invalid * geometry objects are destruction and assignment from another * geometry. If invalidation happens concurrently with some * operation (other than destruction or assignment) on the * geometry, that is a race. * * \tparam mydim geometry dimension * \tparam cdim coordinate dimension */ template< int mydim, int cdim > struct CornerStorage { typedef std::vector< FieldVector< ct, cdim > > Type; }; /** \brief will there be only one geometry type for a dimension? * * If there is only a single geometry type for a certain dimension, * hasSingleGeometryType::v can be set to true. * Supporting only one geometry type might yield a gain in performance. * * If hasSingleGeometryType::v is set to true, an additional * parameter topologyId is required. * Here's an example: * \code * static const unsigned int topologyId = GeometryTypes::simplex(dim).id(); * \endcode */ template< int dim > struct hasSingleGeometryType { static const bool v = false; static const unsigned int topologyId = ~0u; }; }; // MultiLinearGeometry // ------------------- /** \brief generic geometry implementation based on corner coordinates * * Based on the recursive definition of the reference elements, the * MultiLinearGeometry provides a generic implementation of a geometry given * the corner coordinates. * * The geometric mapping is multilinear in the classical sense only in the * case of cubes; for simplices it is linear. * The name is still justified, because the mapping satisfies the important * property of begin linear along edges. * * \tparam ct coordinate type * \tparam mydim geometry dimension * \tparam cdim coordinate dimension * \tparam Traits traits allowing to tweak some implementation details * (optional) * * The requirements on the traits are documented along with their default, * MultiLinearGeometryTraits. */ template< class ct, int mydim, int cdim, class Traits = MultiLinearGeometryTraits< ct > > class MultiLinearGeometry { typedef MultiLinearGeometry< ct, mydim, cdim, Traits > This; public: //! coordinate type typedef ct ctype; //! geometry dimension static const int mydimension= mydim; //! coordinate dimension static const int coorddimension = cdim; //! type of local coordinates typedef FieldVector< ctype, mydimension > LocalCoordinate; //! type of global coordinates typedef FieldVector< ctype, coorddimension > GlobalCoordinate; //! type of volume typedef ctype Volume; //! type of jacobian transposed typedef FieldMatrix< ctype, mydimension, coorddimension > JacobianTransposed; //! type of jacobian inverse transposed class JacobianInverseTransposed; protected: typedef Dune::ReferenceElements< ctype, mydimension > ReferenceElements; public: //! type of reference element typedef typename ReferenceElements::ReferenceElement ReferenceElement; private: static const bool hasSingleGeometryType = Traits::template hasSingleGeometryType< mydimension >::v; protected: typedef typename Traits::MatrixHelper MatrixHelper; typedef typename std::conditional< hasSingleGeometryType, std::integral_constant< unsigned int, Traits::template hasSingleGeometryType< mydimension >::topologyId >, unsigned int >::type TopologyId; public: /** \brief constructor * * \param[in] refElement reference element for the geometry * \param[in] corners corners to store internally * * \note The type of corners is actually a template argument. * It is only required that the internal corner storage can be * constructed from this object. */ template< class Corners > MultiLinearGeometry ( const ReferenceElement &refElement, const Corners &corners ) : refElement_( refElement ), corners_( corners ) {} /** \brief constructor * * \param[in] gt geometry type * \param[in] corners corners to store internally * * \note The type of corners is actually a template argument. * It is only required that the internal corner storage can be * constructed from this object. */ template< class Corners > MultiLinearGeometry ( Dune::GeometryType gt, const Corners &corners ) : refElement_( ReferenceElements::general( gt ) ), corners_( corners ) {} /** \brief is this mapping affine? */ bool affine () const { JacobianTransposed jt; return affine( jt ); } /** \brief obtain the name of the reference element */ Dune::GeometryType type () const { return GeometryType( toUnsignedInt(topologyId()), mydimension ); } /** \brief obtain number of corners of the corresponding reference element */ int corners () const { return refElement().size( mydimension ); } /** \brief obtain coordinates of the i-th corner */ GlobalCoordinate corner ( int i ) const { assert( (i >= 0) && (i < corners()) ); return std::cref(corners_).get()[ i ]; } /** \brief obtain the centroid of the mapping's image */ GlobalCoordinate center () const { return global( refElement().position( 0, 0 ) ); } /** \brief evaluate the mapping * * \param[in] local local coordinate to map * * \returns corresponding global coordinate */ GlobalCoordinate global ( const LocalCoordinate &local ) const { using std::begin; auto cit = begin(std::cref(corners_).get()); GlobalCoordinate y; global< false >( topologyId(), std::integral_constant< int, mydimension >(), cit, ctype( 1 ), local, ctype( 1 ), y ); return y; } /** \brief evaluate the inverse mapping * * \param[in] globalCoord global coordinate to map * * \return corresponding local coordinate * * \note For given global coordinate y the returned local coordinate x that minimizes * the following function over the local coordinate space spanned by the reference element. * \code * (global( x ) - y).two_norm() * \endcode */ LocalCoordinate local ( const GlobalCoordinate &globalCoord ) const { const ctype tolerance = Traits::tolerance(); LocalCoordinate x = refElement().position( 0, 0 ); LocalCoordinate dx; const bool affineMapping = this->affine(); do { // Newton's method: DF^n dx^n = F^n, x^{n+1} -= dx^n const GlobalCoordinate dglobal = (*this).global( x ) - globalCoord; const bool invertible = MatrixHelper::template xTRightInvA< mydimension, coorddimension >( jacobianTransposed( x ), dglobal, dx ); if( ! invertible ) return LocalCoordinate( std::numeric_limits< ctype > :: max() ); // update x with correction x -= dx; // for affine mappings only one iteration is needed if ( affineMapping ) break; } while( dx.two_norm2() > tolerance ); return x; } /** \brief obtain the integration element * * If the Jacobian of the mapping is denoted by $J(x)$, the integration * integration element \f$\mu(x)\f$ is given by * \f[ \mu(x) = \sqrt{|\det (J^T(x) J(x))|}.\f] * * \param[in] local local coordinate to evaluate the integration element in * * \returns the integration element \f$\mu(x)\f$. * * \note For affine mappings, it is more efficient to call * jacobianInverseTransposed before integrationElement, if both * are required. */ ctype integrationElement ( const LocalCoordinate &local ) const { return MatrixHelper::template sqrtDetAAT< mydimension, coorddimension >( jacobianTransposed( local ) ); } /** \brief obtain the volume of the mapping's image * * \note The current implementation just returns * \code * integrationElement( refElement().position( 0, 0 ) ) * refElement().volume() * \endcode * which is wrong for n-linear surface maps and other nonlinear maps. */ Volume volume () const { return integrationElement( refElement().position( 0, 0 ) ) * refElement().volume(); } /** \brief obtain the transposed of the Jacobian * * \param[in] local local coordinate to evaluate Jacobian in * * \returns a reference to the transposed of the Jacobian * * \note The returned reference is reused on the next call to * JacobianTransposed, destroying the previous value. */ JacobianTransposed jacobianTransposed ( const LocalCoordinate &local ) const { using std::begin; JacobianTransposed jt; auto cit = begin(std::cref(corners_).get()); jacobianTransposed< false >( topologyId(), std::integral_constant< int, mydimension >(), cit, ctype( 1 ), local, ctype( 1 ), jt ); return jt; } /** \brief obtain the transposed of the Jacobian's inverse * * The Jacobian's inverse is defined as a pseudo-inverse. If we denote * the Jacobian by \f$J(x)\f$, the following condition holds: * \f[J^{-1}(x) J(x) = I.\f] */ JacobianInverseTransposed jacobianInverseTransposed ( const LocalCoordinate &local ) const; friend ReferenceElement referenceElement ( const MultiLinearGeometry &geometry ) { return geometry.refElement(); } protected: ReferenceElement refElement () const { return refElement_; } TopologyId topologyId () const { return topologyId( std::integral_constant< bool, hasSingleGeometryType >() ); } template< bool add, int dim, class CornerIterator > static void global ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, GlobalCoordinate &y ); template< bool add, class CornerIterator > static void global ( TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, GlobalCoordinate &y ); template< bool add, int rows, int dim, class CornerIterator > static void jacobianTransposed ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt ); template< bool add, int rows, class CornerIterator > static void jacobianTransposed ( TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt ); template< int dim, class CornerIterator > static bool affine ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, JacobianTransposed &jt ); template< class CornerIterator > static bool affine ( TopologyId topologyId, std::integral_constant< int, 0 >, CornerIterator &cit, JacobianTransposed &jt ); bool affine ( JacobianTransposed &jacobianT ) const { using std::begin; auto cit = begin(std::cref(corners_).get()); return affine( topologyId(), std::integral_constant< int, mydimension >(), cit, jacobianT ); } private: // The following methods are needed to convert the return type of topologyId to // unsigned int with g++-4.4. It has problems casting integral_constant to the // integral type. static unsigned int toUnsignedInt(unsigned int i) { return i; } template static unsigned int toUnsignedInt(std::integral_constant ) { return v; } TopologyId topologyId ( std::integral_constant< bool, true > ) const { return TopologyId(); } unsigned int topologyId ( std::integral_constant< bool, false > ) const { return refElement().type().id(); } ReferenceElement refElement_; typename Traits::template CornerStorage< mydimension, coorddimension >::Type corners_; }; // MultiLinearGeometry::JacobianInverseTransposed // ---------------------------------------------- template< class ct, int mydim, int cdim, class Traits > class MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed : public FieldMatrix< ctype, coorddimension, mydimension > { typedef FieldMatrix< ctype, coorddimension, mydimension > Base; public: void setup ( const JacobianTransposed &jt ) { detInv_ = MatrixHelper::template rightInvA< mydimension, coorddimension >( jt, static_cast< Base & >( *this ) ); } void setupDeterminant ( const JacobianTransposed &jt ) { detInv_ = MatrixHelper::template sqrtDetAAT< mydimension, coorddimension >( jt ); } ctype det () const { return ctype( 1 ) / detInv_; } ctype detInv () const { return detInv_; } private: ctype detInv_; }; /** \brief Implement a MultiLinearGeometry with additional caching * * This class implements the same interface and functionality as MultiLinearGeometry. * However, it additionally implements caching for various results. * * \tparam ct coordinate type * \tparam mydim geometry dimension * \tparam cdim coordinate dimension * \tparam Traits traits allowing to tweak some implementation details * (optional) * */ template< class ct, int mydim, int cdim, class Traits = MultiLinearGeometryTraits< ct > > class CachedMultiLinearGeometry : public MultiLinearGeometry< ct, mydim, cdim, Traits > { typedef CachedMultiLinearGeometry< ct, mydim, cdim, Traits > This; typedef MultiLinearGeometry< ct, mydim, cdim, Traits > Base; protected: typedef typename Base::MatrixHelper MatrixHelper; public: typedef typename Base::ReferenceElement ReferenceElement; typedef typename Base::ctype ctype; using Base::mydimension; using Base::coorddimension; typedef typename Base::LocalCoordinate LocalCoordinate; typedef typename Base::GlobalCoordinate GlobalCoordinate; typedef typename Base::Volume Volume; typedef typename Base::JacobianTransposed JacobianTransposed; typedef typename Base::JacobianInverseTransposed JacobianInverseTransposed; template< class CornerStorage > CachedMultiLinearGeometry ( const ReferenceElement &referenceElement, const CornerStorage &cornerStorage ) : Base( referenceElement, cornerStorage ), affine_( Base::affine( jacobianTransposed_ ) ), jacobianInverseTransposedComputed_( false ), integrationElementComputed_( false ) {} template< class CornerStorage > CachedMultiLinearGeometry ( Dune::GeometryType gt, const CornerStorage &cornerStorage ) : Base( gt, cornerStorage ), affine_( Base::affine( jacobianTransposed_ ) ), jacobianInverseTransposedComputed_( false ), integrationElementComputed_( false ) {} /** \brief is this mapping affine? */ bool affine () const { return affine_; } using Base::corner; /** \brief obtain the centroid of the mapping's image */ GlobalCoordinate center () const { return global( refElement().position( 0, 0 ) ); } /** \brief evaluate the mapping * * \param[in] local local coordinate to map * * \returns corresponding global coordinate */ GlobalCoordinate global ( const LocalCoordinate &local ) const { if( affine() ) { GlobalCoordinate global( corner( 0 ) ); jacobianTransposed_.umtv( local, global ); return global; } else return Base::global( local ); } /** \brief evaluate the inverse mapping * * \param[in] global global coordinate to map * * \return corresponding local coordinate * * \note For given global coordinate y the returned local coordinate x that minimizes * the following function over the local coordinate space spanned by the reference element. * \code * (global( x ) - y).two_norm() * \endcode */ LocalCoordinate local ( const GlobalCoordinate &global ) const { if( affine() ) { LocalCoordinate local; if( jacobianInverseTransposedComputed_ ) jacobianInverseTransposed_.mtv( global - corner( 0 ), local ); else MatrixHelper::template xTRightInvA< mydimension, coorddimension >( jacobianTransposed_, global - corner( 0 ), local ); return local; } else return Base::local( global ); } /** \brief obtain the integration element * * If the Jacobian of the mapping is denoted by $J(x)$, the integration * integration element \f$\mu(x)\f$ is given by * \f[ \mu(x) = \sqrt{|\det (J^T(x) J(x))|}.\f] * * \param[in] local local coordinate to evaluate the integration element in * * \returns the integration element \f$\mu(x)\f$. * * \note For affine mappings, it is more efficient to call * jacobianInverseTransposed before integrationElement, if both * are required. */ ctype integrationElement ( const LocalCoordinate &local ) const { if( affine() ) { if( !integrationElementComputed_ ) { jacobianInverseTransposed_.setupDeterminant( jacobianTransposed_ ); integrationElementComputed_ = true; } return jacobianInverseTransposed_.detInv(); } else return Base::integrationElement( local ); } /** \brief obtain the volume of the mapping's image */ Volume volume () const { if( affine() ) return integrationElement( refElement().position( 0, 0 ) ) * refElement().volume(); else return Base::volume(); } /** \brief obtain the transposed of the Jacobian * * \param[in] local local coordinate to evaluate Jacobian in * * \returns a reference to the transposed of the Jacobian * * \note The returned reference is reused on the next call to * JacobianTransposed, destroying the previous value. */ JacobianTransposed jacobianTransposed ( const LocalCoordinate &local ) const { if( affine() ) return jacobianTransposed_; else return Base::jacobianTransposed( local ); } /** \brief obtain the transposed of the Jacobian's inverse * * The Jacobian's inverse is defined as a pseudo-inverse. If we denote * the Jacobian by \f$J(x)\f$, the following condition holds: * \f[J^{-1}(x) J(x) = I.\f] */ JacobianInverseTransposed jacobianInverseTransposed ( const LocalCoordinate &local ) const { if( affine() ) { if( !jacobianInverseTransposedComputed_ ) { jacobianInverseTransposed_.setup( jacobianTransposed_ ); jacobianInverseTransposedComputed_ = true; integrationElementComputed_ = true; } return jacobianInverseTransposed_; } else return Base::jacobianInverseTransposed( local ); } protected: using Base::refElement; private: mutable JacobianTransposed jacobianTransposed_; mutable JacobianInverseTransposed jacobianInverseTransposed_; mutable bool affine_ : 1; mutable bool jacobianInverseTransposedComputed_ : 1; mutable bool integrationElementComputed_ : 1; }; // Implementation of MultiLinearGeometry // ------------------------------------- template< class ct, int mydim, int cdim, class Traits > inline typename MultiLinearGeometry< ct, mydim, cdim, Traits >::JacobianInverseTransposed MultiLinearGeometry< ct, mydim, cdim, Traits >::jacobianInverseTransposed ( const LocalCoordinate &local ) const { JacobianInverseTransposed jit; jit.setup( jacobianTransposed( local ) ); return jit; } template< class ct, int mydim, int cdim, class Traits > template< bool add, int dim, class CornerIterator > inline void MultiLinearGeometry< ct, mydim, cdim, Traits > ::global ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, GlobalCoordinate &y ) { const ctype xn = df*x[ dim-1 ]; const ctype cxn = ctype( 1 ) - xn; if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim ) ) { // apply (1-xn) times mapping for bottom global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, rf*cxn, y ); // apply xn times mapping for top global< true >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, rf*xn, y ); } else { assert( Impl::isPyramid( toUnsignedInt(topologyId), mydimension, mydimension-dim ) ); // apply (1-xn) times mapping for bottom (with argument x/(1-xn)) if( cxn > Traits::tolerance() || cxn < -Traits::tolerance() ) global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df/cxn, x, rf*cxn, y ); else global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, ctype( 0 ), y ); // apply xn times the tip y.axpy( rf*xn, *cit ); ++cit; } } template< class ct, int mydim, int cdim, class Traits > template< bool add, class CornerIterator > inline void MultiLinearGeometry< ct, mydim, cdim, Traits > ::global ( TopologyId, std::integral_constant< int, 0 >, CornerIterator &cit, const ctype &, const LocalCoordinate &, const ctype &rf, GlobalCoordinate &y ) { const GlobalCoordinate &origin = *cit; ++cit; for( int i = 0; i < coorddimension; ++i ) y[ i ] = (add ? y[ i ] + rf*origin[ i ] : rf*origin[ i ]); } template< class ct, int mydim, int cdim, class Traits > template< bool add, int rows, int dim, class CornerIterator > inline void MultiLinearGeometry< ct, mydim, cdim, Traits > ::jacobianTransposed ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, const ctype &df, const LocalCoordinate &x, const ctype &rf, FieldMatrix< ctype, rows, cdim > &jt ) { assert( rows >= dim ); const ctype xn = df*x[ dim-1 ]; const ctype cxn = ctype( 1 ) - xn; auto cit2( cit ); if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim ) ) { // apply (1-xn) times Jacobian for bottom jacobianTransposed< add >( topologyId, std::integral_constant< int, dim-1 >(), cit2, df, x, rf*cxn, jt ); // apply xn times Jacobian for top jacobianTransposed< true >( topologyId, std::integral_constant< int, dim-1 >(), cit2, df, x, rf*xn, jt ); // compute last row as difference between top value and bottom value global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, -rf, jt[ dim-1 ] ); global< true >( topologyId, std::integral_constant< int, dim-1 >(), cit, df, x, rf, jt[ dim-1 ] ); } else { assert( Impl::isPyramid( toUnsignedInt(topologyId), mydimension, mydimension-dim ) ); /* * In the pyramid case, we need a transformation Tb: B -> R^n for the * base B \subset R^{n-1}. The pyramid transformation is then defined as * T: P \subset R^n -> R^n * (x, xn) |-> (1-xn) Tb(x*) + xn t (x \in R^{n-1}, xn \in R) * with the tip of the pyramid mapped to t and x* = x/(1-xn) * the projection of (x,xn) onto the base. * * For the Jacobi matrix DT we get * DT = ( A | b ) * with A = DTb(x*) (n x n-1 matrix) * and b = dT/dxn (n-dim column vector). * Furthermore * b = -Tb(x*) + t + \sum_i dTb/dx_i(x^*) x_i/(1-xn) * * Note that both A and b are not defined in the pyramid tip (x=0, xn=1)! * Indeed for B the unit square, Tb mapping B to the quadrilateral given * by the vertices (0,0,0), (2,0,0), (0,1,0), (1,1,0) and t=(0,0,1), we get * * T(x,y,xn) = ( x(2-y/(1-xn)), y, xn ) * / 2-y/(1-xn) -x 0 \ * DT(x,y,xn) = | 0 1 0 | * \ 0 0 1 / * which is not continuous for xn -> 1, choose for example * x=0, y=1-xn, xn -> 1 --> DT -> diag(1,1,1) * x=1-xn, y=0, xn -> 1 --> DT -> diag(2,1,1) * * However, for Tb affine-linear, Tb(y) = My + y0, DTb = M: * A = M * b = -M x* - y0 + t + \sum_i M_i x_i/(1-xn) * = -M x* - y0 + t + M x* * = -y0 + t * which is continuous for xn -> 1. Note that this b is also given by * b = -Tb(0) + t + \sum_i dTb/dx_i(0) x_i/1 * that is replacing x* by 1 and 1-xn by 1 in the formular above. * * For xn -> 1, we can thus set x*=0, "1-xn"=1 (or anything != 0) and get * the right result in case Tb is affine-linear. */ /* The second case effectively results in x* = 0 */ ctype dfcxn = (cxn > Traits::tolerance() || cxn < -Traits::tolerance()) ? ctype(df / cxn) : ctype(0); // initialize last row // b = -Tb(x*) // (b = -Tb(0) = -y0 in case xn -> 1 and Tb affine-linear) global< add >( topologyId, std::integral_constant< int, dim-1 >(), cit, dfcxn, x, -rf, jt[ dim-1 ] ); // b += t jt[ dim-1 ].axpy( rf, *cit ); ++cit; // apply Jacobian for bottom (with argument x/(1-xn)) and correct last row if( add ) { FieldMatrix< ctype, dim-1, coorddimension > jt2; // jt2 = dTb/dx_i(x*) jacobianTransposed< false >( topologyId, std::integral_constant< int, dim-1 >(), cit2, dfcxn, x, rf, jt2 ); // A = dTb/dx_i(x*) (jt[j], j=0..dim-1) // b += \sum_i dTb/dx_i(x*) x_i/(1-xn) (jt[dim-1]) // (b += 0 in case xn -> 1) for( int j = 0; j < dim-1; ++j ) { jt[ j ] += jt2[ j ]; jt[ dim-1 ].axpy( dfcxn*x[ j ], jt2[ j ] ); } } else { // jt = dTb/dx_i(x*) jacobianTransposed< false >( topologyId, std::integral_constant< int, dim-1 >(), cit2, dfcxn, x, rf, jt ); // b += \sum_i dTb/dx_i(x*) x_i/(1-xn) for( int j = 0; j < dim-1; ++j ) jt[ dim-1 ].axpy( dfcxn*x[ j ], jt[ j ] ); } } } template< class ct, int mydim, int cdim, class Traits > template< bool add, int rows, class CornerIterator > inline void MultiLinearGeometry< ct, mydim, cdim, Traits > ::jacobianTransposed ( TopologyId, std::integral_constant< int, 0 >, CornerIterator &cit, const ctype &, const LocalCoordinate &, const ctype &, FieldMatrix< ctype, rows, cdim > & ) { ++cit; } template< class ct, int mydim, int cdim, class Traits > template< int dim, class CornerIterator > inline bool MultiLinearGeometry< ct, mydim, cdim, Traits > ::affine ( TopologyId topologyId, std::integral_constant< int, dim >, CornerIterator &cit, JacobianTransposed &jt ) { const GlobalCoordinate &orgBottom = *cit; if( !affine( topologyId, std::integral_constant< int, dim-1 >(), cit, jt ) ) return false; const GlobalCoordinate &orgTop = *cit; if( Impl::isPrism( toUnsignedInt(topologyId), mydimension, mydimension-dim ) ) { JacobianTransposed jtTop; if( !affine( topologyId, std::integral_constant< int, dim-1 >(), cit, jtTop ) ) return false; // check whether both jacobians are identical ctype norm( 0 ); for( int i = 0; i < dim-1; ++i ) norm += (jtTop[ i ] - jt[ i ]).two_norm2(); if( norm >= Traits::tolerance() ) return false; } else ++cit; jt[ dim-1 ] = orgTop - orgBottom; return true; } template< class ct, int mydim, int cdim, class Traits > template< class CornerIterator > inline bool MultiLinearGeometry< ct, mydim, cdim, Traits > ::affine ( TopologyId, std::integral_constant< int, 0 >, CornerIterator &cit, JacobianTransposed & ) { ++cit; return true; } } // namespace Dune #endif // #ifndef DUNE_GEOMETRY_MULTILINEARGEOMETRY_HH dune-geometry-2.8.0/dune/geometry/quadraturerules.hh000066400000000000000000000430541411346603000226500ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_QUADRATURERULES_HH #define DUNE_GEOMETRY_QUADRATURERULES_HH #include #include #include #include #include #include #include #include #include #include #include #include #include /** \file Interface for quadrature points and rules */ namespace Dune { /** \brief Exception thrown if a desired QuadratureRule is not available, because the requested order is to high \ingroup Quadrature */ class QuadratureOrderOutOfRange : public NotImplemented {}; /** \brief Single evaluation point in a quadrature rule \ingroup Quadrature \tparam ct Number type used for both coordinates and the weights \tparam dim Dimension of the integration domain */ template class QuadraturePoint { public: /** \brief Dimension of the integration domain */ enum { dimension = dim }; /** \brief Number type used for coordinates and quadrature weights */ typedef ct Field; /** \brief Type used for the position of a quadrature point */ typedef Dune::FieldVector Vector; //! set up quadrature of given order in d dimensions QuadraturePoint (const Vector& x, ct w) : local(x) { weight_ = w; } //! return local coordinates of integration point i const Vector& position () const { return local; } //! return weight associated with integration point i const ct &weight () const { return weight_; } protected: FieldVector local; ct weight_; }; /** \brief Defines an \p enum for currently available quadrature rules. \ingroup Quadrature */ namespace QuadratureType { enum Enum { /** \brief Gauss-Legendre rules (default) * * -1D: Gauss-Jacobi rule with parameters \f$\alpha = \beta =0 \f$, i.e. for integrals with a constant weight function. * The quadrature points do not include interval endpoints. * Polynomials of order 2n - 1 can be integrated exactly. * -higher dimension: For the 2D/3D case efficient rules for certain geometries may be used if available. * Higher dimensional quadrature rules are constructed via \p TensorProductQuadratureRule. * In this case the 1D rules eventually need higher order to compensate occuring weight functions(i.e. simplices). */ GaussLegendre = 0, /** \brief Gauss-Jacobi rules with \f$\alpha =1\f$ * * -1D Gauss-Jacobi rule with parameters \f$\alpha =1,\ \beta =0 \f$ * -Is used to construct efficient simplex quadrature rules of higher order */ GaussJacobi_1_0 = 1, /** \brief Gauss-Legendre rules with \f$\alpha =2\f$ * * -1D Gauss-Jacobi rule with parameters \f$\alpha =2,\ \beta =0 \f$ * -Is used to construct efficient simplex quadrature rules of higher order */ GaussJacobi_2_0 = 2, /** \brief Gauss-Legendre rules with \f$\alpha =n\f$ * * -1D: Gauss-Jacobi rule with parameters \f$\alpha = n,\ \beta =0 \f$ * -higher dimension: For the 2D/3D case efficient rules for certain geometries may be used if available. * Higher dimensional quadrature rules are constructed via \p TensorProductQuadratureRule. * In this case the 1D rules respect eventually occuring weight functions(i.e. simplices). * -The rules for high dimension or order are computed at run time and only floating point number types are supported.(LAPACK is needed for this case) * -Most efficient quadrature type for simplices. * * \note For details please use the book "Approximate Calculation of Multiple Integrals" by A.H. Stroud published in 1971. */ GaussJacobi_n_0 = 3, /** \brief Gauss-Lobatto rules * * 1D: Gauss-Lobatto rules for a constant weight function. * These are optimal rules under the constraint that both interval endpoints are quadrature points. * Polynomials of order 2n - 3 can be integrated exactly. */ GaussLobatto = 4, /** \brief Gauss-Radau rules including the left endpoint * * 1D: Gauss-Radau rules for a constant weight function. * These are optimal rules under the constraint that the left endpoint of the integration interval is a quadrature point. * Polynomials of order 2n - 2 can be integrated exactly. */ GaussRadauLeft = 5, /** \brief Gauss-Radau rules including the right endpoint * * 1D: Gauss-Radau rules for a constant weight function. * These are optimal rules under the constraint that the right endpoint of the integration interval is a quadrature point. * Polynomials of order 2n - 2 can be integrated exactly. * The right Gauss-Radau rules are the just the mirrored left Gauss-Radau rules. */ GaussRadauRight = 6, size }; } /** \brief Abstract base class for quadrature rules \ingroup Quadrature */ template class QuadratureRule : public std::vector > { public: /** \brief Default constructor * * Create an invalid empty quadrature rule. This must be initialized * later by copying another quadraturerule before it can be used. */ QuadratureRule() : delivered_order(-1) {} protected: /** \brief Constructor for a given geometry type. Leaves the quadrature order invalid */ QuadratureRule(GeometryType t) : geometry_type(t), delivered_order(-1) {} /** \brief Constructor for a given geometry type and a given quadrature order */ QuadratureRule(GeometryType t, int order) : geometry_type(t), delivered_order(order) {} public: /** \brief The space dimension */ enum { d=dim }; /** \brief The type used for coordinates */ typedef ct CoordType; //! return order virtual int order () const { return delivered_order; } //! return type of element virtual GeometryType type () const { return geometry_type; } virtual ~QuadratureRule(){} //! this container is always a const container, //! therefore iterator is the same as const_iterator typedef typename std::vector >::const_iterator iterator; protected: GeometryType geometry_type; int delivered_order; }; // Forward declaration of the factory class, // needed internally by the QuadratureRules container class. template class QuadratureRuleFactory; /** \brief A container for all quadrature rules of dimension dim \ingroup Quadrature */ template class QuadratureRules { /** \brief Internal short-hand notation for the type of quadrature rules this container contains */ typedef Dune::QuadratureRule QuadratureRule; //! \brief a quadrature rule (for each quadrature order, geometry type, //! and quadrature type) static void initQuadratureRule(QuadratureRule *qr, QuadratureType::Enum qt, const GeometryType &t, int p) { *qr = QuadratureRuleFactory::rule(t,p,qt); } typedef std::vector > QuadratureOrderVector; // indexed by quadrature order //! \brief initialize the vector indexed by the quadrature order (for each //! geometry type and quadrature type) static void initQuadratureOrderVector(QuadratureOrderVector *qov, QuadratureType::Enum qt, const GeometryType &t) { if(dim == 0) // we only need one quadrature rule for points, not maxint *qov = QuadratureOrderVector(1); else *qov = QuadratureOrderVector(QuadratureRuleFactory::maxOrder(t,qt)+1); } typedef std::vector > GeometryTypeVector; // indexed by geometry type //! \brief initialize the vector indexed by the geometry type (for each //! quadrature type) static void initGeometryTypeVector(GeometryTypeVector *gtv) { *gtv = GeometryTypeVector(LocalGeometryTypeIndex::size(dim)); } //! real rule creator DUNE_EXPORT const QuadratureRule& _rule(const GeometryType& t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre) { assert(t.dim()==dim); DUNE_ASSERT_CALL_ONCE(); static std::vector > quadratureCache(QuadratureType::size); auto & quadratureTypeLevel = quadratureCache[qt]; std::call_once(quadratureTypeLevel.first, initGeometryTypeVector, &quadratureTypeLevel.second); auto & geometryTypeLevel = quadratureTypeLevel.second[LocalGeometryTypeIndex::index(t)]; std::call_once(geometryTypeLevel.first, initQuadratureOrderVector, &geometryTypeLevel.second, qt, t); // we only have one quadrature rule for points auto & quadratureOrderLevel = geometryTypeLevel.second[dim == 0 ? 0 : p]; std::call_once(quadratureOrderLevel.first, initQuadratureRule, &quadratureOrderLevel.second, qt, t, p); return quadratureOrderLevel.second; } //! singleton provider DUNE_EXPORT static QuadratureRules& instance() { static QuadratureRules instance; return instance; } //! private constructor QuadratureRules () {} public: //! maximum quadrature order for given geometry type and quadrature type static unsigned maxOrder(const GeometryType& t, QuadratureType::Enum qt=QuadratureType::GaussLegendre) { return QuadratureRuleFactory::maxOrder(t,qt); } //! select the appropriate QuadratureRule for GeometryType t and order p static const QuadratureRule& rule(const GeometryType& t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre) { return instance()._rule(t,p,qt); } //! @copydoc rule static const QuadratureRule& rule(const GeometryType::BasicType t, int p, QuadratureType::Enum qt=QuadratureType::GaussLegendre) { GeometryType gt(t,dim); return instance()._rule(gt,p,qt); } }; } // end namespace Dune #define DUNE_INCLUDING_IMPLEMENTATION // 0d rules #include "quadraturerules/pointquadrature.hh" // 1d rules #include "quadraturerules/gausslobattoquadrature.hh" #include "quadraturerules/gaussquadrature.hh" #include "quadraturerules/gaussradauleftquadrature.hh" #include "quadraturerules/gaussradaurightquadrature.hh" #include "quadraturerules/jacobi1quadrature.hh" #include "quadraturerules/jacobi2quadrature.hh" #include "quadraturerules/jacobiNquadrature.hh" // 3d rules #include "quadraturerules/prismquadrature.hh" // general rules #include "quadraturerules/simplexquadrature.hh" #include "quadraturerules/tensorproductquadrature.hh" #undef DUNE_INCLUDING_IMPLEMENTATION namespace Dune { /** \brief Factory class for creation of quadrature rules, depending on GeometryType, order and QuadratureType. The whole class is private and can only be accessed by the singleton container class QuadratureRules. */ template class QuadratureRuleFactory { private: friend class QuadratureRules; static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt) { return TensorProductQuadratureRule::maxOrder(t.id(), qt); } static QuadratureRule rule(const GeometryType& t, int p, QuadratureType::Enum qt) { return TensorProductQuadratureRule(t.id(), p, qt); } }; template class QuadratureRuleFactory { private: enum { dim = 0 }; friend class QuadratureRules; static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum) { if (t.isVertex()) { return std::numeric_limits::max(); } DUNE_THROW(Exception, "Unknown GeometryType"); } static QuadratureRule rule(const GeometryType& t, int , QuadratureType::Enum) { if (t.isVertex()) { return PointQuadratureRule(); } DUNE_THROW(Exception, "Unknown GeometryType"); } }; template class QuadratureRuleFactory { private: enum { dim = 1 }; friend class QuadratureRules; static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt) { if (t.isLine()) { switch (qt) { case QuadratureType::GaussLegendre : return GaussQuadratureRule1D::highest_order; case QuadratureType::GaussJacobi_1_0 : return Jacobi1QuadratureRule1D::highest_order; case QuadratureType::GaussJacobi_2_0 : return Jacobi2QuadratureRule1D::highest_order; case QuadratureType::GaussLobatto : return GaussLobattoQuadratureRule1D::highest_order; case QuadratureType::GaussJacobi_n_0 : return JacobiNQuadratureRule1D::maxOrder(); case QuadratureType::GaussRadauLeft : return GaussRadauLeftQuadratureRule1D::highest_order; case QuadratureType::GaussRadauRight : return GaussRadauRightQuadratureRule1D::highest_order; default : DUNE_THROW(Exception, "Unknown QuadratureType"); } } DUNE_THROW(Exception, "Unknown GeometryType"); } static QuadratureRule rule(const GeometryType& t, int p, QuadratureType::Enum qt) { if (t.isLine()) { switch (qt) { case QuadratureType::GaussLegendre : return GaussQuadratureRule1D(p); case QuadratureType::GaussJacobi_1_0 : return Jacobi1QuadratureRule1D(p); case QuadratureType::GaussJacobi_2_0 : return Jacobi2QuadratureRule1D(p); case QuadratureType::GaussLobatto : return GaussLobattoQuadratureRule1D(p); case QuadratureType::GaussJacobi_n_0 : return JacobiNQuadratureRule1D(p); case QuadratureType::GaussRadauLeft : return GaussRadauLeftQuadratureRule1D(p); case QuadratureType::GaussRadauRight : return GaussRadauRightQuadratureRule1D(p); default : DUNE_THROW(Exception, "Unknown QuadratureType"); } } DUNE_THROW(Exception, "Unknown GeometryType"); } }; template class QuadratureRuleFactory { private: enum { dim = 2 }; friend class QuadratureRules; static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt) { unsigned order = TensorProductQuadratureRule::maxOrder(t.id(), qt); if (t.isSimplex()) order = std::max (order, unsigned(SimplexQuadratureRule::highest_order)); return order; } static QuadratureRule rule(const GeometryType& t, int p, QuadratureType::Enum qt) { if (t.isSimplex() && ( qt == QuadratureType::GaussLegendre || qt == QuadratureType::GaussJacobi_n_0 ) && p <= SimplexQuadratureRule::highest_order) { return SimplexQuadratureRule(p); } return TensorProductQuadratureRule(t.id(), p, qt); } }; template class QuadratureRuleFactory { private: enum { dim = 3 }; friend class QuadratureRules; static unsigned maxOrder(const GeometryType &t, QuadratureType::Enum qt) { unsigned order = TensorProductQuadratureRule::maxOrder(t.id(), qt); if (t.isSimplex()) order = std::max (order, unsigned(SimplexQuadratureRule::highest_order)); if (t.isPrism()) order = std::max (order, unsigned(PrismQuadratureRule::highest_order)); return order; } static QuadratureRule rule(const GeometryType& t, int p, QuadratureType::Enum qt) { if (t.isSimplex() && ( qt == QuadratureType::GaussLegendre || qt == QuadratureType::GaussJacobi_n_0 ) && p <= SimplexQuadratureRule::highest_order) { return SimplexQuadratureRule(p); } if (t.isPrism() && qt == QuadratureType::GaussLegendre && p <= PrismQuadratureRule::highest_order) { return PrismQuadratureRule(p); } return TensorProductQuadratureRule(t.id(), p, qt); } }; #ifndef DUNE_NO_EXTERN_QUADRATURERULES extern template class GaussLobattoQuadratureRule; extern template class GaussQuadratureRule; extern template class GaussRadauLeftQuadratureRule; extern template class GaussRadauRightQuadratureRule; extern template class Jacobi1QuadratureRule; extern template class Jacobi2QuadratureRule; extern template class JacobiNQuadratureRule; extern template class PrismQuadratureRule; extern template class SimplexQuadratureRule; extern template class SimplexQuadratureRule; #endif // !DUNE_NO_EXTERN_QUADRATURERULES } // end namespace #endif // DUNE_GEOMETRY_QUADRATURERULES_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/000077500000000000000000000000001411346603000223215ustar00rootroot00000000000000dune-geometry-2.8.0/dune/geometry/quadraturerules/CMakeLists.txt000066400000000000000000000014321411346603000250610ustar00rootroot00000000000000install(FILES compositequadraturerule.hh gausslobattoquadrature.hh gaussquadrature.hh gaussradauleftquadrature.hh gaussradaurightquadrature.hh jacobi1quadrature.hh jacobi2quadrature.hh jacobiNquadrature.hh pointquadrature.hh prismquadrature.hh simplexquadrature.hh tensorproductquadrature.hh DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/geometry/quadraturerules) exclude_from_headercheck( "gausslobattoquadrature.hh gaussquadrature.hh gaussradauleftquadrature.hh gaussradaurightquadrature.hh jacobi1quadrature.hh jacobi2quadrature.hh jacobiNquadrature.hh pointquadrature.hh prismquadrature.hh simplexquadrature.hh tensorproductquadrature.hh") #build the library libquadraturerules dune_add_library(quadraturerules OBJECT quadraturerules.cc ) dune-geometry-2.8.0/dune/geometry/quadraturerules/compositequadraturerule.hh000066400000000000000000000043401411346603000276330ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_COMPOSITE_QUADRATURE_RULE_HH #define DUNE_GEOMETRY_COMPOSITE_QUADRATURE_RULE_HH /** \file * \brief Construct composite quadrature rules from other quadrature rules */ #include #include namespace Dune { /** \brief Construct composite quadrature rules from other quadrature rules * * \tparam ctype Type used for coordinates and quadrature weights * \tparam dim Dimension of the reference element */ template class CompositeQuadratureRule : public Dune::QuadratureRule { public: /** \brief Construct composite quadrature rule * \param quad Base quadrature rule. Element type of this rule must be simplex * \param intervals Number of refined intervals per axis */ CompositeQuadratureRule(const Dune::QuadratureRule& quad, const Dune::RefinementIntervals intervals) : QuadratureRule(quad.type(), quad.order()) { // Currently only works for simplices, because we are using the StaticRefinement assert(quad.type().isSimplex()); typedef Dune::StaticRefinement Refinement; typedef typename Refinement::ElementIterator eIterator; ctype volume = Dune::ReferenceElements::general(quad.type()).volume(); eIterator eSubEnd = Refinement::eEnd(intervals); eIterator eSubIt = Refinement::eBegin(intervals); for (; eSubIt != eSubEnd; ++eSubIt) { // Percentage of the overall volume of this subelement ctype volumeFraction = eSubIt.geometry().volume() / volume; for (size_t i=0; ipush_back(Dune::QuadraturePoint(eSubIt.geometry().global(quad[i].position()), volumeFraction*quad[i].weight())); } } } }; } #endif // DUNE_GEOMETRY_COMPOSITE_QUADRATURE_RULE_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/gaussjacobi.mac000066400000000000000000000026671411346603000253100ustar00rootroot00000000000000/* * Run `maxima --batch gaussjacobi.mac'. */ /* adjust search path */ file_search_maxima: append(["$$$.{mac,max}"],file_search_maxima); load(orthopoly)$ load(stringproc)$ load(writequad)$ fpprec: 100$ maxp: 61$ /* float2bf: false$ */ /* see https://mathworld.wolfram.com/Jacobi-GaussQuadrature.html Gauss-Jacobi uses a weight function (1- x)^a (1 + x)^b, thus the case a = 0, b = 0 is the Gauss-Legendre rule. */ jacobi(p,a,b) := jacobi_p(p,a,b,x)$ jacobi_p_x(p,a,b,x) := 1/2*(p+a+b+1)*jacobi_p(p-1,a+1,b+1,x)$ /* d/dx jacobi_p, (see http://mathworld.wolfram.com/JacobiPolynomial.html) */ A(n,a,b) := gamma(2*n+a+b+1)/(2^n*n!*gamma(n+a+b+1))$ gamma_n(n,a,b) := 1/(2^(2*n)*(n!)^2)*(2^(2*n+a+b+1)*n!)/(2*n+a+b+1)*(gamma(n+a+1)*gamma(n+b+1))/gamma(n+a+b+1)$ weight(n,a,b,xx) := A(n,a,b)/A(n-1,a,b)*gamma_n(n-1,a,b)/(at(ratexpand(jacobi_p(n-1,a,b,x)*jacobi_p_x(n,a,b,x)), x=xx))$ write_quad("jacobi1quadrature.hh", "Jacobi1", "jacobian.mac", lambda([i],jacobi(i,1,0)), lambda([i,p],weight(i,1,0,p)), maxp, 0)$ write_quad("jacobi2quadrature.hh", "Jacobi2", "jacobian.mac", lambda([i],jacobi(i,2,0)), lambda([i,p],weight(i,2,0,p)), maxp, 0)$ write_quad("gaussquadrature.hh", "Gauss", "jacobian.mac", lambda([i],jacobi(i,0,0)), lambda([i,p],weight(i,0,0,p)), maxp, 0)$ /* * Local variables: * mode: maxima * compile-command: "maxima --batch gaussjacobi.mac" * End: */ dune-geometry-2.8.0/dune/geometry/quadraturerules/gausslobatto.mac000066400000000000000000000015561411346603000255210ustar00rootroot00000000000000/* * Run `maxima --batch gausslobatto.mac'. */ /* adjust search path */ file_search_maxima: append(["$$$.{mac,max}"],file_search_maxima); load(orthopoly)$ load(stringproc)$ load(writequad)$ orthopoly_returns_intervals : false; fpprec: 120$ fpprintprec: 100$ maxp: 31$ /* float2bf: false$ */ /* see https://mathworld.wolfram.com/LobattoQuadrature.html, inner points are given as the roots of legendre_{n-1}'(x) to generate outer points at -1 and 1, we multiply by (x^2 - 1) */ point(n) := (x^2-1)*diff(legendre_p(n-1,x),x)$ weight(n,xx) := at(ratsimp(2/((n*(n-1))*legendre_p(n-1,x)^2)), x=xx)$ write_quad("gausslobattoquadrature.hh", "GaussLobatto", "gausslobatto.mac", lambda([i],point(i)), lambda([i,p],weight(i,p)), maxp, 2)$ /* * Local variables: * mode: maxima * compile-command: "maxima --batch gausslobatto.mac" * End: */ dune-geometry-2.8.0/dune/geometry/quadraturerules/gausslobattoquadrature.hh000066400000000000000000002330411411346603000274520ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by gausslobatto.mac! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_GaussLobatto_HH #define DUNE_GEOMETRY_QUADRATURE_GaussLobatto_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class GaussLobattoQuadratureRule; template using GaussLobattoQuadratureRule1D = GaussLobattoQuadratureRule; template class GaussLobattoQuadratureRule : public QuadratureRule { public: /** brief The highest quadrature order available */ enum { highest_order=31 }; private: friend class QuadratureRuleFactory; GaussLobattoQuadratureRule (int p); ~GaussLobattoQuadratureRule(){} }; //! internal Helper template for the initialization of the quadrature rules template::value> struct GaussLobattoQuadratureInitHelper; template struct GaussLobattoQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct GaussLobattoQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void GaussLobattoQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(2); _weight.resize(2); _points[0] = 0.0; _weight[0] = 0.5; _points[1] = 1.0; _weight[1] = 0.5; break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(3); _weight.resize(3); _points[0] = 0.0; _weight[0] = 0.1666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; _points[1] = 1.0; _weight[1] = 0.1666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; _points[2] = 0.5; _weight[2] = 0.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(4); _weight.resize(4); _points[0] = 0.0; _weight[0] = 0.08333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; _points[1] = 1.0; _weight[1] = 0.08333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; _points[2] = 0.7236067977499789696409173668731276235440618359611525724270897245410520925637804899414414408378782274; _weight[2] = 0.4166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; _points[3] = 0.2763932022500210303590826331268723764559381640388474275729102754589479074362195100585585591621217725; _weight[3] = 0.4166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(5); _weight.resize(5); _points[0] = 0.0; _weight[0] = 0.05; _points[1] = 1.0; _weight[1] = 0.05; _points[2] = 0.8273268353539885718991462281234291777846040411977122787576601517076334589676979204717401113923889309; _weight[2] = 0.2722222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222; _points[3] = 0.172673164646011428100853771876570822215395958802287721242339848292366541032302079528259888607611069; _weight[3] = 0.2722222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222; _points[4] = 0.5; _weight[4] = 0.3555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555; break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(6); _weight.resize(6); _points[0] = 1.0; _weight[0] = 0.03333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; _points[1] = 0.0; _weight[1] = 0.03333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; _points[2] = 0.8825276619647323464255014869796690751828678442680521196637911779185276585194132570617486353648669365; _weight[2] = 0.1892374781489234901583064041060123262381623469486258303271944256799821862794952728706601185587576064; _points[3] = 0.1174723380352676535744985130203309248171321557319478803362088220814723414805867429382513646351330634; _weight[3] = 0.1892374781489234901583064041060123262381623469486258303271944256799821862794952728706601185587576064; _points[4] = 0.6426157582403225481570754970204395359595017363632126959098752082638489654570997990908378640025315086; _weight[4] = 0.2774291885177431765083602625606543404285043197180408363394722409866844803871713937960065481079090601; _points[5] = 0.3573842417596774518429245029795604640404982636367873040901247917361510345429002009091621359974684913; _weight[5] = 0.2774291885177431765083602625606543404285043197180408363394722409866844803871713937960065481079090601; break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(7); _weight.resize(7); _points[0] = 1.0; _weight[0] = 0.0238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238; _points[1] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002904443936136988704613522974964763885677664394036593149115822206008312261073264473647011675707760947; _weight[1] = 0.0238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238; _points[2] = 0.08488805186071653506398389301626743020641481756400195420459339398355773991365476236892514937696012313; _weight[2] = 0.1384130236807829740053502031450331467488136400899412345912671194817223119377730668076642690885561219; _points[3] = 0.9151119481392834649360161069837325697935851824359980457954066060164422600863452376310748506230398768; _weight[3] = 0.1384130236807829740053502031450331467488136400899412345912671194817223119377730668076642690885561219; _points[4] = 0.7344243967353571069018859409543831647027987358359223785513347296814777650585638543983611678787947876; _weight[4] = 0.2158726906049313117089355111406811389654720741957730511230185948039919737765126474780500166257295923; _points[5] = 0.2655756032646428930981140590456168352972012641640776214486652703185222349414361456016388321212052123; _weight[5] = 0.2158726906049313117089355111406811389654720741957730511230185948039919737765126474780500166257295923; _points[6] = 0.5; _weight[6] = 0.2438095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238; break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(8); _weight.resize(8); _points[0] = 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001549036765939727309127212253314540739028087676819516346195105176537766539239074385945072893710805838; _weight[0] = 0.01785714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285; _points[1] = 1.0; _weight[1] = 0.01785714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285; _points[2] = 0.06412992574519669233127711938966828094810966516150832254029235721305050295351572963692523667104884704; _weight[2] = 0.1053521135717530196914960328878781622276730830805238840416702908213176249782427570033442170483194548; _points[3] = 0.9358700742548033076687228806103317190518903348384916774597076427869494970464842703630747633289511529; _weight[3] = 0.1053521135717530196914960328878781622276730830805238840416702908213176249782427570033442170483194548; _points[4] = 0.2041499092834288489277446343010234050271495052413337516288702042649259099754335560686927101889881905; _weight[4] = 0.1705613462417521823821203385538740858875554878027908047375010369442754416180982144816276727935324054; _points[5] = 0.7958500907165711510722553656989765949728504947586662483711297957350740900245664439313072898110118094; _weight[5] = 0.1705613462417521823821203385538740858875554878027908047375010369442754416180982144816276727935324054; _points[6] = 0.395350391048760565615671369827324372352227297456659450554576653838934538176858502305738892317405195; _weight[6] = 0.2062293973293519407835264857011048947419142862595424540779715293772640762608018856578852530152909968; _points[7] = 0.6046496089512394343843286301726756276477727025433405494454233461610654618231414976942611076825948049; _weight[7] = 0.2062293973293519407835264857011048947419142862595424540779715293772640762608018856578852530152909968; break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(9); _weight.resize(9); _points[0] = 1.0; _weight[0] = 0.01388888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888; _points[1] = 0.0; _weight[1] = 0.01388888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888; _points[2] = 0.9498789977057300786561726222091689790257401477830522112146563342424066372831593591455065601562473983; _weight[2] = 0.08274768078040276252316986001460415291955361461257967072311179727342770476090831589283759518613984932; _points[3] = 0.0501210022942699213438273777908310209742598522169477887853436657575933627168406408544934398437526016; _weight[3] = 0.08274768078040276252316986001460415291955361461257967072311179727342770476090831589283759518613984932; _points[4] = 0.8385931397553688767229427135456712253555148238069532897704816877485492639923251368904119391580218527; _weight[4] = 0.1372693562500808676403528092896863629706256104932546432683968144564555261002751690643475473152907202; _points[5] = 0.1614068602446311232770572864543287746444851761930467102295183122514507360076748631095880608419781472; _weight[5] = 0.1372693562500808676403528092896863629706256104932546432683968144564555261002751690643475473152907202; _points[6] = 0.3184412680869109206446239656456703934896788611995609248398631346141947861831005209724334640762918559; _weight[6] = 0.1732142554865231725575657660698591439737663531254582030152941093585521432884763789883930887910864372; _points[7] = 0.681558731913089079355376034354329606510321138800439075160136865385805213816899479027566535923708144; _weight[7] = 0.1732142554865231725575657660698591439737663531254582030152941093585521432884763789883930887910864372; _points[8] = 0.5; _weight[8] = 0.1857596371882086167800453514739229024943310657596371882086167800453514739229024943310657596371882086; break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(10); _weight.resize(10); _points[0] = 0.0; _weight[0] = 0.01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; _points[1] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[1] = 0.01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; _points[2] = 0.9597669540832294069144663304111690670767715377231379357448130722921337207389566406624398831120400544; _weight[2] = 0.06665299542553505556311358537769644905481293749889870744394545177223272630319979100654865458543383692; _points[3] = 0.04023304591677059308553366958883093292322846227686206425518692770786627926104335933756011688795994553; _weight[3] = 0.06665299542553505556311358537769644905481293749889870744394545177223272630319979100654865458543383692; _points[4] = 0.1306130674472474624984469125700846374919074493115366572674455034724233421300450991628551068727132423; _weight[4] = 0.1124446710315632260597289108655239213769564569808753205698293668550268429721130302051805489888586408; _points[5] = 0.8693869325527525375015530874299153625080925506884633427325544965275766578699549008371448931272867576; _weight[5] = 0.1124446710315632260597289108655239213769564569808753205698293668550268429721130302051805489888586408; _points[6] = 0.7389624749052222478305875463656289989433864466652832344571284198458112755442385696883357954490915833; _weight[6] = 0.1460213418398418789377911286872219461037441948438537722956863552702313819943238307386809881581312696; _points[7] = 0.2610375250947777521694124536343710010566135533347167655428715801541887244557614303116642045509084166; _weight[7] = 0.1460213418398418789377911286872219461037441948438537722956863552702313819943238307386809881581312696; _points[8] = 0.5826394788331935123131098829790867666155751717747418655664497860523941482272025775233841371104750817; _weight[8] = 0.1637698805919487283282552639584465723533752995652610885794277149913979376192522369384786971564651414; _points[9] = 0.4173605211668064876868901170209132333844248282252581344335502139476058517727974224766158628895249182; _weight[9] = 0.1637698805919487283282552639584465723533752995652610885794277149913979376192522369384786971564651414; break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(11); _weight.resize(11); _points[0] = 1.0; _weight[0] = 0.00909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909; _points[1] = 0.0; _weight[1] = 0.00909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909; _points[2] = 0.9670007152040295671661370680496918172699586650549811129458133766356780087548081709916232169156970607; _weight[2] = 0.05480613663349743223070172479017535502473707182363836539885294065931654717715138590082101464198927283; _points[3] = 0.03299928479597043283386293195030818273004133494501888705418662336432199124519182900837678308430293929; _weight[3] = 0.05480613663349743223070172479017535502473707182363836539885294065931654717715138590082101464198927283; _points[4] = 0.892241736831572209311208908054229051753598727547031810841317670384292356072438301406275095976056209; _weight[4] = 0.09358494089015260205407076094971745978459711881256415930366621871642170384257546685129643660489965628; _points[5] = 0.1077582631684277906887910919457709482464012724529681891586823296157076439275616985937249040239437909; _weight[5] = 0.09358494089015260205407076094971745978459711881256415930366621871642170384257546685129643660489965628; _points[6] = 0.7826176634981025032354819847388758321415260727810084878455786240399387940744215451190810370232123008; _weight[6] = 0.1240240521320141570200424332109363766718365848238569396279913609888950520696501358814450312642000429; _points[7] = 0.2173823365018974967645180152611241678584739272189915121544213759600612059255784548809189629767876991; _weight[7] = 0.1240240521320141570200424332109363766718365848238569396279913609888950520696501358814450312642000429; _points[8] = 0.3521209322065303042840442422204712455294967828256979452660503130991900191117723604867820025394588373; _weight[8] = 0.1434395623895040443396112016657676155918267737279659141710584573948206468407634176973200388476228628; _points[9] = 0.6478790677934696957159557577795287544705032171743020547339496869008099808882276395132179974605411626; _weight[9] = 0.1434395623895040443396112016657676155918267737279659141710584573948206468407634176973200388476228628; _points[10] = 0.5; _weight[10] = 0.150108797727845346892965940584988204035823083442131061178680226299273918321537369156416775464394512; break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(12); _weight.resize(12); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.007575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575; _points[1] = 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001781392280830686405496294091311721849882300828342443798124370953018431520124935543836833827767426714; _weight[1] = 0.007575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575; _points[2] = 0.9724496361114411117037900691516093568056282759750136618569459485382739614097129863036522718431158904; _weight[2] = 0.04584225870659806533417129706703964315515307070889136931061275310990361357783848684308507448673158955; _points[3] = 0.02755036388855888829620993084839064319437172402498633814305405146172603859028701369634772815688410958; _weight[3] = 0.04584225870659806533417129706703964315515307070889136931061275310990361357783848684308507448673158955; _points[4] = 0.9096396608220033391743207908584513303452333289518221447116583630584383637955809711802462446795835436; _weight[4] = 0.07898735278218505758233553135017013412555315821172857986311633305270821238841224811543749121853323673; _points[5] = 0.09036033917799666082567920914154866965476667104817785528834163694156163620441902881975375532041645631; _weight[5] = 0.07898735278218505758233553135017013412555315821172857986311633305270821238841224811543749121853323673; _points[6] = 0.1835619234840696611687975727781720708780781272992495035174232176764738789977703147774259772755113555; _weight[6] = 0.1062542088805105726791510386834331350976728113826704167480374016271802552798567101722855158636420027; _points[7] = 0.8164380765159303388312024272218279291219218727007504964825767823235261210022296852225740227244886444; _weight[7] = 0.1062542088805105726791510386834331350976728113826704167480374016271802552798567101722855158636420027; _points[8] = 0.3002345295173255338678251042165165497361259836023464817560311639749518780463076119023391127095642402; _weight[8] = 0.1256378015996006401466222060737980916667192386749018227851616430721088752475131313979115974684259527; _points[9] = 0.6997654704826744661321748957834834502638740163976535182439688360250481219536923880976608872904357597; _weight[9] = 0.1256378015996006401466222060737980916667192386749018227851616430721088752475131313979115974684259527; _points[10] = 0.5682764664274637774320309278698469484492070556410291927257907830335263719510014649425107069687302462; _weight[10] = 0.1357026204553480885001441692498014201973259634460502355354961115623414677488036658955227452050914607; _points[11] = 0.4317235335725362225679690721301530515507929443589708072742092169664736280489985350574892930312697537; _weight[11] = 0.1357026204553480885001441692498014201973259634460502355354961115623414677488036658955227452050914607; break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(13); _weight.resize(13); _points[0] = 0.0; _weight[0] = 0.00641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641; _points[1] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[1] = 0.00641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641; _points[2] = 0.02334507667891804405154726762227542418674605565131840740531369857455020885063439127346774598036632099; _weight[2] = 0.0389008433734094638967944941665667925339174087467514605233128729415757024537583966937200977779876481; _points[3] = 0.976654923321081955948452732377724575813253944348681592594686301425449791149365608726532254019633679; _weight[3] = 0.0389008433734094638967944941665667925339174087467514605233128729415757024537583966937200977779876481; _points[4] = 0.9231737823259361584329628035493766797890183298572043128443235063330532850312931300329387414715691132; _weight[4] = 0.06749096334480417455995738129468544462808634604633970926140225037869972013091141957836110227640939973; _points[5] = 0.07682621767406384156703719645062332021098167014279568715567649366694671496870686996706125852843088673; _weight[5] = 0.06749096334480417455995738129468544462808634604633970926140225037869972013091141957836110227640939973; _points[6] = 0.8430942345408787130363795197831777764645880990621922135313456729477343290000594746197466466146762111; _weight[6] = 0.09182343260177504600374712937340536162323684348411899957251376072910922878179385695546726564985561977; _points[7] = 0.1569057654591212869636204802168222235354119009378077864686543270522656709999405253802533533853237888; _weight[7] = 0.09182343260177504600374712937340536162323684348411899957251376072910922878179385695546726564985561977; _points[8] = 0.7414549105456681008734686168184668103860966310592950052388620460244065895536486935472233899127883465; _weight[8] = 0.1103838967830550430427670041896981487336314366669976023658147040938593495671724384857987952065895178; _points[9] = 0.2585450894543318991265313831815331896139033689407049947611379539755934104463513064527766100872116534; _weight[9] = 0.1103838967830550430427670041896981487336314366669976023658147040938593495671724384857987952065895178; _points[10] = 0.6246434650531199962843368501871134907444056562464879296492579543168629813997495722095567115050590931; _weight[10] = 0.1220078951533381782292890741800781062656311002082780301134075989572937489547631273352424370295051055; _points[11] = 0.3753565349468800037156631498128865092555943437535120703507420456831370186002504277904432884949409068; _weight[11] = 0.1220078951533381782292890741800781062656311002082780301134075989572937489547631273352424370295051055; _points[12] = 0.5; _weight[12] = 0.1259654246667233680220693207706194719181732168745155758142771129784116797103810090823077836064849051; break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(14); _weight.resize(14); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005808887872273977409227045949929527771355328788073186298231644412016624522146528947294023351415521895; _weight[0] = 0.005494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494; _points[1] = 1.0; _weight[1] = 0.005494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494; _points[2] = 0.9799675226336304506775500810077121945331957592863239681820791169260133487974757775199042286321829837; _weight[2] = 0.03341864224884064231703533037302641252882102672534121692222483303009226559175047551719708298586707101; _points[3] = 0.02003247736636954932244991899228780546680424071367603181792088307398665120252422248009577136781701629; _weight[3] = 0.03341864224884064231703533037302641252882102672534121692222483303009226559175047551719708298586707101; _points[4] = 0.9339005269151736255001101014541321066249361765472180673794130920541252668245245267203554324860697834; _weight[4] = 0.05829332794935582577049833532732511500235292745003663959760895323543240778750567194044396987500606793; _points[5] = 0.06609947308482637449988989854586789337506382345278193262058690794587473317547547327964456751393021655; _weight[5] = 0.05829332794935582577049833532732511500235292745003663959760895323543240778750567194044396987500606793; _points[6] = 0.1355657004543369297076637997395592021713302341528390986938780173861806180949423040135067458535801027; _weight[6] = 0.08001092588147607120641049899379732025190127481644053508436702226934193033044997746120149036223738033; _points[7] = 0.8644342995456630702923362002604407978286697658471609013061219826138193819050576959864932541464198972; _weight[7] = 0.08001092588147607120641049899379732025190127481644053508436702226934193033044997746120149036223738033; _points[8] = 0.7753197014643235276583113529295403172310691597769570669118964569840194786616101591806838309484212402; _weight[8] = 0.09741307468670805932016588918794225607431437802593237813822327477031059996400034347363088705644911479; _points[9] = 0.2246802985356764723416886470704596827689308402230429330881035430159805213383898408193161690515787597; _weight[9] = 0.09741307468670805932016588918794225607431437802593237813822327477031059996400034347363088705644911479; _points[10] = 0.3286379933286435774780482981791626775834432329298466267225425835645065531681161297198297276026186597; _weight[10] = 0.1095631265048853774355812619770838064791660572294379130680725719561649077524406590646769454901926409; _points[11] = 0.6713620066713564225219517018208373224165567670701533732774574164354934468318838702801702723973813402; _weight[11] = 0.1095631265048853774355812619770838064791660572294379130680725719561649077524406590646769454901926409; _points[12] = 0.5581659344418519338293883548680800839707545221281403841016624302939858113313899297688593325388222553; _weight[12] = 0.1158063972342285294448141786463195951579498302583058226840088392441523940683583670483441297247532194; _points[13] = 0.4418340655581480661706116451319199160292454778718596158983375697060141886686100702311406674611777446; _weight[13] = 0.1158063972342285294448141786463195951579498302583058226840088392441523940683583670483441297247532194; break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(15); _weight.resize(15); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001776551540937124757655271553020113910072838054352382809542511249341750999689813436380755474974580446; _weight[0] = 0.004761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761; _points[1] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[1] = 0.004761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761; _points[2] = 0.9826229632519192863979256960348005888538250679985466700362492292135561186010360176002647647677775953; _weight[2] = 0.02901494651430062454844029201264099771784336341300745188628787274113154341266805777513760661557424098; _points[3] = 0.01737703674808071360207430396519941114617493200145332996375077078644388139896398239973523523222240469; _weight[3] = 0.02901494651430062454844029201264099771784336341300745188628787274113154341266805777513760661557424098; _points[4] = 0.05745897788851185058729918425888517400564295739626101359130918465945600252159841114408283401864691438; _weight[4] = 0.05083003516285903380183308539440035774049179685830295249610959702031866582180688751549009744250530787; _points[5] = 0.9425410221114881494127008157411148259943570426037389864086908153405439974784015888559171659813530856; _weight[5] = 0.05083003516285903380183308539440035774049179685830295249610959702031866582180688751549009744250530787; _points[6] = 0.118240155024092399647940762011854190911315739842354831622647197476461454480323624696818048989422683; _weight[6] = 0.07025584990121405473022340282183644531174217730120397909471137253624043283501972733710362696598904353; _points[7] = 0.8817598449759076003520592379881458090886842601576451683773528025235385455196763753031819510105773169; _weight[7] = 0.07025584990121405473022340282183644531174217730120397909471137253624043283501972733710362696598904353; _points[8] = 0.8031266027349228555617649693183667535898655168799598928429147519895983898552691820429755996920806906; _weight[8] = 0.08639482362680047452603854970417529367831783151340264536420857384867707112931518213672195839280670621; _points[9] = 0.1968733972650771444382350306816332464101344831200401071570852480104016101447308179570244003079193093; _weight[9] = 0.08639482362680047452603854970417529367831783151340264536420857384867707112931518213672195839280670621; _points[10] = 0.7103190273568362404609484693692902064921691027462151841925466804687845341292931576115237553308309106; _weight[10] = 0.09849361798230667804625017325370329743180197541674521423484253266047333445216804975440106121504710919; _points[11] = 0.2896809726431637595390515306307097935078308972537848158074533195312154658707068423884762446691690893; _weight[11] = 0.09849361798230667804625017325370329743180197541674521423484253266047333445216804975440106121504710919; _points[12] = 0.3923230223181028808871602768635411436739210493984794682627474261791448221666457778202343230232392067; _weight[12] = 0.1059867929634104600637150384886104583118278726971801315913895439174768514920960637299390729866760359; _points[13] = 0.6076769776818971191128397231364588563260789506015205317372525738208551778333542221797656769767607932; _weight[13] = 0.1059867929634104600637150384886104583118278726971801315913895439174768514920960637299390729866760359; _points[14] = 0.5; _weight[14] = 0.1085240581744078247574751071254567758064261560765057268553772050275546779043282539786036289532793029; break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(16); _weight.resize(16); _points[0] = 1.0; _weight[0] = 0.004166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; _points[1] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001717494514235672653994796585862497044397392211673638748843822864486248650381323725416599570901855973; _weight[1] = 0.004166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; _points[2] = 0.9847840231351089664761213691837296206944953732519173650343393661412705259269883781602191879541709236; _weight[2] = 0.02542518050295995270162245978272765724693591376889349195640334722202949369151888747237233700872763844; _points[3] = 0.0152159768648910335238786308162703793055046267480826349656606338587294740730116218397808120458290763; _weight[3] = 0.02542518050295995270162245978272765724693591376889349195640334722202949369151888747237233700872763844; _points[4] = 0.05039973345326395350268586924007526162500119547742778728778629410576180140857154234663004161524265869; _weight[4] = 0.04469684866296540049552604008304185746694360501889948923847233213965134199681727331844744019578417196; _points[5] = 0.9496002665467360464973141307599247383749988045225722127122137058942381985914284576533699583847573413; _weight[5] = 0.04469684866296540049552604008304185746694360501889948923847233213965134199681727331844744019578417196; _points[6] = 0.8960041459309075319655441354815728529040369139900995113422053249329981450139975002211832902895663786; _weight[6] = 0.06212769106625704917476816632865660038719901563494977010533863640312703155896799226312485062586658436; _points[7] = 0.1039958540690924680344558645184271470959630860099004886577946750670018549860024997788167097104336213; _weight[7] = 0.06212769106625704917476816632865660038719901563494977010533863640312703155896799226312485062586658436; _points[8] = 0.1738056485587534552660583901797092598392209935852128313071093578888814784597858327102665672608913001; _weight[8] = 0.07701349040358214040782247024249725772270812099182066142850652272505318441638252145157789038843411783; _points[9] = 0.8261943514412465447339416098202907401607790064147871686928906421111185215402141672897334327391086998; _weight[9] = 0.07701349040358214040782247024249725772270812099182066142850652272505318441638252145157789038843411783; _points[10] = 0.7430297109435688058909453929234373484444886521491262856883284338033922487167612097283758109612034; _weight[10] = 0.08874595669585206265053783476417888507915737258808560675748197508328136667564757334406922314835077358; _points[11] = 0.2569702890564311941090546070765626515555113478508737143116715661966077512832387902716241890387965999; _weight[11] = 0.08874595669585206265053783476417888507915737258808560675748197508328136667564757334406922314835077358; _points[12] = 0.6499152344503816040491767273611503239077304884538888323271550488220204384855463949826705488978888995; _weight[12] = 0.0968450119126017921584567994267610151531789970092036625918329566734849788429878017911249745539485532; _points[13] = 0.3500847655496183959508232726388496760922695115461111676728449511779795615144536050173294511021111004; _weight[13] = 0.0968450119126017921584567994267610151531789970092036625918329566734849788429878017911249745539485532; _points[14] = 0.4493368632390252760784834974770411187333795427999044300412248998728460413102109205056194162045666875; _weight[14] = 0.1009791540891149357445995627054700602772103083214806512552975630867059361510112836926166174122214939; _points[15] = 0.5506631367609747239215165025229588812666204572000955699587751001271539586897890794943805837954333124; _weight[15] = 0.1009791540891149357445995627054700602772103083214806512552975630867059361510112836926166174122214939; break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(17); _weight.resize(17); _points[0] = 0.0; _weight[0] = 0.003676470588235294117647058823529411764705882352941176470588235294117647058823529411764705882352941176; _points[1] = 1.0; _weight[1] = 0.003676470588235294117647058823529411764705882352941176470588235294117647058823529411764705882352941176; _points[2] = 0.9865660883157091570784897509368607152944795745612547432232459215480390687332058160630984405164903217; _weight[2] = 0.02246097027162710482370047731160622165909985422213544924833396204747853346803054054679261056524380165; _points[3] = 0.01343391168429084292151024906313928470552042543874525677675407845196093126679418393690155948350967826; _weight[3] = 0.02246097027162710482370047731160622165909985422213544924833396204747853346803054054679261056524380165; _points[4] = 0.9554399979577867978119012531988632337654397259343663821609062796554833300363345816190854768507479496; _weight[4] = 0.03959913525184355959513221497641725204918210926342338676126317758881904561019931791094586405300662264; _points[5] = 0.04456000204221320218809874680113676623456027406563361783909372034451666996366541838091452314925205037; _weight[5] = 0.03959913525184355959513221497641725204918210926342338676126317758881904561019931791094586405300662264; _points[6] = 0.9078481256108851535533752766187633273582011985335617790749319807934202397930005886582665845290317207; _weight[6] = 0.05529645450351408068788635261003840181971611225363821508003451652482392857878578150910441495304482895; _points[7] = 0.09215187438911484644662472338123667264179880146643822092506801920657976020699941134173341547096827924; _weight[7] = 0.05529645450351408068788635261003840181971611225363821508003451652482392857878578150910441495304482895; _points[8] = 0.1544855096861576473025403213137733515967934689047922857963009513809809776082858467655372231955925407; _weight[8] = 0.06899387310096327952810078747701258533295163289000440269653946874332343735749826826562576005869369419; _points[9] = 0.8455144903138423526974596786862266484032065310952077142036990486190190223917141532344627768044074592; _weight[9] = 0.06899387310096327952810078747701258533295163289000440269653946874332343735749826826562576005869369419; _points[10] = 0.7706926996650507695618667037520316258375733239824155726604727057271799870936741109100660654933706336; _weight[10] = 0.08019733099881076975816418293237564513290902065869140324995695076068173451229411554538913632561719631; _points[11] = 0.2293073003349492304381332962479683741624266760175844273395272942728200129063258890899339345066293663; _weight[11] = 0.08019733099881076975816418293237564513290902065869140324995695076068173451229411554538913632561719631; _points[12] = 0.6860872167827385209536173403676289062799086572001402867325516717899853619419213067667865572344459824; _weight[12] = 0.0885021267578289352184728726816462459105382395892224688500305543093532815923565641483716296132573368; _points[13] = 0.3139127832172614790463826596323710937200913427998597132674483282100146380580786932332134427655540175; _weight[13] = 0.0885021267578289352184728726816462459105382395892224688500305543093532815923565641483716296132573368; _points[14] = 0.4052440132408413058478684926234430143275037885387507147110643644161601040392422935122524506671460895; _weight[14] = 0.09360816983880961794604424143031086813356487629712529604402863683694700387971868875767801014577462951; _points[15] = 0.5947559867591586941521315073765569856724962114612492852889356355838398959607577064877475493328539104; _weight[15] = 0.09360816983880961794604424143031086813356487629712529604402863683694700387971868875767801014577462951; _points[16] = 0.5; _weight[16] = 0.09533093737673471664970362351412673639466454494563640319844899578891077588458638780865573680601789747; break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } // for non-fundamental types: assign numbers as strings template void GaussLobattoQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(2); _weight.resize(2); _points[0] = ct("0.0"); _weight[0] = ct("0.5"); _points[1] = ct("1.0"); _weight[1] = ct("0.5"); break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(3); _weight.resize(3); _points[0] = ct("0.0"); _weight[0] = ct("0.1666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); _points[1] = ct("1.0"); _weight[1] = ct("0.1666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); _points[2] = ct("0.5"); _weight[2] = ct("0.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(4); _weight.resize(4); _points[0] = ct("0.0"); _weight[0] = ct("0.08333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); _points[1] = ct("1.0"); _weight[1] = ct("0.08333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); _points[2] = ct("0.7236067977499789696409173668731276235440618359611525724270897245410520925637804899414414408378782274"); _weight[2] = ct("0.4166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); _points[3] = ct("0.2763932022500210303590826331268723764559381640388474275729102754589479074362195100585585591621217725"); _weight[3] = ct("0.4166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(5); _weight.resize(5); _points[0] = ct("0.0"); _weight[0] = ct("0.05"); _points[1] = ct("1.0"); _weight[1] = ct("0.05"); _points[2] = ct("0.8273268353539885718991462281234291777846040411977122787576601517076334589676979204717401113923889309"); _weight[2] = ct("0.2722222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"); _points[3] = ct("0.172673164646011428100853771876570822215395958802287721242339848292366541032302079528259888607611069"); _weight[3] = ct("0.2722222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"); _points[4] = ct("0.5"); _weight[4] = ct("0.3555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"); break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(6); _weight.resize(6); _points[0] = ct("1.0"); _weight[0] = ct("0.03333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); _points[1] = ct("0.0"); _weight[1] = ct("0.03333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); _points[2] = ct("0.8825276619647323464255014869796690751828678442680521196637911779185276585194132570617486353648669365"); _weight[2] = ct("0.1892374781489234901583064041060123262381623469486258303271944256799821862794952728706601185587576064"); _points[3] = ct("0.1174723380352676535744985130203309248171321557319478803362088220814723414805867429382513646351330634"); _weight[3] = ct("0.1892374781489234901583064041060123262381623469486258303271944256799821862794952728706601185587576064"); _points[4] = ct("0.6426157582403225481570754970204395359595017363632126959098752082638489654570997990908378640025315086"); _weight[4] = ct("0.2774291885177431765083602625606543404285043197180408363394722409866844803871713937960065481079090601"); _points[5] = ct("0.3573842417596774518429245029795604640404982636367873040901247917361510345429002009091621359974684913"); _weight[5] = ct("0.2774291885177431765083602625606543404285043197180408363394722409866844803871713937960065481079090601"); break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(7); _weight.resize(7); _points[0] = ct("1.0"); _weight[0] = ct("0.0238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238"); _points[1] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002904443936136988704613522974964763885677664394036593149115822206008312261073264473647011675707760947"); _weight[1] = ct("0.0238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238"); _points[2] = ct("0.08488805186071653506398389301626743020641481756400195420459339398355773991365476236892514937696012313"); _weight[2] = ct("0.1384130236807829740053502031450331467488136400899412345912671194817223119377730668076642690885561219"); _points[3] = ct("0.9151119481392834649360161069837325697935851824359980457954066060164422600863452376310748506230398768"); _weight[3] = ct("0.1384130236807829740053502031450331467488136400899412345912671194817223119377730668076642690885561219"); _points[4] = ct("0.7344243967353571069018859409543831647027987358359223785513347296814777650585638543983611678787947876"); _weight[4] = ct("0.2158726906049313117089355111406811389654720741957730511230185948039919737765126474780500166257295923"); _points[5] = ct("0.2655756032646428930981140590456168352972012641640776214486652703185222349414361456016388321212052123"); _weight[5] = ct("0.2158726906049313117089355111406811389654720741957730511230185948039919737765126474780500166257295923"); _points[6] = ct("0.5"); _weight[6] = ct("0.2438095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238"); break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(8); _weight.resize(8); _points[0] = ct("0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001549036765939727309127212253314540739028087676819516346195105176537766539239074385945072893710805838"); _weight[0] = ct("0.01785714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285"); _points[1] = ct("1.0"); _weight[1] = ct("0.01785714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285714285"); _points[2] = ct("0.06412992574519669233127711938966828094810966516150832254029235721305050295351572963692523667104884704"); _weight[2] = ct("0.1053521135717530196914960328878781622276730830805238840416702908213176249782427570033442170483194548"); _points[3] = ct("0.9358700742548033076687228806103317190518903348384916774597076427869494970464842703630747633289511529"); _weight[3] = ct("0.1053521135717530196914960328878781622276730830805238840416702908213176249782427570033442170483194548"); _points[4] = ct("0.2041499092834288489277446343010234050271495052413337516288702042649259099754335560686927101889881905"); _weight[4] = ct("0.1705613462417521823821203385538740858875554878027908047375010369442754416180982144816276727935324054"); _points[5] = ct("0.7958500907165711510722553656989765949728504947586662483711297957350740900245664439313072898110118094"); _weight[5] = ct("0.1705613462417521823821203385538740858875554878027908047375010369442754416180982144816276727935324054"); _points[6] = ct("0.395350391048760565615671369827324372352227297456659450554576653838934538176858502305738892317405195"); _weight[6] = ct("0.2062293973293519407835264857011048947419142862595424540779715293772640762608018856578852530152909968"); _points[7] = ct("0.6046496089512394343843286301726756276477727025433405494454233461610654618231414976942611076825948049"); _weight[7] = ct("0.2062293973293519407835264857011048947419142862595424540779715293772640762608018856578852530152909968"); break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(9); _weight.resize(9); _points[0] = ct("1.0"); _weight[0] = ct("0.01388888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"); _points[1] = ct("0.0"); _weight[1] = ct("0.01388888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"); _points[2] = ct("0.9498789977057300786561726222091689790257401477830522112146563342424066372831593591455065601562473983"); _weight[2] = ct("0.08274768078040276252316986001460415291955361461257967072311179727342770476090831589283759518613984932"); _points[3] = ct("0.0501210022942699213438273777908310209742598522169477887853436657575933627168406408544934398437526016"); _weight[3] = ct("0.08274768078040276252316986001460415291955361461257967072311179727342770476090831589283759518613984932"); _points[4] = ct("0.8385931397553688767229427135456712253555148238069532897704816877485492639923251368904119391580218527"); _weight[4] = ct("0.1372693562500808676403528092896863629706256104932546432683968144564555261002751690643475473152907202"); _points[5] = ct("0.1614068602446311232770572864543287746444851761930467102295183122514507360076748631095880608419781472"); _weight[5] = ct("0.1372693562500808676403528092896863629706256104932546432683968144564555261002751690643475473152907202"); _points[6] = ct("0.3184412680869109206446239656456703934896788611995609248398631346141947861831005209724334640762918559"); _weight[6] = ct("0.1732142554865231725575657660698591439737663531254582030152941093585521432884763789883930887910864372"); _points[7] = ct("0.681558731913089079355376034354329606510321138800439075160136865385805213816899479027566535923708144"); _weight[7] = ct("0.1732142554865231725575657660698591439737663531254582030152941093585521432884763789883930887910864372"); _points[8] = ct("0.5"); _weight[8] = ct("0.1857596371882086167800453514739229024943310657596371882086167800453514739229024943310657596371882086"); break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(10); _weight.resize(10); _points[0] = ct("0.0"); _weight[0] = ct("0.01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); _points[1] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[1] = ct("0.01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); _points[2] = ct("0.9597669540832294069144663304111690670767715377231379357448130722921337207389566406624398831120400544"); _weight[2] = ct("0.06665299542553505556311358537769644905481293749889870744394545177223272630319979100654865458543383692"); _points[3] = ct("0.04023304591677059308553366958883093292322846227686206425518692770786627926104335933756011688795994553"); _weight[3] = ct("0.06665299542553505556311358537769644905481293749889870744394545177223272630319979100654865458543383692"); _points[4] = ct("0.1306130674472474624984469125700846374919074493115366572674455034724233421300450991628551068727132423"); _weight[4] = ct("0.1124446710315632260597289108655239213769564569808753205698293668550268429721130302051805489888586408"); _points[5] = ct("0.8693869325527525375015530874299153625080925506884633427325544965275766578699549008371448931272867576"); _weight[5] = ct("0.1124446710315632260597289108655239213769564569808753205698293668550268429721130302051805489888586408"); _points[6] = ct("0.7389624749052222478305875463656289989433864466652832344571284198458112755442385696883357954490915833"); _weight[6] = ct("0.1460213418398418789377911286872219461037441948438537722956863552702313819943238307386809881581312696"); _points[7] = ct("0.2610375250947777521694124536343710010566135533347167655428715801541887244557614303116642045509084166"); _weight[7] = ct("0.1460213418398418789377911286872219461037441948438537722956863552702313819943238307386809881581312696"); _points[8] = ct("0.5826394788331935123131098829790867666155751717747418655664497860523941482272025775233841371104750817"); _weight[8] = ct("0.1637698805919487283282552639584465723533752995652610885794277149913979376192522369384786971564651414"); _points[9] = ct("0.4173605211668064876868901170209132333844248282252581344335502139476058517727974224766158628895249182"); _weight[9] = ct("0.1637698805919487283282552639584465723533752995652610885794277149913979376192522369384786971564651414"); break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(11); _weight.resize(11); _points[0] = ct("1.0"); _weight[0] = ct("0.00909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909"); _points[1] = ct("0.0"); _weight[1] = ct("0.00909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909"); _points[2] = ct("0.9670007152040295671661370680496918172699586650549811129458133766356780087548081709916232169156970607"); _weight[2] = ct("0.05480613663349743223070172479017535502473707182363836539885294065931654717715138590082101464198927283"); _points[3] = ct("0.03299928479597043283386293195030818273004133494501888705418662336432199124519182900837678308430293929"); _weight[3] = ct("0.05480613663349743223070172479017535502473707182363836539885294065931654717715138590082101464198927283"); _points[4] = ct("0.892241736831572209311208908054229051753598727547031810841317670384292356072438301406275095976056209"); _weight[4] = ct("0.09358494089015260205407076094971745978459711881256415930366621871642170384257546685129643660489965628"); _points[5] = ct("0.1077582631684277906887910919457709482464012724529681891586823296157076439275616985937249040239437909"); _weight[5] = ct("0.09358494089015260205407076094971745978459711881256415930366621871642170384257546685129643660489965628"); _points[6] = ct("0.7826176634981025032354819847388758321415260727810084878455786240399387940744215451190810370232123008"); _weight[6] = ct("0.1240240521320141570200424332109363766718365848238569396279913609888950520696501358814450312642000429"); _points[7] = ct("0.2173823365018974967645180152611241678584739272189915121544213759600612059255784548809189629767876991"); _weight[7] = ct("0.1240240521320141570200424332109363766718365848238569396279913609888950520696501358814450312642000429"); _points[8] = ct("0.3521209322065303042840442422204712455294967828256979452660503130991900191117723604867820025394588373"); _weight[8] = ct("0.1434395623895040443396112016657676155918267737279659141710584573948206468407634176973200388476228628"); _points[9] = ct("0.6478790677934696957159557577795287544705032171743020547339496869008099808882276395132179974605411626"); _weight[9] = ct("0.1434395623895040443396112016657676155918267737279659141710584573948206468407634176973200388476228628"); _points[10] = ct("0.5"); _weight[10] = ct("0.150108797727845346892965940584988204035823083442131061178680226299273918321537369156416775464394512"); break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(12); _weight.resize(12); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.007575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575"); _points[1] = ct("0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001781392280830686405496294091311721849882300828342443798124370953018431520124935543836833827767426714"); _weight[1] = ct("0.007575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575"); _points[2] = ct("0.9724496361114411117037900691516093568056282759750136618569459485382739614097129863036522718431158904"); _weight[2] = ct("0.04584225870659806533417129706703964315515307070889136931061275310990361357783848684308507448673158955"); _points[3] = ct("0.02755036388855888829620993084839064319437172402498633814305405146172603859028701369634772815688410958"); _weight[3] = ct("0.04584225870659806533417129706703964315515307070889136931061275310990361357783848684308507448673158955"); _points[4] = ct("0.9096396608220033391743207908584513303452333289518221447116583630584383637955809711802462446795835436"); _weight[4] = ct("0.07898735278218505758233553135017013412555315821172857986311633305270821238841224811543749121853323673"); _points[5] = ct("0.09036033917799666082567920914154866965476667104817785528834163694156163620441902881975375532041645631"); _weight[5] = ct("0.07898735278218505758233553135017013412555315821172857986311633305270821238841224811543749121853323673"); _points[6] = ct("0.1835619234840696611687975727781720708780781272992495035174232176764738789977703147774259772755113555"); _weight[6] = ct("0.1062542088805105726791510386834331350976728113826704167480374016271802552798567101722855158636420027"); _points[7] = ct("0.8164380765159303388312024272218279291219218727007504964825767823235261210022296852225740227244886444"); _weight[7] = ct("0.1062542088805105726791510386834331350976728113826704167480374016271802552798567101722855158636420027"); _points[8] = ct("0.3002345295173255338678251042165165497361259836023464817560311639749518780463076119023391127095642402"); _weight[8] = ct("0.1256378015996006401466222060737980916667192386749018227851616430721088752475131313979115974684259527"); _points[9] = ct("0.6997654704826744661321748957834834502638740163976535182439688360250481219536923880976608872904357597"); _weight[9] = ct("0.1256378015996006401466222060737980916667192386749018227851616430721088752475131313979115974684259527"); _points[10] = ct("0.5682764664274637774320309278698469484492070556410291927257907830335263719510014649425107069687302462"); _weight[10] = ct("0.1357026204553480885001441692498014201973259634460502355354961115623414677488036658955227452050914607"); _points[11] = ct("0.4317235335725362225679690721301530515507929443589708072742092169664736280489985350574892930312697537"); _weight[11] = ct("0.1357026204553480885001441692498014201973259634460502355354961115623414677488036658955227452050914607"); break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(13); _weight.resize(13); _points[0] = ct("0.0"); _weight[0] = ct("0.00641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641"); _points[1] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[1] = ct("0.00641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641025641"); _points[2] = ct("0.02334507667891804405154726762227542418674605565131840740531369857455020885063439127346774598036632099"); _weight[2] = ct("0.0389008433734094638967944941665667925339174087467514605233128729415757024537583966937200977779876481"); _points[3] = ct("0.976654923321081955948452732377724575813253944348681592594686301425449791149365608726532254019633679"); _weight[3] = ct("0.0389008433734094638967944941665667925339174087467514605233128729415757024537583966937200977779876481"); _points[4] = ct("0.9231737823259361584329628035493766797890183298572043128443235063330532850312931300329387414715691132"); _weight[4] = ct("0.06749096334480417455995738129468544462808634604633970926140225037869972013091141957836110227640939973"); _points[5] = ct("0.07682621767406384156703719645062332021098167014279568715567649366694671496870686996706125852843088673"); _weight[5] = ct("0.06749096334480417455995738129468544462808634604633970926140225037869972013091141957836110227640939973"); _points[6] = ct("0.8430942345408787130363795197831777764645880990621922135313456729477343290000594746197466466146762111"); _weight[6] = ct("0.09182343260177504600374712937340536162323684348411899957251376072910922878179385695546726564985561977"); _points[7] = ct("0.1569057654591212869636204802168222235354119009378077864686543270522656709999405253802533533853237888"); _weight[7] = ct("0.09182343260177504600374712937340536162323684348411899957251376072910922878179385695546726564985561977"); _points[8] = ct("0.7414549105456681008734686168184668103860966310592950052388620460244065895536486935472233899127883465"); _weight[8] = ct("0.1103838967830550430427670041896981487336314366669976023658147040938593495671724384857987952065895178"); _points[9] = ct("0.2585450894543318991265313831815331896139033689407049947611379539755934104463513064527766100872116534"); _weight[9] = ct("0.1103838967830550430427670041896981487336314366669976023658147040938593495671724384857987952065895178"); _points[10] = ct("0.6246434650531199962843368501871134907444056562464879296492579543168629813997495722095567115050590931"); _weight[10] = ct("0.1220078951533381782292890741800781062656311002082780301134075989572937489547631273352424370295051055"); _points[11] = ct("0.3753565349468800037156631498128865092555943437535120703507420456831370186002504277904432884949409068"); _weight[11] = ct("0.1220078951533381782292890741800781062656311002082780301134075989572937489547631273352424370295051055"); _points[12] = ct("0.5"); _weight[12] = ct("0.1259654246667233680220693207706194719181732168745155758142771129784116797103810090823077836064849051"); break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(14); _weight.resize(14); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005808887872273977409227045949929527771355328788073186298231644412016624522146528947294023351415521895"); _weight[0] = ct("0.005494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494"); _points[1] = ct("1.0"); _weight[1] = ct("0.005494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494505494"); _points[2] = ct("0.9799675226336304506775500810077121945331957592863239681820791169260133487974757775199042286321829837"); _weight[2] = ct("0.03341864224884064231703533037302641252882102672534121692222483303009226559175047551719708298586707101"); _points[3] = ct("0.02003247736636954932244991899228780546680424071367603181792088307398665120252422248009577136781701629"); _weight[3] = ct("0.03341864224884064231703533037302641252882102672534121692222483303009226559175047551719708298586707101"); _points[4] = ct("0.9339005269151736255001101014541321066249361765472180673794130920541252668245245267203554324860697834"); _weight[4] = ct("0.05829332794935582577049833532732511500235292745003663959760895323543240778750567194044396987500606793"); _points[5] = ct("0.06609947308482637449988989854586789337506382345278193262058690794587473317547547327964456751393021655"); _weight[5] = ct("0.05829332794935582577049833532732511500235292745003663959760895323543240778750567194044396987500606793"); _points[6] = ct("0.1355657004543369297076637997395592021713302341528390986938780173861806180949423040135067458535801027"); _weight[6] = ct("0.08001092588147607120641049899379732025190127481644053508436702226934193033044997746120149036223738033"); _points[7] = ct("0.8644342995456630702923362002604407978286697658471609013061219826138193819050576959864932541464198972"); _weight[7] = ct("0.08001092588147607120641049899379732025190127481644053508436702226934193033044997746120149036223738033"); _points[8] = ct("0.7753197014643235276583113529295403172310691597769570669118964569840194786616101591806838309484212402"); _weight[8] = ct("0.09741307468670805932016588918794225607431437802593237813822327477031059996400034347363088705644911479"); _points[9] = ct("0.2246802985356764723416886470704596827689308402230429330881035430159805213383898408193161690515787597"); _weight[9] = ct("0.09741307468670805932016588918794225607431437802593237813822327477031059996400034347363088705644911479"); _points[10] = ct("0.3286379933286435774780482981791626775834432329298466267225425835645065531681161297198297276026186597"); _weight[10] = ct("0.1095631265048853774355812619770838064791660572294379130680725719561649077524406590646769454901926409"); _points[11] = ct("0.6713620066713564225219517018208373224165567670701533732774574164354934468318838702801702723973813402"); _weight[11] = ct("0.1095631265048853774355812619770838064791660572294379130680725719561649077524406590646769454901926409"); _points[12] = ct("0.5581659344418519338293883548680800839707545221281403841016624302939858113313899297688593325388222553"); _weight[12] = ct("0.1158063972342285294448141786463195951579498302583058226840088392441523940683583670483441297247532194"); _points[13] = ct("0.4418340655581480661706116451319199160292454778718596158983375697060141886686100702311406674611777446"); _weight[13] = ct("0.1158063972342285294448141786463195951579498302583058226840088392441523940683583670483441297247532194"); break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(15); _weight.resize(15); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001776551540937124757655271553020113910072838054352382809542511249341750999689813436380755474974580446"); _weight[0] = ct("0.004761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761"); _points[1] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[1] = ct("0.004761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761904761"); _points[2] = ct("0.9826229632519192863979256960348005888538250679985466700362492292135561186010360176002647647677775953"); _weight[2] = ct("0.02901494651430062454844029201264099771784336341300745188628787274113154341266805777513760661557424098"); _points[3] = ct("0.01737703674808071360207430396519941114617493200145332996375077078644388139896398239973523523222240469"); _weight[3] = ct("0.02901494651430062454844029201264099771784336341300745188628787274113154341266805777513760661557424098"); _points[4] = ct("0.05745897788851185058729918425888517400564295739626101359130918465945600252159841114408283401864691438"); _weight[4] = ct("0.05083003516285903380183308539440035774049179685830295249610959702031866582180688751549009744250530787"); _points[5] = ct("0.9425410221114881494127008157411148259943570426037389864086908153405439974784015888559171659813530856"); _weight[5] = ct("0.05083003516285903380183308539440035774049179685830295249610959702031866582180688751549009744250530787"); _points[6] = ct("0.118240155024092399647940762011854190911315739842354831622647197476461454480323624696818048989422683"); _weight[6] = ct("0.07025584990121405473022340282183644531174217730120397909471137253624043283501972733710362696598904353"); _points[7] = ct("0.8817598449759076003520592379881458090886842601576451683773528025235385455196763753031819510105773169"); _weight[7] = ct("0.07025584990121405473022340282183644531174217730120397909471137253624043283501972733710362696598904353"); _points[8] = ct("0.8031266027349228555617649693183667535898655168799598928429147519895983898552691820429755996920806906"); _weight[8] = ct("0.08639482362680047452603854970417529367831783151340264536420857384867707112931518213672195839280670621"); _points[9] = ct("0.1968733972650771444382350306816332464101344831200401071570852480104016101447308179570244003079193093"); _weight[9] = ct("0.08639482362680047452603854970417529367831783151340264536420857384867707112931518213672195839280670621"); _points[10] = ct("0.7103190273568362404609484693692902064921691027462151841925466804687845341292931576115237553308309106"); _weight[10] = ct("0.09849361798230667804625017325370329743180197541674521423484253266047333445216804975440106121504710919"); _points[11] = ct("0.2896809726431637595390515306307097935078308972537848158074533195312154658707068423884762446691690893"); _weight[11] = ct("0.09849361798230667804625017325370329743180197541674521423484253266047333445216804975440106121504710919"); _points[12] = ct("0.3923230223181028808871602768635411436739210493984794682627474261791448221666457778202343230232392067"); _weight[12] = ct("0.1059867929634104600637150384886104583118278726971801315913895439174768514920960637299390729866760359"); _points[13] = ct("0.6076769776818971191128397231364588563260789506015205317372525738208551778333542221797656769767607932"); _weight[13] = ct("0.1059867929634104600637150384886104583118278726971801315913895439174768514920960637299390729866760359"); _points[14] = ct("0.5"); _weight[14] = ct("0.1085240581744078247574751071254567758064261560765057268553772050275546779043282539786036289532793029"); break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(16); _weight.resize(16); _points[0] = ct("1.0"); _weight[0] = ct("0.004166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); _points[1] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001717494514235672653994796585862497044397392211673638748843822864486248650381323725416599570901855973"); _weight[1] = ct("0.004166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); _points[2] = ct("0.9847840231351089664761213691837296206944953732519173650343393661412705259269883781602191879541709236"); _weight[2] = ct("0.02542518050295995270162245978272765724693591376889349195640334722202949369151888747237233700872763844"); _points[3] = ct("0.0152159768648910335238786308162703793055046267480826349656606338587294740730116218397808120458290763"); _weight[3] = ct("0.02542518050295995270162245978272765724693591376889349195640334722202949369151888747237233700872763844"); _points[4] = ct("0.05039973345326395350268586924007526162500119547742778728778629410576180140857154234663004161524265869"); _weight[4] = ct("0.04469684866296540049552604008304185746694360501889948923847233213965134199681727331844744019578417196"); _points[5] = ct("0.9496002665467360464973141307599247383749988045225722127122137058942381985914284576533699583847573413"); _weight[5] = ct("0.04469684866296540049552604008304185746694360501889948923847233213965134199681727331844744019578417196"); _points[6] = ct("0.8960041459309075319655441354815728529040369139900995113422053249329981450139975002211832902895663786"); _weight[6] = ct("0.06212769106625704917476816632865660038719901563494977010533863640312703155896799226312485062586658436"); _points[7] = ct("0.1039958540690924680344558645184271470959630860099004886577946750670018549860024997788167097104336213"); _weight[7] = ct("0.06212769106625704917476816632865660038719901563494977010533863640312703155896799226312485062586658436"); _points[8] = ct("0.1738056485587534552660583901797092598392209935852128313071093578888814784597858327102665672608913001"); _weight[8] = ct("0.07701349040358214040782247024249725772270812099182066142850652272505318441638252145157789038843411783"); _points[9] = ct("0.8261943514412465447339416098202907401607790064147871686928906421111185215402141672897334327391086998"); _weight[9] = ct("0.07701349040358214040782247024249725772270812099182066142850652272505318441638252145157789038843411783"); _points[10] = ct("0.7430297109435688058909453929234373484444886521491262856883284338033922487167612097283758109612034"); _weight[10] = ct("0.08874595669585206265053783476417888507915737258808560675748197508328136667564757334406922314835077358"); _points[11] = ct("0.2569702890564311941090546070765626515555113478508737143116715661966077512832387902716241890387965999"); _weight[11] = ct("0.08874595669585206265053783476417888507915737258808560675748197508328136667564757334406922314835077358"); _points[12] = ct("0.6499152344503816040491767273611503239077304884538888323271550488220204384855463949826705488978888995"); _weight[12] = ct("0.0968450119126017921584567994267610151531789970092036625918329566734849788429878017911249745539485532"); _points[13] = ct("0.3500847655496183959508232726388496760922695115461111676728449511779795615144536050173294511021111004"); _weight[13] = ct("0.0968450119126017921584567994267610151531789970092036625918329566734849788429878017911249745539485532"); _points[14] = ct("0.4493368632390252760784834974770411187333795427999044300412248998728460413102109205056194162045666875"); _weight[14] = ct("0.1009791540891149357445995627054700602772103083214806512552975630867059361510112836926166174122214939"); _points[15] = ct("0.5506631367609747239215165025229588812666204572000955699587751001271539586897890794943805837954333124"); _weight[15] = ct("0.1009791540891149357445995627054700602772103083214806512552975630867059361510112836926166174122214939"); break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(17); _weight.resize(17); _points[0] = ct("0.0"); _weight[0] = ct("0.003676470588235294117647058823529411764705882352941176470588235294117647058823529411764705882352941176"); _points[1] = ct("1.0"); _weight[1] = ct("0.003676470588235294117647058823529411764705882352941176470588235294117647058823529411764705882352941176"); _points[2] = ct("0.9865660883157091570784897509368607152944795745612547432232459215480390687332058160630984405164903217"); _weight[2] = ct("0.02246097027162710482370047731160622165909985422213544924833396204747853346803054054679261056524380165"); _points[3] = ct("0.01343391168429084292151024906313928470552042543874525677675407845196093126679418393690155948350967826"); _weight[3] = ct("0.02246097027162710482370047731160622165909985422213544924833396204747853346803054054679261056524380165"); _points[4] = ct("0.9554399979577867978119012531988632337654397259343663821609062796554833300363345816190854768507479496"); _weight[4] = ct("0.03959913525184355959513221497641725204918210926342338676126317758881904561019931791094586405300662264"); _points[5] = ct("0.04456000204221320218809874680113676623456027406563361783909372034451666996366541838091452314925205037"); _weight[5] = ct("0.03959913525184355959513221497641725204918210926342338676126317758881904561019931791094586405300662264"); _points[6] = ct("0.9078481256108851535533752766187633273582011985335617790749319807934202397930005886582665845290317207"); _weight[6] = ct("0.05529645450351408068788635261003840181971611225363821508003451652482392857878578150910441495304482895"); _points[7] = ct("0.09215187438911484644662472338123667264179880146643822092506801920657976020699941134173341547096827924"); _weight[7] = ct("0.05529645450351408068788635261003840181971611225363821508003451652482392857878578150910441495304482895"); _points[8] = ct("0.1544855096861576473025403213137733515967934689047922857963009513809809776082858467655372231955925407"); _weight[8] = ct("0.06899387310096327952810078747701258533295163289000440269653946874332343735749826826562576005869369419"); _points[9] = ct("0.8455144903138423526974596786862266484032065310952077142036990486190190223917141532344627768044074592"); _weight[9] = ct("0.06899387310096327952810078747701258533295163289000440269653946874332343735749826826562576005869369419"); _points[10] = ct("0.7706926996650507695618667037520316258375733239824155726604727057271799870936741109100660654933706336"); _weight[10] = ct("0.08019733099881076975816418293237564513290902065869140324995695076068173451229411554538913632561719631"); _points[11] = ct("0.2293073003349492304381332962479683741624266760175844273395272942728200129063258890899339345066293663"); _weight[11] = ct("0.08019733099881076975816418293237564513290902065869140324995695076068173451229411554538913632561719631"); _points[12] = ct("0.6860872167827385209536173403676289062799086572001402867325516717899853619419213067667865572344459824"); _weight[12] = ct("0.0885021267578289352184728726816462459105382395892224688500305543093532815923565641483716296132573368"); _points[13] = ct("0.3139127832172614790463826596323710937200913427998597132674483282100146380580786932332134427655540175"); _weight[13] = ct("0.0885021267578289352184728726816462459105382395892224688500305543093532815923565641483716296132573368"); _points[14] = ct("0.4052440132408413058478684926234430143275037885387507147110643644161601040392422935122524506671460895"); _weight[14] = ct("0.09360816983880961794604424143031086813356487629712529604402863683694700387971868875767801014577462951"); _points[15] = ct("0.5947559867591586941521315073765569856724962114612492852889356355838398959607577064877475493328539104"); _weight[15] = ct("0.09360816983880961794604424143031086813356487629712529604402863683694700387971868875767801014577462951"); _points[16] = ct("0.5"); _weight[16] = ct("0.09533093737673471664970362351412673639466454494563640319844899578891077588458638780865573680601789747"); break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } template GaussLobattoQuadratureRule::GaussLobattoQuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; GaussLobattoQuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_GaussLobatto_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/gaussquadrature.hh000066400000000000000000007737101411346603000261010ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by jacobian.mac! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_Gauss_HH #define DUNE_GEOMETRY_QUADRATURE_Gauss_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class GaussQuadratureRule; template using GaussQuadratureRule1D = GaussQuadratureRule; template class GaussQuadratureRule : public QuadratureRule { public: /** brief The highest quadrature order available */ enum { highest_order=61 }; private: friend class QuadratureRuleFactory; GaussQuadratureRule (int p); ~GaussQuadratureRule(){} }; //! internal Helper template for the initialization of the quadrature rules template::value> struct GaussQuadratureInitHelper; template struct GaussQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct GaussQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void GaussQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(1); _weight.resize(1); _points[0] = 0.5; _weight[0] = 1.0; break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(2); _weight.resize(2); _points[0] = 0.2113248654051871177454256097490212721761991243649365619906988367580111638485333271531423022071252374; _weight[0] = 0.5; _points[1] = 0.7886751345948128822545743902509787278238008756350634380093011632419888361514666728468576977928747626; _weight[1] = 0.5; break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(3); _weight.resize(3); _points[0] = 0.8872983346207416885179265399782399610832921705291590826587573766113483091936979033519287376858673518; _weight[0] = 0.2777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777; _points[1] = 0.1127016653792583114820734600217600389167078294708409173412426233886516908063020966480712623141326482; _weight[1] = 0.2777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778; _points[2] = 0.5; _weight[2] = 0.4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444; break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(4); _weight.resize(4); _points[0] = 0.9305681557970262876119732444464047525478626898148588188078609604532647357475244328520811699422396526; _weight[0] = 0.1739274225687269286865319746109997036176743479169467702462646597593759337329551758609918838661290797; _points[1] = 0.0694318442029737123880267555535952474521373101851411811921390395467352642524755671479188300577603474; _weight[1] = 0.1739274225687269286865319746109997036176743479169467702462646597593759337329551758609918838661290798; _points[2] = 0.3300094782075718675986671204483776563997120651145428237035230115894899847683814827610623597822225942; _weight[2] = 0.3260725774312730713134680253890002963823256520830532297537353402406240662670448241390081161338709202; _points[3] = 0.6699905217924281324013328795516223436002879348854571762964769884105100152316185172389376402177774058; _weight[3] = 0.3260725774312730713134680253890002963823256520830532297537353402406240662670448241390081161338709202; break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(5); _weight.resize(5); _points[0] = 0.953089922969331996398813439149696482562825955381265431436881143271885397458343423470571494776771131; _weight[0] = 0.1184634425280945437571320203599586813216300011062070077914139441108586442015215492899967152469757223; _points[1] = 0.04691007703066800360118656085030351743717404461873456856311885672811460254165657652942850522322886904; _weight[1] = 0.1184634425280945437571320203599586813216300011062070077914139441108586442015215492899967152469757223; _points[2] = 0.7692346550528415455181572103501044024836433034527799781011158135297355926838776455179018336252854658; _weight[2] = 0.2393143352496832340206457574178190964561477766715707699863638336669191335762562284877810625308020554; _points[3] = 0.2307653449471584544818427896498955975163566965472200218988841864702644073161223544820981663747145342; _weight[3] = 0.2393143352496832340206457574178190964561477766715707699863638336669191335762562284877810625308020554; _points[4] = 0.5; _weight[4] = 0.2844444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444; break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(6); _weight.resize(6); _points[0] = 0.03376524289842398609384922275300269543261713114385508756372519173669324957789990186185563003903700748; _weight[0] = 0.08566224618958517252014807108636644676341125074202199119931771989947288027117007732396385271319433444; _points[1] = 0.9662347571015760139061507772469973045673828688561449124362748082633067504221000981381443699609629925; _weight[1] = 0.08566224618958517252014807108636644676341125074202199119931771989947288027117007732396385271319433508; _points[2] = 0.8306046932331322568306997975099526735032242821975850354072633529260917483035715504721432018732307282; _weight[2] = 0.1803807865240693037849167569188580558307609463733727411448696201185700189186308591604811009944096738; _points[3] = 0.1693953067668677431693002024900473264967757178024149645927366470739082516964284495278567981267692718; _weight[3] = 0.180380786524069303784916756918858055830760946373372741144869620118570018918630859160481100994409674; _points[4] = 0.6193095930415984543152508608403559677093053150700106750906975822871374671378199211246122136286745658; _weight[4] = 0.2339569672863455236949351719947754974058278028846052676558126599819571008101990635155550462923959912; _points[5] = 0.3806904069584015456847491391596440322906946849299893249093024177128625328621800788753877863713254342; _weight[5] = 0.2339569672863455236949351719947754974058278028846052676558126599819571008101990635155550462923959912; break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(7); _weight.resize(7); _points[0] = 0.9745539561713792622630948420239256312003854688353088917743845519565316651774200704028653850139628621; _weight[0] = 0.06474248308443484663530571633954100916429370112997333198860431936232761748602115435781270908146042202; _points[1] = 0.02544604382862073773690515797607436879961453116469110822561544804346833482257992959713461498603713794; _weight[1] = 0.06474248308443484663530571633954100916429370112997333198860431936232761748602115435781270908146042288; _points[2] = 0.1292344072003027800680676133596057964629261764293048699400223240162850626639097431035865838165683765; _weight[2] = 0.139852695744638333950733885711889791243462532613299382268507016346809405215281338406620471450598809; _points[3] = 0.8707655927996972199319323866403942035370738235706951300599776759837149373360902568964134161834316235; _weight[3] = 0.1398526957446383339507338857118897912434625326132993822685070163468094052152813384066204714505988098; _points[4] = 0.2970774243113014165466967939615192683263089929503149368064783741026680933869371723358436551361267061; _weight[4] = 0.1909150252525594724751848877444875669391825417669313673755417255153527732170648541743423296720224007; _points[5] = 0.7029225756886985834533032060384807316736910070496850631935216258973319066130628276641563448638732939; _weight[5] = 0.1909150252525594724751848877444875669391825417669313673755417255153527732170648541743423296720224007; _points[6] = 0.5; _weight[6] = 0.2089795918367346938775510204081632653061224489795918367346938775510204081632653061224489795918367347; break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(8); _weight.resize(8); _points[0] = 0.9801449282487681158417804342847364952141176171507260191358198886862124488717096422197194796316561341; _weight[0] = 0.05061426814518812957626567715498109505769704552584247852950184903237008938173539243014136965202249679; _points[1] = 0.01985507175123188415821956571526350478588238284927398086418011131378755112829035778028052036834386592; _weight[1] = 0.05061426814518812957626567715498109505769704552584247852950184903237008938173539243014136965202250399; _points[2] = 0.1016667612931866302042230317620847815814141341920175839649148524803913471617634539264240363521370304; _weight[2] = 0.1111905172266872352721779972131204422150654350256247823629546446468084072852245204268265711885989599; _points[3] = 0.8983332387068133697957769682379152184185858658079824160350851475196086528382365460735759636478629696; _weight[3] = 0.1111905172266872352721779972131204422150654350256247823629546446468084072852245204268265711885989642; _points[4] = 0.237233795041835507091130475405376825479017878439803571124571450363772589615719363738019299903184009; _weight[4] = 0.156853322938943643668981100993300656630164499501367468845131972537478135971086748480849038116964278; _points[5] = 0.762766204958164492908869524594623174520982121560196428875428549636227410384280636261980700096815991; _weight[5] = 0.156853322938943643668981100993300656630164499501367468845131972537478135971086748480849038116964278; _points[6] = 0.4082826787521750975302619288199080096666210935435131088414057631503977628892289429419658881444383231; _weight[6] = 0.1813418916891809914825752246385978060970730199471652702624115337833433673619533386621830210424142548; _points[7] = 0.5917173212478249024697380711800919903333789064564868911585942368496022371107710570580341118555616769; _weight[7] = 0.1813418916891809914825752246385978060970730199471652702624115337833433673619533386621830210424142548; break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(9); _weight.resize(9); _points[0] = 0.01591988024618695508221189854816356497529759975403733522498834407545981280169962346906312538655294424; _weight[0] = 0.04063719418078720598594607905526182533783086039120537535555383844034334315422603147278927735147130028; _points[1] = 0.9840801197538130449177881014518364350247024002459626647750116559245401871983003765309368746134470557; _weight[1] = 0.0406371941807872059859460790552618253378308603912053753555538384403433431542260314727892773514713142; _points[2] = 0.08198444633668210285028510596513256172794664093766200194781401018027249655920494055302690148707122983; _weight[2] = 0.0903240803474287020292360156214564047571689108660202422491679532356786452724731348822974886515998753; _points[3] = 0.9180155536633178971497148940348674382720533590623379980521859898197275034407950594469730985129287703; _weight[3] = 0.0903240803474287020292360156214564047571689108660202422491679532356786452724731348822974886515998796; _points[4] = 0.8066857163502951986543510196707370923928603024702823464364064711406336732455005992916200069517842923; _weight[4] = 0.1303053482014677311593714347093164248859201022186499759699985010598054078344456223238230465475086993; _points[5] = 0.1933142836497048013456489803292629076071396975297176535635935288593663267544994007083799930482157077; _weight[5] = 0.1303053482014677311593714347093164248859201022186499759699985010598054078344456223238230465475087005; _points[6] = 0.3378732882980955354807309926783316957140218696315134555864762615789067102324378754034506991507512164; _weight[6] = 0.1561735385200014200343152032922218327993774306309523227770055827995719486620096582850609609440031769; _points[7] = 0.6621267117019044645192690073216683042859781303684865444135237384210932897675621245965493008492487836; _weight[7] = 0.156173538520001420034315203292221832799377430630952322777005582799571948662009658285060960944003177; _points[8] = 0.5; _weight[8] = 0.1651196775006298815822625346434870244394053917863441672965482489292013101536911060720584530108339632; break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(10); _weight.resize(10); _points[0] = 0.9869532642585858600389820060422260267141349733461910596156060333482976016173180798128617824781342781; _weight[0] = 0.03333567215434406879678440494666589642893241716007907256434744080670603204204355088839275484252937791; _points[1] = 0.01304673574141413996101799395777397328586502665380894038439396665170239838268192018713821752186572192; _weight[1] = 0.03333567215434406879678440494666589642893241716007907256434744080670603204204355088839275484252937791; _points[2] = 0.9325316833444922553660483442117465242637715074826652262609798659226873775690277806783953644730228854; _weight[2] = 0.07472567457529029657288816982884866620127831983471368391773863437661932736331500547297363231736586137; _points[3] = 0.06746831665550774463395165578825347573622849251733477373902013407731262243097221932160463552697711466; _weight[3] = 0.07472567457529029657288816982884866620127831983471368391773863437661932736331500547297363231736596593; _points[4] = 0.1602952158504877968828363174425632121153526440825952661675914055237207123024625376924607132147598102; _weight[4] = 0.1095431812579910219977674671140815962293859352613385449404782718175999553264756406213419965886010702; _points[5] = 0.8397047841495122031171636825574367878846473559174047338324085944762792876975374623075392867852401898; _weight[5] = 0.1095431812579910219977674671140815962293859352613385449404782718175999553264756406213419965886011106; _points[6] = 0.2833023029353764046003670284171079188999640811718767517486492434281165054611482493874486210249411394; _weight[6] = 0.1346333596549981775456134607847346764298799692304418979002816381210767161595896383821133183546263798; _points[7] = 0.7166976970646235953996329715828920811000359188281232482513507565718834945388517506125513789750588606; _weight[7] = 0.1346333596549981775456134607847346764298799692304418979002816381210767161595896383821133183546263804; _points[8] = 0.4255628305091843945575869994351400076912175702896541521460053732420481913221657393144111851002681544; _weight[8] = 0.1477621123573764350869464973256691647105233585134268006771540148779979691085761646351782978968771084; _points[9] = 0.5744371694908156054424130005648599923087824297103458478539946267579518086778342606855888148997318456; _weight[9] = 0.1477621123573764350869464973256691647105233585134268006771540148779979691085761646351782978968771084; break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(11); _weight.resize(11); _points[0] = 0.01088567092697150359803099943857130461428879554010779228709946700816810030955500589984030091632761502; _weight[0] = 0.02783428355808683324137686022127428936425781284844907417419214283707770364036877194184561103615985882; _points[1] = 0.9891143290730284964019690005614286953857112044598922077129005329918318996904449941001596990836723848; _weight[1] = 0.02783428355808683324137686022127428936425781284844907417419214283707770364036877194184561103615998649; _points[2] = 0.9435312998840476495375788846519636333158378756126571924837055277688056569286863337211452975632986873; _weight[2] = 0.06279018473245231231734714961197005009880789569770175033196700540895728756623563881734382085702807703; _points[3] = 0.05646870011595235046242111534803636668416212438734280751629447223119434307131366627885470243670131297; _weight[3] = 0.0627901847324523123173471496119700500988078956977017503319670054089572875662356388173438208570284425; _points[4] = 0.86507600278702466204670812601557672902482153101306515598918916984350662252925961479771170548564185; _weight[4] = 0.0931451054638671257130488207158279458456423740201017058907532020869361740043927512346653792589896456; _points[5] = 0.13492399721297533795329187398442327097517846898693484401081083015649337747074038520228829451435815; _weight[5] = 0.09314510546386712571304882071582794584564237402010170589075320208693617400439275123466537925898987179; _points[6] = 0.2404519353965940920371371652706952227598864424400357554895386942566520367744635535872006099477254724; _weight[6] = 0.1165968822959952399592618524215875697158990861584792545136598610609661066094404979770199742191308423; _points[7] = 0.7595480646034059079628628347293047772401135575599642445104613057433479632255364464127993900522745276; _weight[7] = 0.1165968822959952399592618524215875697158990861584792545136598610609661066094404979770199742191308499; _points[8] = 0.6347715779761724861657659927004307623398109312195261408119628159400285331118473678519107961221336507; _weight[8] = 0.131402272255123331090344434945254597686382338801572278190027685742756401669772626776208498508513353; _points[9] = 0.3652284220238275138342340072995692376601890687804738591880371840599714668881526321480892038778663493; _weight[9] = 0.131402272255123331090344434945254597686382338801572278190027685742756401669772626776208498508513353; _points[10] = 0.5; _weight[10] = 0.1364625433889503153572417641681710945780209849473918737988002057266126530195794265058334322403586473; break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(12); _weight.resize(12); _points[0] = 0.009219682876640374654725454925359588519922400093134244768658939096103377840873008887371366054773882871; _weight[0] = 0.02358766819325591359730798074250853015851453699742354478025267350190486057601935533541295353770570183; _points[1] = 0.9907803171233596253452745450746404114800775999068657552313410609038966221591269911126286339452261171; _weight[1] = 0.02358766819325591359730798074250853015851453699742354478025267350190486057601935533541295353771090306; _points[2] = 0.9520586281852374283392329330595480962687983546066487732770378803406173978646178952434847139118666353; _weight[2] = 0.05346966299765921548012735909699811210728508673516244000256302105140949681374878827026865904815670116; _points[3] = 0.0479413718147625716607670669404519037312016453933512267229621196593826021353821047565152860881333648; _weight[3] = 0.05346966299765921548012735909699811210728508673516244000256302105140949681374878827026865904815772913; _points[4] = 0.8849513370971523435184469166064090379924628750094658188322095321245582715542356120082124996117109545; _weight[4] = 0.08003916427167311316732626477167953593600586524543208895494977207897711258664557534082827631852788289; _points[5] = 0.1150486629028476564815530833935909620075371249905341811677904678754417284457643879917875003882890453; _weight[5] = 0.08003916427167311316732626477167953593600586524543208895494977207897711258664557534082827631852953845; _points[6] = 0.7936589771433087236483512094702671401845492570240262407551354398336703496879476312178553824943741012; _weight[6] = 0.1015837133615329608745322279048991882532590736372950731992972828988228162552364218975721975323025648; _points[7] = 0.2063410228566912763516487905297328598154507429759737592448645601663296503120523687821446175056258989; _weight[7] = 0.1015837133615329608745322279048991882532590736372950731992972828988228162552364218975721975323026497; _points[8] = 0.3160842505009099031236542316781412193718199293322951893441000602479550352416060630606327857497267114; _weight[8] = 0.1167462682691774043804249494624390281297049860998774373652617489107460000397058376403395132542818442; _points[9] = 0.6839157494990900968763457683218587806281800706677048106558999397520449647583939369393672142502732886; _weight[9] = 0.1167462682691774043804249494624390281297049860998774373652617489107460000397058376403395132542818454; _points[10] = 0.5626167042557344577362206847319265649916984581527221366064608773742310281206948443714341492347456798; _weight[10] = 0.1245735229067013925002812180214756054152304512848094156976755015581397137286440215155784003090211765; _points[11] = 0.4373832957442655422637793152680734350083015418472778633935391226257689718793051556285658507652543202; _weight[11] = 0.1245735229067013925002812180214756054152304512848094156976755015581397137286440215155784003090211765; break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(13); _weight.resize(13); _points[0] = 0.9920915273592940747364147244035548055324952809629374543470036602142976189378134209302846436307092946; _weight[0] = 0.02024200238265793976001079610049303002099327287249443406752330375249723025639635524721040621651256352; _points[1] = 0.007908472640705925263585275596445194467504719037062545652996339785702381062186579069715356369290706896; _weight[1] = 0.02024200238265793976001079610049303002099327287249443406752330375249723025639635524721040621651575551; _points[2] = 0.9587991996114889826032739182503597561952373950558416479476426728298296042948049571417426951702914619; _weight[2] = 0.04606074991886422395721088797689856046184199993111841954419577366979686486381646314594890787783233253; _points[3] = 0.04120080038851101739672608174964024380476260494415835205235732717017039570519504285825730482970853578; _weight[3] = 0.04606074991886422395721088797689856046184199993111841954419577366979686486381646314594890787787365219; _points[4] = 0.9007890453666549563971032447914299451528078623952500149486923569296110581133200610150149370926585299; _weight[4] = 0.069436755109893619231800888434435733810931359131649113823177508252886260767444767862590771427295539; _points[5] = 0.09921095463334504360289675520857005484719213760474998505130764307038894188667993898498506290734147097; _weight[5] = 0.06943675510989361923180088843443573381093135913164911382317750825288626076744476786259077142729935376; _points[6] = 0.1788253302798298896780076965022421749641513008692115713054287960406782234275032125428058499429042223; _weight[6] = 0.08907299038097286914002334599804899775640632533050825149339722014457253474937436174735847561115655018; _points[7] = 0.8211746697201701103219923034977578250358486991307884286945712039593217765724967874571941500570957777; _weight[7] = 0.08907299038097286914002334599804899775640632533050825149339722014457253474937436174735847561115720583; _points[8] = 0.724246375518223426438956426063819933900960833720878939479141473729122046033108571822519104277366505; _weight[8] = 0.1039080237684442511562616096530263816932913045997517746095555599582692717825422161302977640233059593; _points[9] = 0.2757536244817765735610435739361800660990391662791210605208585262708779539668914281774808957226334949; _weight[9] = 0.1039080237684442511562616096530263816932913045997517746095555599582692717825422161302977640233059661; _points[10] = 0.6152291579775673970327640605489944176057711879417655817346307489185810418442909754064014723823400647; _weight[10] = 0.1131415901314486192060450930198883092173788688077785099324842743857878315602499855209131593331569649; _points[11] = 0.3847708420224326029672359394510055823942288120582344182653692510814189581557090245935985276176599353; _weight[11] = 0.1131415901314486192060450930198883092173788688077785099324842743857878315602499855209131593331569649; _points[12] = 0.5; _weight[12] = 0.1162757766154369550972947576344179740783137386533989930593327196723800120403517006913610310213706817; break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(14); _weight.resize(14); _points[0] = 0.006858095651593830579201366647973599161954296380387059177964594111125222933754181044676880167424125515; _weight[0] = 0.01755973016587593151591643806909589030985280463856363829074994509820816141890413526883839849926422796; _points[1] = 0.9931419043484061694207986333520264008380457036196129408220354058888747770662458189553231198325758757; _weight[1] = 0.01755973016587593151591643806909589030985280463856363829074994509820816141890413526883839849929733993; _points[2] = 0.9642174418317867586681955696889371322385196052049188093589812237410655467721799265557069528418287599; _weight[2] = 0.04007904357988010490281663853142715479184889269729738260069953274478573722864358493176809540971271623; _points[3] = 0.03578255816821324133180443031106286776148039479508119064101877625893445322782007344429304715817123803; _weight[3] = 0.0400790435798801049028166385314271547918488926972973826006995327447857372286435849317680954097315832; _points[4] = 0.9136006575348824965948973713251974805198505507375405907803545271207399154050144367852131950689447722; _weight[4] = 0.06075928534395159234470740453623831297833467284503733614553769627157987194626324615940995313520037766; _points[5] = 0.08639934246511750340510262867480251948014944926245940921964547287926008459498556321478680493105522878; _weight[5] = 0.06075928534395159234470740453623831297833467284503733614553769627157987194626324615940995313521470206; _points[6] = 0.8436464524058427350740099015096670687692006063735853378096332443140924480915666284736865352526059193; _weight[6] = 0.07860158357909676728480096931192107830283401866866168748465852193738408818480414925697904668120528128; _points[7] = 0.1563535475941572649259900984903329312307993936264146621903667556859075519084333715263134647473940806; _weight[7] = 0.07860158357909676728480096931192107830283401866866168748465852193738408818480414925697904668120705796; _points[8] = 0.2423756818209229540173546407244056688455573587153469815242476154536075240839721697739639898246135538; _weight[8] = 0.09276919873896890687085829506257851812446130146866582951001746253454917513176272221277636557335623116; _points[9] = 0.7576243181790770459826453592755943311544426412846530184757523845463924759160278302260360101753864463; _weight[9] = 0.09276919873896890687085829506257851812446130146866582951001746253454917513176272221277636557335624966; _points[10] = 0.3404438155360551197821640879157622665828693982330780217016749063713332797436036084175331472893267934; _weight[10] = 0.1025992318606478019829620328306090278551695306547097258584486451416835724126248601697159199959454469; _points[11] = 0.6595561844639448802178359120842377334171306017669219782983250936286667202563963915824668527106732066; _weight[11] = 0.1025992318606478019829620328306090278551695306547097258584486451416835724126248601697159199959454481; _points[12] = 0.4459725256463281689668776748900826261940241972628812214795894693459932354941349964349496559116553164; _weight[12] = 0.1076319267315788950979382216581300176374987790270644001098881962718093936769973020005122207054097891; _points[13] = 0.5540274743536718310331223251099173738059758027371187785204105306540067645058650035650503440883446836; _weight[13] = 0.1076319267315788950979382216581300176374987790270644001098881962718093936769973020005122207054097891; break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(15); _weight.resize(15); _points[0] = 0.006003740989757285755217140706693709426513591438119255000001242206305781315490287643638974815840423912; _weight[0] = 0.01537662099805863417731419678860220886087407241671703713211414275211859473355858401951938536567818793; _points[1] = 0.9939962590102427142447828592933062905734864085618807449999987577936942186845097123563610251841595731; _weight[1] = 0.01537662099805863417731419678860220886087407241671703713211414275211859473355858401951938536633108639; _points[2] = 0.9686366962003529521538794738551047356219981367576522289506815381751014868985227639752737930871340456; _weight[2] = 0.03518302374405406235463370822533366923335401637716535991295364645719352775643711852242022603232734774; _points[3] = 0.03136330379964704784612052614489526437800186324234777104931846182489851310147723602472620691286596038; _weight[3] = 0.03518302374405406235463370822533366923335401637716535991295364645719352775643711852242022603294154521; _points[4] = 0.07589670829478639189967583961289157431687191263150368295213622061966246241292725740119614012458925999; _weight[4] = 0.05357961023358596750593477334293465170777185787905099034351119456093899742615789986284292856885599421; _points[5] = 0.9241032917052136081003241603871084256831280873684963170478637793803375375870727425988038598754107365; _weight[5] = 0.05357961023358596750593477334293465170777185787905099034351119456093899742615789986284292856902630637; _points[6] = 0.8622088656800850237080930273069690048154496472920512817757117103520618908389626094980505488015671642; _weight[6] = 0.06978533896307715722390239725551416126042513765775562160119556431554422227095390584038412868178503037; _points[7] = 0.1377911343199149762919069726930309951845503527079487182242882896479381091610373905019494511984328364; _weight[7] = 0.06978533896307715722390239725551416126042513765775562160119556431554422227095390584038412868179665823; _points[8] = 0.2145139136957305762313866313730446793808068018586251975733672914729023100651207102582926857150869278; _weight[8] = 0.08313460290849696677660043024060440556545009004920645366093259528177678160613925885535258714620779062; _points[9] = 0.7854860863042694237686133686269553206191931981413748024266327085270976899348792897417073142849130721; _weight[9] = 0.08313460290849696677660043024060440556545009004920645366093259528177678160613925885535258714620808482; _points[10] = 0.302924326461218315051396314509477265818623611920650872484417328024195521106519291012251442919170119; _weight[10] = 0.09308050000778110551340028093321141225311300613896420140774786365500662775134958030947488444304965858; _points[11] = 0.6970756735387816849486036854905227341813763880793491275155826719758044788934807089877485570808298811; _weight[11] = 0.09308050000778110551340028093321141225311300613896420140774786365500662775134958030947488444304966241; _points[12] = 0.3994029530012827388496858483027018960935817727686811601920251376950258804984899061990818709662394704; _weight[12] = 0.09921574266355578822805916322191966240934627997877099674236896396456239876671713406665749958240891154; _points[13] = 0.6005970469987172611503141516972981039064182272313188398079748623049741195015100938009181290337605296; _weight[13] = 0.09921574266355578822805916322191966240934627997877099674236896396456239876671713406665749958240891161; _points[14] = 0.5; _weight[14] = 0.1012891209627806364403100999837596574193310790047386783983520580257176993773730370466967203563940161; break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(16); _weight.resize(16); _points[0] = 0.005299532504175033701922913274833686286862964171177434974388047634337931392087301530731784046600902477; _weight[0] = 0.01357622970587704742589028622800905175613368778338039899530515953690205683210808662466288961558883448; _points[1] = 0.9947004674958249662980770867251663137131370358288225650256119523656620686079126984692682159533990871; _weight[1] = 0.01357622970587704742589028622800905175613368778338039899530515953690205683210808662466288961642578809; _points[2] = 0.9722875115366162880389942077673041725455696362955363004627768260333048944513411521097828643690791645; _weight[2] = 0.03112676196932394643142191849718884713749325417645342895065175790976786944352190953060585476930010037; _points[3] = 0.02771248846338371196100579223269582745443036370446369953722317396669510554865884789021713563092085786; _weight[3] = 0.03112676196932394643142191849718884713749325417645342895065175790976786944352190953060585476935955411; _points[4] = 0.06718439880608412805976605114380343380633230757623664594824428721611980114375472087143375281761380758; _weight[4] = 0.04757925584124639240496255380112311317763175159185632907841114361481587978884097972351247865969801944; _points[5] = 0.9328156011939158719402339488561965661936676924237633540517557127838801988562452791285662471823861744; _weight[5] = 0.04757925584124639240496255380112311317763175159185632907841114361481587978884097972351247866179909653; _points[6] = 0.8777022041775015169475505974237211341769068282287515048908785884611484305156358388603110284596247239; _weight[6] = 0.06231448562776693602623814109600821007244342961110133997237529521470548196073267679898459500869048106; _points[7] = 0.1222977958224984830524494025762788658230931717712484951091214115388515694843641611396889715403752838; _weight[7] = 0.06231448562776693602623814109600821007244342961110133997237529521470548196073267679898459500869141184; _points[8] = 0.8089381222013218742233358820243955094959411088828288970518986777708666588774057122284555152139792502; _weight[8] = 0.07479799440828836604075086527373927448524553410391823340271098109368020201020899122588931920152688622; _points[9] = 0.191061877798678125776664117975604490504058891117171102948101322229133341122594287771544484786020748; _weight[9] = 0.07479799440828836604075086527373927448524553410391823340271098109368020201020899122588931920153081579; _points[10] = 0.7290083888286136931712097214917887867700158065177617454505773754738795871451468038677177639679940468; _weight[10] = 0.08457825969750126909465603951517998110581973670801414087254146784040183210496526546607766127103887189; _points[11] = 0.2709916111713863068287902785082112132299841934822382545494226245261204128548531961322822360320059534; _weight[11] = 0.08457825969750126909465603951517998110581973670801414087254146784040183210496526546607766127103912237; _points[12] = 0.6408017753896294566152302507302480532430347453852999002744173669779625897495653852207201145760200796; _weight[12] = 0.09130170752246179443338183398460996969177811182732464120924757218971523247505558748020021255849263684; _points[13] = 0.3591982246103705433847697492697519467569652546147000997255826330220374102504346147792798854239799204; _weight[13] = 0.09130170752246179443338183398460996969177811182732464120924757218971523247505558748020021255849263706; _points[14] = 0.4524937450811812799073403322875209684348234721554672716513900913874373508777039335076206535121083239; _weight[14] = 0.09472530522753424814269836160414155257345449419795148751875662260001144538456650315006698891676697614; _points[15] = 0.5475062549188187200926596677124790315651765278445327283486099086125626491222960664923793464878916761; _weight[15] = 0.09472530522753424814269836160414155257345449419795148751875662260001144538456650315006698891676697614; break; // order 32,33 case 32 : case 33 : delivered_order = 33; _points.resize(17); _weight.resize(17); _points[0] = 0.004712262342791332162282990029667361746105074770217848608045606628828071264688983144320779675129030429; _weight[0] = 0.01207415143427396598005501314378266234584865797251263915559257441510919835275524317979262072372571691; _points[1] = 0.9952877376572086678377170099703326382538949252297821513919543933711719287353110168556792203248709665; _weight[1] = 0.01207415143427396598005501314378266234584865797251263915559257441510919835275524317979262072798397032; _points[2] = 0.02466223911561611938864152105209848927830747672044564616501539379394231686390070262498154862426577667; _weight[2] = 0.02772976468699360056472008267912233025642312597661442349686203935512871300166731918663789437619580271; _points[3] = 0.9753377608843838806113584789479015107216925232795543538349846062060576831360992973750184513757342315; _weight[3] = 0.02772976468699360056472008267912233025642312597661442349686203935512871300166731918663789438923065064; _points[4] = 0.9401195768634929510614778472440778463117084089672139501759550796620135652522056057591535969342795476; _weight[4] = 0.04251807415858959044176768509553103692524569460925273788320518036939199639374132387349380214026392876; _points[5] = 0.05988042313650704893852215275592215368829159103278604982404492033798643474779439424084640306572044363; _weight[5] = 0.04251807415858959044176768509553103692524569460925273788320518036939199639374132387349380215620526406; _points[6] = 0.8907570019484007034626150277602380251119862363702842562566572677562888080797565380866902504334808315; _weight[6] = 0.05594192359670198554739419281317796336792171213153852500924324122454783982180491780761085226210241093; _points[7] = 0.1092429980515992965373849722397619748880137636297157437433427322437111919202434619133097495665191737; _weight[7] = 0.05594192359670198554739419281317796336792171213153852500924324122454783982180491780761085226455009237; _points[8] = 0.1711644203916546170748488916784988324260970542620133780973841522463378512126512091235044063472449388; _weight[8] = 0.06756818423426273664315999085117509868606292661724451018899730534443362149496927204875472415680701704; _points[9] = 0.8288355796083453829251511083215011675739029457379866219026158477536621487873487908764955936527550596; _weight[9] = 0.06756818423426273664315999085117509868606292661724451018899730534443362149496927204875472415684703185; _points[10] = 0.7563452685432384839431232843147759372914618612055864529563657494821424624713927401409902061902588012; _weight[10] = 0.07702288053840514404071579740097930597024152923550896719263235567572337092983822554580872467672521159; _points[11] = 0.243654731456761516056876715685224062708538138794413547043634250517857537528607259859009793809741199; _weight[11] = 0.07702288053840514404071579740097930597024152923550896719263235567572337092983822554580872467672663593; _points[12] = 0.6756158817269381576485927585476730025202698757878375116595805097738971308233747864487915723017545524; _weight[12] = 0.08400205107822502225498533189416157751059906448253700713497792567016155325001229328060192486945988784; _points[13] = 0.3243841182730618423514072414523269974797301242121624883404194902261028691766252135512084276982454476; _weight[13] = 0.08400205107822502225498533189416157751059906448253700713497792567016155325001229328060192486945989544; _points[14] = 0.5892420907479239279253387468270327787377096663457628217814759071353487752396502880851444611048175023; _weight[14] = 0.08828135268349632316263549505659861957546220900037405902157220345660451810364134022616734534204332795; _points[15] = 0.4107579092520760720746612531729672212622903336542371782185240928646512247603497119148555388951824977; _weight[15] = 0.08828135268349632316263549505659861957546220900037405902157220345660451810364134022616734534204332799; _points[16] = 0.5; _weight[16] = 0.0897232351781032627291328221309428107243901599488342618338343489777983773031401297022642228762521388; break; // order 34,35 case 34 : case 35 : delivered_order = 35; _points.resize(18); _weight.resize(18); _points[0] = 0.004217415789534526634991997646924614873710531577280153540162184880071453204110195124118265193699399567; _weight[0] = 0.01080800676324165515667135513322623469384261573779497273103799507067654511867256095162565153472427187; _points[1] = 0.9957825842104654733650080023530753851262894684227198464598378151199285467958898048758817348063006366; _weight[1] = 0.01080800676324165515667135513322623469384261573779497273103799507067654511867256095162565154865900931; _points[2] = 0.9779119747856988775905979464648881549864220674056532394226938148454490356023866119789411964798169198; _weight[2] = 0.02485727444748489822666747310131932084043312306445510112315215393278617164790170814752068547592735646; _points[3] = 0.02208802521430112240940205353511184501357793259434676057730618515455096439761338802105880352018300695; _weight[3] = 0.02485727444748489822666747310131932084043312306445510112315215393278617164790170814752068552847842593; _points[4] = 0.9463012332487778696030302955635727577039476356761491070937331574536202912183924679153337935403015991; _weight[4] = 0.03821286512744452826456483880831826280265895310417914372476068961720500364589648967088255123780103244; _points[5] = 0.05369876675122213039696970443642724229605236432385089290626684254637970878160753208466620645969845262; _weight[5] = 0.03821286512744452826456483880831826280265895310417914372476068961720500364589648967088255130463489598; _points[6] = 0.9018524794862615578412087275072953985516494608059612408752140320976940527144721436141434827212058818; _weight[6] = 0.05047102205314358278140699246241730353140056944383945080518726832782539869024926167622531935947931249; _points[7] = 0.09814752051373844215879127249270460144835053919403875912478596790230594728552785638585651727879410136; _weight[7] = 0.05047102205314358278140699246241730353140056944383945080518726832782539869024926167622531936152909078; _points[8] = 0.8458435215301766039374455406444241947261352864087538794510813284185986844518146255669054040725663105; _weight[8] = 0.06127760335573923009225956340010077761408194866671954858362675682702871979970184091909860996236098967; _points[9] = 0.1541564784698233960625544593555758052738647135912461205489186715814013155481853744330945959274336919; _weight[9] = 0.06127760335573923009225956340010077761408194866671954858362675682702871979970184091909860996247060097; _points[10] = 0.2201145844630262326960642257373354315361867571146452916800065279689077358967397401704589758199778143; _weight[10] = 0.07032145733532532560236565187597361404775120516548627994172809763023279346387494851533138451345573173; _points[11] = 0.7798854155369737673039357742626645684638132428853547083199934720310922641032602598295410241800221855; _weight[11] = 0.07032145733532532560236565187597361404775120516548627994172809763023279346387494851533138451345944567; _points[12] = 0.2941244192685786769820341030834741814605051589399872443594255661048051634497872951128265748031744856; _weight[12] = 0.07734233756313262246270900191818738609660919813367708633332095736389143461532186515617346192611193334; _points[13] = 0.7058755807314213230179658969165258185394948410600127556405744338951948365502127048871734251968255144; _weight[13] = 0.07734233756313262246270900191818738609660919813367708633332095736389143461532186515617346192611199996; _points[14] = 0.3740568871542472452055135725610443849185691171701797709898644841316077532221378890964612289453068764; _weight[14] = 0.0821382418729163614930268882329637952061694769986764766222484854558242109226040038776818788735302449; _points[15] = 0.6259431128457527547944864274389556150814308828298202290101355158683922467778621109035387710546931236; _weight[15] = 0.0821382418729163614930268882329637952061694769986764766222484854558242109226040038776818788735302449; _points[16] = 0.5423875065208676506211309264678919058666586934530449600216822588127498953266400008189022753637198062; _weight[16] = 0.08457119148157179592032823506749330516705290968517194013493759577452972209577732108546045701988907679; _points[17] = 0.4576124934791323493788690735321080941333413065469550399783177411872501046733599991810977246362801938; _weight[17] = 0.08457119148157179592032823506749330516705290968517194013493759577452972209577732108546045701988907679; break; // order 36,37 case 36 : case 37 : delivered_order = 37; _points.resize(19); _weight.resize(19); _points[0] = 0.9962034219217922015945088351266302467946582007016053933398397195456159514792614419018374604367093356; _weight[0] = 0.009730894114863238518156020732219217876453304534643320396340236230800718784052774105426043995362173783; _points[1] = 0.003796578078207798405491164873369753205341799298394606660160280454384048520738558098162539563290576184; _weight[1] = 0.009730894114863238518156020732219217876453304534643320396340236230800718784052774105426044173769122249; _points[2] = 0.980104076067415015426389420343825763307545751637069052958908167216100374968744256610371780745770797; _weight[2] = 0.02240711338284980016641907870099710597587711373392880104292726338382149569213972882233451675157216316; _points[3] = 0.01989592393258498457361057965617423669245424836293094704109183278389962503125574338962821925422939313; _weight[3] = 0.02240711338284980016641907870099710597587711373392880104292726338382149569213972882233451752427173122; _points[4] = 0.04842204819259104917866953573384375609530303297132209115248378761918209770494789052123988581535143365; _weight[4] = 0.03452227136882061329035412900300652248092401584380656556145021384801748745321951075883154737770809981; _points[5] = 0.9515779518074089508213304642661562439046969670286779088475162123808179022950521094787601141846484121; _weight[5] = 0.03452227136882061329035412900300652248092401584380656556145021384801748745321951075883154804745494595; _points[6] = 0.9113573282685714124894612433563569508872692431034150206849319443027501714518429160134331115546303493; _weight[6] = 0.04574501081122499973223104706191982633045582564829939233249467245103111052189863080287385751297978919; _points[7] = 0.08864267173142858751053875664364304911273075689658497931506805569724982854815708398656688844536971947; _weight[7] = 0.04574501081122499973223104706191982633045582564829939233249467245103111052189863080287385752662736252; _points[8] = 0.1395169113323853106914520695881091851714290835456666125307047643066927204260069735782833086643367062; _weight[8] = 0.05578332277366699735801195084088299874066592691994688776073057143822948805282323530050214248021619462; _points[9] = 0.860483088667614689308547930411890814828570916454333387469295235693307279573993026421716691335663273; _weight[9] = 0.05578332277366699735801195084088299874066592691994688776073057143822948805282323530050214248274414005; _points[10] = 0.1997273476691594882651809175268803600658389586338537162067066371658075456515645797876221023342730016; _weight[10] = 0.06437698126966811383775789242843855852791978854673151727355219231115180202831583996571650116696087894; _points[11] = 0.8002726523308405117348190824731196399341610413661462837932933628341924543484354202123778976657270034; _weight[11] = 0.06437698126966811383775789242843855852791978854673151727355219231115180202831583996571650116705281951; _points[12] = 0.2677146293120195271413664259479488160118571426879317015078455612121579394432872966567752271396340272; _weight[12] = 0.07130335108680330588787305472095148623783417241223693046328582795322912423645162550747003591862412103; _points[13] = 0.7322853706879804728586335740520511839881428573120682984921544387878420605567127033432247728603659722; _weight[13] = 0.07130335108680330588787305472095148623783417241223693046328582795322912423645162550747003591862432269; _points[14] = 0.6582820499818149159950586644249224589461426095664436225778644933989464429102881989984194460432401755; _weight[14] = 0.07638302103292983338942770044883149923050413361821431176155077653740552182553160682740492351539352549; _points[15] = 0.3417179500181850840049413355750775410538573904335563774221355066010535570897118010015805539567598244; _weight[15] = 0.07638302103292983338942770044883149923050413361821431176155077653740552182553160682740492351539354559; _points[16] = 0.5801793228201126879340480578703717747524367502354376894373217258031603043401955368283697867497404565; _weight[16] = 0.07948442169697717382497821973252360083939007909756304787558745766237048929169252987130523836300323926; _points[17] = 0.4198206771798873120659519421296282252475632497645623105626782741968396956598044631716302132502595435; _weight[17] = 0.07948442169697717382497821973252360083939007909756304787558745766237048929169252987130523836300323929; _points[18] = 0.5; _weight[18] = 0.08052722492439184798958181266045836751995127928925845106416157636788552422774903607627038285846452347; break; // order 38,39 case 38 : case 39 : delivered_order = 39; _points.resize(20); _weight.resize(20); _points[0] = 0.003435700407452537606938805764339860888676434549172051925907934391007641186123109580275298751713954469; _weight[0] = 0.008807003569576059155930981175926408181071552771668366262174663338674209629810923908701553356090040729; _points[1] = 0.996564299592547462393061194235660139111323565450827948074092065608992358813876890419724701248285876; _weight[1] = 0.008807003569576059155930981175926408181071552771668366262174663338674209629810923908701553563226498553; _points[2] = 0.9819859636389568956338330655986386109560301639030944280317687969460207903921915284900090626279828738; _weight[2] = 0.02030071490019347066551997613746605493954531999497576840880342728091614837549366414776945721436983009; _points[3] = 0.01801403636104310436616693440136138904396983609690557196823120305397920960780847150999093737201747363; _weight[3] = 0.02030071490019347066551997613746605493954531999497576840880342728091614837549366414776945930224083097; _points[4] = 0.9561172141256629529338762206016490565245923987118458873979411095790354456043595394682223630964602397; _weight[4] = 0.03133602416705453178475326759352080317580053828921818204979217271898740551683283932228188052636258305; _points[5] = 0.04388278587433704706612377939835094347540760128815411260205889042096455439564046053177763690353951217; _weight[5] = 0.03133602416705453178475326759352080317580053828921818204979217271898740551683283932228188185922162769; _points[6] = 0.08044151408889058830273546914923965733518531746718131337375363723356945300033759504038532971702103414; _weight[6] = 0.04163837078835237436237907161102310305008891429158164537244103039284654144703970973568759498491074799; _points[7] = 0.9195584859111094116972645308507603426648146825328186866262463627664305469996624049596146702829790438; _weight[7] = 0.04163837078835237436237907161102310305008891429158164537244103039284654144703970973568759537895086086; _points[8] = 0.1268340467699246036928474648221792048446346602154117779302270469657323224809224676594479431896762949; _weight[8] = 0.05096505990862021751837506774017493808334582801169627813098580809842616101269717323767465784984593666; _points[9] = 0.8731659532300753963071525351778207951553653397845882220697729530342676775190775323405520568103236989; _weight[9] = 0.05096505990862021751837506774017493808334582801169627813098580809842616101269717323767465787679251824; _points[10] = 0.8180268403632575127264183481131429683716945583996842319697233112732706312927150662793515977478806628; _weight[10] = 0.05909726598075920865618868885569114350252060977448438772344497601008737417525575815286434391364216924; _points[11] = 0.1819731596367424872735816518868570316283054416003157680302766887267293687072849337206484022521193356; _weight[11] = 0.05909726598075920865618868885569114350252060977448438772344497601008737417525575815286434391379151647; _points[12] = 0.755433500975413549002182025477625499212745664601213416736174309947367485195382864072015841525433889; _weight[12] = 0.06584431922458831344924724987408156745805525557349176349821824685442717821474046657177898759196353775; _points[13] = 0.2445664990245864509978179745223745007872543353987865832638256900526325148046171359279841584745661111; _weight[13] = 0.06584431922458831344924724987408156745805525557349176349821824685442717821474046657177898759199220677; _points[14] = 0.3131469556422902196637259114875363813021268391471586440860256932421771178134702360520521581827333106; _weight[14] = 0.07104805465919102566464916253358246651725770669601015166868354149191404374896718380847461214160016571; _points[15] = 0.6868530443577097803362740885124636186978731608528413559139743067578228821865297639479478418172666894; _weight[15] = 0.07104805465919102566464916253358246651725770669601015166868354149191404374896718380847461214160037349; _points[16] = 0.613892925570822539040248097684287312371544468841463736157317869603585670931777913897476062595484354; _weight[16] = 0.07458649323630187339391436850098471834633995204068415824810560890492221129779339034698066301760523947; _points[17] = 0.386107074429177460959751902315712687628455531158536263842682130396414329068222086102523937404515646; _weight[17] = 0.07458649323630187339391436850098471834633995204068415824810560890492221129779339034698066301760523991; _points[18] = 0.5382632605667486668773202046994191055023981334067487504023976221921281710241684891207725570907781078; _weight[18] = 0.07637669356536292534904216597754879674597432255618929863735052490879872658136889076778624391825195297; _points[19] = 0.4617367394332513331226797953005808944976018665932512495976023778078718289758315108792274429092218922; _weight[19] = 0.07637669356536292534904216597754879674597432255618929863735052490879872658136889076778624391825195297; break; // order 40,41 case 40 : case 41 : delivered_order = 41; _points.resize(21); _weight.resize(21); _points[0] = 0.9968760853101947501301210179689704645966692273911645927904369273565480545114964034990643735676197425; _weight[0] = 0.008008614128887166662112308429235507632945211058951241274088955056779383680659431157453347771312310018; _points[1] = 0.003123914689805249869878982031029535403330772608835407209563072643451945488503596500935626432380384723; _weight[1] = 0.008008614128887166662112308429235507632945211058951241274088955056779383680659431157453351749114303732; _points[2] = 0.01638658071684685284168889254615241928765315633507657502351443595743951999745985601408129906803823328; _weight[2] = 0.01847689488542624689997533414966483309447215407436491871358459093939287557878370422926170697737740157; _points[3] = 0.9836134192831531471583111074538475807123468436649234249764855640425604800025401439859187009319615024; _weight[3] = 0.01847689488542624689997533414966483309447215407436491871358459093939287557878370422926172175919579072; _points[4] = 0.03995033292479958560490643314251555292042619517588915141193225645450921846529608550413402431396548965; _weight[4] = 0.02856721271342860414181791323622397874564379841312802072125366171352452769982600404414322716617000998; _points[5] = 0.9600496670752004143950935668574844470795738048241108485880677435454907815347039144958659756860347123; _weight[5] = 0.02856721271342860414181791323622397874564379841312802072125366171352452769982600404414322962279680312; _points[6] = 0.9266816822916586418236253192937838351380529015896719853714958146971214531419175734861448185958476768; _weight[6] = 0.03805005681418965100852582665009158961307717621198301426073424290822675829330037499656830937779117347; _points[7] = 0.07331831770834135817637468070621616486194709841032801462850418530287854685808242651385518140415223744; _weight[7] = 0.03805005681418965100852582665009158961307717621198301426073424290822675829330037499656830966790713345; _points[8] = 0.1157800182621610456920610743468859825895116471143152245656366674849906287301494102064641704530676751; _weight[8] = 0.04672221172801693077664487055696604424176332368079642243334763581628894888685619367593429425889811223; _points[9] = 0.8842199817378389543079389256531140174104883528856847754343633325150093712698505897935358295469323533; _weight[9] = 0.04672221172801693077664487055696604424176332368079642243334763581628894888685619367593429445743788085; _points[10] = 0.833569402098706159652983334995169581298514671655701421237733541173597096557848147649755244281395587; _weight[10] = 0.05439864958357418883173728903505282101684979789692816527639104358448682188313469419058838120027728265; _points[11] = 0.1664305979012938403470166650048304187014853283442985787622664588264029034421518523502447557186044041; _weight[11] = 0.05439864958357418883173728903505282101684979789692816527639104358448682188313469419058838122180361033; _points[12] = 0.2241905820563900964704906016378433566889698878846601674978470802501976091441579814715095060504845149; _weight[12] = 0.06091570802686426709768358856286679917816881278076872512149190392137945061467548197097422700245561668; _points[13] = 0.7758094179436099035295093983621566433110301121153398325021529197498023908558420185284904939495154868; _weight[13] = 0.06091570802686426709768358856286679917816881278076872512149190392137945061467548197097422700249951898; _points[14] = 0.7121710601037193917868344442718940260482226159198172921121291179482434418394007784999360464569138182; _weight[14] = 0.06613446931666873089052628724838780216450577007157841160917516157589129928261519951184529780764479093; _points[15] = 0.2878289398962806082131655557281059739517773840801827078878708820517565581605992215000639535430861817; _weight[15] = 0.06613446931666873089052628724838780216450577007157841160917516157589129928261519951184529780764839634; _points[16] = 0.3559893415987994516996037419676998400454908681769833856228592376253775285290786160733304858198915867; _weight[16] = 0.06994369739553657736106671193379155544639658047745980218686566316212163123260307830816081080108004754; _points[17] = 0.6440106584012005483003962580323001599545091318230166143771407623746224714709213839266695141801084133; _weight[17] = 0.06994369739553657736106671193379155544639658047745980218686566316212163123260307830816081080108004754; _points[18] = 0.5727809270804475454685154911693431650581630122189688787107441949927736404416598988452579892191042265; _weight[18] = 0.07226220199498502953191358327687627180497498109854991737623649444304865467169593493263483293242601162; _points[19] = 0.4272190729195524545314845088306568349418369877810311212892558050072263595583401011547420107808957735; _weight[19] = 0.07226220199498502953191358327687627180497498109854991737623649444304865467169593493263483293242601162; _points[20] = 0.5; _weight[20] = 0.07304056682484521359599257384168559412240478847098272205366129375771929635169980596487109556323312786; break; // order 42,43 case 42 : case 43 : delivered_order = 43; _points.resize(22); _weight.resize(22); _points[0] = 0.002852707258800353963484289419350509803472900801984232511488537516671751147960044089614037111865173732; _weight[0] = 0.007313997649136100342495549023592722595105974562161865462248795710094053266374085571141880346311089378; _points[1] = 0.9971472927411996460365157105806494901965270991980157674885114624833282488520399559103859628881355814; _weight[1] = 0.007313997649136100342495549023592722595105974562161865462248795710094053266374085571141883008544226611; _points[2] = 0.9850302489177143635619754933826343554029844615689014847798691061681871303874212543187706773135177033; _weight[2] = 0.01688745079240707739665112343295645067458465723723733021644159727997575587653074419945745695676145639; _points[3] = 0.01496975108228563643802450661736564459701553843109851522013089383181286961257874568122932268648048749; _weight[3] = 0.01688745079240707739665112343295645067458465723723733021644159727997575587653074419945762155251412539; _points[4] = 0.03652161390641299973965353037047340168233517331397400897771340423643194044422943724815312357627569228; _weight[4] = 0.02614666757634164297015602563660562805607504678461815806135504164883817117996641239098413278077729423; _points[5] = 0.9634783860935870002603464696295265983176648266860259910222865957635680595557705627518468764237260872; _weight[5] = 0.02614666757634164297015602563660562805607504678461815806135504164883817117996641239098413540926935972; _points[6] = 0.9329062888601500682682128185096893645423983777942230780635466846313584474707602174042400781419289789; _weight[6] = 0.03489823421226024404748070946510882869938752647754026369315568588197320174364294701969641072525858542; _points[7] = 0.06709371113984993173178718149031063545760162220577692193645331536864155252923978259575992185807001107; _weight[7] = 0.03489823421226024404748070946510882869938752647754026369315568588197320174364294701969641451337550866; _points[8] = 0.8939084029896040810021389777041757606940893356657815790608466988555661381263540374500257594796665631; _weight[8] = 0.04297080310853386370722184068635143309457220267453989164328500552412301238656307871601112391536217695; _points[9] = 0.1060915970103959189978610222958242393059106643342184209391533011444338618736459625499742405203337798; _weight[9] = 0.04297080310853386370722184068635143309457220267453989164328500552412301238656307871601112573694851247; _points[10] = 0.1527563684066586099746550821188716143663288550112824194391331123038570301128534725802029426006947326; _weight[10] = 0.05020707222144048246603941891526814117540554438384981289248045717022654803711188637143031951500947387; _points[11] = 0.8472436315933413900253449178811283856336711449887175805608668876961429698871465274197970573993052051; _weight[11] = 0.05020707222144048246603941891526814117540554438384981289248045717022654803711188637143031963916383524; _points[12] = 0.7938202017534557964794384638193236744388078017868589198850169106862341889140221801795800526056382982; _weight[12] = 0.05646614804026960919670030371089215955713166606049735213629877312430656546180541682980244071096423847; _points[13] = 0.2061797982465442035205615361806763255611921982131410801149830893137658110859778198204199473943617058; _weight[13] = 0.05646614804026960919670030371089215955713166606049735213629877312430656546180541682980244071408393247; _points[14] = 0.2653220810066214867968346445167968269523281044346317261019499851532114926571816930628014255887449256; _weight[14] = 0.06162618840525621214278049307740723597972249950248398621421098594256775139958772701589012301716629665; _points[15] = 0.7346779189933785132031653554832031730476718955653682738980500148467885073428183069371985744112550745; _weight[15] = 0.06162618840525621214278049307740723597972249950248398621421098594256775139958772701589012301721118318; _points[16] = 0.3290320895539578874209262897863101902204133504146563280015688081554932805464265186717208013164783515; _weight[16] = 0.06558675239353118536648249626515372293787094709401532656268985171227230515676448704571705001653997614; _points[17] = 0.6709679104460421125790737102136898097795866495853436719984311918445067194535734813282791986835216485; _weight[17] = 0.06558675239353118536648249626515372293787094709401532656268985171227230515676448704571705001654039024; _points[18] = 0.603930213344110642739423266959772867107837554548966824834326652184100420657358832108299412062849607; _weight[18] = 0.06827074917300758567628691561575869829318382649434308405473486746910377908226891669049531646614901666; _points[19] = 0.396069786655889357260576733040227132892162445451033175165673347815899579342641167891700587937150393; _weight[19] = 0.06827074917300758567628691561575869829318382649434308405473486746910377908226891669049531646614901691; _points[20] = 0.5348696366598611106069208980593140409111481497401157373533409732558046868163197230382591971852169272; _weight[20] = 0.06962593642781599668770512417090497893696010872871292906309893853651885640938429814937374841202945705; _points[21] = 0.4651303633401388893930791019406859590888518502598842626466590267441953131836802769617408028147830728; _weight[21] = 0.06962593642781599668770512417090497893696010872871292906309893853651885640938429814937374841202945706; break; // order 44,45 case 44 : case 45 : delivered_order = 45; _points.resize(23); _weight.resize(23); _points[0] = 0.997384667498776061761962857722787180286813686229435210463396942083537039882892635091994572108193741; _weight[0] = 0.006705929743570886040654746729307532488309167052868616696197941069580443368026029924649341359469772762; _points[1] = 0.002615332501223938238037142277212819713186313770564789536603057916462960117107364908005427891809143873; _weight[1] = 0.006705929743570886040654746729307532488309167052868616696197941069580443368026029924649573769364960656; _points[2] = 0.01372876439094238402198796158961131240919310232301302875437192063210148141271179106629126712803738242; _weight[2] = 0.01549400292848972215534710982094225269188626449996403321744390329930889213143379600112464044475669166; _points[3] = 0.9862712356090576159780120384103886875908068976769869712456280793678985185872882089337087328719558227; _weight[3] = 0.01549400292848972215534710982094225269188626449996403321744390329930889213143379600112501966065445252; _points[4] = 0.9664855434130080511745984945192114891178509100756953853464506273009889144000435399565050359131567801; _weight[4] = 0.02401883586554233428582053581601699828060815415175580566684183343492904343740931457766543707359225583; _points[5] = 0.03351445658699194882540150548078851088214908992430461465354937269901108559995646004349496408684971031; _weight[5] = 0.02401883586554233428582053581601699828060815415175580566684183343492904343740931457766597672718701168; _points[6] = 0.06162382086477916631092155703292716418053548501967468254529944211972418064524202840071725243915325682; _weight[6] = 0.03211621070426292606358480757945549901957913787740341524767334102645877679039064170319606692512096974; _points[7] = 0.9383761791352208336890784429670728358194645149803253174547005578802758193547579715992827475608431633; _weight[7] = 0.03211621070426292606358480757945549901957913787740341524767334102645877679039064170319608117985608873; _points[8] = 0.09755579919058005392444079650161072102928493013484598870728378216414661991547532039245499830903712074; _weight[8] = 0.03964070588835947746144626237102161345685599596920325127781727016602150200687944126797677649047476588; _points[9] = 0.9024442008094199460755592034983892789707150698651540112927162178358533800845246796075450016909641157; _weight[9] = 0.03964070588835947746144626237102161345685599596920325127781727016602150200687944126797678878871689404; _points[10] = 0.8593306815659750972308122418743094241649648725656463978773906441070255643379628737551436279609732762; _weight[10] = 0.04645788303001757373850930868488232430173003587156494686632975230596864246779408039973782068126544426; _points[11] = 0.1406693184340249027691877581256905758350351274343536021226093558929744356620371262448563720390264527; _weight[11] = 0.04645788303001757373850930868488232430173003587156494686632975230596864246779408039973782150814728313; _points[12] = 0.1901950621181769218074513441752021733064096705964538521495672071954400967517765817297777471175290854; _weight[12] = 0.05244604573227070503704309250737192742923579159698750275141259616938968817102544494992821894515182282; _points[13] = 0.8098049378818230781925486558247978266935903294035461478504327928045599032482234182702222528824709511; _weight[13] = 0.05244604573227070503704309250737192742923579159698750275141259616938968817102544494992821895313919395; _points[14] = 0.7547507389230037748448965239334232152724213845924288116135946904106375025523832657533759938640108684; _weight[14] = 0.05749832011120568247082175646698065074570526146479280330453785170139979724187270361906533563745699839; _points[15] = 0.2452492610769962251551034760665767847275786154075711883864053095893624974476167342466240061359891292; _weight[15] = 0.05749832011120568247082175646698065074570526146479280330453785170139979724187270361906533563767227994; _points[16] = 0.3048494809848545842892555635596972707109745746537482593903973683416436919064837854106762368147562967; _weight[16] = 0.06152454215336476523378920033600482740792640627323528721783516645084523385389260275505301355895038264; _points[17] = 0.6951505190151454157107444364403027292890254253462517406096026316583563080935162145893237631852437032; _weight[17] = 0.06152454215336476523378920033600482740792640627323528721783516645084523385389260275505301355895211182; _points[18] = 0.6320678404851724652669347691416548014895066250970698024345394385261644267913360122890792643554668868; _weight[18] = 0.06445286109404107498929766969989682662985774859589174622217021585899473237800551787502302994595886119; _points[19] = 0.3679321595148275347330652308583451985104933749029301975654605614738355732086639877109207356445331132; _weight[19] = 0.06445286109404107498929766969989682662985774859589174622217021585899473237800551787502302994595887207; _points[20] = 0.4333715878507669445341286588791169314947973618733089217445273114064760550621727612127183682018242994; _weight[20] = 0.06623101970234830868582123235165846290251783473711176216125613401924300294133970283679005885397038903; _points[21] = 0.5666284121492330554658713411208830685052026381266910782554726885935239449378272387872816317981757006; _weight[21] = 0.06623101970234830868582123235165846290251783473711176216125613401924300294133970283679005885397038906; _points[22] = 0.5; _weight[22] = 0.06682728609305308767572855527292216929157640381844165874096798899572049042386144817957960350208853286; break; // order 46,47 case 46 : case 47 : delivered_order = 47; _points.resize(24); _weight.resize(24); _points[0] = 0.9975936099985106800899987048503684059372988462980014387208002725571419160347288689416986446685566286; _weight[0] = 0.006170614899993599773402833535018645787955020445683258408643660470545862758940556895899243366671187447; _points[1] = 0.002406390001489319910001295149631594062701153701998561279199727442858083965271131058301355331443605634; _weight[1] = 0.006170614899993599773402833535018645787955020445683258408643660470545862758940556895899519911713663779; _points[2] = 0.987364277985654749099195996504084530870591526520089359905796782553590560640490112269318737140860893; _weight[2] = 0.01426569431446683159065390797593914322459889896595405830083240237882200281871457171284068800097932645; _points[3] = 0.01263572201434525090080400349591546912940847347991064009420321744640943935950988773068126285913870873; _weight[3] = 0.01426569431446683159065390797593914322459889896595405830083240237882200281871457171284165660291838644; _points[4] = 0.03086272399863362073817549914563927517259017096127432668248641204520525197373216452001767923206867783; _weight[4] = 0.02213871940870990308430137410566911442965642091692894837069861486051218814113321981719642280218335366; _points[5] = 0.969137276001366379261824500854360724827409829038725673317513587954794748026267835479982320767931424; _weight[5] = 0.02213871940870990308430137410566911442965642091692894837069861486051218814113321981719673619811954492; _points[6] = 0.05679223649779948289342282900890162245633347834553997981448104161216258280052041394793824900190687327; _weight[6] = 0.02964929245771839037318387925005429227060006328260674551868827564704915158875412078303371109763423013; _points[7] = 0.943207763502200517106577170991098377543666521654460020185518958387837417199479586052061750998093307; _weight[7] = 0.02964929245771839037318387925005429227060006328260674551868827564704915158875412078303438091669549109; _points[8] = 0.08999900701304853902302506366512739596193676116607220637800948699930851052322272995886973941370905738; _weight[8] = 0.03667324070554015286701680762655825905966825492424973570135124533002069423793546741616252879754303569; _points[9] = 0.9100009929869514609769749363348726040380632388339277936219905130006914894767772700411302605862907671; _weight[9] = 0.03667324070554015286701680762655825905966825492424973570135124533002069423793546741616257681394130904; _points[10] = 0.8700620957892771821219140515499892127616462435070927284331911841359501693204614662206656780655647523; _weight[10] = 0.04309508076597663795859260149187133359254029411896650279420357193064344223039026563444432705548550264; _points[11] = 0.1299379042107228178780859484500107872383537564929072715668088158640498306795385337793343219344353201; _weight[11] = 0.04309508076597663795859260149187133359254029411896650279420357193064344223039026563444432809380918206; _points[12] = 0.8240468259684877846262478934553738133348291493094783901494668325122241587842698859640588851828635455; _weight[12] = 0.04880932605205694413494033223212357721395948442684297204165530501147716928879598917401001997704509176; _points[13] = 0.175953174031512215373752106544626186665170850690521609850533167487775841215730114035941114817136438; _weight[13] = 0.04880932605205694413494033223212357721395948442684297204165530501147716928879598917401002003817914148; _points[14] = 0.7727107356944197678291878086091861850053919962938090877168071949152824195897854485479174337204031353; _weight[14] = 0.05372213505798281739128867122330311139731434506711001088327082044341093319721855299029336355911190586; _points[15] = 0.2272892643055802321708121913908138149946080037061909122831928050847175804102145514520825662795968657; _weight[15] = 0.05372213505798281739128867122330311139731434506711001088327082044341093319721855299029336356007551697; _points[16] = 0.7168967538130225692435421159566748562262107554639844040404006423283822035168154570288677152330378081; _weight[16] = 0.05775283402686280067667224195339177993113515568824823529222468004433512677565927497017212882338315957; _points[17] = 0.2831032461869774307564578840433251437737892445360155959595993576716177964831845429711322847669621927; _weight[17] = 0.05775283402686280067667224195339177993113515568824823529222468004433512677565927497017212882339235575; _points[18] = 0.3424786601519183128066033543400948796067608695875913656228849352350589218293782958280632452223958946; _weight[18] = 0.06083523646390169560223157673813121280351477960190288938873587725631269685885848095887890171538627273; _points[19] = 0.6575213398480816871933966456599051203932391304124086343771150647649410781706217041719367547776041053; _weight[19] = 0.06083523646390169560223157673813121280351477960190288938873587725631269685885848095887890171538658359; _points[20] = 0.5955594337368081545793199103785348159202025516573766780744592882940429763459358709912455556226048654; _weight[20] = 0.06291872817341414806068769125559184436320166279067270208904575844069693633333129844101908962821056986; _points[21] = 0.4044405662631918454206800896214651840797974483426233219255407117059570236540641290087544443773951346; _weight[21] = 0.06291872817341414806068769125559184436320166279067270208904575844069693633333129844101908962821056988; _points[22] = 0.5320284464313028130425215413123725192954995977103736967121755408948696417969550539014464380671262546; _weight[22] = 0.06396909767337607848702808261234768592585561977083394121064978818617379577026820120604598878336737117; _points[23] = 0.4679715535686971869574784586876274807045004022896263032878244591051303582030449460985535619328737454; _weight[23] = 0.06396909767337607848702808261234768592585561977083394121064978818617379577026820120604598878336737117; break; // order 48,49 case 48 : case 49 : delivered_order = 49; _points.resize(25); _weight.resize(25); _points[0] = 0.9977784848952490489543924734469508086287813247024040856054024655664667406718639672436440131764693153; _weight[0] = 0.005696899250513143973951482056617386801660263146454848224474030558094945864883371677963556787448376476; _points[1] = 0.00222151510475095104560752655304919137121867529759591439459753443353325932813603275635598682353248497; _weight[1] = 0.005696899250513143973951482056617386801660263146454848224474030558094945864883371677965811475059758741; _points[2] = 0.01166803927024124425084230676020296612731472234279662766450628634191806623205972305177664525848306765; _weight[2] = 0.01317749330751606863095090764764957246798164085166123437768308289193546700443974968576767635766725226; _points[3] = 0.9883319607297587557491576932397970338726852776572033723354937136580819337679402769482233547415133449; _weight[3] = 0.01317749330751606863095090764764957246798164085166123437768308289193546700443974968577242932413311562; _points[4] = 0.9714872856144871697070055848292352659526007853044950709637262485686476612720246306544526090756260955; _weight[4] = 0.02046957835065315632781174385582297683042289168205217325234920744964871644010775638523527067391420037; _points[5] = 0.02851271438551283029299441517076473404739921469550492903627375143135233872797536934554739092437612273; _weight[5] = 0.02046957835065315632781174385582297683042289168205217325234920744964871644010775638524604173635510725; _points[6] = 0.05250400106086231557447899660859752291272257512320804846914915852041424454940027431440699653479712593; _weight[6] = 0.02745234798791759596296844577023666208005499277655567452425424912229688733921825594785529844095563499; _points[7] = 0.9474959989391376844255210033914024770872774248767919515308508414795857554505997256855930034652027271; _weight[7] = 0.02745234798791759596296844577023666208005499277655567452425424912229688733921825594785796307473275137; _points[8] = 0.9167213143804170007105105543467847847304820569117603930104323577308590662385450626266148697387927944; _weight[8] = 0.03401916690617845860359359282835398427735474717731828130753561320500182702585573655332580227175966452; _points[9] = 0.08327868561958299928948944565321521526951794308823960698956764226914093376145493737338513026120669813; _weight[9] = 0.03401916690617845860359359282835398427735474717731828130753561320500182702585573655332604122774719797; _points[10] = 0.1203703684813211847113585673978195118062389905508329395408051322774906855898687961961816013790731491; _weight[10] = 0.04007035016750050900661747983455565114511286642683794685810073148680641446740064477972868629207952781; _points[11] = 0.8796296315186788152886414326021804881937610094491670604591948677225093144101312038038183986209271367; _weight[11] = 0.04007035016750050900661747983455565114511286642683794685810073148680641446740064477972869753838111488; _points[12] = 0.1632168157632658177574396833761889120582916359636253414701715191108561315753578942090181571598454979; _weight[12] = 0.04551413099148182490574861035144582669049627947966715548524188448350869233920526345124219761526968488; _points[13] = 0.836783184236734182242560316623811087941708364036374658529828480889143868424642105790981842840154432; _weight[13] = 0.04551413099148182490574861035144582669049627947966715548524188448350869233920526345124219865109678983; _points[14] = 0.2111685348793885161381550791936729663021324803542408716772582461194884936236839888616417017671017262; _weight[14] = 0.05026797453352532210110344519634291349423304726407095353493452099970647407952301484097782805516032632; _points[15] = 0.7888314651206114838618449208063270336978675196457591283227417538805115063763160111383582982328982821; _weight[15] = 0.0502679745335253221011034451963429134942330472640709535349345209997064740795230148409778280886849818; _points[16] = 0.2634986342771425197389089424954039793340911307691863545463845861521983620793569849484215761086031856; _weight[16] = 0.05425981223713182655804697852505830967003879399336100807824715367441964639680422134669884175019772201; _points[17] = 0.7365013657228574802610910575045960206659088692308136454536154138478016379206430150515784238913968136; _weight[17] = 0.05425981223713182655804697852505830967003879399336100807824715367441964639680422134669884175027469118; _points[18] = 0.6805861529046939188679108650638203337110391735216875348972893889233726911978482743016476575304688072; _weight[18] = 0.05742912957285582416966277293477790432046809583409007479575749501574139833556271128267214949278988798; _points[19] = 0.319413847095306081132089134936179666288960826478312465102710611076627308802151725698352342469531193; _weight[19] = 0.05742912957285582416966277293477790432046809583409007479575749501574139833556271128267214949279150727; _points[20] = 0.6219334418604942160225951813987257932028165781629922382105678266251937363929279753398881838816251703; _weight[20] = 0.05972788176789238611408906325645052369508835070686321275979394066759204511009386751221434860487635927; _points[21] = 0.3780665581395057839774048186012742067971834218370077617894321733748062636070720246601118161183748297; _weight[21] = 0.05972788176789238611408906325645052369508835070686321275979394066759204511009386751221434860487637172; _points[22] = 0.5614323463053551981936799094040184027661026730248918692119467689463544174844292079132194249731655277; _weight[22] = 0.06112122149515502084447975947292575291752962378152952045379004111601948360959005121516770445539453314; _points[23] = 0.4385676536946448018063200905959815972338973269751081307880532310536455825155707920867805750268344723; _weight[23] = 0.06112122149515502084447975947292575291752962378152952045379004111601948360959005121516770445539453319; _points[24] = 0.5; _weight[24] = 0.06158802686335772560195143653952507121911681375907583269567609865845600397463071064230056258752479189; break; // order 50,51 case 50 : case 51 : delivered_order = 51; _points.resize(26); _weight.resize(26); _points[0] = 0.002057149427191535498391520338546987021571072440220166301736095297216851683361096774046705971591914138; _weight[0] = 0.005275686308671503577825593842625988952172868589847307275027713818381611146754875672203017278562745882; _points[1] = 0.9979428505728084645016084796614530129784289275597798336982639047027831483166389032259532940283980829; _weight[1] = 0.005275686308671503577825593842625988952172868589847307275027713818381611146754875672222096535931991352; _points[2] = 0.9891927229782354955502901771559631527234582818736592512427074306582525753725062356694672106206098011; _weight[2] = 0.01220892554631595439480791375989420012024796309863517102602344753784585784943394482692276794975351226; _points[3] = 0.01080727702176450444970982284403684727654171812634074875729256934174742462749376433053278937941302212; _weight[3] = 0.01220892554631595439480791375989420012024796309863517102602344753784585784943394482692590062619002023; _points[4] = 0.9735795333308571250679576417590183772603551688421576350091338898049288222262304038853530988756546694; _weight[4] = 0.01898119164718138197515157062442524734538521087202447883765591232640395020816792394092103666682741212; _points[5] = 0.02642046666914287493204235824098162273964483115784236499086611019507117777376959611464690112432590056; _weight[5] = 0.01898119164718138197515157062442524734538521087202447883765591232640395020816792394092953156322980776; _points[6] = 0.9513189309921535371088327996156051256705620026864526862775828273897328995512729934288304151250970431; _weight[6] = 0.02548791264857390599915995036203668976293965927148596741191884299970865622501582259468003159778249186; _points[7] = 0.04868106900784646289116720038439487432943799731354731372241717261026710044872700657116958487490989121; _weight[7] = 0.02548791264857390599915995036203668976293965927148596741191884299970865622501582259469676675396512358; _points[8] = 0.07727702860575099060124646926608091921396244895433521528491176354419154266438185252492621891031580747; _weight[8] = 0.03163702316478741776972684495352254786111142100634725533304794330399419585613801383092451868449629648; _points[9] = 0.9227229713942490093987535307339190807860375510456647847150882364558084573356181474750737810896852668; _weight[9] = 0.0316370231647874177697268449535225478611114210063472553330479433039941958561380138309268591934534817; _points[10] = 0.1118070255896605719035163763788580665118908718724025639184157891864835356795866770152894361720024268; _weight[10] = 0.03734207488282987294353789805142416931937358094052034038951542087140981540468873148337639510000187901; _points[11] = 0.8881929744103394280964836236211419334881091281275974360815842108135164643204133229847105638279954159; _weight[11] = 0.03734207488282987294353789805142416931937358094052034038951542087140981540468873148337657126474272665; _points[12] = 0.8482136302099786324319069568647123489303766588954095758522787269191802734979190143979569224436633356; _weight[12] = 0.04252294715674261960522388253999084829196015838833913809302809070999389600765276409114327132632335978; _points[13] = 0.151786369790021367568093043135287651069623341104590424147721273080819726502080985602043077556337607; _weight[13] = 0.04252294715674261960522388253999084829196015838833913809302809070999389600765276409114329640288988689; _points[14] = 0.1966538534911909683840106265415564727823677138670450548106783437400359365548733997670835956949944863; _weight[14] = 0.04710690017795707423183244153365159927458287295710363993165745118401724964172710566666105228365478843; _points[15] = 0.8033461465088090316159893734584435272176322861329549451893216562599640634451266002329164043050053082; _weight[15] = 0.04710690017795707423183244153365159927458287295710363993165745118401724964172710566666105283897288388; _points[16] = 0.7542203574122528588478515323627845876881533770928754068605502348019636974646783451170112711373754115; _weight[16] = 0.05102958054721271161920703512671539616360440567712100516593690970432633440273700128534590714780195155; _points[17] = 0.2457796425877471411521484676372154123118466229071245931394497651980363025353216548829887288626246107; _weight[17] = 0.05102958054721271161920703512671539616360440567712100516593690970432633440273700128534590715187806242; _points[18] = 0.2984741224382568467594613114505584481700312951503419087054294332259078914763146734751210244027963381; _weight[18] = 0.0542359202642882953282897133639987911447191017106533222648028543047306996364527919847157957602897432; _points[19] = 0.7015258775617431532405386885494415518299687048496580912945705667740921085236853265248789755972036612; _weight[19] = 0.05423592026428829532828971336399879114471910171065332226480285430473069963645279198471579576032138823; _points[20] = 0.3539975802570215524285823089610848515576403065185048108938279040481491877109960462088021476536134262; _weight[20] = 0.05668090827315983327472035922129907262297518146250760699414396494374455328228972724632422646792560352; _points[21] = 0.6460024197429784475714176910389151484423596934814951891061720959518508122890039537911978523463865738; _weight[21] = 0.05668090827315983327472035922129907262297518146250760699414396494374455328228972724632422646792609764; _points[22] = 0.4115705898215549080154711257908276250113081180993678692598261501079773599722919564411924558682029493; _weight[22] = 0.05833022174264829102233125377018110681598244061096210823008134860563283296415986325634816982250102892; _points[23] = 0.5884294101784450919845288742091723749886918819006321307401738498920226400277080435588075441317970507; _weight[23] = 0.05833022174264829102233125377018110681598244061096210823008134860563283296415986325634816982250102892; _points[24] = 0.5296150467146566035468592875992016803951173676945177910771361458421935180599867101692053134428938839; _weight[24] = 0.05916070763963113825818554285023434232494513541445265904716009968981034737478143412042810703364070916; _points[25] = 0.4703849532853433964531407124007983196048826323054822089228638541578064819400132898307946865571061161; _weight[25] = 0.05916070763963113825818554285023434232494513541445265904716009968981034737478143412042810703364070916; break; // order 52,53 case 52 : case 53 : delivered_order = 53; _points.resize(27); _weight.resize(27); _points[0] = 0.001910368555505716530556395809385004869655972217064406149181751605891127211337093955618976639176052996; _weight[0] = 0.004899498025647180130575027545629549049112909467545796084070202282931315208834056077691434852954585551; _points[1] = 0.9980896314444942834694436041906149951303440277829355938508182483941088727886629060443810233608259815; _weight[1] = 0.004899498025647180130575027545629549049112909467545796084070202282931315208834056077753240245468294788; _points[2] = 0.01003826201924938857206332216947640771617888930502461838057005347380871200989052684729151220284212677; _weight[2] = 0.01134311579809031159801710322338074440638386014408317781572106511953791501790501107707508572996524597; _points[3] = 0.9899617379807506114279366778305235922838211106949753816194299465261912879901094731527084877971586194; _weight[3] = 0.01134311579809031159801710322338074440638386014408317781572106511953791501790501107742569568707400832; _points[4] = 0.9754502789073525034259540153219414465462949667422088254669086953936933344049557428958097932983624977; _weight[4] = 0.01764852687870985551128914465235582056806944476147090579111389254745441331417783144208520625011731365; _points[5] = 0.02454972109264749657404598467805855345370503325779117453309130460630666559504425710419020670162446147; _weight[5] = 0.01764852687870985551128914465235582056806944476147090579111389254745441331417783144210401009766964174; _points[6] = 0.9547411603387455521503225091048446274740221677974804795566137762360281331762640112274766026251394194; _weight[6] = 0.02372470626030753135204835505709235911236281008309236425865500633458910592851796202108612874571502525; _points[7] = 0.04525883966125444784967749089515537252597783220251952044338622376397186682373598877252339737488204539; _weight[7] = 0.02372470626030753135204835505709235911236281008309236425865500633458910592851796202114102641702143869; _points[8] = 0.9281039540091472451513686113534213988821434993017529134885948270644016596929044902648783426521190244; _weight[8] = 0.02949176842991679955515041685976581658262029535320608127010760745691056483180227669210348485634524415; _points[9] = 0.07189604599085275484863138864657860111785650069824708651140517293559834030709550973512165734786335432; _weight[9] = 0.02949176842991679955515041685976581658262029535320608127010760745691056483180227669212110937924323569; _points[10] = 0.1041141804647458864278013279463646335402994671260682437963596939765897575631027349407405614340916029; _weight[10] = 0.03487441188312279649216144417833363806641234662847600018870939081052967940428179133628125012015134327; _points[11] = 0.8958858195352541135721986720536353664597005328739317562036403060234102424368972650592594385659169024; _weight[11] = 0.03487441188312279649216144417833363806641234662847600018870939081052967940428179133628233232240947058; _points[12] = 0.1414932631302881503525918941788302251246639739507184286743918968321525838419328333124890452720638476; _weight[12] = 0.03980243388652888563153747950492120148807333649350147570670438190137636322061009657571262463250792362; _points[13] = 0.8585067368697118496474081058211697748753360260492815713256081031678474161580671666875109547279336968; _weight[13] = 0.03980243388652888563153747950492120148807333649350147570670438190137636322061009657571264732060672834; _points[14] = 0.8164539859732475704638673188172443060515380087846683486475559495117003454985408900102633473248019569; _weight[14] = 0.04421157927187847509716140142687455552826837502554955490293556854829634959572854374441794903265292647; _points[15] = 0.1835460140267524295361326811827556939484619912153316513524440504882996545014591099897366526751984366; _weight[15] = 0.0442115792718784750971614014268745555282683750255495549029355685482963495957285437444179516937253006; _points[16] = 0.7702757822897284474501504707799914104795902244935908451871688750179704483581906127122403416472846593; _weight[16] = 0.04804436368501425378282632327905292958010581476851466721406555676700756739190327262980465263698979581; _points[17] = 0.2297242177102715525498495292200085895204097755064091548128311249820295516418093872877596583527153147; _weight[17] = 0.04804436368501425378282632327905292958010581476851466721406555676700756739190327262980465271829088215; _points[18] = 0.7205741258750134402929870778446407262238422975815496940726936067016003481397479590425318969605111507; _weight[18] = 0.05125081890887289933562385576633190466220494745735866493489091619149373974629794637200532992800577459; _points[19] = 0.2794258741249865597070129221553592737761577024184503059273063932983996518602520409574681030394888488; _weight[19] = 0.05125081890887289933562385576633190466220494745735866493489091619149373974629794637200532992840251648; _points[20] = 0.6679969518192544498651595171036422708950100094537970953624933535475046614272798926175690236905281402; _weight[20] = 0.05378914289426659360608149221332870240948304953188233275617945325759724607200991384577327794535374829; _points[21] = 0.3320030481807455501348404828963577291049899905462029046375066464524953385727201073824309763094718599; _weight[21] = 0.05378914289426659360608149221332870240948304953188233275617945325759724607200991384577327794535376847; _points[22] = 0.3867703172802315705713804463198849144102766335358981616766855014081114331134964348872204676390168474; _weight[22] = 0.05562624417842259633608154802142433741646019004254163354820175484896603913565917187623706977023691306; _points[23] = 0.6132296827197684294286195536801150855897233664641018383233144985918885668865035651127795323609831526; _weight[23] = 0.05562624417842259633608154802142433741646019004254163354820175484896603913565917187623706977023693234; _points[24] = 0.5569862928047649834664474919349883135866402669890704973828769548831827443942053726981897403198983148; _weight[24] = 0.05673817305448257431018497404604962896026225940523601294820827478851116979698381328179598174896188868; _points[25] = 0.4430137071952350165335525080650116864133597330109295026171230451168172556057946273018102596801016852; _weight[25] = 0.05673817305448257431018497404604962896026225940523601294820827478851116979698381328179598174896188868; _points[26] = 0.5; _weight[26] = 0.05711043368947849452252286845091762434036072167508266516087385828959706267057662605513742154892559577; break; // order 54,55 case 54 : case 55 : delivered_order = 55; _points.resize(28); _weight.resize(28); _points[0] = 0.9982212487869772249752181952416554958750652160482129522928361647452421094805343626603577033042341754; _weight[0] = 0.004562141296547258869408076961475853120172245549145499708369845661949729932899064572236480217464936533; _points[1] = 0.001778751213022775024781804758344504124934783951787047707163835254757890519465637339642296695770837121; _weight[1] = 0.004562141296547258869408076961475853120172245549145499708369845661949729932899064572526563822056534335; _points[2] = 0.009348417314563623152720027096084861777922523373430845161987159270635774039111600249036536472313720156; _weight[2] = 0.01056605629638562987575019049663271722568467536164281889883424512553257787678854598195646787921082855; _points[3] = 0.9906515826854363768472799729039151382220774766265691548380128407293642259608883997509634635276713864; _weight[3] = 0.01056605629638562987575019049663271722568467536164281889883424512553257787678854598300882424950004705; _points[4] = 0.02287035968553090137294908014739220549829806295602416229264277568808467970208460056959184723562776574; _weight[4] = 0.01645071389115218998881540958526602299076540871004859392963081030188231834630637036053429300942080203; _points[5] = 0.9771296403144690986270509198526077945017019370439758377073572243119153202979153994304081527643931369; _weight[5] = 0.01645071389115218998881540958526602299076540871004859392963081030188231834630637036091886542410802276; _points[6] = 0.9578165131960660369348447116649635731762483976045607543307501223015040892535203600513990741767643359; _weight[6] = 0.0221364673795021139197939388266036953074970563542834218575735309421120888068499657459498897458583356; _points[7] = 0.0421834868039339630651552883350364268237516023954392456692498776984959107464796399486009258232168588; _weight[7] = 0.02213646737950211391979393882660369530749705635428342185757353094211208880684996574697771782818581975; _points[8] = 0.06705373871280247552887271631015659782906858460788683151122663349165279571743880703871341595766224915; _weight[8] = 0.02755367283785837271574145911347279560952898211283269420344637698647131160967129884318854047272566957; _points[9] = 0.9329462612871975244711272836898434021709314153921131684887733665083472042825611929612865840423488529; _weight[9] = 0.02755367283785837271574145911347279560952898211283269420344637698647131160967129884338434412610919579; _points[10] = 0.902820685458589585723942977712638829335850707404155834105343580890194771630436017399200517149107126; _weight[10] = 0.03263646198349979789669878338775231817681771558130351316774240907603844736949397023700131832114238009; _points[11] = 0.09717931454141041427605702228736117066414929259584416589465641910980522836956398260079948285088883028; _weight[11] = 0.03263646198349979789669878338775231817681771558130351316774240907603844736949397023700859662540316838; _points[12] = 0.8678054390068158860140722551462671840080305099965209466142638881679056292346650954667042208312744222; _weight[12] = 0.03732310711728438951196594358651101901081793060316672371966002810748192103268864967435680304363377329; _points[13] = 0.1321945609931841139859277448537328159919694900034790533857361118320943707653349045332957791687263386; _weight[13] = 0.0373231071172843895119659435865110190108179306031667237196600281074819210326886496743589656272682794; _points[14] = 0.8283255470194324806099490882533714107848008451249649809158517487479251504918128910941778006375064516; _weight[14] = 0.04155670861445060919519824912216623993056720672192566649817783586627122641301714237517143947408073117; _points[15] = 0.171674452980567519390050911746628589215199154875035019084148251252074849508187108905822199362493522; _weight[15] = 0.04155670861445060919519824912216623993056720672192566649817783586627122641301714237517145385645260117; _points[16] = 0.2151397640942991403459983583217845334376436571716763860899851611688926236813584997474581943081317975; _weight[16] = 0.04528587219651642047109301566839206491142874272724243618793426692722835773337135218283108917063664998; _points[17] = 0.7848602359057008596540016416782154665623563428283236139100148388311073763186415002525418056918681942; _weight[17] = 0.04528587219651642047109301566839206491142874272724243618793426692722835773337135218283109040639983369; _points[18] = 0.262062887522440869482794076166282978686391927310672024295443653528363812900513554436429402188325273; _weight[18] = 0.04846532899896495792524450304772030088251656167823080247843814090718469703877365354821424384893553832; _points[19] = 0.7379371124775591305172059238337170213136080726893279757045563464716361870994864455635705978116747257; _weight[19] = 0.04846532899896495792524450304772030088251656167823080247843814090718469703877365354821424385463743862; _points[20] = 0.688125758044539355110678604778043491435846988521611455172176360196915859421478201914138666867737561; _weight[20] = 0.05105648378903038490710831925285606752329000117896027046698772610142319921851682034903030485135373313; _points[21] = 0.3118742419554606448893213952219565085641530114783885448278236398030841405785217980858613331322624396; _weight[21] = 0.05105648378903038490710831925285606752329000117896027046698772610142319921851682034903030485137455679; _points[22] = 0.363969186182410961161586821937115132587619351653238523750162036748778829879543151606605536872026769; _weight[22] = 0.05302788296142320895520821849840541439496148134257975841531014814296125636970519336941207124174814022; _points[23] = 0.636030813817589038838413178062884867412380648346761476249837963251221170120456848393394463127973231; _weight[23] = 0.05302788296142320895520821849840541439496148134257975841531014814296125636970519336941207124174827441; _points[24] = 0.5822846410666903856407358889455827285728627078005840882471428133476659252378482239091221824898926037; _weight[24] = 0.05435559612914706762678575965183668393763922733302198382856058523865666319156439405412133157517785174; _points[25] = 0.4177153589333096143592641110544172714271372921994159117528571866523340747621517760908778175101073963; _weight[25] = 0.05435559612914706762678575965183668393763922733302198382856058523865666319156439405412133157517785209; _points[26] = 0.5275396449420171352132582636709399889253979955304168418726692936294472722671537883242063627327149899; _weight[26] = 0.05502350650823759814118813280090880697831276474561581663933405061480620506035357870344563338891741859; _points[27] = 0.4724603550579828647867417363290600110746020044695831581273307063705527277328462116757936372672850101; _weight[27] = 0.05502350650823759814118813280090880697831276474561581663933405061480620506035357870344563338891741859; break; // order 56,57 case 56 : case 57 : delivered_order = 57; _points.resize(29); _weight.resize(29); _points[0] = 0.001660278869701706918404233725323057174113273374559998900921338121607207002790127831238018210105691685; _weight[0] = 0.004258451939373204827131906651124901501199444899259243026215047279732645793902882416561761178003708122; _points[1] = 0.9983397211302982930815957662746769428258867266254400010990786618783927929972098721687619817900013044; _weight[1] = 0.00425845193937320482713190665112490150119944489925924302621504727973264579390288241744535539018274769; _points[2] = 0.991272752630706587435463007893188478053390974453215779512560045723336292857815191776086317357309087; _weight[2] = 0.0098660425280613529919299008201978155748032840951807938280269223376721781694305564537882256883305202; _points[3] = 0.008727247369293412564536992106811521946609025546784220487439954276663707142184808223913682642415212693; _weight[3] = 0.00986604252806135299192990082019781557480328409518079382802692233767217816943055646072225404451223492; _points[4] = 0.02135720211095613710089598150958821813122022302295146471823518192332919792283790106899735207110017006; _weight[4] = 0.0153702461010468113222042626873083748735581304843547551610421796831758162179478083469863767119774409; _points[5] = 0.9786427978890438628991040184904117818687797769770485352817648180766708020771620989310026479292115706; _weight[5] = 0.01537024610104681132220426268730837487355813048435475516104217968317581621794780836139798196132962266; _points[6] = 0.03940988352347060745312328195844678729558032834385320076550426809702499335777486268074240653069993902; _weight[6] = 0.02070103125934141805241500505703846076674539019428719862896243971739621852818551853953495319631759502; _points[7] = 0.9605901164765293925468767180415532127044196716561467992344957319029750066422251373192575934690763516; _weight[7] = 0.02070103125934141805241500505703846076674539019428719862896243971739621852818551853984171415670102727; _points[8] = 0.06268109753994860479110328937171072654469156844047931463638958564262908145684442658053764847935897777; _weight[8] = 0.02579741345124896195629719058977129895981105532307103384093141566365206014644921025462052127950351516; _points[9] = 0.9373189024600513952088967106282892734553084315595206853636104143573709185431555734194623515207548012; _weight[9] = 0.02579741345124896195629719058977129895981105532307103384093141566365206014644921025527067660590528598; _points[10] = 0.09090725619237377750521389271060751218498921905885311443148286385234173733221244639847037110258048705; _weight[10] = 0.0306015453285395692710549240119535224620322698895651041589387060559972220376777554907964141556590276; _points[11] = 0.9090927438076262224947861072893924878150107809411468855685171361476582626677875536015296288973760434; _weight[11] = 0.03060154532853956927105492401195352246203226988956510415893870605599722203767775549082120815892355311; _points[12] = 0.8762314258672385669563050386060690951062959841144933042059989957623460653588429567443031613856582753; _weight[12] = 0.03505896662752563928479074347443958655119744433738679095740371243000397857149125882037553337678302389; _points[13] = 0.1237685741327614330436949613939309048937040158855066957940010042376539346411570432556968386143545099; _weight[13] = 0.03505896662752563928479074347443958655119744433738679095740371243000397857149125882037823722445054435; _points[14] = 0.1608927311986567424219074973040070368058685349926774186380950705253167483999159884580950739648692351; _weight[14] = 0.03911916356788189191407244432984016568343953847983485473378759766238027210361614738466142952885046597; _points[15] = 0.8391072688013432575780925026959929631941314650073225813619049294746832516000840115419049260351279701; _weight[15] = 0.03911916356788189191407244432984016568343953847983485473378759766238027210361614738466173188057738515; _points[16] = 0.7981408985691139101897931055944948900390934051927888192367311966151714169808699492956273492244185209; _weight[16] = 0.04273612868308626377267242464860403569084912830679669766094537169121599627783617681021242154028807844; _points[17] = 0.2018591014308860898102068944055051099609065948072111807632688033848285830191300507043726507755818786; _weight[17] = 0.042736128683086263772672424648604035690849128306796697660945371691215996277836176810212423235581571; _points[18] = 0.753796477562113821051313959813760076675611920192292082092532153549107183181318411159590233645317137; _weight[18] = 0.04586887856962938167398320553855540344911451049097728563791493734934686215774724755050591362461630883; _points[19] = 0.2462035224378861789486860401862399233243880798077079179074678464508928168186815888404097663546828384; _weight[19] = 0.04586887856962938167398320553855540344911451049097728563791493734934686215774724755050591365107221208; _points[20] = 0.2934235559129956680546467069841915883382807406318430401108076673728583268940136014749802695368964944; _weight[20] = 0.04848191704720430315095003744134437958817813896090178213024773337311643895088929114457563589694005033; _points[21] = 0.7065764440870043319453532930158084116617192593681569598891923326271416731059863985250197304631035028; _weight[21] = 0.04848191704720430315095003744134437958817813896090178213024773337311643895088929114457563589714280829; _points[22] = 0.6570158189338199674740979615955237241292244095454137406483794654472233487147167212702577337526900784; _weight[22] = 0.0505456368799574830609102734537486818237836394262625995614160116528885101846129027944658327169071752; _points[23] = 0.3429841810661800325259020384044762758707755904545862593516205345527766512852832787297422662473099228; _weight[23] = 0.05054563687995748306091027345374868182378363942626259956141601165288851018461290279446583271690743738; _points[24] = 0.6056761430830005372531878644514687495283254088560475740192004226610294555540058890492892141022582066; _weight[24] = 0.05203665503886468695666423564256003445532611033773384582184702707394015054274691957461250068566735182; _points[25] = 0.3943238569169994627468121355485312504716745911439524259807995773389705444459941109507107858977417932; _weight[25] = 0.05203665503886468695666423564256003445532611033773384582184702707394015054274691957461250068566737544; _points[26] = 0.5531391150663396150854911962151884904585977196478035681428876370110826718757923204715022303102827086; _weight[26] = 0.05293807754866047070329566392609394653741565687113901991407767276251131908456972819198550959864424907; _points[27] = 0.4468608849336603849145088037848115095414022803521964318571123629889173281242076795284977696897172914; _weight[27] = 0.05293807754866047070329566392609394653741565687113901991407767276251131908456972819198550959864424907; _points[28] = 0.5; _weight[28] = 0.05323969085915712212325556345483878416509251580649798987648645053394066246579319242238732282325525218; break; // order 58,59 case 58 : case 59 : delivered_order = 59; _points.resize(30); _weight.resize(30); _points[0] = 0.9984467420373247701358150254593476416704410190588753950540471489011938476050818704079410097787617413; _weight[0] = 0.003984096248083302807732941737336811225240348293575860614742581678460019216450666634479433344457437239; _points[1] = 0.001553257962675229864184974540652358329558980941124604945952851098806152394918129592058990221182733242; _weight[1] = 0.003984096248083302807732941737336811225240348293575860614742581678460019216450666642188026814968437855; _points[2] = 0.008165938360126395014983709197168599029841072645144318241409994924427852317604478148962014169242317633; _weight[2] = 0.009233234155545479571151065956023634548103266984090701685649182757292799760653986755450699432333341509; _points[3] = 0.9918340616398736049850162908028314009701589273548556817585900050755721476823955218510379858309033031; _weight[3] = 0.009233234155545479571151065956023634548103266984090701685649182757292799760653986815792453169513453224; _points[4] = 0.0199890675158462438915644872091011685348203912980383002571691637875300211464657853864052781488233464; _weight[4] = 0.01439235394166168467485958980564602181979444727314374823709006130407299447000696654140593213314494214; _points[5] = 0.9800109324841537561084355127908988314651796087019616997428308362124699788535342146135947218510085378; _weight[5] = 0.01439235394166168467485958980564602181979444727314374823709006130407299447000696660670929023709229111; _points[6] = 0.03689997628536283706033786145976299795676273158733546954448143316028850217444883659161355992412324619; _weight[6] = 0.01939959628481352479840096822317384601660048838319767605386639485297348547638489696037231540825839766; _points[7] = 0.9631000237146371629396621385402370020432372684126645304555185668397114978255511634083864400759978334; _weight[7] = 0.01939959628481352479840096822317384601660048838319767605386639485297348547638489696454661377310503722; _points[8] = 0.9412802678960263407715582312651127950283445735732421160341630265608081313475958278646079191424468346; _weight[8] = 0.02420133641529702645146907021140375890763590459868636817259596839590271283855107639963466400268558322; _points[9] = 0.05871973210397365922844176873488720497165542642675788396583697343919186865240417213539208085749427117; _weight[9] = 0.02420133641529702645146907021140375890763590459868636817259596839590271283855107640314816261043103779; _points[10] = 0.0852171188086158012785509401337490417804656519148291605965235082731717467052091824585237782457661204; _weight[10] = 0.02874657810880953324086084470102806439856033536088156727435789950161607370497718846308085054974539156; _points[11] = 0.9147828811913841987214490598662509582195343480851708394034764917268282532947908175414762217542537747; _weight[11] = 0.02874657810880953324086084470102806439856033536088156727435789950161607370497718846308397388938158375; _points[12] = 0.8838887160524130974589886704872515658474418086164542266032471936825792850864975225263048012930588557; _weight[12] = 0.03298711494109024756406425755798118061872147682833018948351575802107183623304708968291271722923362495; _points[13] = 0.1161112839475869025410113295127484341525581913835457733967528063174207149135024774736951987069361996; _weight[13] = 0.03298711494109024756406425755798118061872147682833018948351575802107183623304708968296127720974999476; _points[14] = 0.8489252473966578984661461940133200341911769003269773281898614233699883606215799803476908182200597426; _weight[14] = 0.03687798736885260313412192501109536707688526301852471947063459118729969965731760585520115159405834797; _points[15] = 0.1510747526033421015338538059866799658088230996730226718101385766300116393784200196523091817799413847; _weight[15] = 0.03687798736885260313412192501109536707688526301852471947063459118729969965731760585520211743210103565; _points[16] = 0.1897369085053785694297612217844053503963176535852359337024744149378323425125554411294237077723385906; _weight[16] = 0.04037794761471010767734746923026486543794640185421964994512929685302559028351317280210616346488849335; _points[17] = 0.8102630914946214305702387782155946496036823464147640662975255850621676574874445588705762922276610945; _weight[17] = 0.0403779476147101076773474692302648654379464018542196499451292968530255902835131728021061872309781039; _points[18] = 0.7683120740710099496320848966555363970820890034651485527263717414560074543094891893155705800485953387; _weight[18] = 0.04344989360054148990119376535756285128837666437177267200611106494107679112713074712397751617336896013; _points[19] = 0.2316879259289900503679151033444636029179109965348514472736282585439925456905108106844294199514047477; _weight[19] = 0.04344989360054148990119376535756285128837666437177267200611106494107679112713074712397751721923776294; _points[20] = 0.723516884769044588390304950161427000081203796930712204877238690863807675864292103502003444360620908; _weight[20] = 0.0460612611188930643588163535438093835984566172091170537638375235009865235350470841492320264444094193; _points[21] = 0.2764831152309554116096950498385729999187962030692877951227613091361923241357078964979965556393790769; _weight[21] = 0.04606126111889306435881635354380938359845661720911705376383752350098652353504708414923202646065604094; _points[22] = 0.6763523627654390567355186035446869303268155040107128132970922344501347081165955393321801983760567682; _weight[22] = 0.04818436858732212981973431317590493254820323071508012295649713786641876737100156186247562390896992009; _points[23] = 0.3236476372345609432644813964553130696731844959892871867029077655498652918834044606678198016239432329; _weight[23] = 0.04818436858732212981973431317590493254820323071508012295649713786641876737100156186247562390902385435; _points[24] = 0.6273184630839449232199025649089025539413946516512592130821429875444817657845394014531831406921181011; _weight[24] = 0.04979671029339763353139014105178473826493463183335213861068257309197333019495440450904614964466218078; _points[25] = 0.3726815369160550767800974350910974460586053483487407869178570124555182342154605985468168593078818989; _weight[25] = 0.04979671029339763353139014105178473826493463183335213861068257309197333019495440450904614964466224146; _points[26] = 0.4230650431957082265181026636283720397907240143778307691405185085421064257445919493015384467446296072; _weight[26] = 0.05088119487420275229821447608427702231635314474356342043213047270982125680265883747273799890989195542; _points[27] = 0.5769349568042917734818973363716279602092759856221692308594814914578935742554080506984615532553703928; _weight[27] = 0.0508811948742027522982144760842770223163531447435634204321304727098212568026588374727379989098919558; _points[28] = 0.5257359212776588479165126065833612868745707268332847821275804219939823776052135545279350453536427429; _weight[28] = 0.05142632644677942017064281835270752193418777853246411129315949333800811932830471469631442316094435458; _points[29] = 0.4742640787223411520834873934166387131254292731667152178724195780060176223947864454720649546463572571; _weight[29] = 0.05142632644677942017064281835270752193418777853246411129315949333800811932830471469631442316094435458; break; // order 60,61 case 60 : case 61 : delivered_order = 61; _points.resize(31); _weight.resize(31); _points[0] = 0.001456259090261462972186722888448745874277332941465184603938140536671727639569783488828314396257689635; _weight[0] = 0.003735415789624387929348437516106203511075426242024019849635485164339136550087160836353011312030814283; _points[1] = 0.9985437409097385370278132771115512541257226670585348153960618594633282723604302165111716856051244182; _weight[1] = 0.003735415789624387929348437516106203511075426242024019849635485164339136550087160845587137141720281039; _points[2] = 0.9923429548325762420012325833673423554692591347573218354728643296977299769442723637440437229734679307; _weight[2] = 0.008659310395155291231578998043410570683136431383997888316377591894405077207572920934503029106477412167; _points[3] = 0.00765704516742375799876741663265764453074086524267816452713567030227002305572763625595627702295878941; _weight[3] = 0.008659310395155291231578998043410570683136431383997888316377591894405077207572921233026982288499865862; _points[4] = 0.981251962546474830894526202052929150948609742576279188386675678514985989965298058276482183478766264; _weight[4] = 0.01350450959248971090030435404596607807117832300105832292843737492363504441243640114529650286166003484; _points[5] = 0.01874803745352516910547379794707084905139025742372081161332432148501401003470194172351781652525371484; _weight[5] = 0.01350450959248971090030435404596607807117832300105832292843737492363504441243640179017013630612728352; _points[6] = 0.9653784989483240824784728798646317564066988436290410182276681875953414709211815171232175381609787332; _weight[6] = 0.01821613695619273201219600523390172116357266602383384295070951969816670398426204512121133695127756726; _points[7] = 0.03462150105167591752152712013536824359330115637095898177233181240465852907881848287678246183624739291; _weight[7] = 0.01821613695619273201219600523390172116357266602383384295070951969816670398426204520325386329727057047; _points[8] = 0.9448800149741355216870960044910796307717987059325954748815660279630855009680425324985645588464641407; _weight[8] = 0.02274685376360055145115792894731483863177635965501448244675831806076219499563510508340775276693803594; _points[9] = 0.05511998502586447831290399550892036922820129406740452511843397203691449903195746750143544115477625997; _weight[9] = 0.02274685376360055145115792894731483863177635965501448244675831806076219499563510512478069813822093218; _points[10] = 0.9199601600731336700434522679700891780273686505373747614156803069474734141326785555328494277978334248; _weight[10] = 0.0270515412124584268558331295433100213601947312981059038470039105256499515290323858014887309311220587; _points[11] = 0.08003983992686632995654773202991082197263134946262523858431969305252658586732144446715057220183028104; _weight[11] = 0.02705154121245842685583312954331002136019473129810590384700391052564995152903238580263298133541309537; _points[12] = 0.1091334257916875297968199899026577544522948139933005599675624686482212483980791531009348949654394841; _weight[12] = 0.03108739328051421345517177184334833357936439968232565764075375266574554731138425888082085196543468197; _points[13] = 0.8908665742083124702031800100973422455477051860066994400324375313517787516019208468990651050345943823; _weight[13] = 0.03108739328051421345517177184334833357936439968232565764075375266574554731138425888130083816054638221; _points[14] = 0.1421116077065733580470145673167570220549032619152057836859458771974568631244629034775778924291043132; _weight[14] = 0.03481429161770518308387806312756285525754285369867169685553635851837134563893470805502034184209715985; _points[15] = 0.8578883922934266419529854326832429779450967380847942163140541228025431368755370965224221075709079774; _weight[15] = 0.03481429161770518308387806312756285525754285369867169685553635851837134563893470805507043833071976983; _points[16] = 0.1786466385378698269077908983837492730041546583318966217453477017619332973797433691655777512192607888; _weight[16] = 0.03819519329938830821317883745066532246287845684710432704609504082320412596697428296745119702124533426; _points[17] = 0.8213533614621301730922091016162507269958453416681033782546522982380667026202566308344222487807324943; _weight[17] = 0.03819519329938830821317883745066532246287845684710432704609504082320412596697428296745132284385085426; _points[18] = 0.2183754192964253686395275382024192860256988634165564845071156081562723096081775797374572902948126088; _weight[18] = 0.0411964958807946319519116837159808853078841332783231389051919621253154333232668202076256025443723746; _points[19] = 0.7816245807035746313604724617975807139743011365834435154928843918437276903918224202625427097051892246; _weight[19] = 0.04119649588079463195191168371598088530788413327832313890519196212531543332326682020762560352392116962; _points[20] = 0.2609031089775487597797029803217571257802383142512884375809194745004315606814533610283708215805617322; _weight[20] = 0.04378837030423893806309903484766654611462907988560212575177060598456271225204984948183410913304042932; _points[21] = 0.7390968910224512402202970196782428742197616857487115624190805254995684393185466389716291784194379161; _weight[21] = 0.04378837030423893806309903484766654611462907988560212575177060598456271225204984948183410923826059577; _points[22] = 0.3058070491958835284693242693562399490074468660532279821210935607641609639146006582516778301944404148; _weight[22] = 0.04594505694682073910768143580357506274865541268957890208924280825212435217371207403383186527240141105; _points[23] = 0.6941929508041164715306757306437600509925531339467720178789064392358390360853993417483221698055596242; _weight[23] = 0.04594505694682073910768143580357506274865541268957890208924280825212435217371207403383186527340160378; _points[24] = 0.3526409650091491916910480511641478306235724073608207215318520588819652150614509044215928373785823166; _weight[24] = 0.04764512145615975640360209874379834227066236912347951135572473296423440281824639506062046299784091323; _points[25] = 0.6473590349908508083089519488358521693764275926391792784681479411180347849385490955784071626214176832; _weight[25] = 0.04764512145615975640360209874379834227066236912347951135572473296423440281824639506062046299784199497; _points[26] = 0.5990605996677853143862064980164169688873974060807774399934011271280026030023023224343955099764932203; _weight[26] = 0.04887166769316436254673700548949835191786439433804755725475732225072623157354002120950387583890250572; _points[27] = 0.4009394003322146856137935019835830311126025939192225600065988728719973969976976775656044900235067797; _weight[27] = 0.0488716676931643625467370054894983519178643943380475572547573222507262315735400212095038758389025195; _points[28] = 0.5497776560761707601625873950594703669194976793887636530301135454886349377647980330327888590157321036; _weight[28] = 0.04961250561333615393743775721430750700877160997778153489060157125773453723517885216715386205370758322; _points[29] = 0.4502223439238292398374126049405296330805023206112363469698864545113650622352019669672111409842678964; _weight[29] = 0.04961250561333615393743775721430750700877160997778153489060157125773453723517885216715386205370758326; _points[30] = 0.5; _weight[30] = 0.04986027239671322571376691686717471982162670575010217574280728978204640605537343723220456872105070443; break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } // for non-fundamental types: assign numbers as strings template void GaussQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(1); _weight.resize(1); _points[0] = ct("0.5"); _weight[0] = ct("1.0"); break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(2); _weight.resize(2); _points[0] = ct("0.2113248654051871177454256097490212721761991243649365619906988367580111638485333271531423022071252374"); _weight[0] = ct("0.5"); _points[1] = ct("0.7886751345948128822545743902509787278238008756350634380093011632419888361514666728468576977928747626"); _weight[1] = ct("0.5"); break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(3); _weight.resize(3); _points[0] = ct("0.8872983346207416885179265399782399610832921705291590826587573766113483091936979033519287376858673518"); _weight[0] = ct("0.2777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"); _points[1] = ct("0.1127016653792583114820734600217600389167078294708409173412426233886516908063020966480712623141326482"); _weight[1] = ct("0.2777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778"); _points[2] = ct("0.5"); _weight[2] = ct("0.4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"); break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(4); _weight.resize(4); _points[0] = ct("0.9305681557970262876119732444464047525478626898148588188078609604532647357475244328520811699422396526"); _weight[0] = ct("0.1739274225687269286865319746109997036176743479169467702462646597593759337329551758609918838661290797"); _points[1] = ct("0.0694318442029737123880267555535952474521373101851411811921390395467352642524755671479188300577603474"); _weight[1] = ct("0.1739274225687269286865319746109997036176743479169467702462646597593759337329551758609918838661290798"); _points[2] = ct("0.3300094782075718675986671204483776563997120651145428237035230115894899847683814827610623597822225942"); _weight[2] = ct("0.3260725774312730713134680253890002963823256520830532297537353402406240662670448241390081161338709202"); _points[3] = ct("0.6699905217924281324013328795516223436002879348854571762964769884105100152316185172389376402177774058"); _weight[3] = ct("0.3260725774312730713134680253890002963823256520830532297537353402406240662670448241390081161338709202"); break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(5); _weight.resize(5); _points[0] = ct("0.953089922969331996398813439149696482562825955381265431436881143271885397458343423470571494776771131"); _weight[0] = ct("0.1184634425280945437571320203599586813216300011062070077914139441108586442015215492899967152469757223"); _points[1] = ct("0.04691007703066800360118656085030351743717404461873456856311885672811460254165657652942850522322886904"); _weight[1] = ct("0.1184634425280945437571320203599586813216300011062070077914139441108586442015215492899967152469757223"); _points[2] = ct("0.7692346550528415455181572103501044024836433034527799781011158135297355926838776455179018336252854658"); _weight[2] = ct("0.2393143352496832340206457574178190964561477766715707699863638336669191335762562284877810625308020554"); _points[3] = ct("0.2307653449471584544818427896498955975163566965472200218988841864702644073161223544820981663747145342"); _weight[3] = ct("0.2393143352496832340206457574178190964561477766715707699863638336669191335762562284877810625308020554"); _points[4] = ct("0.5"); _weight[4] = ct("0.2844444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"); break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(6); _weight.resize(6); _points[0] = ct("0.03376524289842398609384922275300269543261713114385508756372519173669324957789990186185563003903700748"); _weight[0] = ct("0.08566224618958517252014807108636644676341125074202199119931771989947288027117007732396385271319433444"); _points[1] = ct("0.9662347571015760139061507772469973045673828688561449124362748082633067504221000981381443699609629925"); _weight[1] = ct("0.08566224618958517252014807108636644676341125074202199119931771989947288027117007732396385271319433508"); _points[2] = ct("0.8306046932331322568306997975099526735032242821975850354072633529260917483035715504721432018732307282"); _weight[2] = ct("0.1803807865240693037849167569188580558307609463733727411448696201185700189186308591604811009944096738"); _points[3] = ct("0.1693953067668677431693002024900473264967757178024149645927366470739082516964284495278567981267692718"); _weight[3] = ct("0.180380786524069303784916756918858055830760946373372741144869620118570018918630859160481100994409674"); _points[4] = ct("0.6193095930415984543152508608403559677093053150700106750906975822871374671378199211246122136286745658"); _weight[4] = ct("0.2339569672863455236949351719947754974058278028846052676558126599819571008101990635155550462923959912"); _points[5] = ct("0.3806904069584015456847491391596440322906946849299893249093024177128625328621800788753877863713254342"); _weight[5] = ct("0.2339569672863455236949351719947754974058278028846052676558126599819571008101990635155550462923959912"); break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(7); _weight.resize(7); _points[0] = ct("0.9745539561713792622630948420239256312003854688353088917743845519565316651774200704028653850139628621"); _weight[0] = ct("0.06474248308443484663530571633954100916429370112997333198860431936232761748602115435781270908146042202"); _points[1] = ct("0.02544604382862073773690515797607436879961453116469110822561544804346833482257992959713461498603713794"); _weight[1] = ct("0.06474248308443484663530571633954100916429370112997333198860431936232761748602115435781270908146042288"); _points[2] = ct("0.1292344072003027800680676133596057964629261764293048699400223240162850626639097431035865838165683765"); _weight[2] = ct("0.139852695744638333950733885711889791243462532613299382268507016346809405215281338406620471450598809"); _points[3] = ct("0.8707655927996972199319323866403942035370738235706951300599776759837149373360902568964134161834316235"); _weight[3] = ct("0.1398526957446383339507338857118897912434625326132993822685070163468094052152813384066204714505988098"); _points[4] = ct("0.2970774243113014165466967939615192683263089929503149368064783741026680933869371723358436551361267061"); _weight[4] = ct("0.1909150252525594724751848877444875669391825417669313673755417255153527732170648541743423296720224007"); _points[5] = ct("0.7029225756886985834533032060384807316736910070496850631935216258973319066130628276641563448638732939"); _weight[5] = ct("0.1909150252525594724751848877444875669391825417669313673755417255153527732170648541743423296720224007"); _points[6] = ct("0.5"); _weight[6] = ct("0.2089795918367346938775510204081632653061224489795918367346938775510204081632653061224489795918367347"); break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(8); _weight.resize(8); _points[0] = ct("0.9801449282487681158417804342847364952141176171507260191358198886862124488717096422197194796316561341"); _weight[0] = ct("0.05061426814518812957626567715498109505769704552584247852950184903237008938173539243014136965202249679"); _points[1] = ct("0.01985507175123188415821956571526350478588238284927398086418011131378755112829035778028052036834386592"); _weight[1] = ct("0.05061426814518812957626567715498109505769704552584247852950184903237008938173539243014136965202250399"); _points[2] = ct("0.1016667612931866302042230317620847815814141341920175839649148524803913471617634539264240363521370304"); _weight[2] = ct("0.1111905172266872352721779972131204422150654350256247823629546446468084072852245204268265711885989599"); _points[3] = ct("0.8983332387068133697957769682379152184185858658079824160350851475196086528382365460735759636478629696"); _weight[3] = ct("0.1111905172266872352721779972131204422150654350256247823629546446468084072852245204268265711885989642"); _points[4] = ct("0.237233795041835507091130475405376825479017878439803571124571450363772589615719363738019299903184009"); _weight[4] = ct("0.156853322938943643668981100993300656630164499501367468845131972537478135971086748480849038116964278"); _points[5] = ct("0.762766204958164492908869524594623174520982121560196428875428549636227410384280636261980700096815991"); _weight[5] = ct("0.156853322938943643668981100993300656630164499501367468845131972537478135971086748480849038116964278"); _points[6] = ct("0.4082826787521750975302619288199080096666210935435131088414057631503977628892289429419658881444383231"); _weight[6] = ct("0.1813418916891809914825752246385978060970730199471652702624115337833433673619533386621830210424142548"); _points[7] = ct("0.5917173212478249024697380711800919903333789064564868911585942368496022371107710570580341118555616769"); _weight[7] = ct("0.1813418916891809914825752246385978060970730199471652702624115337833433673619533386621830210424142548"); break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(9); _weight.resize(9); _points[0] = ct("0.01591988024618695508221189854816356497529759975403733522498834407545981280169962346906312538655294424"); _weight[0] = ct("0.04063719418078720598594607905526182533783086039120537535555383844034334315422603147278927735147130028"); _points[1] = ct("0.9840801197538130449177881014518364350247024002459626647750116559245401871983003765309368746134470557"); _weight[1] = ct("0.0406371941807872059859460790552618253378308603912053753555538384403433431542260314727892773514713142"); _points[2] = ct("0.08198444633668210285028510596513256172794664093766200194781401018027249655920494055302690148707122983"); _weight[2] = ct("0.0903240803474287020292360156214564047571689108660202422491679532356786452724731348822974886515998753"); _points[3] = ct("0.9180155536633178971497148940348674382720533590623379980521859898197275034407950594469730985129287703"); _weight[3] = ct("0.0903240803474287020292360156214564047571689108660202422491679532356786452724731348822974886515998796"); _points[4] = ct("0.8066857163502951986543510196707370923928603024702823464364064711406336732455005992916200069517842923"); _weight[4] = ct("0.1303053482014677311593714347093164248859201022186499759699985010598054078344456223238230465475086993"); _points[5] = ct("0.1933142836497048013456489803292629076071396975297176535635935288593663267544994007083799930482157077"); _weight[5] = ct("0.1303053482014677311593714347093164248859201022186499759699985010598054078344456223238230465475087005"); _points[6] = ct("0.3378732882980955354807309926783316957140218696315134555864762615789067102324378754034506991507512164"); _weight[6] = ct("0.1561735385200014200343152032922218327993774306309523227770055827995719486620096582850609609440031769"); _points[7] = ct("0.6621267117019044645192690073216683042859781303684865444135237384210932897675621245965493008492487836"); _weight[7] = ct("0.156173538520001420034315203292221832799377430630952322777005582799571948662009658285060960944003177"); _points[8] = ct("0.5"); _weight[8] = ct("0.1651196775006298815822625346434870244394053917863441672965482489292013101536911060720584530108339632"); break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(10); _weight.resize(10); _points[0] = ct("0.9869532642585858600389820060422260267141349733461910596156060333482976016173180798128617824781342781"); _weight[0] = ct("0.03333567215434406879678440494666589642893241716007907256434744080670603204204355088839275484252937791"); _points[1] = ct("0.01304673574141413996101799395777397328586502665380894038439396665170239838268192018713821752186572192"); _weight[1] = ct("0.03333567215434406879678440494666589642893241716007907256434744080670603204204355088839275484252937791"); _points[2] = ct("0.9325316833444922553660483442117465242637715074826652262609798659226873775690277806783953644730228854"); _weight[2] = ct("0.07472567457529029657288816982884866620127831983471368391773863437661932736331500547297363231736586137"); _points[3] = ct("0.06746831665550774463395165578825347573622849251733477373902013407731262243097221932160463552697711466"); _weight[3] = ct("0.07472567457529029657288816982884866620127831983471368391773863437661932736331500547297363231736596593"); _points[4] = ct("0.1602952158504877968828363174425632121153526440825952661675914055237207123024625376924607132147598102"); _weight[4] = ct("0.1095431812579910219977674671140815962293859352613385449404782718175999553264756406213419965886010702"); _points[5] = ct("0.8397047841495122031171636825574367878846473559174047338324085944762792876975374623075392867852401898"); _weight[5] = ct("0.1095431812579910219977674671140815962293859352613385449404782718175999553264756406213419965886011106"); _points[6] = ct("0.2833023029353764046003670284171079188999640811718767517486492434281165054611482493874486210249411394"); _weight[6] = ct("0.1346333596549981775456134607847346764298799692304418979002816381210767161595896383821133183546263798"); _points[7] = ct("0.7166976970646235953996329715828920811000359188281232482513507565718834945388517506125513789750588606"); _weight[7] = ct("0.1346333596549981775456134607847346764298799692304418979002816381210767161595896383821133183546263804"); _points[8] = ct("0.4255628305091843945575869994351400076912175702896541521460053732420481913221657393144111851002681544"); _weight[8] = ct("0.1477621123573764350869464973256691647105233585134268006771540148779979691085761646351782978968771084"); _points[9] = ct("0.5744371694908156054424130005648599923087824297103458478539946267579518086778342606855888148997318456"); _weight[9] = ct("0.1477621123573764350869464973256691647105233585134268006771540148779979691085761646351782978968771084"); break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(11); _weight.resize(11); _points[0] = ct("0.01088567092697150359803099943857130461428879554010779228709946700816810030955500589984030091632761502"); _weight[0] = ct("0.02783428355808683324137686022127428936425781284844907417419214283707770364036877194184561103615985882"); _points[1] = ct("0.9891143290730284964019690005614286953857112044598922077129005329918318996904449941001596990836723848"); _weight[1] = ct("0.02783428355808683324137686022127428936425781284844907417419214283707770364036877194184561103615998649"); _points[2] = ct("0.9435312998840476495375788846519636333158378756126571924837055277688056569286863337211452975632986873"); _weight[2] = ct("0.06279018473245231231734714961197005009880789569770175033196700540895728756623563881734382085702807703"); _points[3] = ct("0.05646870011595235046242111534803636668416212438734280751629447223119434307131366627885470243670131297"); _weight[3] = ct("0.0627901847324523123173471496119700500988078956977017503319670054089572875662356388173438208570284425"); _points[4] = ct("0.86507600278702466204670812601557672902482153101306515598918916984350662252925961479771170548564185"); _weight[4] = ct("0.0931451054638671257130488207158279458456423740201017058907532020869361740043927512346653792589896456"); _points[5] = ct("0.13492399721297533795329187398442327097517846898693484401081083015649337747074038520228829451435815"); _weight[5] = ct("0.09314510546386712571304882071582794584564237402010170589075320208693617400439275123466537925898987179"); _points[6] = ct("0.2404519353965940920371371652706952227598864424400357554895386942566520367744635535872006099477254724"); _weight[6] = ct("0.1165968822959952399592618524215875697158990861584792545136598610609661066094404979770199742191308423"); _points[7] = ct("0.7595480646034059079628628347293047772401135575599642445104613057433479632255364464127993900522745276"); _weight[7] = ct("0.1165968822959952399592618524215875697158990861584792545136598610609661066094404979770199742191308499"); _points[8] = ct("0.6347715779761724861657659927004307623398109312195261408119628159400285331118473678519107961221336507"); _weight[8] = ct("0.131402272255123331090344434945254597686382338801572278190027685742756401669772626776208498508513353"); _points[9] = ct("0.3652284220238275138342340072995692376601890687804738591880371840599714668881526321480892038778663493"); _weight[9] = ct("0.131402272255123331090344434945254597686382338801572278190027685742756401669772626776208498508513353"); _points[10] = ct("0.5"); _weight[10] = ct("0.1364625433889503153572417641681710945780209849473918737988002057266126530195794265058334322403586473"); break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(12); _weight.resize(12); _points[0] = ct("0.009219682876640374654725454925359588519922400093134244768658939096103377840873008887371366054773882871"); _weight[0] = ct("0.02358766819325591359730798074250853015851453699742354478025267350190486057601935533541295353770570183"); _points[1] = ct("0.9907803171233596253452745450746404114800775999068657552313410609038966221591269911126286339452261171"); _weight[1] = ct("0.02358766819325591359730798074250853015851453699742354478025267350190486057601935533541295353771090306"); _points[2] = ct("0.9520586281852374283392329330595480962687983546066487732770378803406173978646178952434847139118666353"); _weight[2] = ct("0.05346966299765921548012735909699811210728508673516244000256302105140949681374878827026865904815670116"); _points[3] = ct("0.0479413718147625716607670669404519037312016453933512267229621196593826021353821047565152860881333648"); _weight[3] = ct("0.05346966299765921548012735909699811210728508673516244000256302105140949681374878827026865904815772913"); _points[4] = ct("0.8849513370971523435184469166064090379924628750094658188322095321245582715542356120082124996117109545"); _weight[4] = ct("0.08003916427167311316732626477167953593600586524543208895494977207897711258664557534082827631852788289"); _points[5] = ct("0.1150486629028476564815530833935909620075371249905341811677904678754417284457643879917875003882890453"); _weight[5] = ct("0.08003916427167311316732626477167953593600586524543208895494977207897711258664557534082827631852953845"); _points[6] = ct("0.7936589771433087236483512094702671401845492570240262407551354398336703496879476312178553824943741012"); _weight[6] = ct("0.1015837133615329608745322279048991882532590736372950731992972828988228162552364218975721975323025648"); _points[7] = ct("0.2063410228566912763516487905297328598154507429759737592448645601663296503120523687821446175056258989"); _weight[7] = ct("0.1015837133615329608745322279048991882532590736372950731992972828988228162552364218975721975323026497"); _points[8] = ct("0.3160842505009099031236542316781412193718199293322951893441000602479550352416060630606327857497267114"); _weight[8] = ct("0.1167462682691774043804249494624390281297049860998774373652617489107460000397058376403395132542818442"); _points[9] = ct("0.6839157494990900968763457683218587806281800706677048106558999397520449647583939369393672142502732886"); _weight[9] = ct("0.1167462682691774043804249494624390281297049860998774373652617489107460000397058376403395132542818454"); _points[10] = ct("0.5626167042557344577362206847319265649916984581527221366064608773742310281206948443714341492347456798"); _weight[10] = ct("0.1245735229067013925002812180214756054152304512848094156976755015581397137286440215155784003090211765"); _points[11] = ct("0.4373832957442655422637793152680734350083015418472778633935391226257689718793051556285658507652543202"); _weight[11] = ct("0.1245735229067013925002812180214756054152304512848094156976755015581397137286440215155784003090211765"); break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(13); _weight.resize(13); _points[0] = ct("0.9920915273592940747364147244035548055324952809629374543470036602142976189378134209302846436307092946"); _weight[0] = ct("0.02024200238265793976001079610049303002099327287249443406752330375249723025639635524721040621651256352"); _points[1] = ct("0.007908472640705925263585275596445194467504719037062545652996339785702381062186579069715356369290706896"); _weight[1] = ct("0.02024200238265793976001079610049303002099327287249443406752330375249723025639635524721040621651575551"); _points[2] = ct("0.9587991996114889826032739182503597561952373950558416479476426728298296042948049571417426951702914619"); _weight[2] = ct("0.04606074991886422395721088797689856046184199993111841954419577366979686486381646314594890787783233253"); _points[3] = ct("0.04120080038851101739672608174964024380476260494415835205235732717017039570519504285825730482970853578"); _weight[3] = ct("0.04606074991886422395721088797689856046184199993111841954419577366979686486381646314594890787787365219"); _points[4] = ct("0.9007890453666549563971032447914299451528078623952500149486923569296110581133200610150149370926585299"); _weight[4] = ct("0.069436755109893619231800888434435733810931359131649113823177508252886260767444767862590771427295539"); _points[5] = ct("0.09921095463334504360289675520857005484719213760474998505130764307038894188667993898498506290734147097"); _weight[5] = ct("0.06943675510989361923180088843443573381093135913164911382317750825288626076744476786259077142729935376"); _points[6] = ct("0.1788253302798298896780076965022421749641513008692115713054287960406782234275032125428058499429042223"); _weight[6] = ct("0.08907299038097286914002334599804899775640632533050825149339722014457253474937436174735847561115655018"); _points[7] = ct("0.8211746697201701103219923034977578250358486991307884286945712039593217765724967874571941500570957777"); _weight[7] = ct("0.08907299038097286914002334599804899775640632533050825149339722014457253474937436174735847561115720583"); _points[8] = ct("0.724246375518223426438956426063819933900960833720878939479141473729122046033108571822519104277366505"); _weight[8] = ct("0.1039080237684442511562616096530263816932913045997517746095555599582692717825422161302977640233059593"); _points[9] = ct("0.2757536244817765735610435739361800660990391662791210605208585262708779539668914281774808957226334949"); _weight[9] = ct("0.1039080237684442511562616096530263816932913045997517746095555599582692717825422161302977640233059661"); _points[10] = ct("0.6152291579775673970327640605489944176057711879417655817346307489185810418442909754064014723823400647"); _weight[10] = ct("0.1131415901314486192060450930198883092173788688077785099324842743857878315602499855209131593331569649"); _points[11] = ct("0.3847708420224326029672359394510055823942288120582344182653692510814189581557090245935985276176599353"); _weight[11] = ct("0.1131415901314486192060450930198883092173788688077785099324842743857878315602499855209131593331569649"); _points[12] = ct("0.5"); _weight[12] = ct("0.1162757766154369550972947576344179740783137386533989930593327196723800120403517006913610310213706817"); break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(14); _weight.resize(14); _points[0] = ct("0.006858095651593830579201366647973599161954296380387059177964594111125222933754181044676880167424125515"); _weight[0] = ct("0.01755973016587593151591643806909589030985280463856363829074994509820816141890413526883839849926422796"); _points[1] = ct("0.9931419043484061694207986333520264008380457036196129408220354058888747770662458189553231198325758757"); _weight[1] = ct("0.01755973016587593151591643806909589030985280463856363829074994509820816141890413526883839849929733993"); _points[2] = ct("0.9642174418317867586681955696889371322385196052049188093589812237410655467721799265557069528418287599"); _weight[2] = ct("0.04007904357988010490281663853142715479184889269729738260069953274478573722864358493176809540971271623"); _points[3] = ct("0.03578255816821324133180443031106286776148039479508119064101877625893445322782007344429304715817123803"); _weight[3] = ct("0.0400790435798801049028166385314271547918488926972973826006995327447857372286435849317680954097315832"); _points[4] = ct("0.9136006575348824965948973713251974805198505507375405907803545271207399154050144367852131950689447722"); _weight[4] = ct("0.06075928534395159234470740453623831297833467284503733614553769627157987194626324615940995313520037766"); _points[5] = ct("0.08639934246511750340510262867480251948014944926245940921964547287926008459498556321478680493105522878"); _weight[5] = ct("0.06075928534395159234470740453623831297833467284503733614553769627157987194626324615940995313521470206"); _points[6] = ct("0.8436464524058427350740099015096670687692006063735853378096332443140924480915666284736865352526059193"); _weight[6] = ct("0.07860158357909676728480096931192107830283401866866168748465852193738408818480414925697904668120528128"); _points[7] = ct("0.1563535475941572649259900984903329312307993936264146621903667556859075519084333715263134647473940806"); _weight[7] = ct("0.07860158357909676728480096931192107830283401866866168748465852193738408818480414925697904668120705796"); _points[8] = ct("0.2423756818209229540173546407244056688455573587153469815242476154536075240839721697739639898246135538"); _weight[8] = ct("0.09276919873896890687085829506257851812446130146866582951001746253454917513176272221277636557335623116"); _points[9] = ct("0.7576243181790770459826453592755943311544426412846530184757523845463924759160278302260360101753864463"); _weight[9] = ct("0.09276919873896890687085829506257851812446130146866582951001746253454917513176272221277636557335624966"); _points[10] = ct("0.3404438155360551197821640879157622665828693982330780217016749063713332797436036084175331472893267934"); _weight[10] = ct("0.1025992318606478019829620328306090278551695306547097258584486451416835724126248601697159199959454469"); _points[11] = ct("0.6595561844639448802178359120842377334171306017669219782983250936286667202563963915824668527106732066"); _weight[11] = ct("0.1025992318606478019829620328306090278551695306547097258584486451416835724126248601697159199959454481"); _points[12] = ct("0.4459725256463281689668776748900826261940241972628812214795894693459932354941349964349496559116553164"); _weight[12] = ct("0.1076319267315788950979382216581300176374987790270644001098881962718093936769973020005122207054097891"); _points[13] = ct("0.5540274743536718310331223251099173738059758027371187785204105306540067645058650035650503440883446836"); _weight[13] = ct("0.1076319267315788950979382216581300176374987790270644001098881962718093936769973020005122207054097891"); break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(15); _weight.resize(15); _points[0] = ct("0.006003740989757285755217140706693709426513591438119255000001242206305781315490287643638974815840423912"); _weight[0] = ct("0.01537662099805863417731419678860220886087407241671703713211414275211859473355858401951938536567818793"); _points[1] = ct("0.9939962590102427142447828592933062905734864085618807449999987577936942186845097123563610251841595731"); _weight[1] = ct("0.01537662099805863417731419678860220886087407241671703713211414275211859473355858401951938536633108639"); _points[2] = ct("0.9686366962003529521538794738551047356219981367576522289506815381751014868985227639752737930871340456"); _weight[2] = ct("0.03518302374405406235463370822533366923335401637716535991295364645719352775643711852242022603232734774"); _points[3] = ct("0.03136330379964704784612052614489526437800186324234777104931846182489851310147723602472620691286596038"); _weight[3] = ct("0.03518302374405406235463370822533366923335401637716535991295364645719352775643711852242022603294154521"); _points[4] = ct("0.07589670829478639189967583961289157431687191263150368295213622061966246241292725740119614012458925999"); _weight[4] = ct("0.05357961023358596750593477334293465170777185787905099034351119456093899742615789986284292856885599421"); _points[5] = ct("0.9241032917052136081003241603871084256831280873684963170478637793803375375870727425988038598754107365"); _weight[5] = ct("0.05357961023358596750593477334293465170777185787905099034351119456093899742615789986284292856902630637"); _points[6] = ct("0.8622088656800850237080930273069690048154496472920512817757117103520618908389626094980505488015671642"); _weight[6] = ct("0.06978533896307715722390239725551416126042513765775562160119556431554422227095390584038412868178503037"); _points[7] = ct("0.1377911343199149762919069726930309951845503527079487182242882896479381091610373905019494511984328364"); _weight[7] = ct("0.06978533896307715722390239725551416126042513765775562160119556431554422227095390584038412868179665823"); _points[8] = ct("0.2145139136957305762313866313730446793808068018586251975733672914729023100651207102582926857150869278"); _weight[8] = ct("0.08313460290849696677660043024060440556545009004920645366093259528177678160613925885535258714620779062"); _points[9] = ct("0.7854860863042694237686133686269553206191931981413748024266327085270976899348792897417073142849130721"); _weight[9] = ct("0.08313460290849696677660043024060440556545009004920645366093259528177678160613925885535258714620808482"); _points[10] = ct("0.302924326461218315051396314509477265818623611920650872484417328024195521106519291012251442919170119"); _weight[10] = ct("0.09308050000778110551340028093321141225311300613896420140774786365500662775134958030947488444304965858"); _points[11] = ct("0.6970756735387816849486036854905227341813763880793491275155826719758044788934807089877485570808298811"); _weight[11] = ct("0.09308050000778110551340028093321141225311300613896420140774786365500662775134958030947488444304966241"); _points[12] = ct("0.3994029530012827388496858483027018960935817727686811601920251376950258804984899061990818709662394704"); _weight[12] = ct("0.09921574266355578822805916322191966240934627997877099674236896396456239876671713406665749958240891154"); _points[13] = ct("0.6005970469987172611503141516972981039064182272313188398079748623049741195015100938009181290337605296"); _weight[13] = ct("0.09921574266355578822805916322191966240934627997877099674236896396456239876671713406665749958240891161"); _points[14] = ct("0.5"); _weight[14] = ct("0.1012891209627806364403100999837596574193310790047386783983520580257176993773730370466967203563940161"); break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(16); _weight.resize(16); _points[0] = ct("0.005299532504175033701922913274833686286862964171177434974388047634337931392087301530731784046600902477"); _weight[0] = ct("0.01357622970587704742589028622800905175613368778338039899530515953690205683210808662466288961558883448"); _points[1] = ct("0.9947004674958249662980770867251663137131370358288225650256119523656620686079126984692682159533990871"); _weight[1] = ct("0.01357622970587704742589028622800905175613368778338039899530515953690205683210808662466288961642578809"); _points[2] = ct("0.9722875115366162880389942077673041725455696362955363004627768260333048944513411521097828643690791645"); _weight[2] = ct("0.03112676196932394643142191849718884713749325417645342895065175790976786944352190953060585476930010037"); _points[3] = ct("0.02771248846338371196100579223269582745443036370446369953722317396669510554865884789021713563092085786"); _weight[3] = ct("0.03112676196932394643142191849718884713749325417645342895065175790976786944352190953060585476935955411"); _points[4] = ct("0.06718439880608412805976605114380343380633230757623664594824428721611980114375472087143375281761380758"); _weight[4] = ct("0.04757925584124639240496255380112311317763175159185632907841114361481587978884097972351247865969801944"); _points[5] = ct("0.9328156011939158719402339488561965661936676924237633540517557127838801988562452791285662471823861744"); _weight[5] = ct("0.04757925584124639240496255380112311317763175159185632907841114361481587978884097972351247866179909653"); _points[6] = ct("0.8777022041775015169475505974237211341769068282287515048908785884611484305156358388603110284596247239"); _weight[6] = ct("0.06231448562776693602623814109600821007244342961110133997237529521470548196073267679898459500869048106"); _points[7] = ct("0.1222977958224984830524494025762788658230931717712484951091214115388515694843641611396889715403752838"); _weight[7] = ct("0.06231448562776693602623814109600821007244342961110133997237529521470548196073267679898459500869141184"); _points[8] = ct("0.8089381222013218742233358820243955094959411088828288970518986777708666588774057122284555152139792502"); _weight[8] = ct("0.07479799440828836604075086527373927448524553410391823340271098109368020201020899122588931920152688622"); _points[9] = ct("0.191061877798678125776664117975604490504058891117171102948101322229133341122594287771544484786020748"); _weight[9] = ct("0.07479799440828836604075086527373927448524553410391823340271098109368020201020899122588931920153081579"); _points[10] = ct("0.7290083888286136931712097214917887867700158065177617454505773754738795871451468038677177639679940468"); _weight[10] = ct("0.08457825969750126909465603951517998110581973670801414087254146784040183210496526546607766127103887189"); _points[11] = ct("0.2709916111713863068287902785082112132299841934822382545494226245261204128548531961322822360320059534"); _weight[11] = ct("0.08457825969750126909465603951517998110581973670801414087254146784040183210496526546607766127103912237"); _points[12] = ct("0.6408017753896294566152302507302480532430347453852999002744173669779625897495653852207201145760200796"); _weight[12] = ct("0.09130170752246179443338183398460996969177811182732464120924757218971523247505558748020021255849263684"); _points[13] = ct("0.3591982246103705433847697492697519467569652546147000997255826330220374102504346147792798854239799204"); _weight[13] = ct("0.09130170752246179443338183398460996969177811182732464120924757218971523247505558748020021255849263706"); _points[14] = ct("0.4524937450811812799073403322875209684348234721554672716513900913874373508777039335076206535121083239"); _weight[14] = ct("0.09472530522753424814269836160414155257345449419795148751875662260001144538456650315006698891676697614"); _points[15] = ct("0.5475062549188187200926596677124790315651765278445327283486099086125626491222960664923793464878916761"); _weight[15] = ct("0.09472530522753424814269836160414155257345449419795148751875662260001144538456650315006698891676697614"); break; // order 32,33 case 32 : case 33 : delivered_order = 33; _points.resize(17); _weight.resize(17); _points[0] = ct("0.004712262342791332162282990029667361746105074770217848608045606628828071264688983144320779675129030429"); _weight[0] = ct("0.01207415143427396598005501314378266234584865797251263915559257441510919835275524317979262072372571691"); _points[1] = ct("0.9952877376572086678377170099703326382538949252297821513919543933711719287353110168556792203248709665"); _weight[1] = ct("0.01207415143427396598005501314378266234584865797251263915559257441510919835275524317979262072798397032"); _points[2] = ct("0.02466223911561611938864152105209848927830747672044564616501539379394231686390070262498154862426577667"); _weight[2] = ct("0.02772976468699360056472008267912233025642312597661442349686203935512871300166731918663789437619580271"); _points[3] = ct("0.9753377608843838806113584789479015107216925232795543538349846062060576831360992973750184513757342315"); _weight[3] = ct("0.02772976468699360056472008267912233025642312597661442349686203935512871300166731918663789438923065064"); _points[4] = ct("0.9401195768634929510614778472440778463117084089672139501759550796620135652522056057591535969342795476"); _weight[4] = ct("0.04251807415858959044176768509553103692524569460925273788320518036939199639374132387349380214026392876"); _points[5] = ct("0.05988042313650704893852215275592215368829159103278604982404492033798643474779439424084640306572044363"); _weight[5] = ct("0.04251807415858959044176768509553103692524569460925273788320518036939199639374132387349380215620526406"); _points[6] = ct("0.8907570019484007034626150277602380251119862363702842562566572677562888080797565380866902504334808315"); _weight[6] = ct("0.05594192359670198554739419281317796336792171213153852500924324122454783982180491780761085226210241093"); _points[7] = ct("0.1092429980515992965373849722397619748880137636297157437433427322437111919202434619133097495665191737"); _weight[7] = ct("0.05594192359670198554739419281317796336792171213153852500924324122454783982180491780761085226455009237"); _points[8] = ct("0.1711644203916546170748488916784988324260970542620133780973841522463378512126512091235044063472449388"); _weight[8] = ct("0.06756818423426273664315999085117509868606292661724451018899730534443362149496927204875472415680701704"); _points[9] = ct("0.8288355796083453829251511083215011675739029457379866219026158477536621487873487908764955936527550596"); _weight[9] = ct("0.06756818423426273664315999085117509868606292661724451018899730534443362149496927204875472415684703185"); _points[10] = ct("0.7563452685432384839431232843147759372914618612055864529563657494821424624713927401409902061902588012"); _weight[10] = ct("0.07702288053840514404071579740097930597024152923550896719263235567572337092983822554580872467672521159"); _points[11] = ct("0.243654731456761516056876715685224062708538138794413547043634250517857537528607259859009793809741199"); _weight[11] = ct("0.07702288053840514404071579740097930597024152923550896719263235567572337092983822554580872467672663593"); _points[12] = ct("0.6756158817269381576485927585476730025202698757878375116595805097738971308233747864487915723017545524"); _weight[12] = ct("0.08400205107822502225498533189416157751059906448253700713497792567016155325001229328060192486945988784"); _points[13] = ct("0.3243841182730618423514072414523269974797301242121624883404194902261028691766252135512084276982454476"); _weight[13] = ct("0.08400205107822502225498533189416157751059906448253700713497792567016155325001229328060192486945989544"); _points[14] = ct("0.5892420907479239279253387468270327787377096663457628217814759071353487752396502880851444611048175023"); _weight[14] = ct("0.08828135268349632316263549505659861957546220900037405902157220345660451810364134022616734534204332795"); _points[15] = ct("0.4107579092520760720746612531729672212622903336542371782185240928646512247603497119148555388951824977"); _weight[15] = ct("0.08828135268349632316263549505659861957546220900037405902157220345660451810364134022616734534204332799"); _points[16] = ct("0.5"); _weight[16] = ct("0.0897232351781032627291328221309428107243901599488342618338343489777983773031401297022642228762521388"); break; // order 34,35 case 34 : case 35 : delivered_order = 35; _points.resize(18); _weight.resize(18); _points[0] = ct("0.004217415789534526634991997646924614873710531577280153540162184880071453204110195124118265193699399567"); _weight[0] = ct("0.01080800676324165515667135513322623469384261573779497273103799507067654511867256095162565153472427187"); _points[1] = ct("0.9957825842104654733650080023530753851262894684227198464598378151199285467958898048758817348063006366"); _weight[1] = ct("0.01080800676324165515667135513322623469384261573779497273103799507067654511867256095162565154865900931"); _points[2] = ct("0.9779119747856988775905979464648881549864220674056532394226938148454490356023866119789411964798169198"); _weight[2] = ct("0.02485727444748489822666747310131932084043312306445510112315215393278617164790170814752068547592735646"); _points[3] = ct("0.02208802521430112240940205353511184501357793259434676057730618515455096439761338802105880352018300695"); _weight[3] = ct("0.02485727444748489822666747310131932084043312306445510112315215393278617164790170814752068552847842593"); _points[4] = ct("0.9463012332487778696030302955635727577039476356761491070937331574536202912183924679153337935403015991"); _weight[4] = ct("0.03821286512744452826456483880831826280265895310417914372476068961720500364589648967088255123780103244"); _points[5] = ct("0.05369876675122213039696970443642724229605236432385089290626684254637970878160753208466620645969845262"); _weight[5] = ct("0.03821286512744452826456483880831826280265895310417914372476068961720500364589648967088255130463489598"); _points[6] = ct("0.9018524794862615578412087275072953985516494608059612408752140320976940527144721436141434827212058818"); _weight[6] = ct("0.05047102205314358278140699246241730353140056944383945080518726832782539869024926167622531935947931249"); _points[7] = ct("0.09814752051373844215879127249270460144835053919403875912478596790230594728552785638585651727879410136"); _weight[7] = ct("0.05047102205314358278140699246241730353140056944383945080518726832782539869024926167622531936152909078"); _points[8] = ct("0.8458435215301766039374455406444241947261352864087538794510813284185986844518146255669054040725663105"); _weight[8] = ct("0.06127760335573923009225956340010077761408194866671954858362675682702871979970184091909860996236098967"); _points[9] = ct("0.1541564784698233960625544593555758052738647135912461205489186715814013155481853744330945959274336919"); _weight[9] = ct("0.06127760335573923009225956340010077761408194866671954858362675682702871979970184091909860996247060097"); _points[10] = ct("0.2201145844630262326960642257373354315361867571146452916800065279689077358967397401704589758199778143"); _weight[10] = ct("0.07032145733532532560236565187597361404775120516548627994172809763023279346387494851533138451345573173"); _points[11] = ct("0.7798854155369737673039357742626645684638132428853547083199934720310922641032602598295410241800221855"); _weight[11] = ct("0.07032145733532532560236565187597361404775120516548627994172809763023279346387494851533138451345944567"); _points[12] = ct("0.2941244192685786769820341030834741814605051589399872443594255661048051634497872951128265748031744856"); _weight[12] = ct("0.07734233756313262246270900191818738609660919813367708633332095736389143461532186515617346192611193334"); _points[13] = ct("0.7058755807314213230179658969165258185394948410600127556405744338951948365502127048871734251968255144"); _weight[13] = ct("0.07734233756313262246270900191818738609660919813367708633332095736389143461532186515617346192611199996"); _points[14] = ct("0.3740568871542472452055135725610443849185691171701797709898644841316077532221378890964612289453068764"); _weight[14] = ct("0.0821382418729163614930268882329637952061694769986764766222484854558242109226040038776818788735302449"); _points[15] = ct("0.6259431128457527547944864274389556150814308828298202290101355158683922467778621109035387710546931236"); _weight[15] = ct("0.0821382418729163614930268882329637952061694769986764766222484854558242109226040038776818788735302449"); _points[16] = ct("0.5423875065208676506211309264678919058666586934530449600216822588127498953266400008189022753637198062"); _weight[16] = ct("0.08457119148157179592032823506749330516705290968517194013493759577452972209577732108546045701988907679"); _points[17] = ct("0.4576124934791323493788690735321080941333413065469550399783177411872501046733599991810977246362801938"); _weight[17] = ct("0.08457119148157179592032823506749330516705290968517194013493759577452972209577732108546045701988907679"); break; // order 36,37 case 36 : case 37 : delivered_order = 37; _points.resize(19); _weight.resize(19); _points[0] = ct("0.9962034219217922015945088351266302467946582007016053933398397195456159514792614419018374604367093356"); _weight[0] = ct("0.009730894114863238518156020732219217876453304534643320396340236230800718784052774105426043995362173783"); _points[1] = ct("0.003796578078207798405491164873369753205341799298394606660160280454384048520738558098162539563290576184"); _weight[1] = ct("0.009730894114863238518156020732219217876453304534643320396340236230800718784052774105426044173769122249"); _points[2] = ct("0.980104076067415015426389420343825763307545751637069052958908167216100374968744256610371780745770797"); _weight[2] = ct("0.02240711338284980016641907870099710597587711373392880104292726338382149569213972882233451675157216316"); _points[3] = ct("0.01989592393258498457361057965617423669245424836293094704109183278389962503125574338962821925422939313"); _weight[3] = ct("0.02240711338284980016641907870099710597587711373392880104292726338382149569213972882233451752427173122"); _points[4] = ct("0.04842204819259104917866953573384375609530303297132209115248378761918209770494789052123988581535143365"); _weight[4] = ct("0.03452227136882061329035412900300652248092401584380656556145021384801748745321951075883154737770809981"); _points[5] = ct("0.9515779518074089508213304642661562439046969670286779088475162123808179022950521094787601141846484121"); _weight[5] = ct("0.03452227136882061329035412900300652248092401584380656556145021384801748745321951075883154804745494595"); _points[6] = ct("0.9113573282685714124894612433563569508872692431034150206849319443027501714518429160134331115546303493"); _weight[6] = ct("0.04574501081122499973223104706191982633045582564829939233249467245103111052189863080287385751297978919"); _points[7] = ct("0.08864267173142858751053875664364304911273075689658497931506805569724982854815708398656688844536971947"); _weight[7] = ct("0.04574501081122499973223104706191982633045582564829939233249467245103111052189863080287385752662736252"); _points[8] = ct("0.1395169113323853106914520695881091851714290835456666125307047643066927204260069735782833086643367062"); _weight[8] = ct("0.05578332277366699735801195084088299874066592691994688776073057143822948805282323530050214248021619462"); _points[9] = ct("0.860483088667614689308547930411890814828570916454333387469295235693307279573993026421716691335663273"); _weight[9] = ct("0.05578332277366699735801195084088299874066592691994688776073057143822948805282323530050214248274414005"); _points[10] = ct("0.1997273476691594882651809175268803600658389586338537162067066371658075456515645797876221023342730016"); _weight[10] = ct("0.06437698126966811383775789242843855852791978854673151727355219231115180202831583996571650116696087894"); _points[11] = ct("0.8002726523308405117348190824731196399341610413661462837932933628341924543484354202123778976657270034"); _weight[11] = ct("0.06437698126966811383775789242843855852791978854673151727355219231115180202831583996571650116705281951"); _points[12] = ct("0.2677146293120195271413664259479488160118571426879317015078455612121579394432872966567752271396340272"); _weight[12] = ct("0.07130335108680330588787305472095148623783417241223693046328582795322912423645162550747003591862412103"); _points[13] = ct("0.7322853706879804728586335740520511839881428573120682984921544387878420605567127033432247728603659722"); _weight[13] = ct("0.07130335108680330588787305472095148623783417241223693046328582795322912423645162550747003591862432269"); _points[14] = ct("0.6582820499818149159950586644249224589461426095664436225778644933989464429102881989984194460432401755"); _weight[14] = ct("0.07638302103292983338942770044883149923050413361821431176155077653740552182553160682740492351539352549"); _points[15] = ct("0.3417179500181850840049413355750775410538573904335563774221355066010535570897118010015805539567598244"); _weight[15] = ct("0.07638302103292983338942770044883149923050413361821431176155077653740552182553160682740492351539354559"); _points[16] = ct("0.5801793228201126879340480578703717747524367502354376894373217258031603043401955368283697867497404565"); _weight[16] = ct("0.07948442169697717382497821973252360083939007909756304787558745766237048929169252987130523836300323926"); _points[17] = ct("0.4198206771798873120659519421296282252475632497645623105626782741968396956598044631716302132502595435"); _weight[17] = ct("0.07948442169697717382497821973252360083939007909756304787558745766237048929169252987130523836300323929"); _points[18] = ct("0.5"); _weight[18] = ct("0.08052722492439184798958181266045836751995127928925845106416157636788552422774903607627038285846452347"); break; // order 38,39 case 38 : case 39 : delivered_order = 39; _points.resize(20); _weight.resize(20); _points[0] = ct("0.003435700407452537606938805764339860888676434549172051925907934391007641186123109580275298751713954469"); _weight[0] = ct("0.008807003569576059155930981175926408181071552771668366262174663338674209629810923908701553356090040729"); _points[1] = ct("0.996564299592547462393061194235660139111323565450827948074092065608992358813876890419724701248285876"); _weight[1] = ct("0.008807003569576059155930981175926408181071552771668366262174663338674209629810923908701553563226498553"); _points[2] = ct("0.9819859636389568956338330655986386109560301639030944280317687969460207903921915284900090626279828738"); _weight[2] = ct("0.02030071490019347066551997613746605493954531999497576840880342728091614837549366414776945721436983009"); _points[3] = ct("0.01801403636104310436616693440136138904396983609690557196823120305397920960780847150999093737201747363"); _weight[3] = ct("0.02030071490019347066551997613746605493954531999497576840880342728091614837549366414776945930224083097"); _points[4] = ct("0.9561172141256629529338762206016490565245923987118458873979411095790354456043595394682223630964602397"); _weight[4] = ct("0.03133602416705453178475326759352080317580053828921818204979217271898740551683283932228188052636258305"); _points[5] = ct("0.04388278587433704706612377939835094347540760128815411260205889042096455439564046053177763690353951217"); _weight[5] = ct("0.03133602416705453178475326759352080317580053828921818204979217271898740551683283932228188185922162769"); _points[6] = ct("0.08044151408889058830273546914923965733518531746718131337375363723356945300033759504038532971702103414"); _weight[6] = ct("0.04163837078835237436237907161102310305008891429158164537244103039284654144703970973568759498491074799"); _points[7] = ct("0.9195584859111094116972645308507603426648146825328186866262463627664305469996624049596146702829790438"); _weight[7] = ct("0.04163837078835237436237907161102310305008891429158164537244103039284654144703970973568759537895086086"); _points[8] = ct("0.1268340467699246036928474648221792048446346602154117779302270469657323224809224676594479431896762949"); _weight[8] = ct("0.05096505990862021751837506774017493808334582801169627813098580809842616101269717323767465784984593666"); _points[9] = ct("0.8731659532300753963071525351778207951553653397845882220697729530342676775190775323405520568103236989"); _weight[9] = ct("0.05096505990862021751837506774017493808334582801169627813098580809842616101269717323767465787679251824"); _points[10] = ct("0.8180268403632575127264183481131429683716945583996842319697233112732706312927150662793515977478806628"); _weight[10] = ct("0.05909726598075920865618868885569114350252060977448438772344497601008737417525575815286434391364216924"); _points[11] = ct("0.1819731596367424872735816518868570316283054416003157680302766887267293687072849337206484022521193356"); _weight[11] = ct("0.05909726598075920865618868885569114350252060977448438772344497601008737417525575815286434391379151647"); _points[12] = ct("0.755433500975413549002182025477625499212745664601213416736174309947367485195382864072015841525433889"); _weight[12] = ct("0.06584431922458831344924724987408156745805525557349176349821824685442717821474046657177898759196353775"); _points[13] = ct("0.2445664990245864509978179745223745007872543353987865832638256900526325148046171359279841584745661111"); _weight[13] = ct("0.06584431922458831344924724987408156745805525557349176349821824685442717821474046657177898759199220677"); _points[14] = ct("0.3131469556422902196637259114875363813021268391471586440860256932421771178134702360520521581827333106"); _weight[14] = ct("0.07104805465919102566464916253358246651725770669601015166868354149191404374896718380847461214160016571"); _points[15] = ct("0.6868530443577097803362740885124636186978731608528413559139743067578228821865297639479478418172666894"); _weight[15] = ct("0.07104805465919102566464916253358246651725770669601015166868354149191404374896718380847461214160037349"); _points[16] = ct("0.613892925570822539040248097684287312371544468841463736157317869603585670931777913897476062595484354"); _weight[16] = ct("0.07458649323630187339391436850098471834633995204068415824810560890492221129779339034698066301760523947"); _points[17] = ct("0.386107074429177460959751902315712687628455531158536263842682130396414329068222086102523937404515646"); _weight[17] = ct("0.07458649323630187339391436850098471834633995204068415824810560890492221129779339034698066301760523991"); _points[18] = ct("0.5382632605667486668773202046994191055023981334067487504023976221921281710241684891207725570907781078"); _weight[18] = ct("0.07637669356536292534904216597754879674597432255618929863735052490879872658136889076778624391825195297"); _points[19] = ct("0.4617367394332513331226797953005808944976018665932512495976023778078718289758315108792274429092218922"); _weight[19] = ct("0.07637669356536292534904216597754879674597432255618929863735052490879872658136889076778624391825195297"); break; // order 40,41 case 40 : case 41 : delivered_order = 41; _points.resize(21); _weight.resize(21); _points[0] = ct("0.9968760853101947501301210179689704645966692273911645927904369273565480545114964034990643735676197425"); _weight[0] = ct("0.008008614128887166662112308429235507632945211058951241274088955056779383680659431157453347771312310018"); _points[1] = ct("0.003123914689805249869878982031029535403330772608835407209563072643451945488503596500935626432380384723"); _weight[1] = ct("0.008008614128887166662112308429235507632945211058951241274088955056779383680659431157453351749114303732"); _points[2] = ct("0.01638658071684685284168889254615241928765315633507657502351443595743951999745985601408129906803823328"); _weight[2] = ct("0.01847689488542624689997533414966483309447215407436491871358459093939287557878370422926170697737740157"); _points[3] = ct("0.9836134192831531471583111074538475807123468436649234249764855640425604800025401439859187009319615024"); _weight[3] = ct("0.01847689488542624689997533414966483309447215407436491871358459093939287557878370422926172175919579072"); _points[4] = ct("0.03995033292479958560490643314251555292042619517588915141193225645450921846529608550413402431396548965"); _weight[4] = ct("0.02856721271342860414181791323622397874564379841312802072125366171352452769982600404414322716617000998"); _points[5] = ct("0.9600496670752004143950935668574844470795738048241108485880677435454907815347039144958659756860347123"); _weight[5] = ct("0.02856721271342860414181791323622397874564379841312802072125366171352452769982600404414322962279680312"); _points[6] = ct("0.9266816822916586418236253192937838351380529015896719853714958146971214531419175734861448185958476768"); _weight[6] = ct("0.03805005681418965100852582665009158961307717621198301426073424290822675829330037499656830937779117347"); _points[7] = ct("0.07331831770834135817637468070621616486194709841032801462850418530287854685808242651385518140415223744"); _weight[7] = ct("0.03805005681418965100852582665009158961307717621198301426073424290822675829330037499656830966790713345"); _points[8] = ct("0.1157800182621610456920610743468859825895116471143152245656366674849906287301494102064641704530676751"); _weight[8] = ct("0.04672221172801693077664487055696604424176332368079642243334763581628894888685619367593429425889811223"); _points[9] = ct("0.8842199817378389543079389256531140174104883528856847754343633325150093712698505897935358295469323533"); _weight[9] = ct("0.04672221172801693077664487055696604424176332368079642243334763581628894888685619367593429445743788085"); _points[10] = ct("0.833569402098706159652983334995169581298514671655701421237733541173597096557848147649755244281395587"); _weight[10] = ct("0.05439864958357418883173728903505282101684979789692816527639104358448682188313469419058838120027728265"); _points[11] = ct("0.1664305979012938403470166650048304187014853283442985787622664588264029034421518523502447557186044041"); _weight[11] = ct("0.05439864958357418883173728903505282101684979789692816527639104358448682188313469419058838122180361033"); _points[12] = ct("0.2241905820563900964704906016378433566889698878846601674978470802501976091441579814715095060504845149"); _weight[12] = ct("0.06091570802686426709768358856286679917816881278076872512149190392137945061467548197097422700245561668"); _points[13] = ct("0.7758094179436099035295093983621566433110301121153398325021529197498023908558420185284904939495154868"); _weight[13] = ct("0.06091570802686426709768358856286679917816881278076872512149190392137945061467548197097422700249951898"); _points[14] = ct("0.7121710601037193917868344442718940260482226159198172921121291179482434418394007784999360464569138182"); _weight[14] = ct("0.06613446931666873089052628724838780216450577007157841160917516157589129928261519951184529780764479093"); _points[15] = ct("0.2878289398962806082131655557281059739517773840801827078878708820517565581605992215000639535430861817"); _weight[15] = ct("0.06613446931666873089052628724838780216450577007157841160917516157589129928261519951184529780764839634"); _points[16] = ct("0.3559893415987994516996037419676998400454908681769833856228592376253775285290786160733304858198915867"); _weight[16] = ct("0.06994369739553657736106671193379155544639658047745980218686566316212163123260307830816081080108004754"); _points[17] = ct("0.6440106584012005483003962580323001599545091318230166143771407623746224714709213839266695141801084133"); _weight[17] = ct("0.06994369739553657736106671193379155544639658047745980218686566316212163123260307830816081080108004754"); _points[18] = ct("0.5727809270804475454685154911693431650581630122189688787107441949927736404416598988452579892191042265"); _weight[18] = ct("0.07226220199498502953191358327687627180497498109854991737623649444304865467169593493263483293242601162"); _points[19] = ct("0.4272190729195524545314845088306568349418369877810311212892558050072263595583401011547420107808957735"); _weight[19] = ct("0.07226220199498502953191358327687627180497498109854991737623649444304865467169593493263483293242601162"); _points[20] = ct("0.5"); _weight[20] = ct("0.07304056682484521359599257384168559412240478847098272205366129375771929635169980596487109556323312786"); break; // order 42,43 case 42 : case 43 : delivered_order = 43; _points.resize(22); _weight.resize(22); _points[0] = ct("0.002852707258800353963484289419350509803472900801984232511488537516671751147960044089614037111865173732"); _weight[0] = ct("0.007313997649136100342495549023592722595105974562161865462248795710094053266374085571141880346311089378"); _points[1] = ct("0.9971472927411996460365157105806494901965270991980157674885114624833282488520399559103859628881355814"); _weight[1] = ct("0.007313997649136100342495549023592722595105974562161865462248795710094053266374085571141883008544226611"); _points[2] = ct("0.9850302489177143635619754933826343554029844615689014847798691061681871303874212543187706773135177033"); _weight[2] = ct("0.01688745079240707739665112343295645067458465723723733021644159727997575587653074419945745695676145639"); _points[3] = ct("0.01496975108228563643802450661736564459701553843109851522013089383181286961257874568122932268648048749"); _weight[3] = ct("0.01688745079240707739665112343295645067458465723723733021644159727997575587653074419945762155251412539"); _points[4] = ct("0.03652161390641299973965353037047340168233517331397400897771340423643194044422943724815312357627569228"); _weight[4] = ct("0.02614666757634164297015602563660562805607504678461815806135504164883817117996641239098413278077729423"); _points[5] = ct("0.9634783860935870002603464696295265983176648266860259910222865957635680595557705627518468764237260872"); _weight[5] = ct("0.02614666757634164297015602563660562805607504678461815806135504164883817117996641239098413540926935972"); _points[6] = ct("0.9329062888601500682682128185096893645423983777942230780635466846313584474707602174042400781419289789"); _weight[6] = ct("0.03489823421226024404748070946510882869938752647754026369315568588197320174364294701969641072525858542"); _points[7] = ct("0.06709371113984993173178718149031063545760162220577692193645331536864155252923978259575992185807001107"); _weight[7] = ct("0.03489823421226024404748070946510882869938752647754026369315568588197320174364294701969641451337550866"); _points[8] = ct("0.8939084029896040810021389777041757606940893356657815790608466988555661381263540374500257594796665631"); _weight[8] = ct("0.04297080310853386370722184068635143309457220267453989164328500552412301238656307871601112391536217695"); _points[9] = ct("0.1060915970103959189978610222958242393059106643342184209391533011444338618736459625499742405203337798"); _weight[9] = ct("0.04297080310853386370722184068635143309457220267453989164328500552412301238656307871601112573694851247"); _points[10] = ct("0.1527563684066586099746550821188716143663288550112824194391331123038570301128534725802029426006947326"); _weight[10] = ct("0.05020707222144048246603941891526814117540554438384981289248045717022654803711188637143031951500947387"); _points[11] = ct("0.8472436315933413900253449178811283856336711449887175805608668876961429698871465274197970573993052051"); _weight[11] = ct("0.05020707222144048246603941891526814117540554438384981289248045717022654803711188637143031963916383524"); _points[12] = ct("0.7938202017534557964794384638193236744388078017868589198850169106862341889140221801795800526056382982"); _weight[12] = ct("0.05646614804026960919670030371089215955713166606049735213629877312430656546180541682980244071096423847"); _points[13] = ct("0.2061797982465442035205615361806763255611921982131410801149830893137658110859778198204199473943617058"); _weight[13] = ct("0.05646614804026960919670030371089215955713166606049735213629877312430656546180541682980244071408393247"); _points[14] = ct("0.2653220810066214867968346445167968269523281044346317261019499851532114926571816930628014255887449256"); _weight[14] = ct("0.06162618840525621214278049307740723597972249950248398621421098594256775139958772701589012301716629665"); _points[15] = ct("0.7346779189933785132031653554832031730476718955653682738980500148467885073428183069371985744112550745"); _weight[15] = ct("0.06162618840525621214278049307740723597972249950248398621421098594256775139958772701589012301721118318"); _points[16] = ct("0.3290320895539578874209262897863101902204133504146563280015688081554932805464265186717208013164783515"); _weight[16] = ct("0.06558675239353118536648249626515372293787094709401532656268985171227230515676448704571705001653997614"); _points[17] = ct("0.6709679104460421125790737102136898097795866495853436719984311918445067194535734813282791986835216485"); _weight[17] = ct("0.06558675239353118536648249626515372293787094709401532656268985171227230515676448704571705001654039024"); _points[18] = ct("0.603930213344110642739423266959772867107837554548966824834326652184100420657358832108299412062849607"); _weight[18] = ct("0.06827074917300758567628691561575869829318382649434308405473486746910377908226891669049531646614901666"); _points[19] = ct("0.396069786655889357260576733040227132892162445451033175165673347815899579342641167891700587937150393"); _weight[19] = ct("0.06827074917300758567628691561575869829318382649434308405473486746910377908226891669049531646614901691"); _points[20] = ct("0.5348696366598611106069208980593140409111481497401157373533409732558046868163197230382591971852169272"); _weight[20] = ct("0.06962593642781599668770512417090497893696010872871292906309893853651885640938429814937374841202945705"); _points[21] = ct("0.4651303633401388893930791019406859590888518502598842626466590267441953131836802769617408028147830728"); _weight[21] = ct("0.06962593642781599668770512417090497893696010872871292906309893853651885640938429814937374841202945706"); break; // order 44,45 case 44 : case 45 : delivered_order = 45; _points.resize(23); _weight.resize(23); _points[0] = ct("0.997384667498776061761962857722787180286813686229435210463396942083537039882892635091994572108193741"); _weight[0] = ct("0.006705929743570886040654746729307532488309167052868616696197941069580443368026029924649341359469772762"); _points[1] = ct("0.002615332501223938238037142277212819713186313770564789536603057916462960117107364908005427891809143873"); _weight[1] = ct("0.006705929743570886040654746729307532488309167052868616696197941069580443368026029924649573769364960656"); _points[2] = ct("0.01372876439094238402198796158961131240919310232301302875437192063210148141271179106629126712803738242"); _weight[2] = ct("0.01549400292848972215534710982094225269188626449996403321744390329930889213143379600112464044475669166"); _points[3] = ct("0.9862712356090576159780120384103886875908068976769869712456280793678985185872882089337087328719558227"); _weight[3] = ct("0.01549400292848972215534710982094225269188626449996403321744390329930889213143379600112501966065445252"); _points[4] = ct("0.9664855434130080511745984945192114891178509100756953853464506273009889144000435399565050359131567801"); _weight[4] = ct("0.02401883586554233428582053581601699828060815415175580566684183343492904343740931457766543707359225583"); _points[5] = ct("0.03351445658699194882540150548078851088214908992430461465354937269901108559995646004349496408684971031"); _weight[5] = ct("0.02401883586554233428582053581601699828060815415175580566684183343492904343740931457766597672718701168"); _points[6] = ct("0.06162382086477916631092155703292716418053548501967468254529944211972418064524202840071725243915325682"); _weight[6] = ct("0.03211621070426292606358480757945549901957913787740341524767334102645877679039064170319606692512096974"); _points[7] = ct("0.9383761791352208336890784429670728358194645149803253174547005578802758193547579715992827475608431633"); _weight[7] = ct("0.03211621070426292606358480757945549901957913787740341524767334102645877679039064170319608117985608873"); _points[8] = ct("0.09755579919058005392444079650161072102928493013484598870728378216414661991547532039245499830903712074"); _weight[8] = ct("0.03964070588835947746144626237102161345685599596920325127781727016602150200687944126797677649047476588"); _points[9] = ct("0.9024442008094199460755592034983892789707150698651540112927162178358533800845246796075450016909641157"); _weight[9] = ct("0.03964070588835947746144626237102161345685599596920325127781727016602150200687944126797678878871689404"); _points[10] = ct("0.8593306815659750972308122418743094241649648725656463978773906441070255643379628737551436279609732762"); _weight[10] = ct("0.04645788303001757373850930868488232430173003587156494686632975230596864246779408039973782068126544426"); _points[11] = ct("0.1406693184340249027691877581256905758350351274343536021226093558929744356620371262448563720390264527"); _weight[11] = ct("0.04645788303001757373850930868488232430173003587156494686632975230596864246779408039973782150814728313"); _points[12] = ct("0.1901950621181769218074513441752021733064096705964538521495672071954400967517765817297777471175290854"); _weight[12] = ct("0.05244604573227070503704309250737192742923579159698750275141259616938968817102544494992821894515182282"); _points[13] = ct("0.8098049378818230781925486558247978266935903294035461478504327928045599032482234182702222528824709511"); _weight[13] = ct("0.05244604573227070503704309250737192742923579159698750275141259616938968817102544494992821895313919395"); _points[14] = ct("0.7547507389230037748448965239334232152724213845924288116135946904106375025523832657533759938640108684"); _weight[14] = ct("0.05749832011120568247082175646698065074570526146479280330453785170139979724187270361906533563745699839"); _points[15] = ct("0.2452492610769962251551034760665767847275786154075711883864053095893624974476167342466240061359891292"); _weight[15] = ct("0.05749832011120568247082175646698065074570526146479280330453785170139979724187270361906533563767227994"); _points[16] = ct("0.3048494809848545842892555635596972707109745746537482593903973683416436919064837854106762368147562967"); _weight[16] = ct("0.06152454215336476523378920033600482740792640627323528721783516645084523385389260275505301355895038264"); _points[17] = ct("0.6951505190151454157107444364403027292890254253462517406096026316583563080935162145893237631852437032"); _weight[17] = ct("0.06152454215336476523378920033600482740792640627323528721783516645084523385389260275505301355895211182"); _points[18] = ct("0.6320678404851724652669347691416548014895066250970698024345394385261644267913360122890792643554668868"); _weight[18] = ct("0.06445286109404107498929766969989682662985774859589174622217021585899473237800551787502302994595886119"); _points[19] = ct("0.3679321595148275347330652308583451985104933749029301975654605614738355732086639877109207356445331132"); _weight[19] = ct("0.06445286109404107498929766969989682662985774859589174622217021585899473237800551787502302994595887207"); _points[20] = ct("0.4333715878507669445341286588791169314947973618733089217445273114064760550621727612127183682018242994"); _weight[20] = ct("0.06623101970234830868582123235165846290251783473711176216125613401924300294133970283679005885397038903"); _points[21] = ct("0.5666284121492330554658713411208830685052026381266910782554726885935239449378272387872816317981757006"); _weight[21] = ct("0.06623101970234830868582123235165846290251783473711176216125613401924300294133970283679005885397038906"); _points[22] = ct("0.5"); _weight[22] = ct("0.06682728609305308767572855527292216929157640381844165874096798899572049042386144817957960350208853286"); break; // order 46,47 case 46 : case 47 : delivered_order = 47; _points.resize(24); _weight.resize(24); _points[0] = ct("0.9975936099985106800899987048503684059372988462980014387208002725571419160347288689416986446685566286"); _weight[0] = ct("0.006170614899993599773402833535018645787955020445683258408643660470545862758940556895899243366671187447"); _points[1] = ct("0.002406390001489319910001295149631594062701153701998561279199727442858083965271131058301355331443605634"); _weight[1] = ct("0.006170614899993599773402833535018645787955020445683258408643660470545862758940556895899519911713663779"); _points[2] = ct("0.987364277985654749099195996504084530870591526520089359905796782553590560640490112269318737140860893"); _weight[2] = ct("0.01426569431446683159065390797593914322459889896595405830083240237882200281871457171284068800097932645"); _points[3] = ct("0.01263572201434525090080400349591546912940847347991064009420321744640943935950988773068126285913870873"); _weight[3] = ct("0.01426569431446683159065390797593914322459889896595405830083240237882200281871457171284165660291838644"); _points[4] = ct("0.03086272399863362073817549914563927517259017096127432668248641204520525197373216452001767923206867783"); _weight[4] = ct("0.02213871940870990308430137410566911442965642091692894837069861486051218814113321981719642280218335366"); _points[5] = ct("0.969137276001366379261824500854360724827409829038725673317513587954794748026267835479982320767931424"); _weight[5] = ct("0.02213871940870990308430137410566911442965642091692894837069861486051218814113321981719673619811954492"); _points[6] = ct("0.05679223649779948289342282900890162245633347834553997981448104161216258280052041394793824900190687327"); _weight[6] = ct("0.02964929245771839037318387925005429227060006328260674551868827564704915158875412078303371109763423013"); _points[7] = ct("0.943207763502200517106577170991098377543666521654460020185518958387837417199479586052061750998093307"); _weight[7] = ct("0.02964929245771839037318387925005429227060006328260674551868827564704915158875412078303438091669549109"); _points[8] = ct("0.08999900701304853902302506366512739596193676116607220637800948699930851052322272995886973941370905738"); _weight[8] = ct("0.03667324070554015286701680762655825905966825492424973570135124533002069423793546741616252879754303569"); _points[9] = ct("0.9100009929869514609769749363348726040380632388339277936219905130006914894767772700411302605862907671"); _weight[9] = ct("0.03667324070554015286701680762655825905966825492424973570135124533002069423793546741616257681394130904"); _points[10] = ct("0.8700620957892771821219140515499892127616462435070927284331911841359501693204614662206656780655647523"); _weight[10] = ct("0.04309508076597663795859260149187133359254029411896650279420357193064344223039026563444432705548550264"); _points[11] = ct("0.1299379042107228178780859484500107872383537564929072715668088158640498306795385337793343219344353201"); _weight[11] = ct("0.04309508076597663795859260149187133359254029411896650279420357193064344223039026563444432809380918206"); _points[12] = ct("0.8240468259684877846262478934553738133348291493094783901494668325122241587842698859640588851828635455"); _weight[12] = ct("0.04880932605205694413494033223212357721395948442684297204165530501147716928879598917401001997704509176"); _points[13] = ct("0.175953174031512215373752106544626186665170850690521609850533167487775841215730114035941114817136438"); _weight[13] = ct("0.04880932605205694413494033223212357721395948442684297204165530501147716928879598917401002003817914148"); _points[14] = ct("0.7727107356944197678291878086091861850053919962938090877168071949152824195897854485479174337204031353"); _weight[14] = ct("0.05372213505798281739128867122330311139731434506711001088327082044341093319721855299029336355911190586"); _points[15] = ct("0.2272892643055802321708121913908138149946080037061909122831928050847175804102145514520825662795968657"); _weight[15] = ct("0.05372213505798281739128867122330311139731434506711001088327082044341093319721855299029336356007551697"); _points[16] = ct("0.7168967538130225692435421159566748562262107554639844040404006423283822035168154570288677152330378081"); _weight[16] = ct("0.05775283402686280067667224195339177993113515568824823529222468004433512677565927497017212882338315957"); _points[17] = ct("0.2831032461869774307564578840433251437737892445360155959595993576716177964831845429711322847669621927"); _weight[17] = ct("0.05775283402686280067667224195339177993113515568824823529222468004433512677565927497017212882339235575"); _points[18] = ct("0.3424786601519183128066033543400948796067608695875913656228849352350589218293782958280632452223958946"); _weight[18] = ct("0.06083523646390169560223157673813121280351477960190288938873587725631269685885848095887890171538627273"); _points[19] = ct("0.6575213398480816871933966456599051203932391304124086343771150647649410781706217041719367547776041053"); _weight[19] = ct("0.06083523646390169560223157673813121280351477960190288938873587725631269685885848095887890171538658359"); _points[20] = ct("0.5955594337368081545793199103785348159202025516573766780744592882940429763459358709912455556226048654"); _weight[20] = ct("0.06291872817341414806068769125559184436320166279067270208904575844069693633333129844101908962821056986"); _points[21] = ct("0.4044405662631918454206800896214651840797974483426233219255407117059570236540641290087544443773951346"); _weight[21] = ct("0.06291872817341414806068769125559184436320166279067270208904575844069693633333129844101908962821056988"); _points[22] = ct("0.5320284464313028130425215413123725192954995977103736967121755408948696417969550539014464380671262546"); _weight[22] = ct("0.06396909767337607848702808261234768592585561977083394121064978818617379577026820120604598878336737117"); _points[23] = ct("0.4679715535686971869574784586876274807045004022896263032878244591051303582030449460985535619328737454"); _weight[23] = ct("0.06396909767337607848702808261234768592585561977083394121064978818617379577026820120604598878336737117"); break; // order 48,49 case 48 : case 49 : delivered_order = 49; _points.resize(25); _weight.resize(25); _points[0] = ct("0.9977784848952490489543924734469508086287813247024040856054024655664667406718639672436440131764693153"); _weight[0] = ct("0.005696899250513143973951482056617386801660263146454848224474030558094945864883371677963556787448376476"); _points[1] = ct("0.00222151510475095104560752655304919137121867529759591439459753443353325932813603275635598682353248497"); _weight[1] = ct("0.005696899250513143973951482056617386801660263146454848224474030558094945864883371677965811475059758741"); _points[2] = ct("0.01166803927024124425084230676020296612731472234279662766450628634191806623205972305177664525848306765"); _weight[2] = ct("0.01317749330751606863095090764764957246798164085166123437768308289193546700443974968576767635766725226"); _points[3] = ct("0.9883319607297587557491576932397970338726852776572033723354937136580819337679402769482233547415133449"); _weight[3] = ct("0.01317749330751606863095090764764957246798164085166123437768308289193546700443974968577242932413311562"); _points[4] = ct("0.9714872856144871697070055848292352659526007853044950709637262485686476612720246306544526090756260955"); _weight[4] = ct("0.02046957835065315632781174385582297683042289168205217325234920744964871644010775638523527067391420037"); _points[5] = ct("0.02851271438551283029299441517076473404739921469550492903627375143135233872797536934554739092437612273"); _weight[5] = ct("0.02046957835065315632781174385582297683042289168205217325234920744964871644010775638524604173635510725"); _points[6] = ct("0.05250400106086231557447899660859752291272257512320804846914915852041424454940027431440699653479712593"); _weight[6] = ct("0.02745234798791759596296844577023666208005499277655567452425424912229688733921825594785529844095563499"); _points[7] = ct("0.9474959989391376844255210033914024770872774248767919515308508414795857554505997256855930034652027271"); _weight[7] = ct("0.02745234798791759596296844577023666208005499277655567452425424912229688733921825594785796307473275137"); _points[8] = ct("0.9167213143804170007105105543467847847304820569117603930104323577308590662385450626266148697387927944"); _weight[8] = ct("0.03401916690617845860359359282835398427735474717731828130753561320500182702585573655332580227175966452"); _points[9] = ct("0.08327868561958299928948944565321521526951794308823960698956764226914093376145493737338513026120669813"); _weight[9] = ct("0.03401916690617845860359359282835398427735474717731828130753561320500182702585573655332604122774719797"); _points[10] = ct("0.1203703684813211847113585673978195118062389905508329395408051322774906855898687961961816013790731491"); _weight[10] = ct("0.04007035016750050900661747983455565114511286642683794685810073148680641446740064477972868629207952781"); _points[11] = ct("0.8796296315186788152886414326021804881937610094491670604591948677225093144101312038038183986209271367"); _weight[11] = ct("0.04007035016750050900661747983455565114511286642683794685810073148680641446740064477972869753838111488"); _points[12] = ct("0.1632168157632658177574396833761889120582916359636253414701715191108561315753578942090181571598454979"); _weight[12] = ct("0.04551413099148182490574861035144582669049627947966715548524188448350869233920526345124219761526968488"); _points[13] = ct("0.836783184236734182242560316623811087941708364036374658529828480889143868424642105790981842840154432"); _weight[13] = ct("0.04551413099148182490574861035144582669049627947966715548524188448350869233920526345124219865109678983"); _points[14] = ct("0.2111685348793885161381550791936729663021324803542408716772582461194884936236839888616417017671017262"); _weight[14] = ct("0.05026797453352532210110344519634291349423304726407095353493452099970647407952301484097782805516032632"); _points[15] = ct("0.7888314651206114838618449208063270336978675196457591283227417538805115063763160111383582982328982821"); _weight[15] = ct("0.0502679745335253221011034451963429134942330472640709535349345209997064740795230148409778280886849818"); _points[16] = ct("0.2634986342771425197389089424954039793340911307691863545463845861521983620793569849484215761086031856"); _weight[16] = ct("0.05425981223713182655804697852505830967003879399336100807824715367441964639680422134669884175019772201"); _points[17] = ct("0.7365013657228574802610910575045960206659088692308136454536154138478016379206430150515784238913968136"); _weight[17] = ct("0.05425981223713182655804697852505830967003879399336100807824715367441964639680422134669884175027469118"); _points[18] = ct("0.6805861529046939188679108650638203337110391735216875348972893889233726911978482743016476575304688072"); _weight[18] = ct("0.05742912957285582416966277293477790432046809583409007479575749501574139833556271128267214949278988798"); _points[19] = ct("0.319413847095306081132089134936179666288960826478312465102710611076627308802151725698352342469531193"); _weight[19] = ct("0.05742912957285582416966277293477790432046809583409007479575749501574139833556271128267214949279150727"); _points[20] = ct("0.6219334418604942160225951813987257932028165781629922382105678266251937363929279753398881838816251703"); _weight[20] = ct("0.05972788176789238611408906325645052369508835070686321275979394066759204511009386751221434860487635927"); _points[21] = ct("0.3780665581395057839774048186012742067971834218370077617894321733748062636070720246601118161183748297"); _weight[21] = ct("0.05972788176789238611408906325645052369508835070686321275979394066759204511009386751221434860487637172"); _points[22] = ct("0.5614323463053551981936799094040184027661026730248918692119467689463544174844292079132194249731655277"); _weight[22] = ct("0.06112122149515502084447975947292575291752962378152952045379004111601948360959005121516770445539453314"); _points[23] = ct("0.4385676536946448018063200905959815972338973269751081307880532310536455825155707920867805750268344723"); _weight[23] = ct("0.06112122149515502084447975947292575291752962378152952045379004111601948360959005121516770445539453319"); _points[24] = ct("0.5"); _weight[24] = ct("0.06158802686335772560195143653952507121911681375907583269567609865845600397463071064230056258752479189"); break; // order 50,51 case 50 : case 51 : delivered_order = 51; _points.resize(26); _weight.resize(26); _points[0] = ct("0.002057149427191535498391520338546987021571072440220166301736095297216851683361096774046705971591914138"); _weight[0] = ct("0.005275686308671503577825593842625988952172868589847307275027713818381611146754875672203017278562745882"); _points[1] = ct("0.9979428505728084645016084796614530129784289275597798336982639047027831483166389032259532940283980829"); _weight[1] = ct("0.005275686308671503577825593842625988952172868589847307275027713818381611146754875672222096535931991352"); _points[2] = ct("0.9891927229782354955502901771559631527234582818736592512427074306582525753725062356694672106206098011"); _weight[2] = ct("0.01220892554631595439480791375989420012024796309863517102602344753784585784943394482692276794975351226"); _points[3] = ct("0.01080727702176450444970982284403684727654171812634074875729256934174742462749376433053278937941302212"); _weight[3] = ct("0.01220892554631595439480791375989420012024796309863517102602344753784585784943394482692590062619002023"); _points[4] = ct("0.9735795333308571250679576417590183772603551688421576350091338898049288222262304038853530988756546694"); _weight[4] = ct("0.01898119164718138197515157062442524734538521087202447883765591232640395020816792394092103666682741212"); _points[5] = ct("0.02642046666914287493204235824098162273964483115784236499086611019507117777376959611464690112432590056"); _weight[5] = ct("0.01898119164718138197515157062442524734538521087202447883765591232640395020816792394092953156322980776"); _points[6] = ct("0.9513189309921535371088327996156051256705620026864526862775828273897328995512729934288304151250970431"); _weight[6] = ct("0.02548791264857390599915995036203668976293965927148596741191884299970865622501582259468003159778249186"); _points[7] = ct("0.04868106900784646289116720038439487432943799731354731372241717261026710044872700657116958487490989121"); _weight[7] = ct("0.02548791264857390599915995036203668976293965927148596741191884299970865622501582259469676675396512358"); _points[8] = ct("0.07727702860575099060124646926608091921396244895433521528491176354419154266438185252492621891031580747"); _weight[8] = ct("0.03163702316478741776972684495352254786111142100634725533304794330399419585613801383092451868449629648"); _points[9] = ct("0.9227229713942490093987535307339190807860375510456647847150882364558084573356181474750737810896852668"); _weight[9] = ct("0.0316370231647874177697268449535225478611114210063472553330479433039941958561380138309268591934534817"); _points[10] = ct("0.1118070255896605719035163763788580665118908718724025639184157891864835356795866770152894361720024268"); _weight[10] = ct("0.03734207488282987294353789805142416931937358094052034038951542087140981540468873148337639510000187901"); _points[11] = ct("0.8881929744103394280964836236211419334881091281275974360815842108135164643204133229847105638279954159"); _weight[11] = ct("0.03734207488282987294353789805142416931937358094052034038951542087140981540468873148337657126474272665"); _points[12] = ct("0.8482136302099786324319069568647123489303766588954095758522787269191802734979190143979569224436633356"); _weight[12] = ct("0.04252294715674261960522388253999084829196015838833913809302809070999389600765276409114327132632335978"); _points[13] = ct("0.151786369790021367568093043135287651069623341104590424147721273080819726502080985602043077556337607"); _weight[13] = ct("0.04252294715674261960522388253999084829196015838833913809302809070999389600765276409114329640288988689"); _points[14] = ct("0.1966538534911909683840106265415564727823677138670450548106783437400359365548733997670835956949944863"); _weight[14] = ct("0.04710690017795707423183244153365159927458287295710363993165745118401724964172710566666105228365478843"); _points[15] = ct("0.8033461465088090316159893734584435272176322861329549451893216562599640634451266002329164043050053082"); _weight[15] = ct("0.04710690017795707423183244153365159927458287295710363993165745118401724964172710566666105283897288388"); _points[16] = ct("0.7542203574122528588478515323627845876881533770928754068605502348019636974646783451170112711373754115"); _weight[16] = ct("0.05102958054721271161920703512671539616360440567712100516593690970432633440273700128534590714780195155"); _points[17] = ct("0.2457796425877471411521484676372154123118466229071245931394497651980363025353216548829887288626246107"); _weight[17] = ct("0.05102958054721271161920703512671539616360440567712100516593690970432633440273700128534590715187806242"); _points[18] = ct("0.2984741224382568467594613114505584481700312951503419087054294332259078914763146734751210244027963381"); _weight[18] = ct("0.0542359202642882953282897133639987911447191017106533222648028543047306996364527919847157957602897432"); _points[19] = ct("0.7015258775617431532405386885494415518299687048496580912945705667740921085236853265248789755972036612"); _weight[19] = ct("0.05423592026428829532828971336399879114471910171065332226480285430473069963645279198471579576032138823"); _points[20] = ct("0.3539975802570215524285823089610848515576403065185048108938279040481491877109960462088021476536134262"); _weight[20] = ct("0.05668090827315983327472035922129907262297518146250760699414396494374455328228972724632422646792560352"); _points[21] = ct("0.6460024197429784475714176910389151484423596934814951891061720959518508122890039537911978523463865738"); _weight[21] = ct("0.05668090827315983327472035922129907262297518146250760699414396494374455328228972724632422646792609764"); _points[22] = ct("0.4115705898215549080154711257908276250113081180993678692598261501079773599722919564411924558682029493"); _weight[22] = ct("0.05833022174264829102233125377018110681598244061096210823008134860563283296415986325634816982250102892"); _points[23] = ct("0.5884294101784450919845288742091723749886918819006321307401738498920226400277080435588075441317970507"); _weight[23] = ct("0.05833022174264829102233125377018110681598244061096210823008134860563283296415986325634816982250102892"); _points[24] = ct("0.5296150467146566035468592875992016803951173676945177910771361458421935180599867101692053134428938839"); _weight[24] = ct("0.05916070763963113825818554285023434232494513541445265904716009968981034737478143412042810703364070916"); _points[25] = ct("0.4703849532853433964531407124007983196048826323054822089228638541578064819400132898307946865571061161"); _weight[25] = ct("0.05916070763963113825818554285023434232494513541445265904716009968981034737478143412042810703364070916"); break; // order 52,53 case 52 : case 53 : delivered_order = 53; _points.resize(27); _weight.resize(27); _points[0] = ct("0.001910368555505716530556395809385004869655972217064406149181751605891127211337093955618976639176052996"); _weight[0] = ct("0.004899498025647180130575027545629549049112909467545796084070202282931315208834056077691434852954585551"); _points[1] = ct("0.9980896314444942834694436041906149951303440277829355938508182483941088727886629060443810233608259815"); _weight[1] = ct("0.004899498025647180130575027545629549049112909467545796084070202282931315208834056077753240245468294788"); _points[2] = ct("0.01003826201924938857206332216947640771617888930502461838057005347380871200989052684729151220284212677"); _weight[2] = ct("0.01134311579809031159801710322338074440638386014408317781572106511953791501790501107707508572996524597"); _points[3] = ct("0.9899617379807506114279366778305235922838211106949753816194299465261912879901094731527084877971586194"); _weight[3] = ct("0.01134311579809031159801710322338074440638386014408317781572106511953791501790501107742569568707400832"); _points[4] = ct("0.9754502789073525034259540153219414465462949667422088254669086953936933344049557428958097932983624977"); _weight[4] = ct("0.01764852687870985551128914465235582056806944476147090579111389254745441331417783144208520625011731365"); _points[5] = ct("0.02454972109264749657404598467805855345370503325779117453309130460630666559504425710419020670162446147"); _weight[5] = ct("0.01764852687870985551128914465235582056806944476147090579111389254745441331417783144210401009766964174"); _points[6] = ct("0.9547411603387455521503225091048446274740221677974804795566137762360281331762640112274766026251394194"); _weight[6] = ct("0.02372470626030753135204835505709235911236281008309236425865500633458910592851796202108612874571502525"); _points[7] = ct("0.04525883966125444784967749089515537252597783220251952044338622376397186682373598877252339737488204539"); _weight[7] = ct("0.02372470626030753135204835505709235911236281008309236425865500633458910592851796202114102641702143869"); _points[8] = ct("0.9281039540091472451513686113534213988821434993017529134885948270644016596929044902648783426521190244"); _weight[8] = ct("0.02949176842991679955515041685976581658262029535320608127010760745691056483180227669210348485634524415"); _points[9] = ct("0.07189604599085275484863138864657860111785650069824708651140517293559834030709550973512165734786335432"); _weight[9] = ct("0.02949176842991679955515041685976581658262029535320608127010760745691056483180227669212110937924323569"); _points[10] = ct("0.1041141804647458864278013279463646335402994671260682437963596939765897575631027349407405614340916029"); _weight[10] = ct("0.03487441188312279649216144417833363806641234662847600018870939081052967940428179133628125012015134327"); _points[11] = ct("0.8958858195352541135721986720536353664597005328739317562036403060234102424368972650592594385659169024"); _weight[11] = ct("0.03487441188312279649216144417833363806641234662847600018870939081052967940428179133628233232240947058"); _points[12] = ct("0.1414932631302881503525918941788302251246639739507184286743918968321525838419328333124890452720638476"); _weight[12] = ct("0.03980243388652888563153747950492120148807333649350147570670438190137636322061009657571262463250792362"); _points[13] = ct("0.8585067368697118496474081058211697748753360260492815713256081031678474161580671666875109547279336968"); _weight[13] = ct("0.03980243388652888563153747950492120148807333649350147570670438190137636322061009657571264732060672834"); _points[14] = ct("0.8164539859732475704638673188172443060515380087846683486475559495117003454985408900102633473248019569"); _weight[14] = ct("0.04421157927187847509716140142687455552826837502554955490293556854829634959572854374441794903265292647"); _points[15] = ct("0.1835460140267524295361326811827556939484619912153316513524440504882996545014591099897366526751984366"); _weight[15] = ct("0.0442115792718784750971614014268745555282683750255495549029355685482963495957285437444179516937253006"); _points[16] = ct("0.7702757822897284474501504707799914104795902244935908451871688750179704483581906127122403416472846593"); _weight[16] = ct("0.04804436368501425378282632327905292958010581476851466721406555676700756739190327262980465263698979581"); _points[17] = ct("0.2297242177102715525498495292200085895204097755064091548128311249820295516418093872877596583527153147"); _weight[17] = ct("0.04804436368501425378282632327905292958010581476851466721406555676700756739190327262980465271829088215"); _points[18] = ct("0.7205741258750134402929870778446407262238422975815496940726936067016003481397479590425318969605111507"); _weight[18] = ct("0.05125081890887289933562385576633190466220494745735866493489091619149373974629794637200532992800577459"); _points[19] = ct("0.2794258741249865597070129221553592737761577024184503059273063932983996518602520409574681030394888488"); _weight[19] = ct("0.05125081890887289933562385576633190466220494745735866493489091619149373974629794637200532992840251648"); _points[20] = ct("0.6679969518192544498651595171036422708950100094537970953624933535475046614272798926175690236905281402"); _weight[20] = ct("0.05378914289426659360608149221332870240948304953188233275617945325759724607200991384577327794535374829"); _points[21] = ct("0.3320030481807455501348404828963577291049899905462029046375066464524953385727201073824309763094718599"); _weight[21] = ct("0.05378914289426659360608149221332870240948304953188233275617945325759724607200991384577327794535376847"); _points[22] = ct("0.3867703172802315705713804463198849144102766335358981616766855014081114331134964348872204676390168474"); _weight[22] = ct("0.05562624417842259633608154802142433741646019004254163354820175484896603913565917187623706977023691306"); _points[23] = ct("0.6132296827197684294286195536801150855897233664641018383233144985918885668865035651127795323609831526"); _weight[23] = ct("0.05562624417842259633608154802142433741646019004254163354820175484896603913565917187623706977023693234"); _points[24] = ct("0.5569862928047649834664474919349883135866402669890704973828769548831827443942053726981897403198983148"); _weight[24] = ct("0.05673817305448257431018497404604962896026225940523601294820827478851116979698381328179598174896188868"); _points[25] = ct("0.4430137071952350165335525080650116864133597330109295026171230451168172556057946273018102596801016852"); _weight[25] = ct("0.05673817305448257431018497404604962896026225940523601294820827478851116979698381328179598174896188868"); _points[26] = ct("0.5"); _weight[26] = ct("0.05711043368947849452252286845091762434036072167508266516087385828959706267057662605513742154892559577"); break; // order 54,55 case 54 : case 55 : delivered_order = 55; _points.resize(28); _weight.resize(28); _points[0] = ct("0.9982212487869772249752181952416554958750652160482129522928361647452421094805343626603577033042341754"); _weight[0] = ct("0.004562141296547258869408076961475853120172245549145499708369845661949729932899064572236480217464936533"); _points[1] = ct("0.001778751213022775024781804758344504124934783951787047707163835254757890519465637339642296695770837121"); _weight[1] = ct("0.004562141296547258869408076961475853120172245549145499708369845661949729932899064572526563822056534335"); _points[2] = ct("0.009348417314563623152720027096084861777922523373430845161987159270635774039111600249036536472313720156"); _weight[2] = ct("0.01056605629638562987575019049663271722568467536164281889883424512553257787678854598195646787921082855"); _points[3] = ct("0.9906515826854363768472799729039151382220774766265691548380128407293642259608883997509634635276713864"); _weight[3] = ct("0.01056605629638562987575019049663271722568467536164281889883424512553257787678854598300882424950004705"); _points[4] = ct("0.02287035968553090137294908014739220549829806295602416229264277568808467970208460056959184723562776574"); _weight[4] = ct("0.01645071389115218998881540958526602299076540871004859392963081030188231834630637036053429300942080203"); _points[5] = ct("0.9771296403144690986270509198526077945017019370439758377073572243119153202979153994304081527643931369"); _weight[5] = ct("0.01645071389115218998881540958526602299076540871004859392963081030188231834630637036091886542410802276"); _points[6] = ct("0.9578165131960660369348447116649635731762483976045607543307501223015040892535203600513990741767643359"); _weight[6] = ct("0.0221364673795021139197939388266036953074970563542834218575735309421120888068499657459498897458583356"); _points[7] = ct("0.0421834868039339630651552883350364268237516023954392456692498776984959107464796399486009258232168588"); _weight[7] = ct("0.02213646737950211391979393882660369530749705635428342185757353094211208880684996574697771782818581975"); _points[8] = ct("0.06705373871280247552887271631015659782906858460788683151122663349165279571743880703871341595766224915"); _weight[8] = ct("0.02755367283785837271574145911347279560952898211283269420344637698647131160967129884318854047272566957"); _points[9] = ct("0.9329462612871975244711272836898434021709314153921131684887733665083472042825611929612865840423488529"); _weight[9] = ct("0.02755367283785837271574145911347279560952898211283269420344637698647131160967129884338434412610919579"); _points[10] = ct("0.902820685458589585723942977712638829335850707404155834105343580890194771630436017399200517149107126"); _weight[10] = ct("0.03263646198349979789669878338775231817681771558130351316774240907603844736949397023700131832114238009"); _points[11] = ct("0.09717931454141041427605702228736117066414929259584416589465641910980522836956398260079948285088883028"); _weight[11] = ct("0.03263646198349979789669878338775231817681771558130351316774240907603844736949397023700859662540316838"); _points[12] = ct("0.8678054390068158860140722551462671840080305099965209466142638881679056292346650954667042208312744222"); _weight[12] = ct("0.03732310711728438951196594358651101901081793060316672371966002810748192103268864967435680304363377329"); _points[13] = ct("0.1321945609931841139859277448537328159919694900034790533857361118320943707653349045332957791687263386"); _weight[13] = ct("0.0373231071172843895119659435865110190108179306031667237196600281074819210326886496743589656272682794"); _points[14] = ct("0.8283255470194324806099490882533714107848008451249649809158517487479251504918128910941778006375064516"); _weight[14] = ct("0.04155670861445060919519824912216623993056720672192566649817783586627122641301714237517143947408073117"); _points[15] = ct("0.171674452980567519390050911746628589215199154875035019084148251252074849508187108905822199362493522"); _weight[15] = ct("0.04155670861445060919519824912216623993056720672192566649817783586627122641301714237517145385645260117"); _points[16] = ct("0.2151397640942991403459983583217845334376436571716763860899851611688926236813584997474581943081317975"); _weight[16] = ct("0.04528587219651642047109301566839206491142874272724243618793426692722835773337135218283108917063664998"); _points[17] = ct("0.7848602359057008596540016416782154665623563428283236139100148388311073763186415002525418056918681942"); _weight[17] = ct("0.04528587219651642047109301566839206491142874272724243618793426692722835773337135218283109040639983369"); _points[18] = ct("0.262062887522440869482794076166282978686391927310672024295443653528363812900513554436429402188325273"); _weight[18] = ct("0.04846532899896495792524450304772030088251656167823080247843814090718469703877365354821424384893553832"); _points[19] = ct("0.7379371124775591305172059238337170213136080726893279757045563464716361870994864455635705978116747257"); _weight[19] = ct("0.04846532899896495792524450304772030088251656167823080247843814090718469703877365354821424385463743862"); _points[20] = ct("0.688125758044539355110678604778043491435846988521611455172176360196915859421478201914138666867737561"); _weight[20] = ct("0.05105648378903038490710831925285606752329000117896027046698772610142319921851682034903030485135373313"); _points[21] = ct("0.3118742419554606448893213952219565085641530114783885448278236398030841405785217980858613331322624396"); _weight[21] = ct("0.05105648378903038490710831925285606752329000117896027046698772610142319921851682034903030485137455679"); _points[22] = ct("0.363969186182410961161586821937115132587619351653238523750162036748778829879543151606605536872026769"); _weight[22] = ct("0.05302788296142320895520821849840541439496148134257975841531014814296125636970519336941207124174814022"); _points[23] = ct("0.636030813817589038838413178062884867412380648346761476249837963251221170120456848393394463127973231"); _weight[23] = ct("0.05302788296142320895520821849840541439496148134257975841531014814296125636970519336941207124174827441"); _points[24] = ct("0.5822846410666903856407358889455827285728627078005840882471428133476659252378482239091221824898926037"); _weight[24] = ct("0.05435559612914706762678575965183668393763922733302198382856058523865666319156439405412133157517785174"); _points[25] = ct("0.4177153589333096143592641110544172714271372921994159117528571866523340747621517760908778175101073963"); _weight[25] = ct("0.05435559612914706762678575965183668393763922733302198382856058523865666319156439405412133157517785209"); _points[26] = ct("0.5275396449420171352132582636709399889253979955304168418726692936294472722671537883242063627327149899"); _weight[26] = ct("0.05502350650823759814118813280090880697831276474561581663933405061480620506035357870344563338891741859"); _points[27] = ct("0.4724603550579828647867417363290600110746020044695831581273307063705527277328462116757936372672850101"); _weight[27] = ct("0.05502350650823759814118813280090880697831276474561581663933405061480620506035357870344563338891741859"); break; // order 56,57 case 56 : case 57 : delivered_order = 57; _points.resize(29); _weight.resize(29); _points[0] = ct("0.001660278869701706918404233725323057174113273374559998900921338121607207002790127831238018210105691685"); _weight[0] = ct("0.004258451939373204827131906651124901501199444899259243026215047279732645793902882416561761178003708122"); _points[1] = ct("0.9983397211302982930815957662746769428258867266254400010990786618783927929972098721687619817900013044"); _weight[1] = ct("0.00425845193937320482713190665112490150119944489925924302621504727973264579390288241744535539018274769"); _points[2] = ct("0.991272752630706587435463007893188478053390974453215779512560045723336292857815191776086317357309087"); _weight[2] = ct("0.0098660425280613529919299008201978155748032840951807938280269223376721781694305564537882256883305202"); _points[3] = ct("0.008727247369293412564536992106811521946609025546784220487439954276663707142184808223913682642415212693"); _weight[3] = ct("0.00986604252806135299192990082019781557480328409518079382802692233767217816943055646072225404451223492"); _points[4] = ct("0.02135720211095613710089598150958821813122022302295146471823518192332919792283790106899735207110017006"); _weight[4] = ct("0.0153702461010468113222042626873083748735581304843547551610421796831758162179478083469863767119774409"); _points[5] = ct("0.9786427978890438628991040184904117818687797769770485352817648180766708020771620989310026479292115706"); _weight[5] = ct("0.01537024610104681132220426268730837487355813048435475516104217968317581621794780836139798196132962266"); _points[6] = ct("0.03940988352347060745312328195844678729558032834385320076550426809702499335777486268074240653069993902"); _weight[6] = ct("0.02070103125934141805241500505703846076674539019428719862896243971739621852818551853953495319631759502"); _points[7] = ct("0.9605901164765293925468767180415532127044196716561467992344957319029750066422251373192575934690763516"); _weight[7] = ct("0.02070103125934141805241500505703846076674539019428719862896243971739621852818551853984171415670102727"); _points[8] = ct("0.06268109753994860479110328937171072654469156844047931463638958564262908145684442658053764847935897777"); _weight[8] = ct("0.02579741345124896195629719058977129895981105532307103384093141566365206014644921025462052127950351516"); _points[9] = ct("0.9373189024600513952088967106282892734553084315595206853636104143573709185431555734194623515207548012"); _weight[9] = ct("0.02579741345124896195629719058977129895981105532307103384093141566365206014644921025527067660590528598"); _points[10] = ct("0.09090725619237377750521389271060751218498921905885311443148286385234173733221244639847037110258048705"); _weight[10] = ct("0.0306015453285395692710549240119535224620322698895651041589387060559972220376777554907964141556590276"); _points[11] = ct("0.9090927438076262224947861072893924878150107809411468855685171361476582626677875536015296288973760434"); _weight[11] = ct("0.03060154532853956927105492401195352246203226988956510415893870605599722203767775549082120815892355311"); _points[12] = ct("0.8762314258672385669563050386060690951062959841144933042059989957623460653588429567443031613856582753"); _weight[12] = ct("0.03505896662752563928479074347443958655119744433738679095740371243000397857149125882037553337678302389"); _points[13] = ct("0.1237685741327614330436949613939309048937040158855066957940010042376539346411570432556968386143545099"); _weight[13] = ct("0.03505896662752563928479074347443958655119744433738679095740371243000397857149125882037823722445054435"); _points[14] = ct("0.1608927311986567424219074973040070368058685349926774186380950705253167483999159884580950739648692351"); _weight[14] = ct("0.03911916356788189191407244432984016568343953847983485473378759766238027210361614738466142952885046597"); _points[15] = ct("0.8391072688013432575780925026959929631941314650073225813619049294746832516000840115419049260351279701"); _weight[15] = ct("0.03911916356788189191407244432984016568343953847983485473378759766238027210361614738466173188057738515"); _points[16] = ct("0.7981408985691139101897931055944948900390934051927888192367311966151714169808699492956273492244185209"); _weight[16] = ct("0.04273612868308626377267242464860403569084912830679669766094537169121599627783617681021242154028807844"); _points[17] = ct("0.2018591014308860898102068944055051099609065948072111807632688033848285830191300507043726507755818786"); _weight[17] = ct("0.042736128683086263772672424648604035690849128306796697660945371691215996277836176810212423235581571"); _points[18] = ct("0.753796477562113821051313959813760076675611920192292082092532153549107183181318411159590233645317137"); _weight[18] = ct("0.04586887856962938167398320553855540344911451049097728563791493734934686215774724755050591362461630883"); _points[19] = ct("0.2462035224378861789486860401862399233243880798077079179074678464508928168186815888404097663546828384"); _weight[19] = ct("0.04586887856962938167398320553855540344911451049097728563791493734934686215774724755050591365107221208"); _points[20] = ct("0.2934235559129956680546467069841915883382807406318430401108076673728583268940136014749802695368964944"); _weight[20] = ct("0.04848191704720430315095003744134437958817813896090178213024773337311643895088929114457563589694005033"); _points[21] = ct("0.7065764440870043319453532930158084116617192593681569598891923326271416731059863985250197304631035028"); _weight[21] = ct("0.04848191704720430315095003744134437958817813896090178213024773337311643895088929114457563589714280829"); _points[22] = ct("0.6570158189338199674740979615955237241292244095454137406483794654472233487147167212702577337526900784"); _weight[22] = ct("0.0505456368799574830609102734537486818237836394262625995614160116528885101846129027944658327169071752"); _points[23] = ct("0.3429841810661800325259020384044762758707755904545862593516205345527766512852832787297422662473099228"); _weight[23] = ct("0.05054563687995748306091027345374868182378363942626259956141601165288851018461290279446583271690743738"); _points[24] = ct("0.6056761430830005372531878644514687495283254088560475740192004226610294555540058890492892141022582066"); _weight[24] = ct("0.05203665503886468695666423564256003445532611033773384582184702707394015054274691957461250068566735182"); _points[25] = ct("0.3943238569169994627468121355485312504716745911439524259807995773389705444459941109507107858977417932"); _weight[25] = ct("0.05203665503886468695666423564256003445532611033773384582184702707394015054274691957461250068566737544"); _points[26] = ct("0.5531391150663396150854911962151884904585977196478035681428876370110826718757923204715022303102827086"); _weight[26] = ct("0.05293807754866047070329566392609394653741565687113901991407767276251131908456972819198550959864424907"); _points[27] = ct("0.4468608849336603849145088037848115095414022803521964318571123629889173281242076795284977696897172914"); _weight[27] = ct("0.05293807754866047070329566392609394653741565687113901991407767276251131908456972819198550959864424907"); _points[28] = ct("0.5"); _weight[28] = ct("0.05323969085915712212325556345483878416509251580649798987648645053394066246579319242238732282325525218"); break; // order 58,59 case 58 : case 59 : delivered_order = 59; _points.resize(30); _weight.resize(30); _points[0] = ct("0.9984467420373247701358150254593476416704410190588753950540471489011938476050818704079410097787617413"); _weight[0] = ct("0.003984096248083302807732941737336811225240348293575860614742581678460019216450666634479433344457437239"); _points[1] = ct("0.001553257962675229864184974540652358329558980941124604945952851098806152394918129592058990221182733242"); _weight[1] = ct("0.003984096248083302807732941737336811225240348293575860614742581678460019216450666642188026814968437855"); _points[2] = ct("0.008165938360126395014983709197168599029841072645144318241409994924427852317604478148962014169242317633"); _weight[2] = ct("0.009233234155545479571151065956023634548103266984090701685649182757292799760653986755450699432333341509"); _points[3] = ct("0.9918340616398736049850162908028314009701589273548556817585900050755721476823955218510379858309033031"); _weight[3] = ct("0.009233234155545479571151065956023634548103266984090701685649182757292799760653986815792453169513453224"); _points[4] = ct("0.0199890675158462438915644872091011685348203912980383002571691637875300211464657853864052781488233464"); _weight[4] = ct("0.01439235394166168467485958980564602181979444727314374823709006130407299447000696654140593213314494214"); _points[5] = ct("0.9800109324841537561084355127908988314651796087019616997428308362124699788535342146135947218510085378"); _weight[5] = ct("0.01439235394166168467485958980564602181979444727314374823709006130407299447000696660670929023709229111"); _points[6] = ct("0.03689997628536283706033786145976299795676273158733546954448143316028850217444883659161355992412324619"); _weight[6] = ct("0.01939959628481352479840096822317384601660048838319767605386639485297348547638489696037231540825839766"); _points[7] = ct("0.9631000237146371629396621385402370020432372684126645304555185668397114978255511634083864400759978334"); _weight[7] = ct("0.01939959628481352479840096822317384601660048838319767605386639485297348547638489696454661377310503722"); _points[8] = ct("0.9412802678960263407715582312651127950283445735732421160341630265608081313475958278646079191424468346"); _weight[8] = ct("0.02420133641529702645146907021140375890763590459868636817259596839590271283855107639963466400268558322"); _points[9] = ct("0.05871973210397365922844176873488720497165542642675788396583697343919186865240417213539208085749427117"); _weight[9] = ct("0.02420133641529702645146907021140375890763590459868636817259596839590271283855107640314816261043103779"); _points[10] = ct("0.0852171188086158012785509401337490417804656519148291605965235082731717467052091824585237782457661204"); _weight[10] = ct("0.02874657810880953324086084470102806439856033536088156727435789950161607370497718846308085054974539156"); _points[11] = ct("0.9147828811913841987214490598662509582195343480851708394034764917268282532947908175414762217542537747"); _weight[11] = ct("0.02874657810880953324086084470102806439856033536088156727435789950161607370497718846308397388938158375"); _points[12] = ct("0.8838887160524130974589886704872515658474418086164542266032471936825792850864975225263048012930588557"); _weight[12] = ct("0.03298711494109024756406425755798118061872147682833018948351575802107183623304708968291271722923362495"); _points[13] = ct("0.1161112839475869025410113295127484341525581913835457733967528063174207149135024774736951987069361996"); _weight[13] = ct("0.03298711494109024756406425755798118061872147682833018948351575802107183623304708968296127720974999476"); _points[14] = ct("0.8489252473966578984661461940133200341911769003269773281898614233699883606215799803476908182200597426"); _weight[14] = ct("0.03687798736885260313412192501109536707688526301852471947063459118729969965731760585520115159405834797"); _points[15] = ct("0.1510747526033421015338538059866799658088230996730226718101385766300116393784200196523091817799413847"); _weight[15] = ct("0.03687798736885260313412192501109536707688526301852471947063459118729969965731760585520211743210103565"); _points[16] = ct("0.1897369085053785694297612217844053503963176535852359337024744149378323425125554411294237077723385906"); _weight[16] = ct("0.04037794761471010767734746923026486543794640185421964994512929685302559028351317280210616346488849335"); _points[17] = ct("0.8102630914946214305702387782155946496036823464147640662975255850621676574874445588705762922276610945"); _weight[17] = ct("0.0403779476147101076773474692302648654379464018542196499451292968530255902835131728021061872309781039"); _points[18] = ct("0.7683120740710099496320848966555363970820890034651485527263717414560074543094891893155705800485953387"); _weight[18] = ct("0.04344989360054148990119376535756285128837666437177267200611106494107679112713074712397751617336896013"); _points[19] = ct("0.2316879259289900503679151033444636029179109965348514472736282585439925456905108106844294199514047477"); _weight[19] = ct("0.04344989360054148990119376535756285128837666437177267200611106494107679112713074712397751721923776294"); _points[20] = ct("0.723516884769044588390304950161427000081203796930712204877238690863807675864292103502003444360620908"); _weight[20] = ct("0.0460612611188930643588163535438093835984566172091170537638375235009865235350470841492320264444094193"); _points[21] = ct("0.2764831152309554116096950498385729999187962030692877951227613091361923241357078964979965556393790769"); _weight[21] = ct("0.04606126111889306435881635354380938359845661720911705376383752350098652353504708414923202646065604094"); _points[22] = ct("0.6763523627654390567355186035446869303268155040107128132970922344501347081165955393321801983760567682"); _weight[22] = ct("0.04818436858732212981973431317590493254820323071508012295649713786641876737100156186247562390896992009"); _points[23] = ct("0.3236476372345609432644813964553130696731844959892871867029077655498652918834044606678198016239432329"); _weight[23] = ct("0.04818436858732212981973431317590493254820323071508012295649713786641876737100156186247562390902385435"); _points[24] = ct("0.6273184630839449232199025649089025539413946516512592130821429875444817657845394014531831406921181011"); _weight[24] = ct("0.04979671029339763353139014105178473826493463183335213861068257309197333019495440450904614964466218078"); _points[25] = ct("0.3726815369160550767800974350910974460586053483487407869178570124555182342154605985468168593078818989"); _weight[25] = ct("0.04979671029339763353139014105178473826493463183335213861068257309197333019495440450904614964466224146"); _points[26] = ct("0.4230650431957082265181026636283720397907240143778307691405185085421064257445919493015384467446296072"); _weight[26] = ct("0.05088119487420275229821447608427702231635314474356342043213047270982125680265883747273799890989195542"); _points[27] = ct("0.5769349568042917734818973363716279602092759856221692308594814914578935742554080506984615532553703928"); _weight[27] = ct("0.0508811948742027522982144760842770223163531447435634204321304727098212568026588374727379989098919558"); _points[28] = ct("0.5257359212776588479165126065833612868745707268332847821275804219939823776052135545279350453536427429"); _weight[28] = ct("0.05142632644677942017064281835270752193418777853246411129315949333800811932830471469631442316094435458"); _points[29] = ct("0.4742640787223411520834873934166387131254292731667152178724195780060176223947864454720649546463572571"); _weight[29] = ct("0.05142632644677942017064281835270752193418777853246411129315949333800811932830471469631442316094435458"); break; // order 60,61 case 60 : case 61 : delivered_order = 61; _points.resize(31); _weight.resize(31); _points[0] = ct("0.001456259090261462972186722888448745874277332941465184603938140536671727639569783488828314396257689635"); _weight[0] = ct("0.003735415789624387929348437516106203511075426242024019849635485164339136550087160836353011312030814283"); _points[1] = ct("0.9985437409097385370278132771115512541257226670585348153960618594633282723604302165111716856051244182"); _weight[1] = ct("0.003735415789624387929348437516106203511075426242024019849635485164339136550087160845587137141720281039"); _points[2] = ct("0.9923429548325762420012325833673423554692591347573218354728643296977299769442723637440437229734679307"); _weight[2] = ct("0.008659310395155291231578998043410570683136431383997888316377591894405077207572920934503029106477412167"); _points[3] = ct("0.00765704516742375799876741663265764453074086524267816452713567030227002305572763625595627702295878941"); _weight[3] = ct("0.008659310395155291231578998043410570683136431383997888316377591894405077207572921233026982288499865862"); _points[4] = ct("0.981251962546474830894526202052929150948609742576279188386675678514985989965298058276482183478766264"); _weight[4] = ct("0.01350450959248971090030435404596607807117832300105832292843737492363504441243640114529650286166003484"); _points[5] = ct("0.01874803745352516910547379794707084905139025742372081161332432148501401003470194172351781652525371484"); _weight[5] = ct("0.01350450959248971090030435404596607807117832300105832292843737492363504441243640179017013630612728352"); _points[6] = ct("0.9653784989483240824784728798646317564066988436290410182276681875953414709211815171232175381609787332"); _weight[6] = ct("0.01821613695619273201219600523390172116357266602383384295070951969816670398426204512121133695127756726"); _points[7] = ct("0.03462150105167591752152712013536824359330115637095898177233181240465852907881848287678246183624739291"); _weight[7] = ct("0.01821613695619273201219600523390172116357266602383384295070951969816670398426204520325386329727057047"); _points[8] = ct("0.9448800149741355216870960044910796307717987059325954748815660279630855009680425324985645588464641407"); _weight[8] = ct("0.02274685376360055145115792894731483863177635965501448244675831806076219499563510508340775276693803594"); _points[9] = ct("0.05511998502586447831290399550892036922820129406740452511843397203691449903195746750143544115477625997"); _weight[9] = ct("0.02274685376360055145115792894731483863177635965501448244675831806076219499563510512478069813822093218"); _points[10] = ct("0.9199601600731336700434522679700891780273686505373747614156803069474734141326785555328494277978334248"); _weight[10] = ct("0.0270515412124584268558331295433100213601947312981059038470039105256499515290323858014887309311220587"); _points[11] = ct("0.08003983992686632995654773202991082197263134946262523858431969305252658586732144446715057220183028104"); _weight[11] = ct("0.02705154121245842685583312954331002136019473129810590384700391052564995152903238580263298133541309537"); _points[12] = ct("0.1091334257916875297968199899026577544522948139933005599675624686482212483980791531009348949654394841"); _weight[12] = ct("0.03108739328051421345517177184334833357936439968232565764075375266574554731138425888082085196543468197"); _points[13] = ct("0.8908665742083124702031800100973422455477051860066994400324375313517787516019208468990651050345943823"); _weight[13] = ct("0.03108739328051421345517177184334833357936439968232565764075375266574554731138425888130083816054638221"); _points[14] = ct("0.1421116077065733580470145673167570220549032619152057836859458771974568631244629034775778924291043132"); _weight[14] = ct("0.03481429161770518308387806312756285525754285369867169685553635851837134563893470805502034184209715985"); _points[15] = ct("0.8578883922934266419529854326832429779450967380847942163140541228025431368755370965224221075709079774"); _weight[15] = ct("0.03481429161770518308387806312756285525754285369867169685553635851837134563893470805507043833071976983"); _points[16] = ct("0.1786466385378698269077908983837492730041546583318966217453477017619332973797433691655777512192607888"); _weight[16] = ct("0.03819519329938830821317883745066532246287845684710432704609504082320412596697428296745119702124533426"); _points[17] = ct("0.8213533614621301730922091016162507269958453416681033782546522982380667026202566308344222487807324943"); _weight[17] = ct("0.03819519329938830821317883745066532246287845684710432704609504082320412596697428296745132284385085426"); _points[18] = ct("0.2183754192964253686395275382024192860256988634165564845071156081562723096081775797374572902948126088"); _weight[18] = ct("0.0411964958807946319519116837159808853078841332783231389051919621253154333232668202076256025443723746"); _points[19] = ct("0.7816245807035746313604724617975807139743011365834435154928843918437276903918224202625427097051892246"); _weight[19] = ct("0.04119649588079463195191168371598088530788413327832313890519196212531543332326682020762560352392116962"); _points[20] = ct("0.2609031089775487597797029803217571257802383142512884375809194745004315606814533610283708215805617322"); _weight[20] = ct("0.04378837030423893806309903484766654611462907988560212575177060598456271225204984948183410913304042932"); _points[21] = ct("0.7390968910224512402202970196782428742197616857487115624190805254995684393185466389716291784194379161"); _weight[21] = ct("0.04378837030423893806309903484766654611462907988560212575177060598456271225204984948183410923826059577"); _points[22] = ct("0.3058070491958835284693242693562399490074468660532279821210935607641609639146006582516778301944404148"); _weight[22] = ct("0.04594505694682073910768143580357506274865541268957890208924280825212435217371207403383186527240141105"); _points[23] = ct("0.6941929508041164715306757306437600509925531339467720178789064392358390360853993417483221698055596242"); _weight[23] = ct("0.04594505694682073910768143580357506274865541268957890208924280825212435217371207403383186527340160378"); _points[24] = ct("0.3526409650091491916910480511641478306235724073608207215318520588819652150614509044215928373785823166"); _weight[24] = ct("0.04764512145615975640360209874379834227066236912347951135572473296423440281824639506062046299784091323"); _points[25] = ct("0.6473590349908508083089519488358521693764275926391792784681479411180347849385490955784071626214176832"); _weight[25] = ct("0.04764512145615975640360209874379834227066236912347951135572473296423440281824639506062046299784199497"); _points[26] = ct("0.5990605996677853143862064980164169688873974060807774399934011271280026030023023224343955099764932203"); _weight[26] = ct("0.04887166769316436254673700548949835191786439433804755725475732225072623157354002120950387583890250572"); _points[27] = ct("0.4009394003322146856137935019835830311126025939192225600065988728719973969976976775656044900235067797"); _weight[27] = ct("0.0488716676931643625467370054894983519178643943380475572547573222507262315735400212095038758389025195"); _points[28] = ct("0.5497776560761707601625873950594703669194976793887636530301135454886349377647980330327888590157321036"); _weight[28] = ct("0.04961250561333615393743775721430750700877160997778153489060157125773453723517885216715386205370758322"); _points[29] = ct("0.4502223439238292398374126049405296330805023206112363469698864545113650622352019669672111409842678964"); _weight[29] = ct("0.04961250561333615393743775721430750700877160997778153489060157125773453723517885216715386205370758326"); _points[30] = ct("0.5"); _weight[30] = ct("0.04986027239671322571376691686717471982162670575010217574280728978204640605537343723220456872105070443"); break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } template GaussQuadratureRule::GaussQuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; GaussQuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_Gauss_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/gaussradau.mac000066400000000000000000000025231411346603000251440ustar00rootroot00000000000000/* * Run `maxima --batch gaussradau.mac'. */ /* adjust search path */ file_search_maxima: append(["$$$.{mac,max}"],file_search_maxima); load(orthopoly)$ load(stringproc)$ load(writequad)$ orthopoly_returns_intervals : false; fpprec: 120$ fpprintprec: 100$ maxp: 30$ /* rules exist only for even orders */ /* float2bf: false$ */ /* see https://mathworld.wolfram.com/RadauQuadrature.htm Left Gauss-Radau rule: inner points are given as the roots of (legendre_{n-1} + legendre_{n})/(x + 1), the outer point -1 is obtained by multiplication with (x + 1) Right Gauss-Radau rule: substitue x by -x */ points_left(n) := legendre_p(n-1,x) + legendre_p(n, x)$ weights_left(n,xx) := at(ratsimp((1 - x)/(n*n*legendre_p(n-1,x)^2)), x=xx)$ points_right(n) := legendre_p(n-1,-x) + legendre_p(n, -x)$ weights_right(n,xx) := at(ratsimp((1 + x)/(n*n*legendre_p(n-1,-x)^2)), x=xx)$ write_quad("gaussradauleftquadrature.hh", "GaussRadauLeft", "gaussradau.mac", lambda([i],points_left(i)), lambda([i,p],weights_left(i,p)), maxp, 1)$ write_quad("gaussradaurightquadrature.hh", "GaussRadauRight", "gaussradau.mac", lambda([i],points_right(i)), lambda([i,p],weights_right(i,p)), maxp, 1)$ /* * Local variables: * mode: maxima * compile-command: "maxima --batch gaussradau.mac" * End: */ dune-geometry-2.8.0/dune/geometry/quadraturerules/gaussradauleftquadrature.hh000066400000000000000000002223551411346603000277630ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by gaussradau.mac! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_GaussRadauLeft_HH #define DUNE_GEOMETRY_QUADRATURE_GaussRadauLeft_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class GaussRadauLeftQuadratureRule; template using GaussRadauLeftQuadratureRule1D = GaussRadauLeftQuadratureRule; template class GaussRadauLeftQuadratureRule : public QuadratureRule { public: /** brief The highest quadrature order available */ enum { highest_order=30 }; private: friend class QuadratureRuleFactory; GaussRadauLeftQuadratureRule (int p); ~GaussRadauLeftQuadratureRule(){} }; //! internal Helper template for the initialization of the quadrature rules template::value> struct GaussRadauLeftQuadratureInitHelper; template struct GaussRadauLeftQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct GaussRadauLeftQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void GaussRadauLeftQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { case 0 : delivered_order = 0; _points.resize(1); _weight.resize(1); _points[0] = 0.0; _weight[0] = 1.0; break; // order 1,2 case 1 : case 2 : delivered_order = 2; _points.resize(2); _weight.resize(2); _points[0] = 0.0; _weight[0] = 0.25; _points[1] = 0.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666; _weight[1] = 0.75; break; // order 3,4 case 3 : case 4 : delivered_order = 4; _points.resize(3); _weight.resize(3); _points[0] = 0.0; _weight[0] = 0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; _points[1] = 0.8449489742783178098197284074705891391965947480656670128432692567250960377457315026539859433104640234; _weight[1] = 0.3764030627004672750500754423692807946676125699817591630990918731319177672928523603738927935248711045; _points[2] = 0.3550510257216821901802715925294108608034052519343329871567307432749039622542684973460140566895359765; _weight[2] = 0.5124858261884216138388134465196080942212763189071297257897970157569711215960365285149960953640177843; break; // order 5,6 case 5 : case 6 : delivered_order = 6; _points.resize(4); _weight.resize(4); _points[0] = 0.0; _weight[0] = 0.0625; _points[1] = 0.9114120404872960526044538562305438031142706680772504345688363048300235125731899032747806923838984214; _weight[1] = 0.2204622111767683752754784720371859890529167281230873116876396332191458306523173431813869747371986422; _points[2] = 0.2123405382391529439747581101240003766519199414890261591145475508607692831081746308640139445069166552; _weight[2] = 0.3288443199800597439442892210727968317490234075874455536546030877312606057631737874914764364720579267; _points[3] = 0.5905331355592652891350737479311701059480951047194376920309018585949214900329211801469196488234706375; _weight[3] = 0.388193468843171880780232306890017179198059864289467134657757279049593563584508869327136588790743431; break; // order 7,8 case 7 : case 8 : delivered_order = 8; _points.resize(5); _weight.resize(5); _points[0] = 0.0; _weight[0] = 0.03999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _points[1] = 0.9428958038854823178068788074458843787649220544012498356721917070690653217979268354138861831801572631; _weight[1] = 0.1437135607912259413234122198541102271589229617318809184244815352000477933742653045394234927685913557; _points[2] = 0.1397598643437805521520870811248802332616219774127744950757664058160257420698344355865098450735723893; _weight[2] = 0.2231039010835707444025602182285893596530132769666542171491954357318447595238752822393854332837929434; _points[3] = 0.7231569863618761723199540023143748588891108303049695316505579511688786603162919632274584714359488691; _weight[3] = 0.28135601514946206019217265034065989120000299266737412219813168211940937087419012854107836846850562; _points[4] = 0.4164095676310831799433023313370827513065673601032283598237061581682524980381689879943677225325437006; _weight[4] = 0.3118265229757412540818549115766405219880607686340907422281913469486980762276692846801127054791100807; break; // order 9,10 case 9 : case 10 : delivered_order = 10; _points.resize(6); _weight.resize(6); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002904443936136988704613522974964763885677664394036593149115822206008312261073264473647011675707760947; _weight[0] = 0.02777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777; _points[1] = 0.9601901429485312576591933099066668322957373457716148380535922517950352543738256931454977409168154327; _weight[1] = 0.1007941926267404201046003778745677818586739544978990469020905175031896616185019326523859081070179564; _points[2] = 0.09853508579882642612349889788775269038051356954828979943626418694343487404001393811382476449539206683; _weight[2] = 0.15982037661025548327288999189811797479611146812876839180378402272111432088446591677960283187954084; _points[3] = 0.8019865821263918274642078632047037639618136411662111207916708231727912882713534973402270785858446056; _weight[3] = 0.2084506671559538694797031913713231216677075046880940122344846434185750632010718140854202072910519794; _points[4] = 0.3045357266463639054853851762788328386059984450013516409148027388674711861631761331260749534539964475; _weight[4] = 0.2426935942344849580799139577934448339939675840621020934694189186061539713876707499244320986309746931; _points[5] = 0.5620251897526138559949874799947711474832097257852598735309427264939946698789034655471027352752241744; _weight[5] = 0.2604633915947874912851147032847685099057617108453586778124441199731892051305118087803811763136367531; break; // order 11,12 case 11 : case 12 : delivered_order = 12; _points.resize(7); _weight.resize(7); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007745183829698636545636061266572703695140438384097581730975525882688832696195371929725364468554029193; _weight[0] = 0.02040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612; _points[1] = 0.9706835728402151080279497230868350896262696074362850722130893160550639617583342212513690516348156304; _weight[1] = 0.07449423555601031793324878020916692097532644942393942434007237049841313043955906688474729498373429045; _points[2] = 0.07305432868025888514812603418031798894382758045771674727553292034335479754747175618566051998641260845; _weight[2] = 0.1196137446126562028935387403847763008302627238892853476612432820588170328039983753965707678098696572; _points[3] = 0.8519214003315157081500231475040207877697512251914055385874053581984016139091216781936306023382524239; _weight[3] = 0.1591021157336507408724352172349341821081630163278709547082536480846529383453687327524900611444633129; _points[4] = 0.2307661379699454990831166398843545481628578566777045838330518303634518694260467143147997884572256323; _weight[4] = 0.1904749368221155769029691739380627618671473914712524715596097410083045379273763891870770560020639449; _points[5] = 0.6630153097188457009029470279192242948024312499715266528774370319263086494872159391475908588263455174; _weight[5] = 0.2123518895029778041991540195751041223560385606946763943251267338610614147090378494828338349159860945; _points[6] = 0.441328481228449867918606658194478059925631711034592174444252773882649877102578921676179947987717418; _weight[6] = 0.2235549145072832347496744768212210179855108377848121420995717755091591090399657087452605769806173937; break; // order 13,14 case 13 : case 14 : delivered_order = 14; _points.resize(8); _weight.resize(8); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002904443936136988704613522974964763885677664394036593149115822206008312261073264473647011675707760947; _weight[0] = 0.015625; _points[1] = 0.9775206135612875018911745004291549400778260927643996101407157239412414242418781198561934406230013095; _weight[1] = 0.05725440737212859967117686425977936825057099397716932914168114853242340872092305631760230041130854427; _points[2] = 0.05626256053692214646565219103231117577976551474462308357244279169739421434833830334809817873295303859; _weight[2] = 0.092679077401489639270364486349647736830932563674935858313467408965379128989721699937903158856790959; _points[3] = 0.8853209468390957680903597629324853729222701754680280546110102650484316601686228018917616112512735336; _weight[3] = 0.1248239506649324816289346467565124312159878101369501620465085111501266363843363392424861677155123433; _points[4] = 0.1802406917368923649875799428091817845420606208054701553226255552798179881679575210257100429476812829; _weight[4] = 0.1520653103233925644878716457001354421902137069080648805811724927448463625325070164171434664138434795; _points[5] = 0.7342101772154105315232106083066100025630031185943901059793203132469449813827574545335273993579018924; _weight[5] = 0.1735073978172506401143379592110741293229628009936786196599092457283690261775051724258224098007456587; _points[6] = 0.3526247171131696373739077701712412028080218830572747823992093386338329349089188367412000944987530987; _weight[6] = 0.188258772694559278286064630720786335118640532533949995543333201250716465965606978691283022057567494; _points[7] = 0.5471536263305553830014485576523488546403859278991475413080093454856701301148602959368425659217691773; _weight[7] = 0.1957860837262467965412497670020645570706915917752511547139279916281389712293997369677594747442315208; break; // order 15,16 case 15 : case 16 : delivered_order = 16; _points.resize(9); _weight.resize(9); _points[0] = 0.0; _weight[0] = 0.01234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901; _points[1] = 0.982220084852636548186794898962320938733511601761499566334392168321240752424216993402735723249677561; _weight[1] = 0.04535725246164145850644674920795090340044910382256608423236014041761080705247011291369808019791001464; _points[2] = 0.0446339552899698507331210218583077615235771330099676095516167511431071451132089417478769694427720403; _weight[2] = 0.07382700952315769290979424990076684192644119748373204166495034257132170235826067178423603914263698819; _points[3] = 0.9086763921002060439962585419254586468929595242554323312331298273652046995208401247646196210786180932; _weight[3] = 0.1002766490122759787105825452084585374837100645139951717640162083073491273282749948425325106489951269; _points[4] = 0.1443662570421455714852185202282149697135218394604248395904329066503718245154436216327021789030911811; _weight[4] = 0.1235946891022965261806198974844998620884284109101835335540040960997860637405727093530324964819711671; _points[5] = 0.7856915206043692416424587324183296773255702824775234091862673808591419017359106772087095035558392945; _weight[5] = 0.1431933481786155855733528188760054645853142508187793084336149756313973598558725153845647136386781611; _points[6] = 0.2868247571444305189486862397490926585531162090545734410269295070347862040652774612810232153945976245; _weight[6] = 0.1584218878352189891690004248211828904282803901135082813370203191442722409397377362074389726296125592; _points[7] = 0.6280678354167276975691460395173707553318999366225193221323614587502696491405131872248705142273454069; _weight[7] = 0.1688469834879647929018621198957803825501226794932222463313217885924663693432674422816562201729896321; _points[8] = 0.4548133151965733509677277700467869448670199439462947750625170586994072352492948750904034506186470334; _weight[8] = 0.1741365013864832970359955155930094385249082238316676536703664502234506503691981382204952880748606714; break; // order 17,18 case 17 : case 18 : delivered_order = 18; _points.resize(10); _weight.resize(10); _points[0] = 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004647110297819181927381636759943622217084263030458549038585315529613299617717223157835218681132417516; _weight[0] = 0.009999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _points[1] = 0.9855875903511234513671732591891867605882552689434219139292493208718611241653995510560493069627278988; _weight[1] = 0.03680850274337924946552564703952257250633407560110190885784111690017778477215458793270183849421941181; _points[2] = 0.03625781288320946094116430076808145207587112284186378615204960856440268445424725950892430803303695375; _weight[2] = 0.06014833527874081575865526135099759590938724369183571272716692583091329962913008482323531114050148899; _points[3] = 0.9256126102908039553640818140440014149190230867152648015732003972549800762097657190320875705450169663; _weight[3] = 0.08218800636846073785084083445387855020451656194507156599834064798783462171005161946359655246906025996; _points[4] = 0.1180789787899987001922851119947352236928794145512961380870233486716910894342914014436902135496614535; _weight[4] = 0.1021350659395003377778943361115165106736257210286962005068043553499340322306121690246726114965883931; _points[5] = 0.8238833438370047181368242539274314135886139520306941260653516628281521076851947966928410833783966496; _weight[5] = 0.1195967158571898566882859830801363758258364741540254585528364764210946139183141897137094066862003184; _points[6] = 0.2371769848149603853173066928532744670764888172962619220088994091653832785191521320229569635701171547; _weight[6] = 0.1340974189205893480292772376310295553451252092166458466844053839661648602000224960759896073212453487; _points[7] = 0.6903324200723621829403795327705159511836109155028740754264075614582089368761546507541276227740725424; _weight[7] = 0.1453050824164591555734315389815310253381621189272259396591735666935382783811527201352568817760678677; _points[8] = 0.3818827653047059753607702483964955197193325953602086524939606944414221222571517883134253635138762796; _weight[8] = 0.1529296438622113105081377377003979801780786241826203904279240012042738305695686747214466554361694378; _points[9] = 0.5380295989189890651168568913194356918927669320212724790007001020070564751354848064390554624099362061; _weight[9] = 0.1567912286134691883479514236509898340189339712527769765855075256460686785889934581093911351799474732; break; // order 19,20 case 19 : case 20 : delivered_order = 20; _points.resize(11); _weight.resize(11); _points[0] = 0.0; _weight[0] = 0.008264462809917355371900826446280991735537190082644628099173553719008264462809917355371900826446280991; _points[1] = 0.988082386567584403090254413041014023969972152741625141979724006955586480282060464479065044623011125; _weight[1] = 0.03046254890606556735360916344416515441920593612889634378768602325986918684909318284948512089071412454; _points[2] = 0.03002903216148649704306435763440794069465484353742079153109599483012027857151955489540349737972766236; _weight[2] = 0.04992304095398403194787673479012341784951435295822716798886200345394064771188529448902933415752225152; _points[3] = 0.9382679281228518744773706328057498585471279196380978678152992024969945773221744501139764469102888345; _weight[3] = 0.06851684106660112815507694029022108631584560319435756477685101885640953683767976717173664864587875312; _points[4] = 0.09828901220985322965120102159023201853188232392706395246734326269440241414786137920675831210414931387; _weight[4] = 0.08565880960332991824335632452114911543009060544673768448218195768393830581589904069386788764433631681; _points[5] = 0.8528885503569297595724005644201804978662286380940702194287132906740209399339138553299454744945661568; _weight[5] = 0.1010815542700122091749658771329642516494277755940245416341823725777740925226297436637027602819852004; _points[6] = 0.1990210789631011548620536983827574753269977377400846616882581446047631433554426401296405366408468264; _weight[6] = 0.1144330619244883122008416155631972831221456389832920628771016872588315039886167750369068708206089062; _points[7] = 0.7388403239915437597339483419451542768013642838620432746964478689064990027375417996262675556594376508; _weight[7] = 0.12546268884856419732457013381672775718613069695897309262354779249129469297632546407602624370590123; _points[8] = 0.3240555383233348926428494910652385284960047237704642544860587698373743421209691377704544481199982942; _weight[8] = 0.1339335430948420889033190816775717752086008360038592987740894422858598943031122752005614670488956897; _points[9] = 0.6053601531142131570380478949223924977850608463510158023053388436121170679083816014767543736971187973; _weight[9] = 0.1396806665516915225944810978601028731857924475265701484072617959266351875863206717620061077170286754; _points[10] = 0.4632612342843393671269048222881109772188017684333521288398158534833598488582303550669724056089505765; _weight[10] = 0.142582781970503668730002204457496293897708917122417466549062352486438686945627867701305658260682571; break; // order 21,22 case 21 : case 22 : delivered_order = 22; _points.resize(12); _weight.resize(12); _points[0] = 0.0; _weight[0] = 0.006944444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444; _points[1] = 0.989981719538319594156975270132195215185208059483783761337830876297223142538554851051885253094427821; _weight[1] = 0.02562404960363464873401147256755191359698912179586886783614733167396359699140406477146628165245745726; _points[2] = 0.02527362039752034975333118646162910191546318234451419946737982100782123486413153541445864844884682208; _weight[2] = 0.04208606746934048812078982684064078598356207668454606077811004135971778814182424352552804186759516359; _points[3] = 0.9479645488728194474164573042270356775528140749416181644444711806566967214871910443747161670323384541; _weight[3] = 0.05795374014586919637517095413584668388777153128408424542984574266464927148200496692165819750039770507; _points[4] = 0.08304161344740514670686537298197258224799489043700742864789645601375671679018635847006293053875439026; _weight[4] = 0.07278183442699756426127382735286559431255511311081887313664967558148928208419907103707790861347367931; _points[5] = 0.8753807748555569262647004127360907707525558699119941437528128079837703940650480909233478784024579154; _weight[5] = 0.08638531965665428215303288348279335482371411193381952188479961232975350369852446186555482138789619392; _points[6] = 0.1691751003771814259694334560943432960560106956817856499813320666127921816819385788328203455244042225; _weight[6] = 0.09849926741304481732802481898451691715880480601630014213517520121230333584098958189070626683477635742; _points[7] = 0.7771593929561621444921685465426372355882747496725702918356361826383937691630167983849414146483995146; _weight[7] = 0.1089344395130962194243737410114312720559919702231833101252380994924976153392527006073200151967269551; _points[8] = 0.2777967151090320744366786921953890928627635544874086055440220181219102315933254697424818285109646655; _weight[8] = 0.1175015575724929196743169929697715883009119236048689568907922000277105361992896721300643435454773039; _points[9] = 0.659991842085334811766394766102982472268670660179149419652906526261715790387928769066606410356866858; _weight[9] = 0.1240607804020049797015365535394355200719995254498010043949067360502230324581192591300795635289312217; _points[10] = 0.401502720232860816772279286326956409725081247802388848866048868530464346904528768969408858744606104; _weight[10] = 0.1284956690763538880639871267992001336436691476013189170108039583312533699461672093381787487185684594; _points[11] = 0.5318623869104159579168896192422464067147282324490838342957501523971946009589323434649224386109767104; _weight[11] = 0.1307328302760665517190373578715017917195862278509456559330869568319942233737803243379213667092550587; break; // order 23,24 case 23 : case 24 : delivered_order = 24; _points.resize(13); _weight.resize(13); _points[0] = 0.0; _weight[0] = 0.005917159763313609467455621301775147928994082840236686390532544378698224852071005917159763313609467455; _points[1] = 0.9914609450115725806313355391221601971939095854334222535037420726987696354242378332024901570386923708; _weight[1] = 0.02185145163395103741442669230253126228354537862132045649291743515926153592140670516392700801272894985; _points[2] = 0.02156206316585036090809308308300396163193087033237463382010693450956786493785754057828948353107650017; _weight[2] = 0.03595120814624776446987687028207407841501895536660169592463294449355425288370779064245312669926985388; _points[3] = 0.9555535368445922769745332012144472337586906962110028900086035795656397136033835220419601208036469249; _weight[3] = 0.04963390344092354299236819387388759872276531452267544246797332700574719345537345645571951255905295405; _points[4] = 0.07105789873558898215118984486568470014950675852301765289624007061007562590735710859702939041980089356; _weight[4] = 0.06255191716557617906688464398784008656184274649282227400711808747510050471677954744690856656060123432; _points[5] = 0.8931455091165233423658932295675007374102001856304999724419368874377163856594813185372360302206494126; _weight[5] = 0.07457547504500010257574593212085472848830959655207242548776306668431488289996654073064815660600252619; _points[6] = 0.1454474562350641192097880835943828715140404962604416130384782853000148383526977847419860132619172941; _weight[6] = 0.08550173023530832123187933725608529010988327742650916870829611194441770373681670809118932944409747882; _points[7] = 0.8078489454701459590089427437713866696172986329784781339626035117036631132615997966722531487360379653; _weight[7] = 0.09518685777981586612737991037293691958788184471208789194562638680044365745312132402614513871070282189; _points[8] = 0.2404011104747729462573974259565796580577935649114620735689777213576880026087471077503722272450185674; _weight[8] = 0.1034803057279385373155662804144384374750427276214146948478010879630533907564801063538733440312738658; _points[9] = 0.704619115737419778377083165623985094060109286689147891948541911948590244816709519376876901230363183; _weight[9] = 0.1102671146442257323455385820995765357020738630479430106311100293991178535583726917255962453649948882; _points[10] = 0.3503993497227450072337082766570194277743468817226962651442804103514355751401337999111439270543466699; _weight[10] = 0.1154444314434977170061018793339061362073895171982322864758099735381130891596922281273366371689249657; _points[11] = 0.5894549187985423175109656494406675881566813048090818245014434041890480317232773850262626782782335785; _weight[11] = 0.1189392738303560156713425945898368420344422709752939545408915255899383006020911343567290538236643372; _points[12] = 0.4690491506871823293710697571031818606754917364983747951650452103277909685645172835640999221802166392; _weight[12] = 0.1206991711438455743154334620642569364828104246227900120795274795682394100041207609623141177050766563; break; // order 25,26 case 25 : case 26 : delivered_order = 26; _points.resize(14); _weight.resize(14); _points[0] = 0.0; _weight[0] = 0.00510204081632653061224489795918367346938775510204081632653061224489795918367346938775510204081632653; _points[1] = 0.9926353489739106783493085015861776563887942843835539995793105835477302499661054490025836808715547063; _weight[1] = 0.01885358163494845713873136414594165020975759392510590592315060034299193800069304020789391250755439251; _points[2] = 0.01861036501098785143971937784028768844731989720919976200449028134444641611193796918522105104544966762; _weight[2] = 0.03106100845388573008306645823341460455969559499141094108084012625707654955896377969536296135374710094; _points[3] = 0.9616018612603216496231674751358583140821701658636453123875839882017572193085974102596500086533790577; _weight[3] = 0.04297026772149020154465386554328283974483688526109607883477417143735728532178658495401673766981052349; _points[4] = 0.06147554089926898760236661323470064826601469379371128736454911262787526257519781678731859529345190475; _weight[4] = 0.05430386137218141341336046761449170556749717283973110242510925951515177257930583451532790775304492282; _points[5] = 0.907404775300997364717108624561383644110720141345707073676334067647180789268631504575939099602402819; _weight[5] = 0.06496983436867117390371286857296886542757042851651763549881540867872262529279047866030734246306485196; _points[6] = 0.1263051786933105806322854328682561088266184650796652405553038384524855945271314581468883265977601376; _weight[6] = 0.07481026967656067797526041847298687382328381103405386550842777879482025911405057274802766818691774256; _points[7] = 0.8327489886084422685044775212406428836252662912609022104165030737675518600067382640219022510167169201; _weight[7] = 0.08371486394554313949505113851903285254546037528256798216114894580640831517395702564992236389997285344; _points[8] = 0.2098429717265625144471366675006240677295733863863000682865650028219473094668441359420634556129970228; _weight[8] = 0.0915635010628648270619336510514316864439809227594628152951066579840052366089190074610930288816591208; _points[9] = 0.7413764592942374834102092671773089974754698626082298883428408231757040278651279725026256944884884611; _weight[9] = 0.09826275922649121516230654596477485524374871885835884725402164208061259270491076568978920429932178543; _points[10] = 0.3078989982803983431029580483123302698191088991281347122618493925443269136581261580203722085588643097; _weight[10] = 0.1037248816675878363340414432447055349260953854618612465467764711248264947647953780386198366283149413; _points[11] = 0.6378686027177611995913187017726784411364995511772176333048372109232234314635133853892353518843386822; _weight[11] = 0.1078835503023094256905937230574369840724121681977091473649374022846524089107794784879188404811405312; _points[12] = 0.4155560359786595444957791521890892937047338381892111916976340162321515955161435570436286929170990484; _weight[12] = 0.1106849057497854744658358415102718135678259837364580620549598005910175475300839492981459854834952701; _points[13] = 0.5274156139958822748249053573214027271284512643152623608629393494543600710066456598633123241982380029; _weight[13] = 0.1120946740013538971192073161100760603984472040336255537254011228574590152552906352058191083511396366; break; // order 27,28 case 27 : case 28 : delivered_order = 28; _points.resize(15); _weight.resize(15); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001738793769767343904495295754345571979559028417229907098604005560663642940295860998223344323190379554; _weight[0] = 0.004444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444; _points[1] = 0.9935832392071815431891795359054928211342801600877551156927612300672664543862947608443448780958123031; _weight[1] = 0.01643219579229676612652142641153073057741290693423739200638154484999854248273452294729310561302604524; _points[2] = 0.01622476590139976171877199085899914319709390816531859734586175987707687606413367759488759606181782854; _weight[2] = 0.02710139002432224716910711840089438470564976679454870725896584731580262535409379031752562837870266878; _points[3] = 0.9664985954679868599640360714294275183896092307471576329276780766789933861508405059308741382033136873; _weight[3] = 0.03755419638025321986648583269569141758805153698961255144076732637991919601646605173770385110166578307; _points[4] = 0.05369729993972461646659405657527595508774248615448350245208116515943580662324999237841443862523323363; _weight[4] = 0.04756479973024044960192386331729517468694216465472046057613808264784485886335468527107776368357517029; _points[5] = 0.9190145003180448156075486922600178127723348524133450049217006087220298280346817491821251334462922047; _weight[5] = 0.0570676017448763765065377912843275486532773680936293313767427911822960640342192529908062097810219568; _points[6] = 0.1106571911804844603091283390535104352962371370946732400854945517624619434315473724165586916213335371; _weight[6] = 0.0659377312524758160931310789717671834328714396438875129556617113002714624562014461183427180565642943; _points[7] = 0.8531951323187862700763398347392008484400305345720243772819514486686862944412743714542539449832626435; _weight[7] = 0.07408976350173362696234102937128255487413805694748258883130522716337536508449919660779818071285032187; _points[8] = 0.184610260556525358026925781387942485290986594488488348550043578240036759408723301454537843222707428; _weight[8] = 0.08142723865191631472436612291392116582120502240478308220490604700601857925394464346640601462002559893; _points[9] = 0.7719157293507420084653559013800570280584222751679494821663909853829601496219459319624363715810794585; _weight[9] = 0.08787443632122384283515522023795954919820258839409278348995177107324231289791167390445951868050365719; _points[10] = 0.2723235471107353145639732720096683033834398314753513399125190504034543468895320600690705980999378579; _weight[10] = 0.0933575729197254540418975518996095015505528049870462214693890052089200962043726360505074761465047243; _points[11] = 0.6787282560110638255976596025869645503426953689901490274844755846471571428880995957367810779605895242; _weight[11] = 0.09781875152255805823677830878766431530678913099926441455902384806443677576510945244842491271878973857; _points[12] = 0.3699633116295960421155194058685667208394969678912820529754722640634305779213746039692319126702381657; _weight[12] = 0.1012075935153092149363516552173900812119855087993622184426068461562271888887057964368860900909478014; _points[13] = 0.5777053426924297421595910124818973041782061237726561210360459286147423731763712353309088285755771095; _weight[13] = 0.1034879801247768777395136608932904389620559700843852088264115370008206803210070375686989446492003508; _points[14] = 0.4732621386601269679462730551871170046239072876000558123399375608157163368239998071928159261631498453; _weight[14] = 0.1046343040738472907154448951529315089864212898285030821173039702063818079329353696896251413221774439; break; // order 29,30 case 29 : case 30 : delivered_order = 30; _points.resize(16); _weight.resize(16); _points[0] = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005479717559511785356037513346100187864311860156749039074665184562002349132558225640280695361501975654; _weight[0] = 0.003906249999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _points[1] = 0.9943593110274882902424935334205557990339158930118688520320216648617818584242636359510843027964103301; _weight[1] = 0.01444856950840716424575961150167959664768321485447374308786815965237503412236544031701308852051345129; _points[2] = 0.01426945473682577473409936694087075789551933760203186036325030954651888956599628056591711400813026015; _weight[2] = 0.02385111347384286023258796121105761215940712748373347733951249612012262824249209179131707229548989037; _points[3] = 0.9705177013520575133683590152819962908129903869683392223983870064790167903034053568486267341100344935; _weight[3] = 0.0330947543050682173723367824140129988109765140797056057089486775834419651379958009126595489547599592; _points[4] = 0.04729959009416668566195579247573790649444100617985074008802534665652951429767415480867610494865748146; _weight[4] = 0.04199264072248258900350601284912850274175530373827143449384382997141429563265696715138196207857827561; _points[5] = 0.9285870468848411599452160982532650808781270976577256432156829861889351099405380495381492676393374186; _weight[5] = 0.05049783981089195436218504141066416942898549189111011390903678585931367460678472505588559551870946612; _points[6] = 0.09771329932062197336876149533799091973451231441505312828394887199823910603835287454339017423348361128; _weight[6] = 0.05851017655193002851526082850951591652992414137147165348431935555746818051798695168136190985636111654; _points[7] = 0.8701689744464089440287454619057100876822769215286084547311072008596702756828385045903159139024205357; _weight[7] = 0.06596284996653406672246151063058849160747151189927306232812579118709032621265417948009199088684731203; _points[8] = 0.1635690393943898760244409143458168033855949483720078662210225769787010095148705137084095993368174563; _weight[8] = 0.07277777261010112143531914999678279515995507797472250238664229606324038347926030123455318661603847499; _points[9] = 0.7975072449498959524317800116797695573970854161142183816901802286406130127161712094362254868592345368; _weight[9] = 0.07889346090210101014257961013735628556027751692815831358281184285722704118272376932178081897027333611; _points[10] = 0.2423352609686572880029257222597146820593113812409063518254618742048074468087699354179079370191486055; _weight[10] = 0.08424819892496124501819105207923275942561890638984801295494652596992252939263197128583747944314191086; _points[11] = 0.7133939137424729400159739545156035875368164816717741252722827402235235856326626073451638972112504038; _weight[11] = 0.0887923963763697559481752588801875527471665581288797954926123946185668633418713757400843776997412092; _points[12] = 0.3309848049700401234613043609468604348754672020142472763579249855944450800334866947086959686179464198; _weight[12] = 0.09248089074433267978323239376056093439894591473240448144120626047437788156837996046854633882875631641; _points[13] = 0.6210613113530219618934709908572261485745472556669887099875179336024807875463320325286487031409688204; _weight[13] = 0.09527914712767754441311796762044089051519985174582994892126109353070075332923324694354921353229351015; _points[14] = 0.4261108390933141193285461447624735606660073732125682857503471734338354175189815310094521824810589853; _weight[14] = 0.09715954485578392167168809787195218347038559646446468604327985098793468776901949385191763241792479535; _points[15] = 0.5240576915367651394274110079841503184572579520857465856538068426663859869433985544832075814370361246; _weight[15] = 0.09810439411951584113359872112683931079624727231765316882558463956680375546394372476401978438057097569; break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } // for non-fundamental types: assign numbers as strings template void GaussRadauLeftQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { case 0 : delivered_order = 0; _points.resize(1); _weight.resize(1); _points[0] = ct("0.0"); _weight[0] = ct("1.0"); break; // order 1,2 case 1 : case 2 : delivered_order = 2; _points.resize(2); _weight.resize(2); _points[0] = ct("0.0"); _weight[0] = ct("0.25"); _points[1] = ct("0.6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"); _weight[1] = ct("0.75"); break; // order 3,4 case 3 : case 4 : delivered_order = 4; _points.resize(3); _weight.resize(3); _points[0] = ct("0.0"); _weight[0] = ct("0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); _points[1] = ct("0.8449489742783178098197284074705891391965947480656670128432692567250960377457315026539859433104640234"); _weight[1] = ct("0.3764030627004672750500754423692807946676125699817591630990918731319177672928523603738927935248711045"); _points[2] = ct("0.3550510257216821901802715925294108608034052519343329871567307432749039622542684973460140566895359765"); _weight[2] = ct("0.5124858261884216138388134465196080942212763189071297257897970157569711215960365285149960953640177843"); break; // order 5,6 case 5 : case 6 : delivered_order = 6; _points.resize(4); _weight.resize(4); _points[0] = ct("0.0"); _weight[0] = ct("0.0625"); _points[1] = ct("0.9114120404872960526044538562305438031142706680772504345688363048300235125731899032747806923838984214"); _weight[1] = ct("0.2204622111767683752754784720371859890529167281230873116876396332191458306523173431813869747371986422"); _points[2] = ct("0.2123405382391529439747581101240003766519199414890261591145475508607692831081746308640139445069166552"); _weight[2] = ct("0.3288443199800597439442892210727968317490234075874455536546030877312606057631737874914764364720579267"); _points[3] = ct("0.5905331355592652891350737479311701059480951047194376920309018585949214900329211801469196488234706375"); _weight[3] = ct("0.388193468843171880780232306890017179198059864289467134657757279049593563584508869327136588790743431"); break; // order 7,8 case 7 : case 8 : delivered_order = 8; _points.resize(5); _weight.resize(5); _points[0] = ct("0.0"); _weight[0] = ct("0.03999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _points[1] = ct("0.9428958038854823178068788074458843787649220544012498356721917070690653217979268354138861831801572631"); _weight[1] = ct("0.1437135607912259413234122198541102271589229617318809184244815352000477933742653045394234927685913557"); _points[2] = ct("0.1397598643437805521520870811248802332616219774127744950757664058160257420698344355865098450735723893"); _weight[2] = ct("0.2231039010835707444025602182285893596530132769666542171491954357318447595238752822393854332837929434"); _points[3] = ct("0.7231569863618761723199540023143748588891108303049695316505579511688786603162919632274584714359488691"); _weight[3] = ct("0.28135601514946206019217265034065989120000299266737412219813168211940937087419012854107836846850562"); _points[4] = ct("0.4164095676310831799433023313370827513065673601032283598237061581682524980381689879943677225325437006"); _weight[4] = ct("0.3118265229757412540818549115766405219880607686340907422281913469486980762276692846801127054791100807"); break; // order 9,10 case 9 : case 10 : delivered_order = 10; _points.resize(6); _weight.resize(6); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002904443936136988704613522974964763885677664394036593149115822206008312261073264473647011675707760947"); _weight[0] = ct("0.02777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"); _points[1] = ct("0.9601901429485312576591933099066668322957373457716148380535922517950352543738256931454977409168154327"); _weight[1] = ct("0.1007941926267404201046003778745677818586739544978990469020905175031896616185019326523859081070179564"); _points[2] = ct("0.09853508579882642612349889788775269038051356954828979943626418694343487404001393811382476449539206683"); _weight[2] = ct("0.15982037661025548327288999189811797479611146812876839180378402272111432088446591677960283187954084"); _points[3] = ct("0.8019865821263918274642078632047037639618136411662111207916708231727912882713534973402270785858446056"); _weight[3] = ct("0.2084506671559538694797031913713231216677075046880940122344846434185750632010718140854202072910519794"); _points[4] = ct("0.3045357266463639054853851762788328386059984450013516409148027388674711861631761331260749534539964475"); _weight[4] = ct("0.2426935942344849580799139577934448339939675840621020934694189186061539713876707499244320986309746931"); _points[5] = ct("0.5620251897526138559949874799947711474832097257852598735309427264939946698789034655471027352752241744"); _weight[5] = ct("0.2604633915947874912851147032847685099057617108453586778124441199731892051305118087803811763136367531"); break; // order 11,12 case 11 : case 12 : delivered_order = 12; _points.resize(7); _weight.resize(7); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007745183829698636545636061266572703695140438384097581730975525882688832696195371929725364468554029193"); _weight[0] = ct("0.02040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612"); _points[1] = ct("0.9706835728402151080279497230868350896262696074362850722130893160550639617583342212513690516348156304"); _weight[1] = ct("0.07449423555601031793324878020916692097532644942393942434007237049841313043955906688474729498373429045"); _points[2] = ct("0.07305432868025888514812603418031798894382758045771674727553292034335479754747175618566051998641260845"); _weight[2] = ct("0.1196137446126562028935387403847763008302627238892853476612432820588170328039983753965707678098696572"); _points[3] = ct("0.8519214003315157081500231475040207877697512251914055385874053581984016139091216781936306023382524239"); _weight[3] = ct("0.1591021157336507408724352172349341821081630163278709547082536480846529383453687327524900611444633129"); _points[4] = ct("0.2307661379699454990831166398843545481628578566777045838330518303634518694260467143147997884572256323"); _weight[4] = ct("0.1904749368221155769029691739380627618671473914712524715596097410083045379273763891870770560020639449"); _points[5] = ct("0.6630153097188457009029470279192242948024312499715266528774370319263086494872159391475908588263455174"); _weight[5] = ct("0.2123518895029778041991540195751041223560385606946763943251267338610614147090378494828338349159860945"); _points[6] = ct("0.441328481228449867918606658194478059925631711034592174444252773882649877102578921676179947987717418"); _weight[6] = ct("0.2235549145072832347496744768212210179855108377848121420995717755091591090399657087452605769806173937"); break; // order 13,14 case 13 : case 14 : delivered_order = 14; _points.resize(8); _weight.resize(8); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002904443936136988704613522974964763885677664394036593149115822206008312261073264473647011675707760947"); _weight[0] = ct("0.015625"); _points[1] = ct("0.9775206135612875018911745004291549400778260927643996101407157239412414242418781198561934406230013095"); _weight[1] = ct("0.05725440737212859967117686425977936825057099397716932914168114853242340872092305631760230041130854427"); _points[2] = ct("0.05626256053692214646565219103231117577976551474462308357244279169739421434833830334809817873295303859"); _weight[2] = ct("0.092679077401489639270364486349647736830932563674935858313467408965379128989721699937903158856790959"); _points[3] = ct("0.8853209468390957680903597629324853729222701754680280546110102650484316601686228018917616112512735336"); _weight[3] = ct("0.1248239506649324816289346467565124312159878101369501620465085111501266363843363392424861677155123433"); _points[4] = ct("0.1802406917368923649875799428091817845420606208054701553226255552798179881679575210257100429476812829"); _weight[4] = ct("0.1520653103233925644878716457001354421902137069080648805811724927448463625325070164171434664138434795"); _points[5] = ct("0.7342101772154105315232106083066100025630031185943901059793203132469449813827574545335273993579018924"); _weight[5] = ct("0.1735073978172506401143379592110741293229628009936786196599092457283690261775051724258224098007456587"); _points[6] = ct("0.3526247171131696373739077701712412028080218830572747823992093386338329349089188367412000944987530987"); _weight[6] = ct("0.188258772694559278286064630720786335118640532533949995543333201250716465965606978691283022057567494"); _points[7] = ct("0.5471536263305553830014485576523488546403859278991475413080093454856701301148602959368425659217691773"); _weight[7] = ct("0.1957860837262467965412497670020645570706915917752511547139279916281389712293997369677594747442315208"); break; // order 15,16 case 15 : case 16 : delivered_order = 16; _points.resize(9); _weight.resize(9); _points[0] = ct("0.0"); _weight[0] = ct("0.01234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901"); _points[1] = ct("0.982220084852636548186794898962320938733511601761499566334392168321240752424216993402735723249677561"); _weight[1] = ct("0.04535725246164145850644674920795090340044910382256608423236014041761080705247011291369808019791001464"); _points[2] = ct("0.0446339552899698507331210218583077615235771330099676095516167511431071451132089417478769694427720403"); _weight[2] = ct("0.07382700952315769290979424990076684192644119748373204166495034257132170235826067178423603914263698819"); _points[3] = ct("0.9086763921002060439962585419254586468929595242554323312331298273652046995208401247646196210786180932"); _weight[3] = ct("0.1002766490122759787105825452084585374837100645139951717640162083073491273282749948425325106489951269"); _points[4] = ct("0.1443662570421455714852185202282149697135218394604248395904329066503718245154436216327021789030911811"); _weight[4] = ct("0.1235946891022965261806198974844998620884284109101835335540040960997860637405727093530324964819711671"); _points[5] = ct("0.7856915206043692416424587324183296773255702824775234091862673808591419017359106772087095035558392945"); _weight[5] = ct("0.1431933481786155855733528188760054645853142508187793084336149756313973598558725153845647136386781611"); _points[6] = ct("0.2868247571444305189486862397490926585531162090545734410269295070347862040652774612810232153945976245"); _weight[6] = ct("0.1584218878352189891690004248211828904282803901135082813370203191442722409397377362074389726296125592"); _points[7] = ct("0.6280678354167276975691460395173707553318999366225193221323614587502696491405131872248705142273454069"); _weight[7] = ct("0.1688469834879647929018621198957803825501226794932222463313217885924663693432674422816562201729896321"); _points[8] = ct("0.4548133151965733509677277700467869448670199439462947750625170586994072352492948750904034506186470334"); _weight[8] = ct("0.1741365013864832970359955155930094385249082238316676536703664502234506503691981382204952880748606714"); break; // order 17,18 case 17 : case 18 : delivered_order = 18; _points.resize(10); _weight.resize(10); _points[0] = ct("0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004647110297819181927381636759943622217084263030458549038585315529613299617717223157835218681132417516"); _weight[0] = ct("0.009999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _points[1] = ct("0.9855875903511234513671732591891867605882552689434219139292493208718611241653995510560493069627278988"); _weight[1] = ct("0.03680850274337924946552564703952257250633407560110190885784111690017778477215458793270183849421941181"); _points[2] = ct("0.03625781288320946094116430076808145207587112284186378615204960856440268445424725950892430803303695375"); _weight[2] = ct("0.06014833527874081575865526135099759590938724369183571272716692583091329962913008482323531114050148899"); _points[3] = ct("0.9256126102908039553640818140440014149190230867152648015732003972549800762097657190320875705450169663"); _weight[3] = ct("0.08218800636846073785084083445387855020451656194507156599834064798783462171005161946359655246906025996"); _points[4] = ct("0.1180789787899987001922851119947352236928794145512961380870233486716910894342914014436902135496614535"); _weight[4] = ct("0.1021350659395003377778943361115165106736257210286962005068043553499340322306121690246726114965883931"); _points[5] = ct("0.8238833438370047181368242539274314135886139520306941260653516628281521076851947966928410833783966496"); _weight[5] = ct("0.1195967158571898566882859830801363758258364741540254585528364764210946139183141897137094066862003184"); _points[6] = ct("0.2371769848149603853173066928532744670764888172962619220088994091653832785191521320229569635701171547"); _weight[6] = ct("0.1340974189205893480292772376310295553451252092166458466844053839661648602000224960759896073212453487"); _points[7] = ct("0.6903324200723621829403795327705159511836109155028740754264075614582089368761546507541276227740725424"); _weight[7] = ct("0.1453050824164591555734315389815310253381621189272259396591735666935382783811527201352568817760678677"); _points[8] = ct("0.3818827653047059753607702483964955197193325953602086524939606944414221222571517883134253635138762796"); _weight[8] = ct("0.1529296438622113105081377377003979801780786241826203904279240012042738305695686747214466554361694378"); _points[9] = ct("0.5380295989189890651168568913194356918927669320212724790007001020070564751354848064390554624099362061"); _weight[9] = ct("0.1567912286134691883479514236509898340189339712527769765855075256460686785889934581093911351799474732"); break; // order 19,20 case 19 : case 20 : delivered_order = 20; _points.resize(11); _weight.resize(11); _points[0] = ct("0.0"); _weight[0] = ct("0.008264462809917355371900826446280991735537190082644628099173553719008264462809917355371900826446280991"); _points[1] = ct("0.988082386567584403090254413041014023969972152741625141979724006955586480282060464479065044623011125"); _weight[1] = ct("0.03046254890606556735360916344416515441920593612889634378768602325986918684909318284948512089071412454"); _points[2] = ct("0.03002903216148649704306435763440794069465484353742079153109599483012027857151955489540349737972766236"); _weight[2] = ct("0.04992304095398403194787673479012341784951435295822716798886200345394064771188529448902933415752225152"); _points[3] = ct("0.9382679281228518744773706328057498585471279196380978678152992024969945773221744501139764469102888345"); _weight[3] = ct("0.06851684106660112815507694029022108631584560319435756477685101885640953683767976717173664864587875312"); _points[4] = ct("0.09828901220985322965120102159023201853188232392706395246734326269440241414786137920675831210414931387"); _weight[4] = ct("0.08565880960332991824335632452114911543009060544673768448218195768393830581589904069386788764433631681"); _points[5] = ct("0.8528885503569297595724005644201804978662286380940702194287132906740209399339138553299454744945661568"); _weight[5] = ct("0.1010815542700122091749658771329642516494277755940245416341823725777740925226297436637027602819852004"); _points[6] = ct("0.1990210789631011548620536983827574753269977377400846616882581446047631433554426401296405366408468264"); _weight[6] = ct("0.1144330619244883122008416155631972831221456389832920628771016872588315039886167750369068708206089062"); _points[7] = ct("0.7388403239915437597339483419451542768013642838620432746964478689064990027375417996262675556594376508"); _weight[7] = ct("0.12546268884856419732457013381672775718613069695897309262354779249129469297632546407602624370590123"); _points[8] = ct("0.3240555383233348926428494910652385284960047237704642544860587698373743421209691377704544481199982942"); _weight[8] = ct("0.1339335430948420889033190816775717752086008360038592987740894422858598943031122752005614670488956897"); _points[9] = ct("0.6053601531142131570380478949223924977850608463510158023053388436121170679083816014767543736971187973"); _weight[9] = ct("0.1396806665516915225944810978601028731857924475265701484072617959266351875863206717620061077170286754"); _points[10] = ct("0.4632612342843393671269048222881109772188017684333521288398158534833598488582303550669724056089505765"); _weight[10] = ct("0.142582781970503668730002204457496293897708917122417466549062352486438686945627867701305658260682571"); break; // order 21,22 case 21 : case 22 : delivered_order = 22; _points.resize(12); _weight.resize(12); _points[0] = ct("0.0"); _weight[0] = ct("0.006944444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"); _points[1] = ct("0.989981719538319594156975270132195215185208059483783761337830876297223142538554851051885253094427821"); _weight[1] = ct("0.02562404960363464873401147256755191359698912179586886783614733167396359699140406477146628165245745726"); _points[2] = ct("0.02527362039752034975333118646162910191546318234451419946737982100782123486413153541445864844884682208"); _weight[2] = ct("0.04208606746934048812078982684064078598356207668454606077811004135971778814182424352552804186759516359"); _points[3] = ct("0.9479645488728194474164573042270356775528140749416181644444711806566967214871910443747161670323384541"); _weight[3] = ct("0.05795374014586919637517095413584668388777153128408424542984574266464927148200496692165819750039770507"); _points[4] = ct("0.08304161344740514670686537298197258224799489043700742864789645601375671679018635847006293053875439026"); _weight[4] = ct("0.07278183442699756426127382735286559431255511311081887313664967558148928208419907103707790861347367931"); _points[5] = ct("0.8753807748555569262647004127360907707525558699119941437528128079837703940650480909233478784024579154"); _weight[5] = ct("0.08638531965665428215303288348279335482371411193381952188479961232975350369852446186555482138789619392"); _points[6] = ct("0.1691751003771814259694334560943432960560106956817856499813320666127921816819385788328203455244042225"); _weight[6] = ct("0.09849926741304481732802481898451691715880480601630014213517520121230333584098958189070626683477635742"); _points[7] = ct("0.7771593929561621444921685465426372355882747496725702918356361826383937691630167983849414146483995146"); _weight[7] = ct("0.1089344395130962194243737410114312720559919702231833101252380994924976153392527006073200151967269551"); _points[8] = ct("0.2777967151090320744366786921953890928627635544874086055440220181219102315933254697424818285109646655"); _weight[8] = ct("0.1175015575724929196743169929697715883009119236048689568907922000277105361992896721300643435454773039"); _points[9] = ct("0.659991842085334811766394766102982472268670660179149419652906526261715790387928769066606410356866858"); _weight[9] = ct("0.1240607804020049797015365535394355200719995254498010043949067360502230324581192591300795635289312217"); _points[10] = ct("0.401502720232860816772279286326956409725081247802388848866048868530464346904528768969408858744606104"); _weight[10] = ct("0.1284956690763538880639871267992001336436691476013189170108039583312533699461672093381787487185684594"); _points[11] = ct("0.5318623869104159579168896192422464067147282324490838342957501523971946009589323434649224386109767104"); _weight[11] = ct("0.1307328302760665517190373578715017917195862278509456559330869568319942233737803243379213667092550587"); break; // order 23,24 case 23 : case 24 : delivered_order = 24; _points.resize(13); _weight.resize(13); _points[0] = ct("0.0"); _weight[0] = ct("0.005917159763313609467455621301775147928994082840236686390532544378698224852071005917159763313609467455"); _points[1] = ct("0.9914609450115725806313355391221601971939095854334222535037420726987696354242378332024901570386923708"); _weight[1] = ct("0.02185145163395103741442669230253126228354537862132045649291743515926153592140670516392700801272894985"); _points[2] = ct("0.02156206316585036090809308308300396163193087033237463382010693450956786493785754057828948353107650017"); _weight[2] = ct("0.03595120814624776446987687028207407841501895536660169592463294449355425288370779064245312669926985388"); _points[3] = ct("0.9555535368445922769745332012144472337586906962110028900086035795656397136033835220419601208036469249"); _weight[3] = ct("0.04963390344092354299236819387388759872276531452267544246797332700574719345537345645571951255905295405"); _points[4] = ct("0.07105789873558898215118984486568470014950675852301765289624007061007562590735710859702939041980089356"); _weight[4] = ct("0.06255191716557617906688464398784008656184274649282227400711808747510050471677954744690856656060123432"); _points[5] = ct("0.8931455091165233423658932295675007374102001856304999724419368874377163856594813185372360302206494126"); _weight[5] = ct("0.07457547504500010257574593212085472848830959655207242548776306668431488289996654073064815660600252619"); _points[6] = ct("0.1454474562350641192097880835943828715140404962604416130384782853000148383526977847419860132619172941"); _weight[6] = ct("0.08550173023530832123187933725608529010988327742650916870829611194441770373681670809118932944409747882"); _points[7] = ct("0.8078489454701459590089427437713866696172986329784781339626035117036631132615997966722531487360379653"); _weight[7] = ct("0.09518685777981586612737991037293691958788184471208789194562638680044365745312132402614513871070282189"); _points[8] = ct("0.2404011104747729462573974259565796580577935649114620735689777213576880026087471077503722272450185674"); _weight[8] = ct("0.1034803057279385373155662804144384374750427276214146948478010879630533907564801063538733440312738658"); _points[9] = ct("0.704619115737419778377083165623985094060109286689147891948541911948590244816709519376876901230363183"); _weight[9] = ct("0.1102671146442257323455385820995765357020738630479430106311100293991178535583726917255962453649948882"); _points[10] = ct("0.3503993497227450072337082766570194277743468817226962651442804103514355751401337999111439270543466699"); _weight[10] = ct("0.1154444314434977170061018793339061362073895171982322864758099735381130891596922281273366371689249657"); _points[11] = ct("0.5894549187985423175109656494406675881566813048090818245014434041890480317232773850262626782782335785"); _weight[11] = ct("0.1189392738303560156713425945898368420344422709752939545408915255899383006020911343567290538236643372"); _points[12] = ct("0.4690491506871823293710697571031818606754917364983747951650452103277909685645172835640999221802166392"); _weight[12] = ct("0.1206991711438455743154334620642569364828104246227900120795274795682394100041207609623141177050766563"); break; // order 25,26 case 25 : case 26 : delivered_order = 26; _points.resize(14); _weight.resize(14); _points[0] = ct("0.0"); _weight[0] = ct("0.00510204081632653061224489795918367346938775510204081632653061224489795918367346938775510204081632653"); _points[1] = ct("0.9926353489739106783493085015861776563887942843835539995793105835477302499661054490025836808715547063"); _weight[1] = ct("0.01885358163494845713873136414594165020975759392510590592315060034299193800069304020789391250755439251"); _points[2] = ct("0.01861036501098785143971937784028768844731989720919976200449028134444641611193796918522105104544966762"); _weight[2] = ct("0.03106100845388573008306645823341460455969559499141094108084012625707654955896377969536296135374710094"); _points[3] = ct("0.9616018612603216496231674751358583140821701658636453123875839882017572193085974102596500086533790577"); _weight[3] = ct("0.04297026772149020154465386554328283974483688526109607883477417143735728532178658495401673766981052349"); _points[4] = ct("0.06147554089926898760236661323470064826601469379371128736454911262787526257519781678731859529345190475"); _weight[4] = ct("0.05430386137218141341336046761449170556749717283973110242510925951515177257930583451532790775304492282"); _points[5] = ct("0.907404775300997364717108624561383644110720141345707073676334067647180789268631504575939099602402819"); _weight[5] = ct("0.06496983436867117390371286857296886542757042851651763549881540867872262529279047866030734246306485196"); _points[6] = ct("0.1263051786933105806322854328682561088266184650796652405553038384524855945271314581468883265977601376"); _weight[6] = ct("0.07481026967656067797526041847298687382328381103405386550842777879482025911405057274802766818691774256"); _points[7] = ct("0.8327489886084422685044775212406428836252662912609022104165030737675518600067382640219022510167169201"); _weight[7] = ct("0.08371486394554313949505113851903285254546037528256798216114894580640831517395702564992236389997285344"); _points[8] = ct("0.2098429717265625144471366675006240677295733863863000682865650028219473094668441359420634556129970228"); _weight[8] = ct("0.0915635010628648270619336510514316864439809227594628152951066579840052366089190074610930288816591208"); _points[9] = ct("0.7413764592942374834102092671773089974754698626082298883428408231757040278651279725026256944884884611"); _weight[9] = ct("0.09826275922649121516230654596477485524374871885835884725402164208061259270491076568978920429932178543"); _points[10] = ct("0.3078989982803983431029580483123302698191088991281347122618493925443269136581261580203722085588643097"); _weight[10] = ct("0.1037248816675878363340414432447055349260953854618612465467764711248264947647953780386198366283149413"); _points[11] = ct("0.6378686027177611995913187017726784411364995511772176333048372109232234314635133853892353518843386822"); _weight[11] = ct("0.1078835503023094256905937230574369840724121681977091473649374022846524089107794784879188404811405312"); _points[12] = ct("0.4155560359786595444957791521890892937047338381892111916976340162321515955161435570436286929170990484"); _weight[12] = ct("0.1106849057497854744658358415102718135678259837364580620549598005910175475300839492981459854834952701"); _points[13] = ct("0.5274156139958822748249053573214027271284512643152623608629393494543600710066456598633123241982380029"); _weight[13] = ct("0.1120946740013538971192073161100760603984472040336255537254011228574590152552906352058191083511396366"); break; // order 27,28 case 27 : case 28 : delivered_order = 28; _points.resize(15); _weight.resize(15); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001738793769767343904495295754345571979559028417229907098604005560663642940295860998223344323190379554"); _weight[0] = ct("0.004444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"); _points[1] = ct("0.9935832392071815431891795359054928211342801600877551156927612300672664543862947608443448780958123031"); _weight[1] = ct("0.01643219579229676612652142641153073057741290693423739200638154484999854248273452294729310561302604524"); _points[2] = ct("0.01622476590139976171877199085899914319709390816531859734586175987707687606413367759488759606181782854"); _weight[2] = ct("0.02710139002432224716910711840089438470564976679454870725896584731580262535409379031752562837870266878"); _points[3] = ct("0.9664985954679868599640360714294275183896092307471576329276780766789933861508405059308741382033136873"); _weight[3] = ct("0.03755419638025321986648583269569141758805153698961255144076732637991919601646605173770385110166578307"); _points[4] = ct("0.05369729993972461646659405657527595508774248615448350245208116515943580662324999237841443862523323363"); _weight[4] = ct("0.04756479973024044960192386331729517468694216465472046057613808264784485886335468527107776368357517029"); _points[5] = ct("0.9190145003180448156075486922600178127723348524133450049217006087220298280346817491821251334462922047"); _weight[5] = ct("0.0570676017448763765065377912843275486532773680936293313767427911822960640342192529908062097810219568"); _points[6] = ct("0.1106571911804844603091283390535104352962371370946732400854945517624619434315473724165586916213335371"); _weight[6] = ct("0.0659377312524758160931310789717671834328714396438875129556617113002714624562014461183427180565642943"); _points[7] = ct("0.8531951323187862700763398347392008484400305345720243772819514486686862944412743714542539449832626435"); _weight[7] = ct("0.07408976350173362696234102937128255487413805694748258883130522716337536508449919660779818071285032187"); _points[8] = ct("0.184610260556525358026925781387942485290986594488488348550043578240036759408723301454537843222707428"); _weight[8] = ct("0.08142723865191631472436612291392116582120502240478308220490604700601857925394464346640601462002559893"); _points[9] = ct("0.7719157293507420084653559013800570280584222751679494821663909853829601496219459319624363715810794585"); _weight[9] = ct("0.08787443632122384283515522023795954919820258839409278348995177107324231289791167390445951868050365719"); _points[10] = ct("0.2723235471107353145639732720096683033834398314753513399125190504034543468895320600690705980999378579"); _weight[10] = ct("0.0933575729197254540418975518996095015505528049870462214693890052089200962043726360505074761465047243"); _points[11] = ct("0.6787282560110638255976596025869645503426953689901490274844755846471571428880995957367810779605895242"); _weight[11] = ct("0.09781875152255805823677830878766431530678913099926441455902384806443677576510945244842491271878973857"); _points[12] = ct("0.3699633116295960421155194058685667208394969678912820529754722640634305779213746039692319126702381657"); _weight[12] = ct("0.1012075935153092149363516552173900812119855087993622184426068461562271888887057964368860900909478014"); _points[13] = ct("0.5777053426924297421595910124818973041782061237726561210360459286147423731763712353309088285755771095"); _weight[13] = ct("0.1034879801247768777395136608932904389620559700843852088264115370008206803210070375686989446492003508"); _points[14] = ct("0.4732621386601269679462730551871170046239072876000558123399375608157163368239998071928159261631498453"); _weight[14] = ct("0.1046343040738472907154448951529315089864212898285030821173039702063818079329353696896251413221774439"); break; // order 29,30 case 29 : case 30 : delivered_order = 30; _points.resize(16); _weight.resize(16); _points[0] = ct("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005479717559511785356037513346100187864311860156749039074665184562002349132558225640280695361501975654"); _weight[0] = ct("0.003906249999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _points[1] = ct("0.9943593110274882902424935334205557990339158930118688520320216648617818584242636359510843027964103301"); _weight[1] = ct("0.01444856950840716424575961150167959664768321485447374308786815965237503412236544031701308852051345129"); _points[2] = ct("0.01426945473682577473409936694087075789551933760203186036325030954651888956599628056591711400813026015"); _weight[2] = ct("0.02385111347384286023258796121105761215940712748373347733951249612012262824249209179131707229548989037"); _points[3] = ct("0.9705177013520575133683590152819962908129903869683392223983870064790167903034053568486267341100344935"); _weight[3] = ct("0.0330947543050682173723367824140129988109765140797056057089486775834419651379958009126595489547599592"); _points[4] = ct("0.04729959009416668566195579247573790649444100617985074008802534665652951429767415480867610494865748146"); _weight[4] = ct("0.04199264072248258900350601284912850274175530373827143449384382997141429563265696715138196207857827561"); _points[5] = ct("0.9285870468848411599452160982532650808781270976577256432156829861889351099405380495381492676393374186"); _weight[5] = ct("0.05049783981089195436218504141066416942898549189111011390903678585931367460678472505588559551870946612"); _points[6] = ct("0.09771329932062197336876149533799091973451231441505312828394887199823910603835287454339017423348361128"); _weight[6] = ct("0.05851017655193002851526082850951591652992414137147165348431935555746818051798695168136190985636111654"); _points[7] = ct("0.8701689744464089440287454619057100876822769215286084547311072008596702756828385045903159139024205357"); _weight[7] = ct("0.06596284996653406672246151063058849160747151189927306232812579118709032621265417948009199088684731203"); _points[8] = ct("0.1635690393943898760244409143458168033855949483720078662210225769787010095148705137084095993368174563"); _weight[8] = ct("0.07277777261010112143531914999678279515995507797472250238664229606324038347926030123455318661603847499"); _points[9] = ct("0.7975072449498959524317800116797695573970854161142183816901802286406130127161712094362254868592345368"); _weight[9] = ct("0.07889346090210101014257961013735628556027751692815831358281184285722704118272376932178081897027333611"); _points[10] = ct("0.2423352609686572880029257222597146820593113812409063518254618742048074468087699354179079370191486055"); _weight[10] = ct("0.08424819892496124501819105207923275942561890638984801295494652596992252939263197128583747944314191086"); _points[11] = ct("0.7133939137424729400159739545156035875368164816717741252722827402235235856326626073451638972112504038"); _weight[11] = ct("0.0887923963763697559481752588801875527471665581288797954926123946185668633418713757400843776997412092"); _points[12] = ct("0.3309848049700401234613043609468604348754672020142472763579249855944450800334866947086959686179464198"); _weight[12] = ct("0.09248089074433267978323239376056093439894591473240448144120626047437788156837996046854633882875631641"); _points[13] = ct("0.6210613113530219618934709908572261485745472556669887099875179336024807875463320325286487031409688204"); _weight[13] = ct("0.09527914712767754441311796762044089051519985174582994892126109353070075332923324694354921353229351015"); _points[14] = ct("0.4261108390933141193285461447624735606660073732125682857503471734338354175189815310094521824810589853"); _weight[14] = ct("0.09715954485578392167168809787195218347038559646446468604327985098793468776901949385191763241792479535"); _points[15] = ct("0.5240576915367651394274110079841503184572579520857465856538068426663859869433985544832075814370361246"); _weight[15] = ct("0.09810439411951584113359872112683931079624727231765316882558463956680375546394372476401978438057097569"); break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } template GaussRadauLeftQuadratureRule::GaussRadauLeftQuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; GaussRadauLeftQuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_GaussRadauLeft_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/gaussradaurightquadrature.hh000066400000000000000000002172721411346603000301500ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by gaussradau.mac! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_GaussRadauRight_HH #define DUNE_GEOMETRY_QUADRATURE_GaussRadauRight_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class GaussRadauRightQuadratureRule; template using GaussRadauRightQuadratureRule1D = GaussRadauRightQuadratureRule; template class GaussRadauRightQuadratureRule : public QuadratureRule { public: /** brief The highest quadrature order available */ enum { highest_order=30 }; private: friend class QuadratureRuleFactory; GaussRadauRightQuadratureRule (int p); ~GaussRadauRightQuadratureRule(){} }; //! internal Helper template for the initialization of the quadrature rules template::value> struct GaussRadauRightQuadratureInitHelper; template struct GaussRadauRightQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct GaussRadauRightQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void GaussRadauRightQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { case 0 : delivered_order = 0; _points.resize(1); _weight.resize(1); _points[0] = 1.0; _weight[0] = 1.0; break; // order 1,2 case 1 : case 2 : delivered_order = 2; _points.resize(2); _weight.resize(2); _points[0] = 1.0; _weight[0] = 0.25; _points[1] = 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; _weight[1] = 0.75; break; // order 3,4 case 3 : case 4 : delivered_order = 4; _points.resize(3); _weight.resize(3); _points[0] = 1.0; _weight[0] = 0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; _points[1] = 0.1550510257216821901802715925294108608034052519343329871567307432749039622542684973460140566895359765; _weight[1] = 0.3764030627004672750500754423692807946676125699817591630990918731319177672928523603738927935248711045; _points[2] = 0.6449489742783178098197284074705891391965947480656670128432692567250960377457315026539859433104640234; _weight[2] = 0.5124858261884216138388134465196080942212763189071297257897970157569711215960365285149960953640177843; break; // order 5,6 case 5 : case 6 : delivered_order = 6; _points.resize(4); _weight.resize(4); _points[0] = 1.0; _weight[0] = 0.0625; _points[1] = 0.08858795951270394739554614376945619688572933192274956543116369516997648742681009672521930761610157857; _weight[1] = 0.2204622111767683752754784720371859890529167281230873116876396332191458306523173431813869747371986422; _points[2] = 0.7876594617608470560252418898759996233480800585109738408854524491392307168918253691359860554930833447; _weight[2] = 0.3288443199800597439442892210727968317490234075874455536546030877312606057631737874914764364720579267; _points[3] = 0.4094668644407347108649262520688298940519048952805623079690981414050785099670788198530803511765293624; _weight[3] = 0.388193468843171880780232306890017179198059864289467134657757279049593563584508869327136588790743431; break; // order 7,8 case 7 : case 8 : delivered_order = 8; _points.resize(5); _weight.resize(5); _points[0] = 1.0; _weight[0] = 0.03999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _points[1] = 0.05710419611451768219312119255411562123507794559875016432780829293093467820207316458611381681984273686; _weight[1] = 0.1437135607912259413234122198541102271589229617318809184244815352000477933742653045394234927685913557; _points[2] = 0.8602401356562194478479129188751197667383780225872255049242335941839742579301655644134901549264276106; _weight[2] = 0.2231039010835707444025602182285893596530132769666542171491954357318447595238752822393854332837929434; _points[3] = 0.2768430136381238276800459976856251411108891696950304683494420488311213396837080367725415285640511308; _weight[3] = 0.28135601514946206019217265034065989120000299266737412219813168211940937087419012854107836846850562; _points[4] = 0.5835904323689168200566976686629172486934326398967716401762938418317475019618310120056322774674562993; _weight[4] = 0.3118265229757412540818549115766405219880607686340907422281913469486980762276692846801127054791100807; break; // order 9,10 case 9 : case 10 : delivered_order = 10; _points.resize(6); _weight.resize(6); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.02777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777; _points[1] = 0.03980985705146874234080669009333316770426265422838516194640774820496474562617430685450225908318456723; _weight[1] = 0.1007941926267404201046003778745677818586739544978990469020905175031896616185019326523859081070179564; _points[2] = 0.9014649142011735738765011021122473096194864304517102005637358130565651259599860618861752355046079331; _weight[2] = 0.15982037661025548327288999189811797479611146812876839180378402272111432088446591677960283187954084; _points[3] = 0.1980134178736081725357921367952962360381863588337888792083291768272087117286465026597729214141553943; _weight[3] = 0.2084506671559538694797031913713231216677075046880940122344846434185750632010718140854202072910519794; _points[4] = 0.6954642733536360945146148237211671613940015549986483590851972611325288138368238668739250465460035524; _weight[4] = 0.2426935942344849580799139577934448339939675840621020934694189186061539713876707499244320986309746931; _points[5] = 0.4379748102473861440050125200052288525167902742147401264690572735060053301210965344528972647247758255; _weight[5] = 0.2604633915947874912851147032847685099057617108453586778124441199731892051305118087803811763136367531; break; // order 11,12 case 11 : case 12 : delivered_order = 12; _points.resize(7); _weight.resize(7); _points[0] = 1.0; _weight[0] = 0.02040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612; _points[1] = 0.0293164271597848919720502769131649103737303925637149277869106839449360382416657787486309483651843695; _weight[1] = 0.07449423555601031793324878020916692097532644942393942434007237049841313043955906688474729498373429045; _points[2] = 0.9269456713197411148518739658196820110561724195422832527244670796566452024525282438143394800135873915; _weight[2] = 0.1196137446126562028935387403847763008302627238892853476612432820588170328039983753965707678098696572; _points[3] = 0.148078599668484291849976852495979212230248774808594461412594641801598386090878321806369397661747576; _weight[3] = 0.1591021157336507408724352172349341821081630163278709547082536480846529383453687327524900611444633129; _points[4] = 0.7692338620300545009168833601156454518371421433222954161669481696365481305739532856852002115427743676; _weight[4] = 0.1904749368221155769029691739380627618671473914712524715596097410083045379273763891870770560020639449; _points[5] = 0.3369846902811542990970529720807757051975687500284733471225629680736913505127840608524091411736544825; _weight[5] = 0.2123518895029778041991540195751041223560385606946763943251267338610614147090378494828338349159860945; _points[6] = 0.5586715187715501320813933418055219400743682889654078255557472261173501228974210783238200520122825819; _weight[6] = 0.2235549145072832347496744768212210179855108377848121420995717755091591090399657087452605769806173937; break; // order 13,14 case 13 : case 14 : delivered_order = 14; _points.resize(8); _weight.resize(8); _points[0] = 1.0; _weight[0] = 0.015625; _points[1] = 0.02247938643871249810882549957084505992217390723560038985928427605875857575812188014380655937699869041; _weight[1] = 0.05725440737212859967117686425977936825057099397716932914168114853242340872092305631760230041130854427; _points[2] = 0.9437374394630778535343478089676888242202344852553769164275572083026057856516616966519018212670469614; _weight[2] = 0.092679077401489639270364486349647736830932563674935858313467408965379128989721699937903158856790959; _points[3] = 0.1146790531609042319096402370675146270777298245319719453889897349515683398313771981082383887487264663; _weight[3] = 0.1248239506649324816289346467565124312159878101369501620465085111501266363843363392424861677155123433; _points[4] = 0.819759308263107635012420057190818215457939379194529844677374444720182011832042478974289957052318717; _weight[4] = 0.1520653103233925644878716457001354421902137069080648805811724927448463625325070164171434664138434795; _points[5] = 0.2657898227845894684767893916933899974369968814056098940206796867530550186172425454664726006420981075; _weight[5] = 0.1735073978172506401143379592110741293229628009936786196599092457283690261775051724258224098007456587; _points[6] = 0.6473752828868303626260922298287587971919781169427252176007906613661670650910811632587999055012469012; _weight[6] = 0.188258772694559278286064630720786335118640532533949995543333201250716465965606978691283022057567494; _points[7] = 0.4528463736694446169985514423476511453596140721008524586919906545143298698851397040631574340782308226; _weight[7] = 0.1957860837262467965412497670020645570706915917752511547139279916281389712293997369677594747442315208; break; // order 15,16 case 15 : case 16 : delivered_order = 16; _points.resize(9); _weight.resize(9); _points[0] = 1.0; _weight[0] = 0.01234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901; _points[1] = 0.01777991514736345181320510103767906126648839823850043366560783167875924757578300659726427675032243894; _weight[1] = 0.04535725246164145850644674920795090340044910382256608423236014041761080705247011291369808019791001464; _points[2] = 0.9553660447100301492668789781416922384764228669900323904483832488568928548867910582521230305572279596; _weight[2] = 0.07382700952315769290979424990076684192644119748373204166495034257132170235826067178423603914263698819; _points[3] = 0.09132360789979395600374145807454135310704047574456766876687017263479530047915987523538037892138190674; _weight[3] = 0.1002766490122759787105825452084585374837100645139951717640162083073491273282749948425325106489951269; _points[4] = 0.8556337429578544285147814797717850302864781605395751604095670933496281754845563783672978210969088188; _weight[4] = 0.1235946891022965261806198974844998620884284109101835335540040960997860637405727093530324964819711671; _points[5] = 0.2143084793956307583575412675816703226744297175224765908137326191408580982640893227912904964441607054; _weight[5] = 0.1431933481786155855733528188760054645853142508187793084336149756313973598558725153845647136386781611; _points[6] = 0.7131752428555694810513137602509073414468837909454265589730704929652137959347225387189767846054023754; _weight[6] = 0.1584218878352189891690004248211828904282803901135082813370203191442722409397377362074389726296125592; _points[7] = 0.371932164583272302430853960482629244668100063377480677867638541249730350859486812775129485772654593; _weight[7] = 0.1688469834879647929018621198957803825501226794932222463313217885924663693432674422816562201729896321; _points[8] = 0.5451866848034266490322722299532130551329800560537052249374829413005927647507051249095965493813529665; _weight[8] = 0.1741365013864832970359955155930094385249082238316676536703664502234506503691981382204952880748606714; break; // order 17,18 case 17 : case 18 : delivered_order = 18; _points.resize(10); _weight.resize(10); _points[0] = 1.0; _weight[0] = 0.01; _points[1] = 0.01441240964887654863282674081081323941174473105657808607075067912813887583460044894395069303727210116; _weight[1] = 0.03680850274337924946552564703952257250633407560110190885784111690017778477215458793270183849421941181; _points[2] = 0.9637421871167905390588356992319185479241288771581362138479503914355973155457527404910756919669630462; _weight[2] = 0.06014833527874081575865526135099759590938724369183571272716692583091329962913008482323531114050148899; _points[3] = 0.07438738970919604463591818595599858508097691328473519842679960274501992379023428096791242945498303363; _weight[3] = 0.08218800636846073785084083445387855020451656194507156599834064798783462171005161946359655246906025996; _points[4] = 0.8819210212100012998077148880052647763071205854487038619129766513283089105657085985563097864503385464; _weight[4] = 0.1021350659395003377778943361115165106736257210286962005068043553499340322306121690246726114965883931; _points[5] = 0.1761166561629952818631757460725685864113860479693058739346483371718478923148052033071589166216033503; _weight[5] = 0.1195967158571898566882859830801363758258364741540254585528364764210946139183141897137094066862003184; _points[6] = 0.7628230151850396146826933071467255329235111827037380779911005908346167214808478679770430364298828452; _weight[6] = 0.1340974189205893480292772376310295553451252092166458466844053839661648602000224960759896073212453487; _points[7] = 0.3096675799276378170596204672294840488163890844971259245735924385417910631238453492458723772259274575; _weight[7] = 0.1453050824164591555734315389815310253381621189272259396591735666935382783811527201352568817760678677; _points[8] = 0.6181172346952940246392297516035044802806674046397913475060393055585778777428482116865746364861237203; _weight[8] = 0.1529296438622113105081377377003979801780786241826203904279240012042738305695686747214466554361694378; _points[9] = 0.4619704010810109348831431086805643081072330679787275209992998979929435248645151935609445375900637938; _weight[9] = 0.1567912286134691883479514236509898340189339712527769765855075256460686785889934581093911351799474732; break; // order 19,20 case 19 : case 20 : delivered_order = 20; _points.resize(11); _weight.resize(11); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.008264462809917355371900826446280991735537190082644628099173553719008264462809917355371900826446280991; _points[1] = 0.01191761343241559690974558695898597603002784725837485802027599304441351971793953552093495537698887495; _weight[1] = 0.03046254890606556735360916344416515441920593612889634378768602325986918684909318284948512089071412454; _points[2] = 0.9699709678385135029569356423655920593053451564625792084689040051698797214284804451045965026202723376; _weight[2] = 0.04992304095398403194787673479012341784951435295822716798886200345394064771188529448902933415752225152; _points[3] = 0.06173207187714812552262936719425014145287208036190213218470079750300542267782554988602355308971116546; _weight[3] = 0.06851684106660112815507694029022108631584560319435756477685101885640953683767976717173664864587875312; _points[4] = 0.9017109877901467703487989784097679814681176760729360475326567373055975858521386207932416878958506861; _weight[4] = 0.08565880960332991824335632452114911543009060544673768448218195768393830581589904069386788764433631681; _points[5] = 0.1471114496430702404275994355798195021337713619059297805712867093259790600660861446700545255054338431; _weight[5] = 0.1010815542700122091749658771329642516494277755940245416341823725777740925226297436637027602819852004; _points[6] = 0.8009789210368988451379463016172425246730022622599153383117418553952368566445573598703594633591531735; _weight[6] = 0.1144330619244883122008416155631972831221456389832920628771016872588315039886167750369068708206089062; _points[7] = 0.2611596760084562402660516580548457231986357161379567253035521310935009972624582003737324443405623491; _weight[7] = 0.12546268884856419732457013381672775718613069695897309262354779249129469297632546407602624370590123; _points[8] = 0.6759444616766651073571505089347614715039952762295357455139412301626256578790308622295455518800017057; _weight[8] = 0.1339335430948420889033190816775717752086008360038592987740894422858598943031122752005614670488956897; _points[9] = 0.3946398468857868429619521050776075022149391536489841976946611563878829320916183985232456263028812026; _weight[9] = 0.1396806665516915225944810978601028731857924475265701484072617959266351875863206717620061077170286754; _points[10] = 0.5367387657156606328730951777118890227811982315666478711601841465166401511417696449330275943910494234; _weight[10] = 0.142582781970503668730002204457496293897708917122417466549062352486438686945627867701305658260682571; break; // order 21,22 case 21 : case 22 : delivered_order = 22; _points.resize(12); _weight.resize(12); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.006944444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444; _points[1] = 0.01001828046168040584302472986780478481479194051621623866216912370277685746144514894811474690557217898; _weight[1] = 0.02562404960363464873401147256755191359698912179586886783614733167396359699140406477146628165245745726; _points[2] = 0.9747263796024796502466688135383708980845368176554858005326201789921787651358684645855413515511531779; _weight[2] = 0.04208606746934048812078982684064078598356207668454606077811004135971778814182424352552804186759516359; _points[3] = 0.05203545112718055258354269577296432244718592505838183555552881934330327851280895562528383296766154587; _weight[3] = 0.05795374014586919637517095413584668388777153128408424542984574266464927148200496692165819750039770507; _points[4] = 0.9169583865525948532931346270180274177520051095629925713521035439862432832098136415299370694612456097; _weight[4] = 0.07278183442699756426127382735286559431255511311081887313664967558148928208419907103707790861347367931; _points[5] = 0.1246192251444430737352995872639092292474441300880058562471871920162296059349519090766521215975420845; _weight[5] = 0.08638531965665428215303288348279335482371411193381952188479961232975350369852446186555482138789619392; _points[6] = 0.8308248996228185740305665439056567039439893043182143500186679333872078183180614211671796544755957774; _weight[6] = 0.09849926741304481732802481898451691715880480601630014213517520121230333584098958189070626683477635742; _points[7] = 0.2228406070438378555078314534573627644117252503274297081643638173616062308369832016150585853516004853; _weight[7] = 0.1089344395130962194243737410114312720559919702231833101252380994924976153392527006073200151967269551; _points[8] = 0.7222032848909679255633213078046109071372364455125913944559779818780897684066745302575181714890353344; _weight[8] = 0.1175015575724929196743169929697715883009119236048689568907922000277105361992896721300643435454773039; _points[9] = 0.3400081579146651882336052338970175277313293398208505803470934737382842096120712309333935896431331419; _weight[9] = 0.1240607804020049797015365535394355200719995254498010043949067360502230324581192591300795635289312217; _points[10] = 0.5984972797671391832277207136730435902749187521976111511339511314695356530954712310305911412553938959; _weight[10] = 0.1284956690763538880639871267992001336436691476013189170108039583312533699461672093381787487185684594; _points[11] = 0.4681376130895840420831103807577535932852717675509161657042498476028053990410676565350775613890232895; _weight[11] = 0.1307328302760665517190373578715017917195862278509456559330869568319942233737803243379213667092550587; break; // order 23,24 case 23 : case 24 : delivered_order = 24; _points.resize(13); _weight.resize(13); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.005917159763313609467455621301775147928994082840236686390532544378698224852071005917159763313609467455; _points[1] = 0.008539054988427419368664460877839802806090414566577746496257927301230364575762166797509842961307629102; _weight[1] = 0.02185145163395103741442669230253126228354537862132045649291743515926153592140670516392700801272894985; _points[2] = 0.9784379368341496390919069169169960383680691296676253661798930654904321350621424594217105164689234998; _weight[2] = 0.03595120814624776446987687028207407841501895536660169592463294449355425288370779064245312669926985388; _points[3] = 0.04444646315540772302546679878555276624130930378899710999139642043436028639661647795803987919635307505; _weight[3] = 0.04963390344092354299236819387388759872276531452267544246797332700574719345537345645571951255905295405; _points[4] = 0.9289421012644110178488101551343152998504932414769823471037599293899243740926428914029706095801991064; _weight[4] = 0.06255191716557617906688464398784008656184274649282227400711808747510050471677954744690856656060123432; _points[5] = 0.1068544908834766576341067704324992625897998143695000275580631125622836143405186814627639697793505873; _weight[5] = 0.07457547504500010257574593212085472848830959655207242548776306668431488289996654073064815660600252619; _points[6] = 0.8545525437649358807902119164056171284859595037395583869615217146999851616473022152580139867380827058; _weight[6] = 0.08550173023530832123187933725608529010988327742650916870829611194441770373681670809118932944409747882; _points[7] = 0.1921510545298540409910572562286133303827013670215218660373964882963368867384002033277468512639620346; _weight[7] = 0.09518685777981586612737991037293691958788184471208789194562638680044365745312132402614513871070282189; _points[8] = 0.7595988895252270537426025740434203419422064350885379264310222786423119973912528922496277727549814325; _weight[8] = 0.1034803057279385373155662804144384374750427276214146948478010879630533907564801063538733440312738658; _points[9] = 0.2953808842625802216229168343760149059398907133108521080514580880514097551832904806231230987696368169; _weight[9] = 0.1102671146442257323455385820995765357020738630479430106311100293991178535583726917255962453649948882; _points[10] = 0.64960065027725499276629172334298057222565311827730373485571958964856442485986620008885607294565333; _weight[10] = 0.1154444314434977170061018793339061362073895171982322864758099735381130891596922281273366371689249657; _points[11] = 0.4105450812014576824890343505593324118433186951909181754985565958109519682767226149737373217217664214; _weight[11] = 0.1189392738303560156713425945898368420344422709752939545408915255899383006020911343567290538236643372; _points[12] = 0.5309508493128176706289302428968181393245082635016252048349547896722090314354827164359000778197833607; _weight[12] = 0.1206991711438455743154334620642569364828104246227900120795274795682394100041207609623141177050766563; break; // order 25,26 case 25 : case 26 : delivered_order = 26; _points.resize(14); _weight.resize(14); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.00510204081632653061224489795918367346938775510204081632653061224489795918367346938775510204081632653; _points[1] = 0.007364651026089321650691498413822343611205715616446000420689416452269750033894550997416319128445293682; _weight[1] = 0.01885358163494845713873136414594165020975759392510590592315060034299193800069304020789391250755439251; _points[2] = 0.9813896349890121485602806221597123115526801027908002379955097186555535838880620308147789489545503323; _weight[2] = 0.03106100845388573008306645823341460455969559499141094108084012625707654955896377969536296135374710094; _points[3] = 0.0383981387396783503768325248641416859178298341363546876124160117982427806914025897403499913466209422; _weight[3] = 0.04297026772149020154465386554328283974483688526109607883477417143735728532178658495401673766981052349; _points[4] = 0.9385244591007310123976333867652993517339853062062887126354508873721247374248021832126814047065480952; _weight[4] = 0.05430386137218141341336046761449170556749717283973110242510925951515177257930583451532790775304492282; _points[5] = 0.09259522469900263528289137543861635588927985865429292632366593235281921073136849542406090039759718099; _weight[5] = 0.06496983436867117390371286857296886542757042851651763549881540867872262529279047866030734246306485196; _points[6] = 0.8736948213066894193677145671317438911733815349203347594446961615475144054728685418531116734022398623; _weight[6] = 0.07481026967656067797526041847298687382328381103405386550842777879482025911405057274802766818691774256; _points[7] = 0.1672510113915577314955224787593571163747337087390977895834969262324481399932617359780977489832830798; _weight[7] = 0.08371486394554313949505113851903285254546037528256798216114894580640831517395702564992236389997285344; _points[8] = 0.7901570282734374855528633324993759322704266136136999317134349971780526905331558640579365443870029771; _weight[8] = 0.0915635010628648270619336510514316864439809227594628152951066579840052366089190074610930288816591208; _points[9] = 0.2586235407057625165897907328226910025245301373917701116571591768242959721348720274973743055115115388; _weight[9] = 0.09826275922649121516230654596477485524374871885835884725402164208061259270491076568978920429932178543; _points[10] = 0.6921010017196016568970419516876697301808911008718652877381506074556730863418738419796277914411356902; _weight[10] = 0.1037248816675878363340414432447055349260953854618612465467764711248264947647953780386198366283149413; _points[11] = 0.3621313972822388004086812982273215588635004488227823666951627890767765685364866146107646481156613177; _weight[11] = 0.1078835503023094256905937230574369840724121681977091473649374022846524089107794784879188404811405312; _points[12] = 0.5844439640213404555042208478109107062952661618107888083023659837678484044838564429563713070829009515; _weight[12] = 0.1106849057497854744658358415102718135678259837364580620549598005910175475300839492981459854834952701; _points[13] = 0.472584386004117725175094642678597272871548735684737639137060650545639928993354340136687675801761997; _weight[13] = 0.1120946740013538971192073161100760603984472040336255537254011228574590152552906352058191083511396366; break; // order 27,28 case 27 : case 28 : delivered_order = 28; _points.resize(15); _weight.resize(15); _points[0] = 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _weight[0] = 0.004444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444; _points[1] = 0.006416760792818456810820464094507178865719839912244884307238769932733545613705239155655121904187696819; _weight[1] = 0.01643219579229676612652142641153073057741290693423739200638154484999854248273452294729310561302604524; _points[2] = 0.9837752340986002382812280091410008568029060918346814026541382401229231239358663224051124039381821714; _weight[2] = 0.02710139002432224716910711840089438470564976679454870725896584731580262535409379031752562837870266878; _points[3] = 0.03350140453201314003596392857057248161039076925284236707232192332100661384915949406912586179668631268; _weight[3] = 0.03755419638025321986648583269569141758805153698961255144076732637991919601646605173770385110166578307; _points[4] = 0.9463027000602753835334059434247240449122575138455164975479188348405641933767500076215855613747667663; _weight[4] = 0.04756479973024044960192386331729517468694216465472046057613808264784485886335468527107776368357517029; _points[5] = 0.08098549968195518439245130773998218722766514758665499507829939127797017196531825081787486655370779525; _weight[5] = 0.0570676017448763765065377912843275486532773680936293313767427911822960640342192529908062097810219568; _points[6] = 0.8893428088195155396908716609464895647037628629053267599145054482375380565684526275834413083786664628; _weight[6] = 0.0659377312524758160931310789717671834328714396438875129556617113002714624562014461183427180565642943; _points[7] = 0.1468048676812137299236601652607991515599694654279756227180485513313137055587256285457460550167373564; _weight[7] = 0.07408976350173362696234102937128255487413805694748258883130522716337536508449919660779818071285032187; _points[8] = 0.8153897394434746419730742186120575147090134055115116514499564217599632405912766985454621567772925719; _weight[8] = 0.08142723865191631472436612291392116582120502240478308220490604700601857925394464346640601462002559893; _points[9] = 0.2280842706492579915346440986199429719415777248320505178336090146170398503780540680375636284189205414; _weight[9] = 0.08787443632122384283515522023795954919820258839409278348995177107324231289791167390445951868050365719; _points[10] = 0.727676452889264685436026727990331696616560168524648660087480949596545653110467939930929401900062142; _weight[10] = 0.0933575729197254540418975518996095015505528049870462214693890052089200962043726360505074761465047243; _points[11] = 0.3212717439889361744023403974130354496573046310098509725155244153528428571119004042632189220394104757; _weight[11] = 0.09781875152255805823677830878766431530678913099926441455902384806443677576510945244842491271878973857; _points[12] = 0.6300366883704039578844805941314332791605030321087179470245277359365694220786253960307680873297618342; _weight[12] = 0.1012075935153092149363516552173900812119855087993622184426068461562271888887057964368860900909478014; _points[13] = 0.4222946573075702578404089875181026958217938762273438789639540713852576268236287646690911714244228904; _weight[13] = 0.1034879801247768777395136608932904389620559700843852088264115370008206803210070375686989446492003508; _points[14] = 0.5267378613398730320537269448128829953760927123999441876600624391842836631760001928071840738368501546; _weight[14] = 0.1046343040738472907154448951529315089864212898285030821173039702063818079329353696896251413221774439; break; // order 29,30 case 29 : case 30 : delivered_order = 30; _points.resize(16); _weight.resize(16); _points[0] = 1.0; _weight[0] = 0.003906249999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; _points[1] = 0.005640688972511709757506466579444200966084106988131147967978335138218141575736364048915697203589669807; _weight[1] = 0.01444856950840716424575961150167959664768321485447374308786815965237503412236544031701308852051345129; _points[2] = 0.9857305452631742252659006330591292421044806623979681396367496904534811104340037194340828859918697398; _weight[2] = 0.02385111347384286023258796121105761215940712748373347733951249612012262824249209179131707229548989037; _points[3] = 0.02948229864794248663164098471800370918700961303166077760161299352098320969659464315137326588996550641; _weight[3] = 0.0330947543050682173723367824140129988109765140797056057089486775834419651379958009126595489547599592; _points[4] = 0.9527004099058333143380442075242620935055589938201492599119746533434704857023258451913238950513425185; _weight[4] = 0.04199264072248258900350601284912850274175530373827143449384382997141429563265696715138196207857827561; _points[5] = 0.07141295311515884005478390174673491912187290234227435678431701381106489005946195046185073236066258137; _weight[5] = 0.05049783981089195436218504141066416942898549189111011390903678585931367460678472505588559551870946612; _points[6] = 0.9022867006793780266312385046620090802654876855849468717160511280017608939616471254566098257665163887; _weight[6] = 0.05851017655193002851526082850951591652992414137147165348431935555746818051798695168136190985636111654; _points[7] = 0.1298310255535910559712545380942899123177230784713915452688927991403297243171614954096840860975794642; _weight[7] = 0.06596284996653406672246151063058849160747151189927306232812579118709032621265417948009199088684731203; _points[8] = 0.8364309606056101239755590856541831966144050516279921337789774230212989904851294862915904006631825436; _weight[8] = 0.07277777261010112143531914999678279515995507797472250238664229606324038347926030123455318661603847499; _points[9] = 0.2024927550501040475682199883202304426029145838857816183098197713593869872838287905637745131407654631; _weight[9] = 0.07889346090210101014257961013735628556027751692815831358281184285722704118272376932178081897027333611; _points[10] = 0.7576647390313427119970742777402853179406886187590936481745381257951925531912300645820920629808513944; _weight[10] = 0.08424819892496124501819105207923275942561890638984801295494652596992252939263197128583747944314191086; _points[11] = 0.2866060862575270599840260454843964124631835183282258747277172597764764143673373926548361027887495961; _weight[11] = 0.0887923963763697559481752588801875527471665581288797954926123946185668633418713757400843776997412092; _points[12] = 0.6690151950299598765386956390531395651245327979857527236420750144055549199665133052913040313820535801; _weight[12] = 0.09248089074433267978323239376056093439894591473240448144120626047437788156837996046854633882875631641; _points[13] = 0.3789386886469780381065290091427738514254527443330112900124820663975192124536679674713512968590311795; _weight[13] = 0.09527914712767754441311796762044089051519985174582994892126109353070075332923324694354921353229351015; _points[14] = 0.5738891609066858806714538552375264393339926267874317142496528265661645824810184689905478175189410146; _weight[14] = 0.09715954485578392167168809787195218347038559646446468604327985098793468776901949385191763241792479535; _points[15] = 0.4759423084632348605725889920158496815427420479142534143461931573336140130566014455167924185629638753; _weight[15] = 0.09810439411951584113359872112683931079624727231765316882558463956680375546394372476401978438057097569; break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } // for non-fundamental types: assign numbers as strings template void GaussRadauRightQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { case 0 : delivered_order = 0; _points.resize(1); _weight.resize(1); _points[0] = ct("1.0"); _weight[0] = ct("1.0"); break; // order 1,2 case 1 : case 2 : delivered_order = 2; _points.resize(2); _weight.resize(2); _points[0] = ct("1.0"); _weight[0] = ct("0.25"); _points[1] = ct("0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); _weight[1] = ct("0.75"); break; // order 3,4 case 3 : case 4 : delivered_order = 4; _points.resize(3); _weight.resize(3); _points[0] = ct("1.0"); _weight[0] = ct("0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); _points[1] = ct("0.1550510257216821901802715925294108608034052519343329871567307432749039622542684973460140566895359765"); _weight[1] = ct("0.3764030627004672750500754423692807946676125699817591630990918731319177672928523603738927935248711045"); _points[2] = ct("0.6449489742783178098197284074705891391965947480656670128432692567250960377457315026539859433104640234"); _weight[2] = ct("0.5124858261884216138388134465196080942212763189071297257897970157569711215960365285149960953640177843"); break; // order 5,6 case 5 : case 6 : delivered_order = 6; _points.resize(4); _weight.resize(4); _points[0] = ct("1.0"); _weight[0] = ct("0.0625"); _points[1] = ct("0.08858795951270394739554614376945619688572933192274956543116369516997648742681009672521930761610157857"); _weight[1] = ct("0.2204622111767683752754784720371859890529167281230873116876396332191458306523173431813869747371986422"); _points[2] = ct("0.7876594617608470560252418898759996233480800585109738408854524491392307168918253691359860554930833447"); _weight[2] = ct("0.3288443199800597439442892210727968317490234075874455536546030877312606057631737874914764364720579267"); _points[3] = ct("0.4094668644407347108649262520688298940519048952805623079690981414050785099670788198530803511765293624"); _weight[3] = ct("0.388193468843171880780232306890017179198059864289467134657757279049593563584508869327136588790743431"); break; // order 7,8 case 7 : case 8 : delivered_order = 8; _points.resize(5); _weight.resize(5); _points[0] = ct("1.0"); _weight[0] = ct("0.03999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _points[1] = ct("0.05710419611451768219312119255411562123507794559875016432780829293093467820207316458611381681984273686"); _weight[1] = ct("0.1437135607912259413234122198541102271589229617318809184244815352000477933742653045394234927685913557"); _points[2] = ct("0.8602401356562194478479129188751197667383780225872255049242335941839742579301655644134901549264276106"); _weight[2] = ct("0.2231039010835707444025602182285893596530132769666542171491954357318447595238752822393854332837929434"); _points[3] = ct("0.2768430136381238276800459976856251411108891696950304683494420488311213396837080367725415285640511308"); _weight[3] = ct("0.28135601514946206019217265034065989120000299266737412219813168211940937087419012854107836846850562"); _points[4] = ct("0.5835904323689168200566976686629172486934326398967716401762938418317475019618310120056322774674562993"); _weight[4] = ct("0.3118265229757412540818549115766405219880607686340907422281913469486980762276692846801127054791100807"); break; // order 9,10 case 9 : case 10 : delivered_order = 10; _points.resize(6); _weight.resize(6); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.02777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"); _points[1] = ct("0.03980985705146874234080669009333316770426265422838516194640774820496474562617430685450225908318456723"); _weight[1] = ct("0.1007941926267404201046003778745677818586739544978990469020905175031896616185019326523859081070179564"); _points[2] = ct("0.9014649142011735738765011021122473096194864304517102005637358130565651259599860618861752355046079331"); _weight[2] = ct("0.15982037661025548327288999189811797479611146812876839180378402272111432088446591677960283187954084"); _points[3] = ct("0.1980134178736081725357921367952962360381863588337888792083291768272087117286465026597729214141553943"); _weight[3] = ct("0.2084506671559538694797031913713231216677075046880940122344846434185750632010718140854202072910519794"); _points[4] = ct("0.6954642733536360945146148237211671613940015549986483590851972611325288138368238668739250465460035524"); _weight[4] = ct("0.2426935942344849580799139577934448339939675840621020934694189186061539713876707499244320986309746931"); _points[5] = ct("0.4379748102473861440050125200052288525167902742147401264690572735060053301210965344528972647247758255"); _weight[5] = ct("0.2604633915947874912851147032847685099057617108453586778124441199731892051305118087803811763136367531"); break; // order 11,12 case 11 : case 12 : delivered_order = 12; _points.resize(7); _weight.resize(7); _points[0] = ct("1.0"); _weight[0] = ct("0.02040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530612"); _points[1] = ct("0.0293164271597848919720502769131649103737303925637149277869106839449360382416657787486309483651843695"); _weight[1] = ct("0.07449423555601031793324878020916692097532644942393942434007237049841313043955906688474729498373429045"); _points[2] = ct("0.9269456713197411148518739658196820110561724195422832527244670796566452024525282438143394800135873915"); _weight[2] = ct("0.1196137446126562028935387403847763008302627238892853476612432820588170328039983753965707678098696572"); _points[3] = ct("0.148078599668484291849976852495979212230248774808594461412594641801598386090878321806369397661747576"); _weight[3] = ct("0.1591021157336507408724352172349341821081630163278709547082536480846529383453687327524900611444633129"); _points[4] = ct("0.7692338620300545009168833601156454518371421433222954161669481696365481305739532856852002115427743676"); _weight[4] = ct("0.1904749368221155769029691739380627618671473914712524715596097410083045379273763891870770560020639449"); _points[5] = ct("0.3369846902811542990970529720807757051975687500284733471225629680736913505127840608524091411736544825"); _weight[5] = ct("0.2123518895029778041991540195751041223560385606946763943251267338610614147090378494828338349159860945"); _points[6] = ct("0.5586715187715501320813933418055219400743682889654078255557472261173501228974210783238200520122825819"); _weight[6] = ct("0.2235549145072832347496744768212210179855108377848121420995717755091591090399657087452605769806173937"); break; // order 13,14 case 13 : case 14 : delivered_order = 14; _points.resize(8); _weight.resize(8); _points[0] = ct("1.0"); _weight[0] = ct("0.015625"); _points[1] = ct("0.02247938643871249810882549957084505992217390723560038985928427605875857575812188014380655937699869041"); _weight[1] = ct("0.05725440737212859967117686425977936825057099397716932914168114853242340872092305631760230041130854427"); _points[2] = ct("0.9437374394630778535343478089676888242202344852553769164275572083026057856516616966519018212670469614"); _weight[2] = ct("0.092679077401489639270364486349647736830932563674935858313467408965379128989721699937903158856790959"); _points[3] = ct("0.1146790531609042319096402370675146270777298245319719453889897349515683398313771981082383887487264663"); _weight[3] = ct("0.1248239506649324816289346467565124312159878101369501620465085111501266363843363392424861677155123433"); _points[4] = ct("0.819759308263107635012420057190818215457939379194529844677374444720182011832042478974289957052318717"); _weight[4] = ct("0.1520653103233925644878716457001354421902137069080648805811724927448463625325070164171434664138434795"); _points[5] = ct("0.2657898227845894684767893916933899974369968814056098940206796867530550186172425454664726006420981075"); _weight[5] = ct("0.1735073978172506401143379592110741293229628009936786196599092457283690261775051724258224098007456587"); _points[6] = ct("0.6473752828868303626260922298287587971919781169427252176007906613661670650910811632587999055012469012"); _weight[6] = ct("0.188258772694559278286064630720786335118640532533949995543333201250716465965606978691283022057567494"); _points[7] = ct("0.4528463736694446169985514423476511453596140721008524586919906545143298698851397040631574340782308226"); _weight[7] = ct("0.1957860837262467965412497670020645570706915917752511547139279916281389712293997369677594747442315208"); break; // order 15,16 case 15 : case 16 : delivered_order = 16; _points.resize(9); _weight.resize(9); _points[0] = ct("1.0"); _weight[0] = ct("0.01234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901"); _points[1] = ct("0.01777991514736345181320510103767906126648839823850043366560783167875924757578300659726427675032243894"); _weight[1] = ct("0.04535725246164145850644674920795090340044910382256608423236014041761080705247011291369808019791001464"); _points[2] = ct("0.9553660447100301492668789781416922384764228669900323904483832488568928548867910582521230305572279596"); _weight[2] = ct("0.07382700952315769290979424990076684192644119748373204166495034257132170235826067178423603914263698819"); _points[3] = ct("0.09132360789979395600374145807454135310704047574456766876687017263479530047915987523538037892138190674"); _weight[3] = ct("0.1002766490122759787105825452084585374837100645139951717640162083073491273282749948425325106489951269"); _points[4] = ct("0.8556337429578544285147814797717850302864781605395751604095670933496281754845563783672978210969088188"); _weight[4] = ct("0.1235946891022965261806198974844998620884284109101835335540040960997860637405727093530324964819711671"); _points[5] = ct("0.2143084793956307583575412675816703226744297175224765908137326191408580982640893227912904964441607054"); _weight[5] = ct("0.1431933481786155855733528188760054645853142508187793084336149756313973598558725153845647136386781611"); _points[6] = ct("0.7131752428555694810513137602509073414468837909454265589730704929652137959347225387189767846054023754"); _weight[6] = ct("0.1584218878352189891690004248211828904282803901135082813370203191442722409397377362074389726296125592"); _points[7] = ct("0.371932164583272302430853960482629244668100063377480677867638541249730350859486812775129485772654593"); _weight[7] = ct("0.1688469834879647929018621198957803825501226794932222463313217885924663693432674422816562201729896321"); _points[8] = ct("0.5451866848034266490322722299532130551329800560537052249374829413005927647507051249095965493813529665"); _weight[8] = ct("0.1741365013864832970359955155930094385249082238316676536703664502234506503691981382204952880748606714"); break; // order 17,18 case 17 : case 18 : delivered_order = 18; _points.resize(10); _weight.resize(10); _points[0] = ct("1.0"); _weight[0] = ct("0.01"); _points[1] = ct("0.01441240964887654863282674081081323941174473105657808607075067912813887583460044894395069303727210116"); _weight[1] = ct("0.03680850274337924946552564703952257250633407560110190885784111690017778477215458793270183849421941181"); _points[2] = ct("0.9637421871167905390588356992319185479241288771581362138479503914355973155457527404910756919669630462"); _weight[2] = ct("0.06014833527874081575865526135099759590938724369183571272716692583091329962913008482323531114050148899"); _points[3] = ct("0.07438738970919604463591818595599858508097691328473519842679960274501992379023428096791242945498303363"); _weight[3] = ct("0.08218800636846073785084083445387855020451656194507156599834064798783462171005161946359655246906025996"); _points[4] = ct("0.8819210212100012998077148880052647763071205854487038619129766513283089105657085985563097864503385464"); _weight[4] = ct("0.1021350659395003377778943361115165106736257210286962005068043553499340322306121690246726114965883931"); _points[5] = ct("0.1761166561629952818631757460725685864113860479693058739346483371718478923148052033071589166216033503"); _weight[5] = ct("0.1195967158571898566882859830801363758258364741540254585528364764210946139183141897137094066862003184"); _points[6] = ct("0.7628230151850396146826933071467255329235111827037380779911005908346167214808478679770430364298828452"); _weight[6] = ct("0.1340974189205893480292772376310295553451252092166458466844053839661648602000224960759896073212453487"); _points[7] = ct("0.3096675799276378170596204672294840488163890844971259245735924385417910631238453492458723772259274575"); _weight[7] = ct("0.1453050824164591555734315389815310253381621189272259396591735666935382783811527201352568817760678677"); _points[8] = ct("0.6181172346952940246392297516035044802806674046397913475060393055585778777428482116865746364861237203"); _weight[8] = ct("0.1529296438622113105081377377003979801780786241826203904279240012042738305695686747214466554361694378"); _points[9] = ct("0.4619704010810109348831431086805643081072330679787275209992998979929435248645151935609445375900637938"); _weight[9] = ct("0.1567912286134691883479514236509898340189339712527769765855075256460686785889934581093911351799474732"); break; // order 19,20 case 19 : case 20 : delivered_order = 20; _points.resize(11); _weight.resize(11); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.008264462809917355371900826446280991735537190082644628099173553719008264462809917355371900826446280991"); _points[1] = ct("0.01191761343241559690974558695898597603002784725837485802027599304441351971793953552093495537698887495"); _weight[1] = ct("0.03046254890606556735360916344416515441920593612889634378768602325986918684909318284948512089071412454"); _points[2] = ct("0.9699709678385135029569356423655920593053451564625792084689040051698797214284804451045965026202723376"); _weight[2] = ct("0.04992304095398403194787673479012341784951435295822716798886200345394064771188529448902933415752225152"); _points[3] = ct("0.06173207187714812552262936719425014145287208036190213218470079750300542267782554988602355308971116546"); _weight[3] = ct("0.06851684106660112815507694029022108631584560319435756477685101885640953683767976717173664864587875312"); _points[4] = ct("0.9017109877901467703487989784097679814681176760729360475326567373055975858521386207932416878958506861"); _weight[4] = ct("0.08565880960332991824335632452114911543009060544673768448218195768393830581589904069386788764433631681"); _points[5] = ct("0.1471114496430702404275994355798195021337713619059297805712867093259790600660861446700545255054338431"); _weight[5] = ct("0.1010815542700122091749658771329642516494277755940245416341823725777740925226297436637027602819852004"); _points[6] = ct("0.8009789210368988451379463016172425246730022622599153383117418553952368566445573598703594633591531735"); _weight[6] = ct("0.1144330619244883122008416155631972831221456389832920628771016872588315039886167750369068708206089062"); _points[7] = ct("0.2611596760084562402660516580548457231986357161379567253035521310935009972624582003737324443405623491"); _weight[7] = ct("0.12546268884856419732457013381672775718613069695897309262354779249129469297632546407602624370590123"); _points[8] = ct("0.6759444616766651073571505089347614715039952762295357455139412301626256578790308622295455518800017057"); _weight[8] = ct("0.1339335430948420889033190816775717752086008360038592987740894422858598943031122752005614670488956897"); _points[9] = ct("0.3946398468857868429619521050776075022149391536489841976946611563878829320916183985232456263028812026"); _weight[9] = ct("0.1396806665516915225944810978601028731857924475265701484072617959266351875863206717620061077170286754"); _points[10] = ct("0.5367387657156606328730951777118890227811982315666478711601841465166401511417696449330275943910494234"); _weight[10] = ct("0.142582781970503668730002204457496293897708917122417466549062352486438686945627867701305658260682571"); break; // order 21,22 case 21 : case 22 : delivered_order = 22; _points.resize(12); _weight.resize(12); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.006944444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"); _points[1] = ct("0.01001828046168040584302472986780478481479194051621623866216912370277685746144514894811474690557217898"); _weight[1] = ct("0.02562404960363464873401147256755191359698912179586886783614733167396359699140406477146628165245745726"); _points[2] = ct("0.9747263796024796502466688135383708980845368176554858005326201789921787651358684645855413515511531779"); _weight[2] = ct("0.04208606746934048812078982684064078598356207668454606077811004135971778814182424352552804186759516359"); _points[3] = ct("0.05203545112718055258354269577296432244718592505838183555552881934330327851280895562528383296766154587"); _weight[3] = ct("0.05795374014586919637517095413584668388777153128408424542984574266464927148200496692165819750039770507"); _points[4] = ct("0.9169583865525948532931346270180274177520051095629925713521035439862432832098136415299370694612456097"); _weight[4] = ct("0.07278183442699756426127382735286559431255511311081887313664967558148928208419907103707790861347367931"); _points[5] = ct("0.1246192251444430737352995872639092292474441300880058562471871920162296059349519090766521215975420845"); _weight[5] = ct("0.08638531965665428215303288348279335482371411193381952188479961232975350369852446186555482138789619392"); _points[6] = ct("0.8308248996228185740305665439056567039439893043182143500186679333872078183180614211671796544755957774"); _weight[6] = ct("0.09849926741304481732802481898451691715880480601630014213517520121230333584098958189070626683477635742"); _points[7] = ct("0.2228406070438378555078314534573627644117252503274297081643638173616062308369832016150585853516004853"); _weight[7] = ct("0.1089344395130962194243737410114312720559919702231833101252380994924976153392527006073200151967269551"); _points[8] = ct("0.7222032848909679255633213078046109071372364455125913944559779818780897684066745302575181714890353344"); _weight[8] = ct("0.1175015575724929196743169929697715883009119236048689568907922000277105361992896721300643435454773039"); _points[9] = ct("0.3400081579146651882336052338970175277313293398208505803470934737382842096120712309333935896431331419"); _weight[9] = ct("0.1240607804020049797015365535394355200719995254498010043949067360502230324581192591300795635289312217"); _points[10] = ct("0.5984972797671391832277207136730435902749187521976111511339511314695356530954712310305911412553938959"); _weight[10] = ct("0.1284956690763538880639871267992001336436691476013189170108039583312533699461672093381787487185684594"); _points[11] = ct("0.4681376130895840420831103807577535932852717675509161657042498476028053990410676565350775613890232895"); _weight[11] = ct("0.1307328302760665517190373578715017917195862278509456559330869568319942233737803243379213667092550587"); break; // order 23,24 case 23 : case 24 : delivered_order = 24; _points.resize(13); _weight.resize(13); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.005917159763313609467455621301775147928994082840236686390532544378698224852071005917159763313609467455"); _points[1] = ct("0.008539054988427419368664460877839802806090414566577746496257927301230364575762166797509842961307629102"); _weight[1] = ct("0.02185145163395103741442669230253126228354537862132045649291743515926153592140670516392700801272894985"); _points[2] = ct("0.9784379368341496390919069169169960383680691296676253661798930654904321350621424594217105164689234998"); _weight[2] = ct("0.03595120814624776446987687028207407841501895536660169592463294449355425288370779064245312669926985388"); _points[3] = ct("0.04444646315540772302546679878555276624130930378899710999139642043436028639661647795803987919635307505"); _weight[3] = ct("0.04963390344092354299236819387388759872276531452267544246797332700574719345537345645571951255905295405"); _points[4] = ct("0.9289421012644110178488101551343152998504932414769823471037599293899243740926428914029706095801991064"); _weight[4] = ct("0.06255191716557617906688464398784008656184274649282227400711808747510050471677954744690856656060123432"); _points[5] = ct("0.1068544908834766576341067704324992625897998143695000275580631125622836143405186814627639697793505873"); _weight[5] = ct("0.07457547504500010257574593212085472848830959655207242548776306668431488289996654073064815660600252619"); _points[6] = ct("0.8545525437649358807902119164056171284859595037395583869615217146999851616473022152580139867380827058"); _weight[6] = ct("0.08550173023530832123187933725608529010988327742650916870829611194441770373681670809118932944409747882"); _points[7] = ct("0.1921510545298540409910572562286133303827013670215218660373964882963368867384002033277468512639620346"); _weight[7] = ct("0.09518685777981586612737991037293691958788184471208789194562638680044365745312132402614513871070282189"); _points[8] = ct("0.7595988895252270537426025740434203419422064350885379264310222786423119973912528922496277727549814325"); _weight[8] = ct("0.1034803057279385373155662804144384374750427276214146948478010879630533907564801063538733440312738658"); _points[9] = ct("0.2953808842625802216229168343760149059398907133108521080514580880514097551832904806231230987696368169"); _weight[9] = ct("0.1102671146442257323455385820995765357020738630479430106311100293991178535583726917255962453649948882"); _points[10] = ct("0.64960065027725499276629172334298057222565311827730373485571958964856442485986620008885607294565333"); _weight[10] = ct("0.1154444314434977170061018793339061362073895171982322864758099735381130891596922281273366371689249657"); _points[11] = ct("0.4105450812014576824890343505593324118433186951909181754985565958109519682767226149737373217217664214"); _weight[11] = ct("0.1189392738303560156713425945898368420344422709752939545408915255899383006020911343567290538236643372"); _points[12] = ct("0.5309508493128176706289302428968181393245082635016252048349547896722090314354827164359000778197833607"); _weight[12] = ct("0.1206991711438455743154334620642569364828104246227900120795274795682394100041207609623141177050766563"); break; // order 25,26 case 25 : case 26 : delivered_order = 26; _points.resize(14); _weight.resize(14); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.00510204081632653061224489795918367346938775510204081632653061224489795918367346938775510204081632653"); _points[1] = ct("0.007364651026089321650691498413822343611205715616446000420689416452269750033894550997416319128445293682"); _weight[1] = ct("0.01885358163494845713873136414594165020975759392510590592315060034299193800069304020789391250755439251"); _points[2] = ct("0.9813896349890121485602806221597123115526801027908002379955097186555535838880620308147789489545503323"); _weight[2] = ct("0.03106100845388573008306645823341460455969559499141094108084012625707654955896377969536296135374710094"); _points[3] = ct("0.0383981387396783503768325248641416859178298341363546876124160117982427806914025897403499913466209422"); _weight[3] = ct("0.04297026772149020154465386554328283974483688526109607883477417143735728532178658495401673766981052349"); _points[4] = ct("0.9385244591007310123976333867652993517339853062062887126354508873721247374248021832126814047065480952"); _weight[4] = ct("0.05430386137218141341336046761449170556749717283973110242510925951515177257930583451532790775304492282"); _points[5] = ct("0.09259522469900263528289137543861635588927985865429292632366593235281921073136849542406090039759718099"); _weight[5] = ct("0.06496983436867117390371286857296886542757042851651763549881540867872262529279047866030734246306485196"); _points[6] = ct("0.8736948213066894193677145671317438911733815349203347594446961615475144054728685418531116734022398623"); _weight[6] = ct("0.07481026967656067797526041847298687382328381103405386550842777879482025911405057274802766818691774256"); _points[7] = ct("0.1672510113915577314955224787593571163747337087390977895834969262324481399932617359780977489832830798"); _weight[7] = ct("0.08371486394554313949505113851903285254546037528256798216114894580640831517395702564992236389997285344"); _points[8] = ct("0.7901570282734374855528633324993759322704266136136999317134349971780526905331558640579365443870029771"); _weight[8] = ct("0.0915635010628648270619336510514316864439809227594628152951066579840052366089190074610930288816591208"); _points[9] = ct("0.2586235407057625165897907328226910025245301373917701116571591768242959721348720274973743055115115388"); _weight[9] = ct("0.09826275922649121516230654596477485524374871885835884725402164208061259270491076568978920429932178543"); _points[10] = ct("0.6921010017196016568970419516876697301808911008718652877381506074556730863418738419796277914411356902"); _weight[10] = ct("0.1037248816675878363340414432447055349260953854618612465467764711248264947647953780386198366283149413"); _points[11] = ct("0.3621313972822388004086812982273215588635004488227823666951627890767765685364866146107646481156613177"); _weight[11] = ct("0.1078835503023094256905937230574369840724121681977091473649374022846524089107794784879188404811405312"); _points[12] = ct("0.5844439640213404555042208478109107062952661618107888083023659837678484044838564429563713070829009515"); _weight[12] = ct("0.1106849057497854744658358415102718135678259837364580620549598005910175475300839492981459854834952701"); _points[13] = ct("0.472584386004117725175094642678597272871548735684737639137060650545639928993354340136687675801761997"); _weight[13] = ct("0.1120946740013538971192073161100760603984472040336255537254011228574590152552906352058191083511396366"); break; // order 27,28 case 27 : case 28 : delivered_order = 28; _points.resize(15); _weight.resize(15); _points[0] = ct("0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _weight[0] = ct("0.004444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"); _points[1] = ct("0.006416760792818456810820464094507178865719839912244884307238769932733545613705239155655121904187696819"); _weight[1] = ct("0.01643219579229676612652142641153073057741290693423739200638154484999854248273452294729310561302604524"); _points[2] = ct("0.9837752340986002382812280091410008568029060918346814026541382401229231239358663224051124039381821714"); _weight[2] = ct("0.02710139002432224716910711840089438470564976679454870725896584731580262535409379031752562837870266878"); _points[3] = ct("0.03350140453201314003596392857057248161039076925284236707232192332100661384915949406912586179668631268"); _weight[3] = ct("0.03755419638025321986648583269569141758805153698961255144076732637991919601646605173770385110166578307"); _points[4] = ct("0.9463027000602753835334059434247240449122575138455164975479188348405641933767500076215855613747667663"); _weight[4] = ct("0.04756479973024044960192386331729517468694216465472046057613808264784485886335468527107776368357517029"); _points[5] = ct("0.08098549968195518439245130773998218722766514758665499507829939127797017196531825081787486655370779525"); _weight[5] = ct("0.0570676017448763765065377912843275486532773680936293313767427911822960640342192529908062097810219568"); _points[6] = ct("0.8893428088195155396908716609464895647037628629053267599145054482375380565684526275834413083786664628"); _weight[6] = ct("0.0659377312524758160931310789717671834328714396438875129556617113002714624562014461183427180565642943"); _points[7] = ct("0.1468048676812137299236601652607991515599694654279756227180485513313137055587256285457460550167373564"); _weight[7] = ct("0.07408976350173362696234102937128255487413805694748258883130522716337536508449919660779818071285032187"); _points[8] = ct("0.8153897394434746419730742186120575147090134055115116514499564217599632405912766985454621567772925719"); _weight[8] = ct("0.08142723865191631472436612291392116582120502240478308220490604700601857925394464346640601462002559893"); _points[9] = ct("0.2280842706492579915346440986199429719415777248320505178336090146170398503780540680375636284189205414"); _weight[9] = ct("0.08787443632122384283515522023795954919820258839409278348995177107324231289791167390445951868050365719"); _points[10] = ct("0.727676452889264685436026727990331696616560168524648660087480949596545653110467939930929401900062142"); _weight[10] = ct("0.0933575729197254540418975518996095015505528049870462214693890052089200962043726360505074761465047243"); _points[11] = ct("0.3212717439889361744023403974130354496573046310098509725155244153528428571119004042632189220394104757"); _weight[11] = ct("0.09781875152255805823677830878766431530678913099926441455902384806443677576510945244842491271878973857"); _points[12] = ct("0.6300366883704039578844805941314332791605030321087179470245277359365694220786253960307680873297618342"); _weight[12] = ct("0.1012075935153092149363516552173900812119855087993622184426068461562271888887057964368860900909478014"); _points[13] = ct("0.4222946573075702578404089875181026958217938762273438789639540713852576268236287646690911714244228904"); _weight[13] = ct("0.1034879801247768777395136608932904389620559700843852088264115370008206803210070375686989446492003508"); _points[14] = ct("0.5267378613398730320537269448128829953760927123999441876600624391842836631760001928071840738368501546"); _weight[14] = ct("0.1046343040738472907154448951529315089864212898285030821173039702063818079329353696896251413221774439"); break; // order 29,30 case 29 : case 30 : delivered_order = 30; _points.resize(16); _weight.resize(16); _points[0] = ct("1.0"); _weight[0] = ct("0.003906249999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"); _points[1] = ct("0.005640688972511709757506466579444200966084106988131147967978335138218141575736364048915697203589669807"); _weight[1] = ct("0.01444856950840716424575961150167959664768321485447374308786815965237503412236544031701308852051345129"); _points[2] = ct("0.9857305452631742252659006330591292421044806623979681396367496904534811104340037194340828859918697398"); _weight[2] = ct("0.02385111347384286023258796121105761215940712748373347733951249612012262824249209179131707229548989037"); _points[3] = ct("0.02948229864794248663164098471800370918700961303166077760161299352098320969659464315137326588996550641"); _weight[3] = ct("0.0330947543050682173723367824140129988109765140797056057089486775834419651379958009126595489547599592"); _points[4] = ct("0.9527004099058333143380442075242620935055589938201492599119746533434704857023258451913238950513425185"); _weight[4] = ct("0.04199264072248258900350601284912850274175530373827143449384382997141429563265696715138196207857827561"); _points[5] = ct("0.07141295311515884005478390174673491912187290234227435678431701381106489005946195046185073236066258137"); _weight[5] = ct("0.05049783981089195436218504141066416942898549189111011390903678585931367460678472505588559551870946612"); _points[6] = ct("0.9022867006793780266312385046620090802654876855849468717160511280017608939616471254566098257665163887"); _weight[6] = ct("0.05851017655193002851526082850951591652992414137147165348431935555746818051798695168136190985636111654"); _points[7] = ct("0.1298310255535910559712545380942899123177230784713915452688927991403297243171614954096840860975794642"); _weight[7] = ct("0.06596284996653406672246151063058849160747151189927306232812579118709032621265417948009199088684731203"); _points[8] = ct("0.8364309606056101239755590856541831966144050516279921337789774230212989904851294862915904006631825436"); _weight[8] = ct("0.07277777261010112143531914999678279515995507797472250238664229606324038347926030123455318661603847499"); _points[9] = ct("0.2024927550501040475682199883202304426029145838857816183098197713593869872838287905637745131407654631"); _weight[9] = ct("0.07889346090210101014257961013735628556027751692815831358281184285722704118272376932178081897027333611"); _points[10] = ct("0.7576647390313427119970742777402853179406886187590936481745381257951925531912300645820920629808513944"); _weight[10] = ct("0.08424819892496124501819105207923275942561890638984801295494652596992252939263197128583747944314191086"); _points[11] = ct("0.2866060862575270599840260454843964124631835183282258747277172597764764143673373926548361027887495961"); _weight[11] = ct("0.0887923963763697559481752588801875527471665581288797954926123946185668633418713757400843776997412092"); _points[12] = ct("0.6690151950299598765386956390531395651245327979857527236420750144055549199665133052913040313820535801"); _weight[12] = ct("0.09248089074433267978323239376056093439894591473240448144120626047437788156837996046854633882875631641"); _points[13] = ct("0.3789386886469780381065290091427738514254527443330112900124820663975192124536679674713512968590311795"); _weight[13] = ct("0.09527914712767754441311796762044089051519985174582994892126109353070075332923324694354921353229351015"); _points[14] = ct("0.5738891609066858806714538552375264393339926267874317142496528265661645824810184689905478175189410146"); _weight[14] = ct("0.09715954485578392167168809787195218347038559646446468604327985098793468776901949385191763241792479535"); _points[15] = ct("0.4759423084632348605725889920158496815427420479142534143461931573336140130566014455167924185629638753"); _weight[15] = ct("0.09810439411951584113359872112683931079624727231765316882558463956680375546394372476401978438057097569"); break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } template GaussRadauRightQuadratureRule::GaussRadauRightQuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; GaussRadauRightQuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_GaussRadauRight_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/jacobi1quadrature.hh000066400000000000000000010031701411346603000262520ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by jacobian.mac! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_Jacobi1_HH #define DUNE_GEOMETRY_QUADRATURE_Jacobi1_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class Jacobi1QuadratureRule; template using Jacobi1QuadratureRule1D = Jacobi1QuadratureRule; template class Jacobi1QuadratureRule : public QuadratureRule { public: /** brief The highest quadrature order available */ enum { highest_order=61 }; private: friend class QuadratureRuleFactory; Jacobi1QuadratureRule (int p); ~Jacobi1QuadratureRule(){} }; //! internal Helper template for the initialization of the quadrature rules template::value> struct Jacobi1QuadratureInitHelper; template struct Jacobi1QuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct Jacobi1QuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void Jacobi1QuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(1); _weight.resize(1); _points[0] = 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; _weight[0] = 1.0; break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(2); _weight.resize(2); _points[0] = 0.6449489742783178098197284074705891391965947480656670128432692567250960377457315026539859433104640235; _weight[0] = 0.3639172365120456612112619958496727004463362510746294373092948573749466456968158318588966981608533203; _points[1] = 0.1550510257216821901802715925294108608034052519343329871567307432749039622542684973460140566895359765; _weight[1] = 0.6360827634879543387887380041503272995536637489253705626907051426250533543031841681411033018391466797; break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(3); _weight.resize(3); _points[0] = 0.7876594617608470560252418898759996233480800585109738408854524491392307168918253691359860554930833447; _weight[0] = 0.1396539598029082450677625443581538098252225758276251979994248447935389105334084604080564612661091634; _points[1] = 0.08858795951270394739554614376945619688572933192274956543116369516997648742681009672521930761610157858; _weight[1] = 0.4018638274779192615443962665291996972772826161899046690923842878330733109101018240536312300474029069; _points[2] = 0.4094668644407347108649262520688298940519048952805623079690981414050785099670788198530803511765293624; _weight[2] = 0.4584822127191724933878411891126464928974948079824701329081908673733877785564897155383123086864879298; break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(4); _weight.resize(4); _points[0] = 0.8602401356562194478479129188751197667383780225872255049242335941839742579301655644134901549264276107; _weight[0] = 0.0623619419000161643477502941931506212697875166839309830761809569911317040022539361293684065166161988; _points[1] = 0.5835904323689168200566976686629172486934326398967716401762938418317475019618310120056322774674562994; _weight[1] = 0.2596950952164648816529124057792580292271059432720818009310478738715197515684797549856501468079414159; _points[2] = 0.05710419611451768219312119255411562123507794559875016432780829293093467820207316458611381681984273682; _weight[2] = 0.2710138268629762324165283481558817992920669850614066882947002084270279998974049555934063155149987714; _points[3] = 0.2768430136381238276800459976856251411108891696950304683494420488311213396837080367725415285640511309; _weight[3] = 0.4069291360205427215828089518717095502110395549825805276980709607103205445318613532915751311604436132; break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(5); _weight.resize(5); _points[0] = 0.9014649142011735738765011021122473096194864304517102005637358130565651259599860618861752355046079332; _weight[0] = 0.03149582904338455237058463313697596258298062393862741207778897431029291618946468034442481885294203153; _points[1] = 0.6954642733536360945146148237211671613940015549986483590851972611325288138368238668739250465460035525; _weight[1] = 0.147817740145233340701266438683407157647088123302568081608965017046687166399586788131013562994436696; _points[2] = 0.03980985705146874234080669009333316770426265422838516194640774820496474562617430685450225908318456724; _weight[2] = 0.1935631804533033585487219432723014706300773723042959314554533779929073487933655762166538198748335154; _points[3] = 0.4379748102473861440050125200052288525167902742147401264690572735060053301210965344528972647247758255; _weight[3] = 0.2927739741693396173960757387119177719719819871066279796088146708892391099142328799058439924278608752; _points[4] = 0.1980134178736081725357921367952962360381863588337888792083291768272087117286465026597729214141553943; _weight[4] = 0.3343492761887391309833512461953976371678718933478805952489779597608734587033500754020638058499268799; break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(6); _weight.resize(6); _points[0] = 0.9269456713197411148518739658196820110561724195422832527244670796566452024525282438143394800135873916; _weight[0] = 0.01747660362721906351203460662479774148929411516337233806318102016698451025225396235129028371682599565; _points[1] = 0.7692338620300545009168833601156454518371421433222954161669481696365481305739532856852002115427743676; _weight[1] = 0.08791033110101795101635324861086019025599267125557955276461742797557562193809890394074140334644478675; _points[2] = 0.02931642715978489197205027691316491037373039256371492778691068394493603824166577874863094836518436948; _weight[2] = 0.1446206614510173673109086522496639352868157617754660467953566358954592311021538274525319681276946567; _points[3] = 0.5586715187715501320813933418055219400743682889654078255557472261173501228974210783238200520122825819; _weight[3] = 0.1973223017813105282411690210967195758979330860171400109013608542168691368036765872249948825320820935; _points[4] = 0.1480785996684842918499768524959792122302487748085944614125946418015983860908783218063693976617475761; _weight[4] = 0.2710849944630372336813807932761008554153744603412901289757132736303442652218840953547976196174453532; _points[5] = 0.3369846902811542990970529720807757051975687500284733471225629680736913505127840608524091411736544825; _weight[5] = 0.2815851075763978562381536781418577016545899054471519224997707881147672346819326236756438426595071102; break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(7); _weight.resize(7); _points[0] = 0.9437374394630778535343478089676888242202344852553769164275572083026057856516616966519018212670469614; _weight[0] = 0.01042872440561480817938274860756603627285202470301292757712310575208095879452089021202956789850911329; _points[1] = 0.819759308263107635012420057190818215457939379194529844677374444720182011832042478974289957052318717; _weight[1] = 0.05481671344374695088866209671645257295417296286400596170705830992550156540265177605400520195059885001; _points[2] = 0.02247938643871249810882549957084505992217390723560038985928427605875857575812188014380655937699869036; _weight[2] = 0.1119347268469821023031242268598512673581543443021245729793031713310010121026578504175518039330847103; _points[3] = 0.6473752828868303626260922298287587971919781169427252176007906613661670650910811632587999055012469012; _weight[3] = 0.1327693929309829399672959775272798268160367658936009632652402776516685774949256903432965593140492997; _points[4] = 0.4528463736694446169985514423476511453596140721008524586919906545143298698851397040631574340782308227; _weight[4] = 0.2142501313917473399818245059997114645430845154022713345106969229642921740907764451829036761934830747; _points[5] = 0.1146790531609042319096402370675146270777298245319719453889897349515683398313771981082383887487264664; _weight[5] = 0.221018516381749204842241472739215549356686584462224309432389243557215340531236858632022007842467717; _points[6] = 0.2657898227845894684767893916933899974369968814056098940206796867530550186172425454664726006420981076; _weight[6] = 0.2547817945991766538374689715499232826990128023727599305281889688182403715832304891581911828678072318; break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(8); _weight.resize(8); _points[0] = 0.9553660447100301492668789781416922384764228669900323904483832488568928548867910582521230305572279597; _weight[0] = 0.006590382884497597709484632022178140232917756360727536905728685105949423544222450202661257721956446443; _points[1] = 0.8556337429578544285147814797717850302864781605395751604095670933496281754845563783672978210969088188; _weight[1] = 0.03568580531197241678710559440208448516980542367921554701695861934230527222794506401464323963977834126; _points[2] = 0.01777991514736345181320510103767906126648839823850043366560783167875924757578300659726427675032243899; _weight[2] = 0.08910160872311186265243123906792652143579327591629599162893070650953490775807421614093597558657522439; _points[3] = 0.7131752428555694810513137602509073414468837909454265589730704929652137959347225387189767846054023754; _weight[3] = 0.09087863900939779616611084219138819921280234422368229723283559301918617746520672846935872214646562912; _points[4] = 0.5451866848034266490322722299532130551329800560537052249374829413005927647507051249095965493813529666; _weight[4] = 0.1583991989846383202408163787197844534389880146907948116529832318421622220548405973903502249576825338; _points[5] = 0.09132360789979395600374145807454135310704047574456766876687017263479530047915987523538037892138190674; _weight[5] = 0.1822380472727472526914449235657595207038316830973420932240504518535206139038892838023314283723494268; _points[6] = 0.3719321645832723024308539604826292446681000633774806778676385412497303508594868127751294857726545931; _weight[6] = 0.2120947188718600214090621928223164323473301836600784587558404501112348205250685256991863152516914685; _points[7] = 0.2143084793956307583575412675816703226744297175224765908137326191408580982640893227912904964441607055; _weight[7] = 0.2250115989417747323435441972085622474585313183718632635826722622161065625207531342805328363235010072; break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(9); _weight.resize(9); _points[0] = 0.9637421871167905390588356992319185479241288771581362138479503914355973155457527404910756919669630462; _weight[0] = 0.004361694171546261745098102240033931989346658172745913415730741761530425250798256232225741196300546876; _points[1] = 0.8819210212100012998077148880052647763071205854487038619129766513283089105657085985563097864503385465; _weight[1] = 0.02412000856957075810345430457380053454860935724228865674231168030985443217573930570828234243797814129; _points[2] = 0.7628230151850396146826933071467255329235111827037380779911005908346167214808478679770430364298828452; _weight[2] = 0.06360964298210800252338021387173996796508686851938261644837130415206699494945930902374759895630440021; _points[3] = 0.01441240964887654863282674081081323941174473105657808607075067912813887583460044894395069303727210119; _weight[3] = 0.0725560070465597429192991958823192775999960953346010980361779016438558511176469019496579491905235033; _points[4] = 0.6181172346952940246392297516035044802806674046397913475060393055585778777428482116865746364861237204; _weight[4] = 0.1168023905903302211314630458032802960303593103025793617178533568693960614302271220161688241514649212; _points[5] = 0.07438738970919604463591818595599858508097691328473519842679960274501992379023428096791242945498303357; _weight[5] = 0.1521485102186163251601586075079285812132106027704451841051048669451110654017776300437392883754255205; _points[6] = 0.4619704010810109348831431086805643081072330679787275209992998979929435248645151935609445375900637938; _weight[6] = 0.1687166436898406987885000399171749817104627172846977348696669835038285248020424407597603571357401275; _points[7] = 0.1761166561629952818631757460725685864113860479693058739346483371718478923148052033071589166216033504; _weight[7] = 0.1970674843446914103203460407385488509023560656011704825855076061845847487566519614460658661365497313; _points[8] = 0.3096675799276378170596204672294840488163890844971259245735924385417910631238453492458723772259274575; _weight[8] = 0.2006176183867365793083004494651735780405723247720889520792755586297718961156570728203520324197133498; break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(10); _weight.resize(10); _points[0] = 0.9699709678385135029569356423655920593053451564625792084689040051698797214284804451045965026202723376; _weight[0] = 0.002998281204812788056496272008212784833084388876744268112203022420650156860159853329068353288083480999; _points[1] = 0.9017109877901467703487989784097679814681176760729360475326567373055975858521386207932416878958506861; _weight[1] = 0.01683863956596637483503273103740214403152870043903156313634792885260503739501482295430271106515098109; _points[2] = 0.8009789210368988451379463016172425246730022622599153383117418553952368566445573598703594633591531736; _weight[2] = 0.04554918290652606517297529885212039260089893374717979072674077076892597133564094826507860794028660136; _points[3] = 0.01191761343241559690974558695898597603002784725837485802027599304441351971793953552093495537698887493; _weight[3] = 0.06019901604807404660130951104775872423481025847493586386892954004541908963029659975623116469369904037; _points[4] = 0.6759444616766651073571505089347614715039952762295357455139412301626256578790308622295455518800017058; _weight[4] = 0.08680381281430125184491223517276793341846841416734091479841192293605468475240771493378858474227150558; _points[5] = 0.06173207187714812552262936719425014145287208036190213218470079750300542267782554988602355308971116556; _weight[5] = 0.1285743090181651457496530772577303833702586985336065153964167070111045190343947831187521473702406254; _points[6] = 0.5367387657156606328730951777118890227811982315666478711601841465166401511417696449330275943910494234; _weight[6] = 0.1321061511267007583321490050097555927283068703402401952281986304716746942938517327591629187622353407; _points[7] = 0.3946398468857868429619521050776075022149391536489841976946611563878829320916183985232456263028812026; _weight[7] = 0.1691142193816546648612911643310017367123791483004682190032143948519815060462764343108107374876334037; _points[8] = 0.1471114496430702404275994355798195021337713619059297805712867093259790600660861446700545255054338431; _weight[8] = 0.1724226005783520728566667214238285835326209744871433508891823477804675766487885763704506821303024848; _points[9] = 0.2611596760084562402660516580548457231986357161379567253035521310935009972624582003737324443405623491; _weight[9] = 0.185393787355446831689513983859421724537643612633309318840354734861116764003168534202354092520096944; break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(11); _weight.resize(11); _points[0] = 0.9747263796024796502466688135383708980845368176554858005326201789921787651358684645855413515511531779; _weight[0] = 0.002127334586489082815067761922450647971339436325800608036378943516449777205231547251874812699984002648; _points[1] = 0.9169583865525948532931346270180274177520051095629925713521035439862432832098136415299370694612456098; _weight[1] = 0.01208784192095955158546592435315376798873973678286821945884976723777153926935372997535984241012638151; _points[2] = 0.8308248996228185740305665439056567039439893043182143500186679333872078183180614211671796544755957774; _weight[2] = 0.03332724690336138483149424914765120772804900513036485126183239293221332762553574610457746434628575068; _points[3] = 0.01001828046168040584302472986780478481479194051621623866216912370277685746144514894811474690557217854; _weight[3] = 0.05073468137628285236988931703476675133207796896933092717229277653106864390791321026906916586123809916; _points[4] = 0.7222032848909679255633213078046109071372364455125913944559779818780897684066745302575181714890353345; _weight[4] = 0.0652830934276666920359077307795285077879127343290875547799110545738322739215666227754732791506949874; _points[5] = 0.5984972797671391832277207136730435902749187521976111511339511314695356530954712310305911412553938959; _weight[5] = 0.1031827213445951603861732834892155856521211990658746337177474052730046190656697225942280520050772121; _points[6] = 0.0520354511271805525835426957729643224471859250583818355555288193433032785128089556252838329676615465; _weight[6] = 0.1098761822657429965174933633313011358561393819756883634817227365336995079659568003680704346417901073; _points[7] = 0.4681376130895840420831103807577535932852717675509161657042498476028053990410676565350775613890232895; _weight[7] = 0.139063750316366099598101779267868198861848947191484699597473899124092437083773623133953772504386519; _points[8] = 0.1246192251444430737352995872639092292474441300880058562471871920162296059349519090766521215975420844; _weight[8] = 0.1512400961143739966427541096833209231046779325373189337898872562690835045663875992951588992175330985; _points[9] = 0.3400081579146651882336052338970175277313293398208505803470934737382842096120712309333935896431331419; _weight[9] = 0.163758205976126940779173703886922409929998051411988406020634300444537236239007794642416009985288504; _points[10] = 0.2228406070438378555078314534573627644117252503274297081643638173616062308369832016150585853516004854; _weight[10] = 0.1693188457680352424384787771038208637870956062801928026832694675642471331496036035898182671775944239; break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(12); _weight.resize(12); _points[0] = 0.9784379368341496390919069169169960383680691296676253661798930654904321350621424594217105164689234999; _weight[0] = 0.001550364441876056714491629023748274324615848140402517231572360221265942541320023063415527150625599336; _points[1] = 0.9289421012644110178488101551343152998504932414769823471037599293899243740926428914029706095801991064; _weight[1] = 0.008889615591336924645592291731656523264334512786299205998267553396394713293187392679750568752472830688; _points[2] = 0.8545525437649358807902119164056171284859595037395583869615217146999851616473022152580139867380827058; _weight[2] = 0.02487201833284453121496658611334714530755126260542143269983812777030176667500918269938718422593047246; _points[3] = 0.008539054988427419368664460877839802806090414566577746496257927301230364575762166797509842961307629987; _weight[3] = 0.04332972177374353464916694415595120758543212996143774483351792036632706037307065931531595605216654504; _points[4] = 0.7595988895252270537426025740434203419422064350885379264310222786423119973912528922496277727549814325; _weight[4] = 0.04975356081853086402501634458003176107706292549054632675888919684570712369316153894595850288044856231; _points[5] = 0.64960065027725499276629172334298057222565311827730373485571958964856442485986620008885607294565333; _weight[5] = 0.0809033074138272335212928485012913254284908033388081504474420876958459531768419460967739126481291571; _points[6] = 0.04444646315540772302546679878555276624130930378899710999139642043436028639661647795803987919635307312; _weight[6] = 0.09485570396075494026861836439417384912441834405354373442454022749260726809250625956872612646956304494; _points[7] = 0.5309508493128176706289302428968181393245082635016252048349547896722090314354827164359000778197833608; _weight[7] = 0.1132276874273352638874022103122425258241607825709588607721683748382582855487003673371838524124059047; _points[8] = 0.1068544908834766576341067704324992625897998143695000275580631125622836143405186814627639697793505886; _weight[8] = 0.1332135012533463962616689707039492301237993045862266872004033332675451141542576651800487628901600931; _points[9] = 0.4105450812014576824890343505593324118433186951909181754985565958109519682767226149737373217217664215; _weight[9] = 0.1402186799952601889918436100593420114476858105470553510722523423091126135591673604029597265238160539; _points[10] = 0.1921510545298540409910572562286133303827013670215218660373964882963368867384002033277468512639620344; _weight[10] = 0.1537932053600820125624089382247452165048916722672790101081421598961789423490551582621434158001226839; _points[11] = 0.2953808842625802216229168343760149059398907133108521080514580880514097551832904806231230987696368169; _weight[11] = 0.1553926336310620532575312621995209299875566036520209784529663159004552165437224464483364641941562454; break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(13); _weight.resize(13); _points[0] = 0.9813896349890121485602806221597123115526801027908002379955097186555535838880620308147789489545503322; _weight[0] = 0.001156113409872385703193022385189204618455050656599975054649145246648958439626729696480355938729999156; _points[1] = 0.9385244591007310123976333867652993517339853062062887126354508873721247374248021832126814047065480957; _weight[1] = 0.006676718501547543613220841284083742579141287031654765750719644999750581810915764860757199651559573378; _points[2] = 0.873694821306689419367714567131743891173381534920334759444696161547514405472868541853111673402239862; _weight[2] = 0.0188978489591855007323601730984825277398072170071017667796222649055973489956725747846467746142906843; _points[3] = 0.007364651026089321650691498413822343611205715616446000420689416452269750033894550997416319128445293114; _weight[3] = 0.037429463171230350386748817329987677463195653326885579415509956584359065159563626022275791014111276; _points[4] = 0.7901570282734374855528633324993759322704266136136999317134349971780526905331558640579365443870029772; _weight[4] = 0.0384279143294396412917909957274853493954585050845213350300056554246318753846340556589445192487208949; _points[5] = 0.6921010017196016568970419516876697301808911008718652877381506074556730863418738419796277914411356902; _weight[5] = 0.06387357432440629768476274231692273392726396567637467815805792742291004917213504197268100373444847643; _points[6] = 0.03839813873967835037683252486414168591782983413635468761241601179824278069140258974034999134662094291; _weight[6] = 0.08264057883967859695322341390524823284515157447829234410387722644326630504728309789009709658118130558; _points[7] = 0.5844439640213404555042208478109107062952661618107888083023659837678484044838564429563713070829009516; _weight[7] = 0.09199156135210478662651956906042682442879113791215881297685885117558806298728604690294432003559148446; _points[8] = 0.09259522469900263528289137543861635588927985865429292632366593235281921073136849542406090039759718093; _weight[8] = 0.117907875913294165072323006523922488540725339188477464752066853333436329261003962309016356899786218; _points[9] = 0.472584386004117725175094642678597272871548735684737639137060650545639928993354340136687675801761997; _weight[9] = 0.1182409626281846548385803119060635216477645343671270767817530063264325986532512918418359540320018567; _points[10] = 0.3621313972822388004086812982273215588635004488227823666951627890767765685364866146107646481156613177; _weight[10] = 0.1376310589751308344356757788733870175764464444515615290689142927534206737481584776849026461687874131; _points[11] = 0.1672510113915577314955224787593571163747337087390977895834969262324481399932617359780977489832830797; _weight[11] = 0.1394269365642887965028332599008539689313215803996770757259514170749411407585930292996487794819507198; _points[12] = 0.2586235407057625165897907328226910025245301373917701116571591768242959721348720274973743055115115389; _weight[12] = 0.1456993930316364461587680676879467103064777104195675964020137583090170105818763010757692025989815253; break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(14); _weight.resize(14); _points[0] = 0.9837752340986002382812280091410008568029060918346814026541382401229231239358663224051124039381821732; _weight[0] = 0.0008794274174943185095245122078521822019754611306820543635221058449937077708215836466191607368411296988; _points[1] = 0.9463027000602753835334059434247240449122575138455164975479188348405641933767500076215855613747667627; _weight[1] = 0.005108202635375307895958999219885338023800341194130592644971481918873169565255964058559811747742715242; _points[2] = 0.8893428088195155396908716609464895647037628629053267599145054482375380565684526275834413083786664654; _weight[2] = 0.01459296826642524288681984453495518538081081230683288195407175989264044277989459235431320050562344511; _points[3] = 0.8153897394434746419730742186120575147090134055115116514499564217599632405912766985454621567772925713; _weight[3] = 0.03006460748785728700681742950262958234619962060282172680123539669179027622963256575707868303499798465; _points[4] = 0.006416760792818456810820464094507178865719839912244884307238769932733545613705239155655121904187687092; _weight[4] = 0.03265350864519367963889885870153317340972173478361002456864218835784085024442850788249598470811557747; _points[5] = 0.7276764528892646854360267279903316966165601685246486600874809495965456531104679399309294019000621421; _weight[5] = 0.05084693081429752423013979751491821787681438824769049239677309253558218964169264456977882426851555228; _points[6] = 0.03350140453201314003596392857057248161039076925284236707232192332100661384915949406912586179668633199; _weight[6] = 0.07259215611088738637530423764370492657108112269853959863122175065021865096017202301997584723508772513; _points[7] = 0.6300366883704039578844805941314332791605030321087179470245277359365694220786253960307680873297618343; _weight[7] = 0.07488619291797165331187660365377253958575162997750359965853311053036376136149071602224720460759622726; _points[8] = 0.5267378613398730320537269448128829953760927123999441876600624391842836631760001928071840738368501546; _weight[8] = 0.09903890904640600916187235867150676110280042407247668375164802867487908835414687742741451294178579331; _points[9] = 0.08098549968195518439245130773998218722766514758665499507829939127797017196531825081787486655370778227; _weight[9] = 0.104891907003833491182163612325355902630923882710021642880128189982150297028945256249301997973770032; _points[10] = 0.4222946573075702578404089875181026958217938762273438789639540713852576268236287646690911714244228904; _weight[10] = 0.1195711180450631684452281183371739455866965354227942932369779043707771685058862101141744024798095759; _points[11] = 0.1468048676812137299236601652607991515599694654279756227180485513313137055587256285457460550167373603; _weight[11] = 0.1264260511486584068850582307158644869441896337243628225912745291094341360195650397288853205184837878; _points[12] = 0.3212717439889361744023403974130354496573046310098509725155244153528428571119004042632189220394104758; _weight[12] = 0.1327847012521708502656427173025549628480833128549141521111606655971088192656782192878509397656416219; _points[13] = 0.2280842706492579915346440986199429719415777248320505178336090146170398503780540680375636284189205411; _weight[13] = 0.1356633192083656742046946796682927954911511002736194344098397958433474422723897998813041094757195334; break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(15); _weight.resize(15); _points[0] = 0.9857305452631742252659006330591292421044806623979681396367496904534811104340037194340828859918697385; _weight[0] = 0.0006806847682757921219050495213766638432680058407302207119346460095765860960776864024700562258866547623; _points[1] = 0.9527004099058333143380442075242620935055589938201492599119746533434704857023258451913238950513425218; _weight[1] = 0.003972469386290076082067610229152060080164258093234183168970372439783118787506178115381153751505928668; _points[2] = 0.9022867006793780266312385046620090802654876855849468717160511280017608939616471254566098257665163856; _weight[2] = 0.01143444478944235234324930059485362276155780539908978755489501360681769092103144487510479479673066532; _points[3] = 0.836430960605610123975559085654183196614405051627992133778977423021298990485129486291590400663182545; _weight[3] = 0.02380838071019515768606037392049978041111467814177297555284892510317273317213807457840075998316796784; _points[4] = 0.00564068897251170975750646657944420096608410698813114796797833513821814157573636404891569720358967909; _weight[4] = 0.02873413924342504603822660041253805338312894456953019000237612541859506016961128946212643705469219694; _points[5] = 0.7576647390313427119970742777402853179406886187590936481745381257951925531912300645820920629808513943; _weight[5] = 0.04083261854523967138238199054130899238084842965133790112559698218356527355006904832983602017392245969; _points[6] = 0.6690151950299598765386956390531395651245327979857527236420750144055549199665133052913040313820535802; _weight[6] = 0.06121953917293708160858361757949451057101860352459654126809960020356064378300880593208989800744638434; _points[7] = 0.02948229864794248663164098471800370918700961303166077760161299352098320969659464315137326588996548668; _weight[7] = 0.06423808974993183175709533215289588884744112148800311203074357885220757249757941129839863550239944708; _points[8] = 0.5738891609066858806714538552375264393339926267874317142496528265661645824810184689905478175189410147; _weight[8] = 0.08280147036884515645762630104986933848692863219976179565650568989405659185694148889272203873424612482; _points[9] = 0.07141295311515884005478390174673491912187290234227435678431701381106489005946195046185073236066259622; _weight[9] = 0.09378327988811985135869114109359384457615020825902727102745231221097976938006047088803797585845547739; _points[10] = 0.4759423084632348605725889920158496815427420479142534143461931573336140130566014455167924185629638753; _weight[10] = 0.1028247246237729370608003387427179543718483332403108120303957336121729678371306599559686414960307901; _points[11] = 0.1298310255535910559712545380942899123177230784713915452688927991403297243171614954096840860975794594; _weight[11] = 0.1147976510138825787492378322328278794932624818571617498887067215859317142102959221744686929404717464; _points[12] = 0.3789386886469780381065290091427738514254527443330112900124820663975192124536679674713512968590311795; _weight[12] = 0.118348384119425863130042337329175114508728339622021249334756378356496508819680628536993165372220157; _points[13] = 0.2024927550501040475682199883202304426029145838857816183098197713593869872838287905637745131407654636; _weight[13] = 0.1258362132971938191853306984611028086637728409087228064297723636579546705764893008808467616699069615; _points[14] = 0.2866060862575270599840260454843964124631835183282258747277172597764764143673373926548361027887495962; _weight[14] = 0.1266879103230227850387014761385934876207673172046994042169455568651290983423795896771549684315259543; break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(16); _weight.resize(16); _points[0] = 0.9873530206260416180311559031679007912251798676684086442026613475062814838402808784348941153083800942; _weight[0] = 0.0005349873301110723536352523245214688183617068853187298053447754895460255914769305758271994969541214465; _points[1] = 0.9580244176904754545449593445542902781690561530886972767565858987751500797120765811025149504454439451; _weight[1] = 0.003134376947191639406144801392810125165152211379977657619913840594889257190569195251860266967518853567; _points[2] = 0.9131083765371412746295855467032689982673591902958463102880070958924077633184989381448279078074159235; _weight[2] = 0.009078464772277270136442222357225691316200205613577463083584857434992460933218018083501741086092773742; _points[3] = 0.8541381477752106336651136838193234409326728494243068253734695081123194081450149725457651384431831747; _weight[3] = 0.01906833576933187330993392764154659000664170074848288047274653307098419606424675728205551148860085042; _points[4] = 0.004997299663771921042651149601520690335334381543416344377970522255874964157558701037502647102439618306; _weight[4] = 0.0254786213146683694950996917591554882950068833129658279912640220737138513709595935845618250570916986; _points[5] = 0.7831225539648680838521817825620535305797128397296362805179828091518110236513200121261822163769397743; _weight[5] = 0.03307916871127158700245048416620955670443497800101336034230747234827543543117463085957742175622968897; _points[6] = 0.7024801379250410444548069755376171424391608550242998874533600580057788358037540611975107319064165735; _weight[6] = 0.05031846621294008117130791499383570158153393032155337021668257703869079487755627644770701989152686714; _points[7] = 0.02614351368139405197854932338054296839544549585254593258969286943447829808354691926416178281901416681; _weight[7] = 0.05722490518028629871511613797483697079230632259783211879752488731784247248602820192649149147829524039; _points[8] = 0.6149571518764895174896408338190829300761737909570376040266234164320457869812106383069644402943986533; _weight[8] = 0.06929563315857159820616975574746178675946381337997363992181349355292028244090523248488698582693559141; _points[9] = 0.06343094558383674549252822277070085989944232720053606329921286336606196501991941696906214544072557158; _weight[9] = 0.08425886231485656951503148108375679459878568927192553127356020255912965879211860283525552208869890524; _points[10] = 0.5235341160251683205174701650756566635860722410235498499954471423511414451699874777100902273256248828; _weight[10] = 0.08799476437848784634696283460898074168566203452803298141048012151277732409770913018617800056991931691; _points[11] = 0.4313243435956253750835922695827402886099831559358862798400496976431495143682652974446555198615522437; _weight[11] = 0.1041282756876131675099467043785466919999001988893057566387403573176304031195728572957688903687759438; _points[12] = 0.1155984375798159401789236282473972563726614701242300531764409420939787630288591298296722238684111472; _weight[12] = 0.1044571888079182947270193577860579511982476687312989947927842773279309587346572216043331398329162766; _points[13] = 0.3414679275478230686258992979386936719113738330035523847360437885913802004557323404561019734950136269; _weight[13] = 0.1154377592185356472353639909359373445130799205578497513133111318249085177414985560302496131357962334; _points[14] = 0.1808705596578836662475733912556982106123115303246260325696821028817277573264066422281984062600090246; _weight[14] = 0.1165084804197116707586035588447860117666087389169987223931858385521171238120053660291409688664210766; _points[15] = 0.2570248078451708599229442395592698543456357763791818065543456950821702866951437507776531490026073371; _weight[15] = 0.1200017097762270141107718840043310847986139968638932139267556119836512373163034295226044021116885655; break; // order 32,33 case 32 : case 33 : delivered_order = 33; _points.resize(17); _weight.resize(17); _points[0] = 0.9887140406322437514171214022529600950271304358332938882155721604826076932154206388238562326534443377; _weight[0] = 0.0004262325784138671616503014825668479867743121463983310760858304095888980890581472393557710822246507172; _points[1] = 0.9625011978233500412504607753885055612059058670805919300838487295359170197761774966465922450143861371; _weight[1] = 0.002505366878782441497821305040213450564573948855367154150978343268848357634079495184968727608399159802; _points[2] = 0.9222430345922984084871073282303817691602583776161059845144196175091317355129889510768256352598660848; _weight[2] = 0.007294460966842812890068913047567504341965175593956839929686155659396138028717360227340619459117792835; _points[3] = 0.869166059567413619204446498011157536480619533973801747094055147008674628966944082007489138202985139; _weight[3] = 0.01543284442961187739177684553210850040977377913889605049895702539591618751800244624737646088996791658; _points[4] = 0.004457993567787391754506229111546399964633760100259970537810725491458494250043598437019664865493643768; _weight[4] = 0.02274540622639378829776020880683720609452057522373976015749508324031731694387040746972125365570310004; _points[5] = 0.8048835785249664919991777013970255022373475851134620892027287774778381435285669046560052364431526214; _weight[5] = 0.02702739490460156181927791662098239956927108947038280148990998102655235785834616122857118941751450445; _points[6] = 0.731348952734051382133021495562975876964288241933596559645743754150107521905228731408698776571450455; _weight[6] = 0.0416065560205907241200257327515462961439659897769936343927590006521666545011746825379533316882700652; _points[7] = 0.02334009412377427396702152820768312299586060057599419863449974659248238243339757550585495829405487255; _weight[7] = 0.05128485584041035837150041049462227236569515810109611130226859683533715551484088425680168656439029542; _points[8] = 0.6507965584533822647314874073231465774368335045672017460161248195939594014514835415159009295305527969; _weight[8] = 0.05814904817541010112637471093584722632635723649505078175048544545500447542788986279551396785911403471; _points[9] = 0.5656739668866343319033069760096456365875201180074841733261734685045356633266844286988014211643520509; _weight[9] = 0.07518465097422447606286399704863748886393605930789172672958010315085190595784826875016684063030466313; _points[10] = 0.0567079687690782395327133315565206422583954294330082911813093706572985010525054793316865221556378879; _weight[10] = 0.07605145765148480040294983401333088847853799893124803854611256634704675720143211718355596447759322621; _points[11] = 0.478567596853079588783710462859367863464895919649049929129470687367069564027548762072173649770694993; _weight[11] = 0.09095558079828455499487784832842234327421076718008184235832962158876271346851796676218008225388408436; _points[12] = 0.1035554329351970634134912269613124043655029097199118685108784305899757515572621444529640256077589927; _weight[12] = 0.09528373874923688384115041853141755745633038829194399052580502788189156712111849867133924841409385054; _points[13] = 0.3921241347220956580336194633319030935711764025114615789973484145740342676368815150194126405593319517; _weight[13] = 0.1036194838585926665104294095256400693128383841028677293915780879742991691522033818310328703299843335; _points[14] = 0.1624600034281365499816295439141031838558059790103253735306759523919908694781359490868358657162134059; _weight[14] = 0.1078158633350549603832320404930530506583776814863800678782279266510495293543282695089808637986145332; _points[15] = 0.3089701177521959033175242612862631293729470242289113159247135612658365232010381202115837653514093201; _weight[15] = 0.1114698358471210991542580389815065276072464356895427892969110466585885649118705952943517744483555478; _points[16] = 0.2316321257771721829467972257383587479080211677883964983117694939499389815368349381911564356963581668; _weight[16] = 0.1131472227649430259739820683657003705456250202081623505248301578043822513167014548107893476058445038; break; // order 34,35 case 34 : case 35 : delivered_order = 35; _points.resize(18); _weight.resize(18); _points[0] = 0.9898668482025971344167630227759617852272654029332944782218012796457954641639004909483002293295752187; _weight[0] = 0.0003437381681963917846247430221834229151499287042287230354055143379188235978579521132163657479768314514; _points[1] = 0.9663007519456325424115067464906798893423212721801663890681129055831478702436903498571145506943067162; _weight[1] = 0.002026050358602094250494341820341870894120024561864795036338823580354925264367517227275244576909932423; _points[2] = 0.9300208896996932164819585047276942532417932534056115051608547073927014042784861756734769306165351191; _weight[2] = 0.0059248861288656750073070124596837593021079220492247058775169782719872717029736487292831561213573021; _points[3] = 0.882019825362079146731241208862299348005417555808720267548968016151212864669297713515695332184984095; _weight[3] = 0.01261207776476106746655648532508006599729513787362061969061111331011139156523293135970609947084018862; _points[4] = 0.004001479383867386797042719910270824223541185248785833363554578344319893757114842618058463407348803735; _weight[4] = 0.02042867887008126774453513345708525680111295405537645831789221858363235004907653637524376483250420953; _points[5] = 0.8236074297748695658739488546206220397694931892518864127892186510351045655222244744576037075797895574; _weight[5] = 0.02226374019481872490578598695715605901312264527880759493159497248783660222780139439098845774611394999; _points[6] = 0.7563771934061506267981673359097779706473518228163447251511697288815637982124887651626427336664155865; _weight[6] = 0.03461660096179857963094037301158265977500547563449518843396957076139936244796763506359293284799136368; _points[7] = 0.02096364839376647799513560098656109675689180176538502182710065123636384918467384831554500962763531465; _weight[7] = 0.04621270032675413386257866238629064300957438277868616878558323293289918331132386077257775663020718931; _points[8] = 0.6821630391136515650188220799815272984812129529984549136808308873845014736266989488992730818190698119; _weight[8] = 0.04897518000258343319573971841628213770242132719001940867089608917054120707937976989292545511549928993; _points[9] = 0.6029893605598320721374807041874726334761957597253021332090631742614856848258536813319527445372951366; _weight[9] = 0.06426961225525709848147580633301085880443436756721415851562729065246516504496265169885498286161075816; _points[10] = 0.05099404158789055396677492129985342752684335179502102250490757627054764167157590973686635778722014573; _weight[10] = 0.06894223784384404993007739031698519886588775153771160210566885018965190752564322224893633392985120252; _points[11] = 0.5210158208707761473198147915854717855660664902319620429318729520457293008516289285224828683060695134; _weight[11] = 0.07915832457721575745284593825289506100924953969440499641376678369347764830926340546224343749330271028; _points[12] = 0.09328039592854495077760905882606572909110423169403601965545516113954878960271296675572769974433514713; _weight[12] = 0.08714781414928617652436330187061168404379158056036702876225120391972824949607113158995664181206534451; _points[13] = 0.4384784492241381176518542603874069642668262016685327878789060389076575892412083497577428502906842642; _weight[13] = 0.09216480198048256152417399078564414852612846466652256992046258396446590593706414236053909750896569121; _points[14] = 0.1466701036776179571516088297346119926828719790587607976177450052287675453102203350213112764829923106; _weight[14] = 0.09980445383540542778220444771221204607299051846682882828893450936727624068650930424980230859564698864; _points[15] = 0.357628649976634629398327142983900163551554823411966631545931014342118455385001575208686365462093356; _weight[15] = 0.1018338577127481863631259923308642099185514417373884497748896700704506385950017111137663314704100197; _points[16] = 0.2097070395888429667218817114520340564344572337129713950314960570502750540556726532998975043202670298; _weight[16] = 0.1063846692636713200524475540357298948042757460509025466150822041706738793410034729395308181691385946; _points[17] = 0.2806717900601716991068192620345454984655482490495543795697683718559155121543067476743790509001396303; _weight[17] = 0.1068905756056280540407231215063610225447807915923361568235083905351292478184997124115608137022023352; break; // order 36,37 case 36 : case 37 : delivered_order = 37; _points.resize(19); _weight.resize(19); _points[0] = 0.9908518052709556853530948352201172311414908971100306236116888056786547010228099804847460306449291637; _weight[0] = 0.0002802551883567726748812555744779639105600352061968937989749794735813128057127028672314734203440280795; _points[1] = 0.9695526370802208854719287862322660049706018326703098706378843584104484087310020229969934667704093052; _weight[1] = 0.001655761521847964386692006035428965858679000056357516012475017722076239956761833907883794506161951596; _points[2] = 0.9366958480743650805439055020819450266811818650579229027664901891451477928206324529848022077423518401; _weight[2] = 0.004860183424086561415136332087732184813912903332909763493482554844577771785083994880850628451944158735; _points[3] = 0.8930931349818449707509811545649148473623623153254222496159769165216758357705561673044346695221435769; _weight[3] = 0.0103995626565567593736110930883662168930384206107188660197640952475440944449729962894776242764085632; _points[4] = 0.00361164281855689303445321012625198346733275355003682919557113405867408349929295207867441611737690897; _weight[4] = 0.01844807545006615338353364973844063664514747348633002796850199039649780838921192974783628927072788796; _points[5] = 0.8398186157087110778386362944292882560999767507786887653784723935849407017581430396000219565181239941; _weight[5] = 0.01848218385863319552539537554057223036019964756805820620573212876783093453134742074611622587750882251; _points[6] = 0.7781842229767616142092996470420758791283656925578678775853071098643813559091198697527204996713931532; _weight[6] = 0.02897969422421944931400246601007177204686871789749054254495145220324571113131572128329170246403961399; _points[7] = 0.7097076516539023988437467831116355144608909392408906399894113065110659853244124588493665962726797404; _weight[7] = 0.04142334512551560975967431967755079490752620840476902467442180073660343747997340115254631834842068448; _points[8] = 0.01893183703158821725026452431694923674614045524658723100881095660938384328017838051860341840597562064; _weight[8] = 0.04184930350395978096289045666597507923015930768805746257353242039038709944828752655956749265005342344; _points[9] = 0.6360750448792708946910910570981647668668019198973285696987761671558681881849944225414546581423684885; _weight[9] = 0.05503611628869595628296228495903234773834971955306329246189976450730557322385402735173501701009562429; _points[10] = 0.04609793304843108357392477083545909375906241693422215752403930389795061196209317861717874813163785794; _weight[10] = 0.06275255057146579770871362891521873929256827500121891666402911779624971524361366764385547386229422249; _points[11] = 0.5590994926490319878469279758790814850485694130830958106631220505575721013709915928328659605930323349; _weight[11] = 0.06879791590381478285911941087185040133275238686516501251070694318774386308432389393107853548035543575; _points[12] = 0.08444722278420982059984790045116954757568547567342996475773948377116464751353011539561005675988539905; _weight[12] = 0.0799247400979834838805861528846334314674922993978160391753764141223543035502626214065807498002876862; _points[13] = 0.4806763935785519026332213524827062607958913951805210382735109679392374943149106385409942481778506352; _weight[13] = 0.08153774174367337114460345968332885877015622313913313374058373868512964935174277352830164497093084712; _points[14] = 0.4027367861650770951230470111048776348626646611402175602798726241469139422734752813325599363666955167; _weight[14] = 0.09204397143227682581672576212135660932951865767707678899669727185145202547081949806407328350372842929; _points[15] = 0.1330361885580987754240874239752163178462101569942577515312839921107421010353389269684892715246493502; _weight[15] = 0.09246985633715682353076157026438268785806641992726473058335517773221312455376698448719205979985072617; _points[16] = 0.327199800763811715728429965275660215695471902297825977016122346800179335288035110115459307288784813; _weight[16] = 0.09918209293741316028263210506706355271369499867043289653925746745730565272014624896429591950124037465; _points[17] = 0.1906685949047633510874746648871937910511869102030339299609855946583176259568932278761873481665619608; _weight[17] = 0.09986827648083875910656821167754631038635897016436543739205281535304647362910941203114996053856106275; _points[18] = 0.2559254034821029602520473972952833166965225034685666607613445549879376542400004376190936134395605969; _weight[18] = 0.1020083732534387925915104591369712164449503353535754486442048495248552091996933451569357987499299783; break; // order 38,39 case 38 : case 39 : delivered_order = 39; _points.resize(20); _weight.resize(20); _points[0] = 0.9916999557929327307665436596947020094146922407257829898363762060484693209882124325386440915297526987; _weight[0] = 0.0002307638143513705802967255226568830728813167721599840524365336414500605445638183205419184402827059144; _points[1] = 0.9723569466474369111847018716646485313955816199047026627731927463182820924001386973341816730256379103; _weight[1] = 0.001366124552171843969035439751076010937012975665488565633903154123928917136910100459323476024770590956; _points[2] = 0.9424655423631863386908918774276637741176541559385663981945954132521152784422837129268702079654087369; _weight[2] = 0.004022915227928156013814278936824336762072286332632338071325792455668677727129064099489345807286851259; _points[3] = 0.9026958717934536922763469416996700772864999425096913605427629927201564197787843225600147491273022283; _weight[3] = 0.008646438225380306267478104148579112377200533623295159410282371065482011056328697434527181907858069684; _points[4] = 0.8539367530358904570890043916180165250991367585634254004379927018011944789694603521437745068010803997; _weight[4] = 0.01545533586010292574715613428317953854964217039480755935175135440483625462586097291289321958626061925; _points[5] = 0.003276106669050098975264676112871143292010168497029644767295470063831412161584194743610327964052659495; _weight[5] = 0.0167416883525451139484695594692113303959200115840109757199624734967735024433026011320234271381241498; _points[6] = 0.7972775083365946877021888513752729067366395533700328215630061593076170870677993680779536516217368242; _weight[6] = 0.02440809225336020855759740649158179130555848135630839155224086550001630535743462622984150349854465053; _points[7] = 0.7339838582356594497320271932958407316824886943041261173702937687882678060193520684331489222685668062; _weight[7] = 0.03519413375841203253537225731014733812107557483384302032295579824046286874151937628916098565550834621; _points[8] = 0.01718121814525571373824770463158205217142310650921932699389301827173010299694629239806929714009353387; _weight[8] = 0.03806993892740333390463550463872740520842342009670349282847748189119210800461319599436674582927199561; _points[9] = 0.6654696989055136479537295881338505673772460184966543033851700597919629976818155341141170411631585467; _weight[9] = 0.04725059234709778562613272088316633264786049061137085249821716995453687692356004132430763173471373923; _points[10] = 0.04187143111776519524423463414370851114954902307898488691386863470682049070344137006251506996053615728; _weight[10] = 0.05733647475826119260703896626884620663676526982142598197751665152278167937952506465377762486070349003; _points[11] = 0.5932655334835064879673930865443734208473977411399654892597462260744716869678127565393306479732092832; _weight[11] = 0.05980348368525802609816497837917858372547486798828513804350498569402473230677222080215249105521630064; _points[12] = 0.5189842887035737296184117608302417580161348370994725645140664538072682185064509019793474604143752166; _weight[12] = 0.07192983830772549570812637571959705220454253379516249592845826823872807811447074214345608253045060851; _points[13] = 0.07680083708962197048187052301994736761573663220191864690793950376336940712642192742790120232186627601; _weight[13] = 0.07350047967329571176034002983707970547786941802561395491718754226714603265744811012378159064912127635; _points[14] = 0.444285286963011162128823917835975050036359774906195940140501796031417737745668160330444167600005532; _weight[14] = 0.08263541363333147565166589034452447111897790526008740772996796592380070257693533775950888460291073922; _points[15] = 0.1211898673236760656176861522945444470235806268943235898707887850377131524410713389898296198872403467; _weight[15] = 0.08578059167595640842829204758039989126835431719768784417396580841619485004243385901000626956881311921; _points[16] = 0.3708371805843968964453220795377124336991024955666204869798357877359442742262916746260159928230296167; _weight[16] = 0.09094117788270695025052175053988521021573682596634589761784828202602528063874365566272648430490295018; _points[17] = 0.1740471126355421652241579341996569921877681033069868901852878459116461179764358286536618532558350224; _weight[17] = 0.09368338372511565569498576493650134822004762846570875646531322483816870359335260839464910457532484731; _points[18] = 0.3002806768359501643662584187171734631746719686192409655675227716570747312020196669966322653788992448; _weight[18] = 0.09597092321988782503051231642150166590478722336093452405759351080479348502148876405591865563178148165; _points[19] = 0.2341918863135921908944557128323043352373021481231570747714734150082081622077654966849128615343105212; _weight[19] = 0.09703221011970818162036374853733578584979674884812765964709076549398887310760714319754736126669081831; break; // order 40,41 case 40 : case 41 : delivered_order = 41; _points.resize(21); _weight.resize(21); _points[0] = 0.9924354907256214774937902793889982068789303884718009223638209927180066784787668474833283570905445554; _weight[0] = 0.000191723737059443657959199685730487354781103587725215652416642420063697623658594870138319440832039897; _points[1] = 0.9747919756603656530791520912867540805522533015938938496488658734735577229804897977756749790184306923; _weight[1] = 0.001136997053399528357223582471399066105620591183233813017156494435682540599458716110693253354979571245; _points[2] = 0.9474855444063973466860989716611313948903221194844454580667087781352119091878179384063695290882740173; _weight[2] = 0.003357512043133831072552673187562964503288479122657296229103793587294405115801504672333876098665852311; _points[3] = 0.9110742658026157747796664327661934805098614945934874284421480344586480510586007787502760981037640813; _weight[3] = 0.007244105739489879730472547559442240697420720259915659077551736989091842220673176735262750458582496436; _points[4] = 0.8662997589709565970763633043579206958620698193352277530749704236585637715961211057848505289659337019; _weight[4] = 0.01301319484729121067081350259836615564509889406165673029724426861833434880054116162097542564135199251; _points[5] = 0.002985237283213062741888784075749833348045897190182021426647111448051836745590953162187136553707655404; _weight[5] = 0.01526121181304637819034183537343181870586287942279387814026920795825460055220015001230074094371099912; _points[6] = 0.8140736165126974167889441095793418834761159091940745540915800538406752152475818572669301867705564224; _weight[6] = 0.02067841951594062532766545282048113895201409713863530682554154662668730367463374091492579251825178598; _points[7] = 0.7554590544496869862658499728148629393663862148485365820478410117499734428055421838878873979671459391; _weight[7] = 0.03003974522638556952704078489267777259843073958271775542411847529124306280115798397937637514899445391; _points[8] = 0.01566228055757354733289561065567830149720101282930379057740690982898809746455700724957349161137445402; _weight[8] = 0.0347758521523900250906201851623707590927008222558555613311917759618246838587949059386947611441063847; _points[9] = 0.6916493150129622572194466789692474731114378954421946863393862533447191774980898542170077714513614257; _weight[9] = 0.04069109877964301658407017730425226266443064057334065145095136833448379998485753079799217710254713125; _points[10] = 0.6239433897212819474963058147440920154900191318154389436290443886013853942344250394844038511295753291; _weight[10] = 0.05204609359179111023564632579998986927183950203292324804344689812665144316827079944423657995726457014; _points[11] = 0.03819828824507355334483281939565778780322081882037253284478137692301839452272816351601955509121448931; _weight[11] = 0.05257452016640661293744751166188692897194515113241003199215036965601069114006596457477516802652630106; _points[12] = 0.5537195807282935914003656124348565130222723633112639658363114623393879406517479598116624690714085946; _weight[12] = 0.06337990610025468075352666693255656013349124651231552374816444219192430946831498393294160099075286409; _points[13] = 0.07013961906232579813984265676375811407081827897927155972627053849656310064145605407077470856671992207; _weight[13] = 0.06777358068880635103031781043749696727813442757543512272919269504359828524130368130679642947198108584; _points[14] = 0.4824074446124388805353185218595824144467997109997394967544461672573758804548396608944152015562769533; _weight[14] = 0.07388402529699877110380641152857474527467150780108552765426171096663124369742378311614318387497559488; _points[15] = 0.1108366733203635022376253075861617420191222518457438320529257958835099421591933038201169995724621575; _weight[15] = 0.07969195514279793288914190000566235267906711260491304675619638962584196774176642443198237391267458687; _points[16] = 0.4114586915619051989269753361265125049694148578387329380612416947570578330099506998594987587756143859; _weight[16] = 0.08272952079399523470880740580838362330379464284872694528732063439370860031512300475525677462603061616; _points[17] = 0.1594611294440652502638138083655501810579538766130618360388682958278037659580503571599755802371923706; _weight[17] = 0.08787114127030075492971967145810458697850436666177532008944289193939981177542132493146261828025422332; _points[18] = 0.342317632958730793723481323712457505166343984781374969599613768908520216861182272658072990449954171; _weight[18] = 0.08913374937230921373396964638398331645759341581488079946582408064396578278281966817037315653266913572; _points[19] = 0.2150231853580202850809121676459173588900222007857657740357006632538302506890640907152055964899157391; _weight[19] = 0.09210054144651500414815597125252491515932996742881640264899141571621140700823572973382363663710533364; _points[20] = 0.2763917790937831724096862097630639456644117270400405937135134283509653312425761670490246263920613148; _weight[20] = 0.09242510522204482532070073767512146817197969239818616413946316147309617242947716994951510527304012945; break; // order 42,43 case 42 : case 43 : delivered_order = 43; _points.resize(22); _weight.resize(22); _points[0] = 0.9930774850443482149030021066415407683406700298179706308215188462467044126812424398542732069635953363; _weight[0] = 0.0001605964338749016320576856292150734027974336746659489676629679245638257528017707162633356339579309951; _points[1] = 0.9769196632371288671781665711370362045685576491004758259075059336129642443913384619385342626927521243; _weight[1] = 0.0009538558113180135180967949786628451294240092743928687244237285896188821328575349981455723556774242151; _points[2] = 0.9518795932297199145233254132304692539088438686423388255790172833977314296065333707540227994344743905; _weight[2] = 0.002823533706278848565916530037911878629982887095586678771104423447725510221470260596622430583204829748; _points[3] = 0.9184257249898492632792699442543246960817983206223100233229591659202425806838473116664400173192555422; _weight[3] = 0.006112428226300807468928605022472388819840529336780360990858784903836597627090362080718578428772948567; _points[4] = 0.8771815974654200209935832382780264667216854819433063264149961682215358967027150316006842063229545824; _weight[4] = 0.01102775020425528202183274932690576622802929805904276532381154234944322175706675534281853900355524607; _points[5] = 0.002731446008884229684008970450320001444920091810195930525180269991442470544358606232863648791137992902; _weight[5] = 0.01396851222739562730764330994005642798820870305226851204432919119548361416787182679620322866610583444; _points[6] = 0.8289156136217265123540054985427691593398783968413130229560818673737749864709777074205767676513685463; _weight[6] = 0.01761734488022181417634750650161074169827888941368967387824436676905266460390992162845846544979252123; _points[7] = 0.7745269160648226353202027384109920682527303908818411141565719030087724957529183987986099954836780992; _weight[7] = 0.0257584605627306793926964100933613725492722872259953914150712254770612504454578414722046723976962161; _points[8] = 0.01433593348369970618530803928505257182212734984171995141756688554596877547440774718470825927907210741; _weight[8] = 0.03188810690955699372913185825261865705830584729624107779763818757645318375465544204740947987843934266; _points[9] = 0.7150286804747624026121578393379999446389645236341253188769096134374679986116977432704020454213976699; _weight[9] = 0.03516003512030458548547005431414484593424269996086323158449180253002667739460805295412856717443142857; _points[10] = 0.6515292548958144740358068223118511349859101369629558312595962074831187114090178549434212259989474758; _weight[10] = 0.04537845719632199076042572155228547303759643411880068270661964657070462859342870351180007030550233198; _points[11] = 0.03498632835121644938721881407108470789540507513413332008873819031943272701440377309817494943055717373; _weight[11] = 0.04836847334378099951774078646756125991897967480632796321673948363274069201822403812450461165062074718; _points[12] = 0.5852115179512991297552453346740838766873451701532765634475564569305673634168154853640549882370619951; _weight[12] = 0.05584574164688526249815932491291670258280004563995038841006871240856953599982233845476300338102841803; _points[13] = 0.06430264113215888253127507139568606483527396467455008276394607606723427123735449200295989192425551556; _weight[13] = 0.06265519399875045578481791711936416627645561286020844389093385854076882602968762518293824437104395458; _points[14] = 0.5173108459509911200513628668417419502531014399509647860341897330139076887981516467821142472826215626; _weight[14] = 0.06590811757077106807977571305735299366400317729192485529773531632140783267376844390929590547508218283; _points[15] = 0.1017393434521639240125822659379428899539853633989816895418881106050308024257778517338354719506687597; _weight[15] = 0.07415410818640572896643467181854132802159376843867967796198737741804690263271070220679766274082477725; _points[16] = 0.4490921009868173325138719504239347417475929920954648897808863573672971601962552955877951121911249076; _weight[16] = 0.07487223293386003847932596237778164765909771195087018622881954379418589205789644518583498915989155589; _points[17] = 0.3818260692567502030509512762811186856943928877507787697256756013761460030692112995057041549779558298; _weight[17] = 0.08205559156388180327653087723778992847221561856887365139092586395278825727586388000965819474762431428; _points[18] = 0.1465992001576654169265658426695235179279442290125604632515204687033228653332772641236747155787629019; _weight[18] = 0.0824448098128229051541582393875662137076647115837413320869169037065961050583960349723017507169251583; _points[19] = 0.316765788710447271834211176023788565585917218829176864381597468997832396169947236122444167801337943; _weight[19] = 0.08683750029083565581666905153333353034148761155627255043342898156741359986662248660638659974313726394; _points[20] = 0.1980466041181826148466050402800147983667787135049020201401014006434161174885707857036810715432879233; _weight[20] = 0.08730240757260692599058627618965695877333537373682736038372387813522711622922491115184985621378186379; _points[21] = 0.2551232069716869695768287350762534865017322609522133051615515472916441580767357518665803492792871761; _weight[21] = 0.08870674180083961237725395424888980010638767505799639849446421318828518370656462205089634953201953275; break; // order 44,45 case 44 : case 45 : delivered_order = 45; _points.resize(23); _weight.resize(23); _points[0] = 0.9936411423413659674234674659492144344825859906238375139346624942288118730536279398452978995101742923; _weight[0] = 0.000135534085630299773212074130897584210836555854564225333161803433610929170770419163441050799228018816; _points[1] = 0.9787895175170725588787939186958919174534641597824532080283251852183454120155341188680323899069674147; _weight[1] = 0.0008060783183419481302475769328811150712121287430918492847770345087224901752876520422652114035579145278; _points[2] = 0.955747055076380126306280934995655993508546571972578475189971588106363915440947204061462001894897211; _weight[2] = 0.002391164993413535831600994583419511700235568916766570267257880249998309203933376284348101463868195296; _points[3] = 0.9249098542075925823337164109969201318994696513183952026689198527018630611553347105313285453711814395; _weight[3] = 0.005191620446910720770096011274932118364042720186345085236614939007955783549782982195562743151370410214; _points[4] = 0.8868058750607934334740477882285871206071403541849894413037182530711360933825476533262438961100102982; _weight[4] = 0.009401868666227652995952585963231501422382957680697780965957245463094744102323209704629371613850600187; _points[5] = 0.002508689638982744438582834305084970754465513041215795244037291698106602509090989047144538885452310289; _weight[5] = 0.0128331652253125979400788588633991492037855612500533267579485452992396263751800578389440168905250927; _points[6] = 0.8420871815760147938272551090762841119895322905806887532216879812775912541917310769974367310218997339; _weight[6] = 0.01509008390394755517476464908179904728950585618281600061596910970327096104697896113737910324026950532; _points[7] = 0.791518958392199164999544811561899563969866530494357902752851291892239872938757884419906943099590211; _weight[7] = 0.02218746826207120887276263590638552621253197931251564408631796147019043169238537869081644237786204674; _points[8] = 0.01317098500036888781833393883008497304237693656498066106398450987552457101458753605359608128168743719; _weight[8] = 0.02934304620092188218926113600741607806739210817537199870266151443933950832690670503975771066297699378; _points[9] = 0.7359664575449968693948098166623482992411491974356738064983977465191447748707008794380155771341181069; _weight[9] = 0.03048748451352573060772721176350031611003474117711489554566270549461388710349331159902545415320505057; _points[10] = 0.6763802055359521297445541267501844773125729751061369156714561779908754921014857822086096522112308808; _weight[10] = 0.0396551893481249125925521086126432747002257718640553587940071945094773848424573489581704970305004816; _points[11] = 0.03216172768263549326403367565653550535205766565201664531712686624400665820371098603813869334727816456; _weight[11] = 0.04463725220786037308362066413240402086136904820699921434316677932141270933111474705923954412447090065; _points[12] = 0.6137797438222284322478251318001054000017788712275714851022029844218004813706509166663266125837282715; _weight[12] = 0.04924611206265319667827944363701807174968086942310183494453035969494685072370452468029153544157500021; _points[13] = 0.05916028461389076523322206577362019497788250568779307045784761685757471784484460194699384188422236678; _weight[13] = 0.05806819763322011970374782113924425761404511862778324479824299752720919807911566279375387723149769095; _points[14] = 0.5492361859337143986849444709434036999595634258787999588444642290913115681454981608358155754321058537; _weight[14] = 0.05873345966894180966241572944644661616634652469095377698346786561882559594662330923115818784810304391; _points[15] = 0.4838538912019967973430622916413376995836676173698294055646030869616179182331776207634155618518804048; _weight[15] = 0.06754184722435728497520002182184314434614082127218346806093570515182043965457234703866461587667979884; _points[16] = 0.09370523422563984366939026810701599431294843355379981255080596536633429882747373537128397881326481735; _weight[16] = 0.06911669325016075584493212610566610721140551761560671679530417625630597260007129822813775191577520333; _points[17] = 0.4187515692045311374092315829147009424821192511291422675616536437335683699790579610322750663361326695; _weight[17] = 0.07508529186083901414100526577407837545431900256520270901278341770173066637555355144434418735382997458; _points[18] = 0.1352056309863808460458454746251433160911708193841602999666708950632019186174750867966318879969589279; _weight[18] = 0.07740045437700328926473449453186946979485005699189929147909285069627000897494280716076551491212405294; _points[19] = 0.3550431384266732981536948763163021427209776085086219647490204456653280019775176349750919633016300716; _weight[19] = 0.08080690215257658597452762845490596703525596328546181279008243628500936409123153800589940372707628206; _points[20] = 0.182951434776206737817241219053163283147422248322105739279654822172669012612264918073669777008318145; _weight[20] = 0.08269256057546193715477130820235096515571599625521525349385431798507764427936998623641731548676776034; _points[21] = 0.2938186667005872290547424363576361134204043156282958233734911798438694506857100888924860114111920557; _weight[21] = 0.08421756232457493979943437980297802638058106035661088138746759718641313900343550501435144093388206736; _points[22] = 0.2361257194699659752033367975673903519867094069780877665480629132753104255091235776405840076486321074; _weight[22] = 0.08493096269792264883907527383068975587810407136558906032073556299546435535076532045263371654972207912; break; // order 46,47 case 46 : case 47 : delivered_order = 47; _points.resize(24); _weight.resize(24); _points[0] = 0.9941387002099847972174529494354186447065590111257385945879012558028220919933208547206036697068695813; _weight[0] = 0.0001151730150479458384071635595253101782832122745104808509747143553195202907771103803048664630273115494; _points[1] = 0.9804414867720773047861990092929623254654564518007672132576640373798768725183629974386659808406771145; _weight[1] = 0.0006857923806901939716180130215329527076359172887024981713091355795707735117444618081210364335144106147; _points[2] = 0.9591684333956145359195940133146757910921505457443845505930704566821066595074815881415270673833622153; _weight[2] = 0.00203815713912692007459646347769836203946352713265341526734571099668110605270544423185729335343259772; _points[3] = 0.9306567200768073264940897342948113540892147989736239490329954181172965522690414938590459685654063852; _weight[3] = 0.004436613641500169169439699970626442930590561207013584324589174385384877629658784768911216861600074852; _points[4] = 0.8953562946217610669903735651020598427994962565161247360082353603807290907387866393285046179471673542; _weight[4] = 0.008061266812448580930088891626091521017798326749095430281313277537958062872952727474091695627913290944; _points[5] = 0.002312107617798491569705276671091089554939384003636010189709388318905051457029892184514494087344005534; _weight[5] = 0.01183066055113336862806942240007326328245558099447927275162523552741007390766368641044486302691611349; _points[6] = 0.8538239525472523950102126950475975286633013398103204851603925633645574373545504247981078805449901342; _weight[6] = 0.01299144166781244007855380199287793161149080700512316783535285734348566786945346584013675240596698465; _points[7] = 0.8067147162308662079759883230462271215511214289418775696507626148867661530416063674514532295042286124; _weight[7] = 0.01919585570453531090274182547445749150555233627807191180519025749427489117067745137550248266139141968; _points[8] = 0.7547715409190971048511486978937648589061186652744929259781655167672301711625351688732468834021431278; _weight[8] = 0.02653019230140020249207268704743023175850973695203784071226564499171372408835572203998397885347122954; _points[9] = 0.01214230377107489705391618941072912260522755162446019471499380137216042202948348504762488631035567119; _weight[9] = 0.02708890824143026572037962662152288020969476966472863417825282202056481771333289850444085338833423305; _points[10] = 0.6988136087122555462016606377145350834461598850036410982928344624206350632284010299704447755398053868; _weight[10] = 0.03474229649484084003930890647846262727505108642173711331754141432035930539668108322663152396872809195; _points[11] = 0.02966481421406884694296518092415020517648541895905737943054284836662555853198029459708727505457923553; _weight[11] = 0.04131359852028912070813348612469458121266906681977047751086422223751155286109440455542530956212070502; _points[12] = 0.6397234134973043576554117727135736996646600113714081000045059910790721633790546552645982027501322789; _weight[12] = 0.04348472766572340728540928114789743818624545599387243885741710511492122452733704265550252406972611373; _points[13] = 0.5784328451129381173040996319869945856313733674576909278189693731645225384582334961614709864014439181; _weight[13] = 0.05233393229745876141906451197180871793300976215540282985419030015323189126408906128503865664752988069; _points[14] = 0.05460726328354278129885634528658109995675907857338212819561910072319464261893667297651857381196832126; _weight[14] = 0.05394596868921663524498068262844092364170052310862208007218011372940229373250922674094381645827344836; _points[15] = 0.5159084936202979568506211844229575689363706436725780992080644753405181129907634992160172026059024785; _weight[15] = 0.06081487403303229439557250461246857543106709458728555540542244478846987123597889141506562545922541255; _points[16] = 0.08657678275502653153027885149201366204915309675322937558650613592608210237006631190380162408379504711; _weight[16] = 0.06453135870842410635528940758432413674737559106054908567625814834380452190132723118159432526647738541; _points[17] = 0.4531364059378609233872602564908296475944846220926500743387614702917419726601357431551427286510223685; _weight[17] = 0.06842960472039024618212495432963431108894080844633652827051493472714512862008051584998227091418043717; _points[18] = 0.1250693120998313816827247034321147372716372812643793892831974422340660561775264779754430133711757073; _weight[18] = 0.07272392358209171859073020012272423331634752635725114961740036064699127019826765310647657118990659075; _points[19] = 0.3911065354271857628058029229759407587117961441488460253702401794353555304627992294123975242415039216; _weight[19] = 0.07468800138191237704937459456995169435294967932534591746282115187766476994517745985562126268100280594; _points[20] = 0.1694778408374137992122551210880916091724440900194513583551692099521297695569503211773284187174570824; _weight[20] = 0.07830217864471200784132989838038854530001015874197726701210669511616739254100083028981782478774985955; _points[21] = 0.3307971297342992989465449797634122839351353239458986043016484038687065359502901031392280699179553766; _weight[21] = 0.07913874651520938929265736761457077631574365663020054012563532141424833258155611098929166716363521104; _points[22] = 0.2191020363269966008052502214870027886228146700884203403626969975224363594600835115547810175625647987; _weight[22] = 0.08117812499761111793897603388086616924056250529426903044903261905158249863418553775020821290326759497; _points[23] = 0.2731593030949704981198326346716482638665286879359816866038841088473610512662532110402010110389662036; _weight[23] = 0.08139860229396257985108057536193088271685230951096375019039633824613643145339319826460674182521286602; break; // order 48,49 case 48 : case 49 : delivered_order = 49; _points.resize(25); _weight.resize(25); _points[0] = 0.994580098039975381755943258134921196515439243907115241892613222040274966787806323038254950411999966; _weight[0] = 0.00009849406172470012342729183797120306729289956825438560707512493759046505877196757172281017650086300047; _points[1] = 0.9819080873346961325077074435259613225499801670479781693750962994666519993115924159471265473976297682; _weight[1] = 0.0005870930138403858080781133946229403539078885793604901154230653455535909040354642990632189297837364007; _points[2] = 0.962209486590731189772863397747711003487131531065813181451688745525844129958953618722182068233988584; _weight[2] = 0.001747720324216249475087491502293789694397139287420886663505338741268344649234561021604669851838969137; _points[3] = 0.9357731085313031293882544650031356312195798060607631882567272915711012342389978233465384997918124043; _weight[3] = 0.003813096281420520842348298710895950881889701039955631763288577889908654722745077399684986333284637478; _points[4] = 0.9029847330954237846160108102144816242809611079263960417211087101890827959775348038191523331937712815; _weight[4] = 0.00694869076994824250564297958061441939352289609681812839617731614595753371500276899856024923923484653; _points[5] = 0.002137754840779325097003996068484341170531133944451123784608428716465128312889554565077424114622343405; _weight[5] = 0.01094107579169813189091237608942257612915731472352215860492901940875784817684822085977668710227725507; _points[6] = 0.8643225686575712512890930964464128884912645871039346858755335774412004904375538141581885649622616211; _weight[6] = 0.01123893942176472911521814402227084965277093149641017025250777628933241674291632070615824939422379614; _points[7] = 0.8203504266385679362480414025046644799692216902498877451708436721193771528836986810945627036059209933; _weight[7] = 0.01667844746417703482858827412105202654768663139416267562768610651187442182435611008344612749151113714; _points[8] = 0.7717095332090876532772702662299137017534216024796653237460220724084526447410338907367806228629369144; _weight[8] = 0.02316874597448142681430272573677028827491415078621799535354766932626957753146747980664577809025445712; _points[9] = 0.01122946060565248953765964495295842160878607386165047422524781380016346040248689425049555083510760924; _weight[9] = 0.02508327722702107727564330652194328699205195700415177187291626937632732713366479790668583552899807848; _points[10] = 0.7191091887702756756924733312759952703610235950003264675599094080939261671384587307200102973531914237; _weight[10] = 0.03052084060846490888777912318780060035451395536472057323180285253178882915878800370061906778391131643; _points[11] = 0.0274469434643197743434582952393301677966795058332544771415907730879432148015830814776531097816784999; _weight[11] = 0.03834144667483376494444168127629636943855168654307775524429254616965643468194663566289872000674802254; _points[12] = 0.6633164283801916080438663597093166623213491788613272167696983082588163829549425343365271477378754117; _weight[12] = 0.03846345091061473349290245539794099303708019282297091901740137152519600363961583008523285646670019196; _points[13] = 0.6051448381551349081424173890238120465852778156899718864521872811406263759015006314129890759192133067; _weight[13] = 0.04665650137559238100136333265315206043659187299633210330041980122434126791481360689974380076448028748; _points[14] = 0.05055738036921262563480593409648928639639291900566926165094194152128925730424342105114094576969514026; _weight[14] = 0.05023107977579624293082489939776848612795440206268521504827201101988163471721421863245982233173798446; _points[15] = 0.5454426920332588243126070891910049145712573150611219268116870762412938483414356567846858208870956794; _weight[15] = 0.05470911337993017133325658954591537464613243821693582754945733906555848787274909343811964787857264477; _points[16] = 0.0802242209123347788711806562294006865192884691392240487497176541792428819362495039574470334376226373; _weight[16] = 0.06035303547197594011536946214697428562244105735504644592761780204490024094524008923007047324841406013; _points[17] = 0.4850805823554158825739775389860063675732738097640718535822201240883097297180151158721545179097262209; _weight[17] = 0.06220107820158806088435333669253889377963299096493770394973335210519773180746305069290850138698745457; _points[18] = 0.1160149645874870172347350473465606669489106230158662308693922678144886136045272672526553037082963898; _weight[18] = 0.06839537544316108834152713171531975770585381497544037444937248176128482598116938100169841603692543401; _points[19] = 0.4249387248171481696883001024393147385589320252409908017977547745824610905505913984042249884129209462; _weight[19] = 0.06870658133314383697685351362085691413583117735597939494713400804125932270303523200365795429917671417; _points[20] = 0.3658941229846370226364064314991338752818897598016621885592227542838233793054347295626319302125106143; _weight[20] = 0.07381880949267258745570611132264679808177411201634040263123836073740074140392720781241131139297762215; _points[21] = 0.1574077383886659652193159384891105328541375646502171946705997212341715684439550613338558276683796734; _weight[21] = 0.07414640177550565019867457680187590050097479701658588964064176822972214718382922048913127448484917208; _points[22] = 0.3088077795622951038979119439836161009663783922166299606375840033527997031278586274863047483670254866; _weight[22] = 0.07717401233298538239701017926660146653703606970898668982214027556915412179838143641951278835213681971; _points[23] = 0.2037989575831378225336879722401727700751661453631751449300676446592974173952675347684620523747703873; _weight[23] = 0.07750307846489530106069001626917005366648185167101180936037628557609221967072401671463450488288759469; _points[24] = 0.2545121408770102731752042678534638511633337808460910662787207479083865625018202584499175428930839519; _weight[24] = 0.07847361442854745129999858918728471494155807095267460162304348042572581006206020856357340736457611768; break; // order 50,51 case 50 : case 51 : delivered_order = 51; _points.resize(26); _weight.resize(26); _points[0] = 0.9949734758572125109018548468457757451414034454994678437134746777377314759592836642394933873290978458; _weight[0] = 0.0000847266482218448156947327605447326126419659617844272871156905786136235122516774210387065414626002125; _points[1] = 0.9832159998661838487495423597867820380401895721015838753714698965929400840517768491779043505066538759; _weight[1] = 0.0005055010659316268156697904469713558505999011355121561471933639284915004498018912965831367132020459454; _points[2] = 0.9649243392355685769676789331181850486069916808216714189009346206348469238729501303425886192745964061; _weight[2] = 0.001507051270060215245738339727124017471225049056873612094515045979327154650350622172691802201761831085; _points[3] = 0.9403473057218671707575661924897942312565963618065724508702617539552909102894060455499272532250298864; _weight[3] = 0.003294701834427150802711378133094103566373633324556116068118172306506898075038472954763116221312803249; _points[4] = 0.9098175190772664572577288936685780032938885885639025695186218563884849263622085581336329392731539935; _weight[4] = 0.006019673135257074110480920880712994889898064197316878936261920311358339469987576574531217903905751702; _points[5] = 0.8737479163770055563444293398713444395647730795686451952308337238766361425385557764556171897935901199; _weight[5] = 0.009767577246988349844368959326074245339906130164224783443389859320911296477027153023249454065509989329; _points[6] = 0.001982402312500991974764508701509203188187092356310070549948036260509797246427442856641364318118786936; _weight[6] = 0.01014808420232600024203421407891864326967813611225317519604953710526452069416772253977839448461609008; _points[7] = 0.8326263048793096592840319901487043552909483798146004051450267827213551566378150192788626666368150197; _weight[7] = 0.01455065777740560048945432725678785020079291621240239065081833184010255621019635602390937881818659981; _points[8] = 0.787008796159314796328080238209286307636016143142496025622674079035016921733834146837825179233227587; _weight[8] = 0.02030423177222357942405312178653612755525415648826535986135120681968192455152752689740341633477985469; _points[9] = 0.01041571203509252666821917702931014674935479485106816524423187191810390241276843270721704469819313156; _weight[9] = 0.02329114401400434107623960101019748682844868035669047120616072012257778273808340621085543544339633781; _points[10] = 0.7375122949172582536693195662187433097563287951254783157564549381318449761373581277895857265168695533; _weight[10] = 0.02688756442258594394198564943536074963802617244572964250768720667333181166040705692347132345670597557; _points[11] = 0.6848061597563768691573930360166283266837702181638087861103877824608012560472566171090269983928681477; _weight[11] = 0.03408916470242993251882218894046125122731292371714041110875776292446406522925454370012819778710050886; _points[12] = 0.02546814775045601344292075058542701375019841643628081237335239638580493646438840089869787286535769335; _weight[12] = 0.03567383035949472508322253846200779250258506124560617922629226954076677145218050153633101412079701784; _points[13] = 0.629603152646366832440005835186433246405811585188146038276837837280437272150104697014026598810722124; _weight[13] = 0.04163624742448221054690511799845617999254992276850739950519913819788930854925306643839091326449477419; _points[14] = 0.04693954797272390029719352115915356373546076220882119542989174060489332587033482373906263198125120149; _weight[14] = 0.04687405429551426087558989633323650022463453467699547900364888632785840215419132950168073015892539337; _points[15] = 0.5726498006750368846698153034557769759301843942142236134513678722424631571284058108657451973547353036; _weight[15] = 0.04920787783957516399463353490332616402964507354307016190860555769829433495204703242645409835846820773; _points[16] = 0.514716300858142001351707261638654109705083087690772118910357707639424905325977021819699527601195918; _weight[16] = 0.0564511112660067597072396547032695132870542650221711623908710568510712801252163799195090529486065156; _points[17] = 0.07453996747497746177748212306933832256427367540970293847144712393640101788929532457190961305371464226; _weight[17] = 0.05654047670425408731673641746840444106706145938580495870768149053927784423957084294480749076126356119; _points[18] = 0.4565861046963797540479864485503725667356963030172069689574101221860311846558745203443032208709777164; _weight[18] = 0.06299927337564799294914832905905277124462503427963309452997012853782168724233937070149924372893476695; _points[19] = 0.1078962587148670518369933864179128680363862543318018393308158240698289232868109968676399249029215776; _weight[19] = 0.06439218521754601961609217515415748254965335209980546776078885523102830281793937574743462706467966926; _points[20] = 0.3990453234002412501528182579168397671593845939181776667219899610514800606114315767563476820928747503; _weight[20] = 0.06849140575169568012668800722262161522613334377457403128300937582927520679256050458344419628226694089; _points[21] = 0.1465573689781110622454405645211420385843833471460570019307330150135958433471094540487915029769819494; _weight[21] = 0.07022960671117586974426525058832575750953055446936506488322864597988955028307342935889618929244731548; _points[22] = 0.3428720970842849252151378642974238623794694294290994447908012269211766838901167147393952220069469325; _weight[22] = 0.0725918327712018624120357190515451543007959976782386099644323142584005972169684717387584764973049203; _points[23] = 0.1900004870599828336341439787909794085126181077453390929451879495109536533280805490705145871629269747; _weight[23] = 0.07394209946166916222101129200752939221868094362783113220849632853398411916937608256518092603124973877; _points[24] = 0.2888260716927312263060031147583258288008503288275055379968170057607358670390531602234574905707601279; _weight[24] = 0.07500879353237672763699801406961978229108936240432004642829627625630132640321505130936349085986904773; _points[25] = 0.2376381259328170562198557150947490838125062796023926838503683108907578655346968932790673406258904327; _weight[25] = 0.07551112719749781844218082919566389510580336585132778769206085830750979488397455548961364118188574334; break; // order 52,53 case 52 : case 53 : delivered_order = 53; _points.resize(27); _weight.resize(27); _points[0] = 0.9953255513271093328270351894495473119057794466212460828361309213612753533892573799919314231415102235; _weight[0] = 0.00007328186742973457248973346335268348308990106749721830402804514884874852544364092321383075279342271722; _points[1] = 0.9843872802327865221402703305050865376477358992329912305682706127051502754664076249624229033974971323; _weight[1] = 0.0004375835695954694319402968526394878093805906978934431788809678901563370832892874754776959120609792781; _points[2] = 0.967357856993813442888042181474701065240585349524088001841956352807017098269912180578703569993125112; _weight[2] = 0.001306291162482041307513273595746611017270220411081977254624897447679861162403842854671409547310733369; _points[3] = 0.9444527826987507331425260090411746078705975423460296253295198573755605731026031630850456677387944581; _weight[3] = 0.002860989938171968740611001933779543816374542989923606744174802748622344893560754537563466895557173069; _points[4] = 0.9159603411903557702727824364325821830316077077386156250540469597358886472259235994667255020111350392; _weight[4] = 0.005239419741905222510689162974228147278566274534968597513495834319549298869840982032689155040662882629; _points[5] = 0.8822389102341396454689826313057027389226267678942236210056160455752391145785184091546650419162996677; _weight[5] = 0.008525852555960638572219657461707102521891573539394917046403114188820346919404426896027012171696186572; _points[6] = 0.001843386661593831967726735667295828873915982082832672961302707423046245066116804281541879869808804072; _weight[6] = 0.009438203890880110866596413809031958726344004381082942643778752283009119164009190109057284600952362998; _points[7] = 0.8437125821466905369938778855425381743397595579708781792466494145717162173438121723567149172814722983; _weight[7] = 0.0127443068031079317715688761451132541542067222744958632051824594229015519066742950552553740091615511; _points[8] = 0.8008658592874873234732464957552331150349938591747462274480585030882443351844636275401613601250526774; _weight[8] = 0.01785496844943601640277750879058008805396662109216816766106464135700233982039264716056288080389367592; _points[9] = 0.009687231019540805273828081504282131116359659467549445267187225423223113523010002437844497609237991749; _weight[9] = 0.02168341697171634922387206163071664777223232067278973251502576675723184728219216643152310340730796864; _points[10] = 0.7542375697640191565673740509855886563757234218511268984625872592197338373290508090761113687668744005; _weight[10] = 0.02375402799044424959072051962268325181356197297482915729116896189554605021009758096115809530581689383; _points[11] = 0.7044140944718857265433052486560377972151930169197974524635302295609988027848098312397552342521119597; _weight[11] = 0.03027696861193742610784335894757796436342078243942527942081998530055037186894711078030414144043462203; _points[12] = 0.02369534823915010708382497244256481068013762237691314340450484701623746518298477536252903465995659874; _weight[12] = 0.03327121392996553082051253960656141674676698664874091138577924743699340286248666375068308662950781324; _points[13] = 0.6520219943065595128144520218202029835324140443758028088226666444218422243992797923412452670120753289; _weight[13] = 0.03720516474612843252115408793185275353855779065005451754273434428797531460701296701493334494925037368; _points[14] = 0.04369473580455800013769324464294019749014271105473332584282951242378903272580157799981535573499100973; _weight[14] = 0.04383223890274716207783270394301581492732858579499438231354191010417070821260416813703099811250239746; _points[15] = 0.5977201313878155000196942168596513335913650222028782052701089676472197217513431621531390052097054438; _weight[15] = 0.0442754809043745166049102553444756242629834754947539739688308925406328335470728344353699778944724549; _points[16] = 0.5421913837761862949497505196736063188110717433003851565440307389535776130912578939384032088911835582; _weight[16] = 0.05119240661403538109314247413068615838127744479416697841527953461192940260522878214085058664786929483; _points[17] = 0.0694342787989322199730161870599743899193417310335786837684089594535236674250451492247500562398937346; _weight[17] = 0.05305637157700611567035240177857449090592886836998970530450787053641364840432593332954674885802999604; _points[18] = 0.486134058031581842105811479741619256441348442651950033915572669570835846369697411190512406608564496; _weight[18] = 0.05764213229207180802657160281800379487874937184851651202260951686951263830209716610394437458473375141; _points[19] = 0.1005903811326853915190140549903467621805094580706385252308216095694597532629310010567882974571874852; _weight[19] = 0.06069078747570479786231324288739386744739844478687997246810594496612261624138048834339131455140341535; _points[20] = 0.4302531076729567979697915582545114448017590910700067673138678746580049425247712359442692580026425598; _weight[20] = 0.06330786957011047808854565517611624075329395117374875437813393453496000829664673633228191742678929595; _points[21] = 0.136771268210552437602568374864889972745034266593335441275391608114954920387727316437892629650041949; _weight[21] = 0.06654908535523464685397561098642480640115961409995553567285259367625967934405564418116203664782725719; _points[22] = 0.3752512679997629534933730456435740542694401655843067372579497841123207581560234471930509217275150035; _weight[22] = 0.06788565307649292039687283320238157402058107784817118583358955398507924022035164383119891786003106666; _points[23] = 0.1775219573659193028130614393988634183199427689032530418019253526001223410476168743574185750257449093; _weight[23] = 0.07051803275142590627456213690666551450110300183953213724808652522368240015081698904312404196825072647; _points[24] = 0.3218202187671672377769064975778236252489272904134530562088575656239167866863330675121375687111015968; _weight[24] = 0.07109983236886887427029839467974307139978913310686388388211605126488499602691446213807129528454306465; _points[25] = 0.2223299911830712808191360033542121533705911233623428600494451493718258335612207931646668848912206942; _weight[25] = 0.07256094481011321558801623950042687835571243590410499523542589298533471692607778934127785986264937661; _points[26] = 0.2706318858403828388174545619009036764776417627277516962633080821607300256186263524972127095298013223; _weight[26] = 0.07271747407265305475209795588052125266906429056397565154975795821613017654667180666213671766173563337; break; // order 54,55 case 54 : case 55 : delivered_order = 55; _points.resize(28); _weight.resize(28); _points[0] = 0.9956419077642228317186491333620060237601315295415473070854638905269220407116028222638890083449209743; _weight[0] = 0.00006370515996210101725745472702265633711758913990764554459024871592454748893659112280483407229406835385; _points[1] = 0.9854402875829232562843797204417416195238244745167805643345209779564325262374245842623134551401451341; _weight[1] = 0.0003806839593599654687052937172487546861406951983143054441628893654176073429097708717496854771009674265; _points[2] = 0.9695474769380218769795841255378286564895236407683444524251818691481329207472659134792764782657673718; _weight[2] = 0.0011377791456507986924889327557193353897988937145668760114411400073408539511318751097684318098934036; _points[3] = 0.9481510589669756248379883268157639950428963847697689099425419930439997189239613345109477892587155246; _weight[3] = 0.002495982237871979415829687616319526354929321484971594260093162240535500992872031481890968421521032581; _points[4] = 0.9215021099473594085155151704718151363517054432469130506984103322769692925488804599027244231343314117; _weight[4] = 0.004580509469313366317241966253684956837737283433524900914903528095852603465920170011166099239052318532; _points[5] = 0.8899131284723934956831712532221734523372783412412214239234061344184586027297876948955008948655299972; _weight[5] = 0.007472731568327629262425404229139219420008809551561161327362666088823157856139752051538235243301389832; _points[6] = 0.001718495293402246663028020771266791644996181934602356641243498668963609900790262554124227544054489556; _weight[6] = 0.008800223579860048483254710294217191577207739024953436339979561240637942739941017301399737983542058875; _points[7] = 0.8537544904322088788247775513811542988294457872776482108393252112089107868125245581262654586120792931; _weight[7] = 0.01120427189543885884005076223431923448359865792254287286501113213756952844083798362642400838278667982; _points[8] = 0.8134501334282394697267215578375188617234481770369277012202582476084865180325716182203592738059608096; _weight[8] = 0.01575357142381088974813226281442771906887412741280410221144539737971025231278995461878959887619881906; _points[9] = 0.009032518495310017290182668008309766335460710175829955817301796886950012957313421273553999923511387801; _weight[9] = 0.02023576838137988786034698670252521582177125525959502980263720470161220865339795485231134855413136611; _points[10] = 0.7694725945042181706805050432690356903413932244153720708644567415131536687406382160956998961745973101; _weight[10] = 0.02104510391067328185606724574426733926381029950552618742473734044634105412953922386528522423178877086; _points[11] = 0.7223374729826939086395173882436445520337460324133837205062443405405843577730351703929806948350872225; _weight[11] = 0.02695129894362714574317820278902739133656214753061143720194269756412480787235284583042023250023369184; _points[12] = 0.02210098135778681137268521021888062944151160946598760331796165999691174140377074554738617759820391624; _weight[12] = 0.03110015822865166067702923886015083025462579664580579398440848573178798449726498246324159018595777494; _points[13] = 0.6725973867373374963190421178579525574571588976574083160637357387177511124421386108602402867292366295; _weight[13] = 0.03329710179283746617377097231688107447881161015071885848544979051240828473437080881621446821160749512; _points[14] = 0.6208354938051186180751604988886875212206555915139963242977997641728491315993006032194731774639848879; _weight[14] = 0.0398669733284307313096721339861435149472677529777038992004750528535172531348461975711478042333117905; _points[15] = 0.04077361101977503091299474371167607706934898162520204845715575724018978323744190358853092513413754222; _weight[15] = 0.04106881180888533341596419244898047338318591795943706620487407038350580428826353390074697779662723614; _points[16] = 0.567658655663528963950549089025851521052663287662634927318125089113081431332606079713178298077963132; _weight[16] = 0.04641401659297863618279998467239187373005512892102633459543014117149358423998773507108652281038679931; _points[17] = 0.06483185036310752409761920639076661009926122221841610874216905587622670223518452033164935524580956556; _weight[17] = 0.04986722172799528536062300428357175719538303706187497370739264376729336818031041386760448700580612527; _points[18] = 0.5136903224747328748359169275644776550261521565143655052175059751887984135439312756239786212853367327; _weight[18] = 0.05267081444046336301346320191574594298873507545356939242387535251298683116224294172328249432628441329; _points[19] = 0.09399372568531336584140604037988657514003928824741309138398524913091673982081934491751314695582119002; _weight[19] = 0.05726781728496770116342685381854171257294862281728752208595617722281137028532049290933995766813740385; _points[20] = 0.4595632237739050247007580803181932916401376476628329857646448103515031096132724631061051072771519328; _weight[20] = 0.05836147977632291693862247694575220416360419006726144133894084241127940580809791871084881643492680216; _points[21] = 0.1279173699497222880332522902374298487321410081872785108652567404644903241925006868210433634637075585; _weight[21] = 0.06309759998920903832871619063187736427798328292865043490361484313506251495597716084182017491112556288; _points[22] = 0.4059119503245874996847819872096119528855570149194244408537244840158077666547928989884755351269759843; _weight[22] = 0.06321436026746541740578527862238867356580627473567945958614016390860714467272442769773655632274855485; _points[23] = 0.3533655141226461443509711091964390610724843762952359906320931037906887192044490676408869047345885822; _weight[23] = 0.06697480576198529947544249860329464644901197190434949442692233737598107738389930962131631795027128428; _points[24] = 0.1662050715215077754955928759549225525500957899853919033389963748850263839788521736378389887243452743; _weight[24] = 0.06724408184431729629610348227194436576417121590563488018244433962007116416697608344776265973965821892; _points[25] = 0.302539973775495358074098333008187919125959354053583216851150863022968872658500709858348412122672375; _weight[25] = 0.0694174006753446002943627136391517107293962502719934382621097138969527028293570715409689190762229163; _points[26] = 0.2084079478245644898876042894881013130324364643445421872994684928640539779603323923616045542186026246; _weight[26] = 0.06965864122232914783245525515766061197702074092320849650604718467156459693423628053637574476087616474; _points[27] = 0.2540312117051822502779332060989567717949333472202278170522577722830524357606964327183922476911471108; _weight[27] = 0.07035708558254015342678361194760470294443631209691896475761189284078684747935547051565534476561309205; break; // order 56,57 case 56 : case 57 : delivered_order = 57; _points.resize(29); _weight.resize(29); _points[0] = 0.9959272163607104691288374259807873291852593765446743146044815163863520054377631604148207633157846463; _weight[0] = 0.00005564241358714027532095053065803486490740943017680132607960936195006065033342071382225621345431696057; _points[1] = 0.9863904025392899117534861248015055941531051693629358191149649118720756782810516399238781644834428962; _weight[1] = 0.0003327279866112555094128006597084461188640953367772790824749440720953263498256535625988508076668608904; _points[2] = 0.9715246308559920866035488013575234119830975119551380701750238183981258606107602886980920135470270639; _weight[2] = 0.0009955114404107457036282987011420741036488422258616618973463593330141214449773470206395792824078634067; _points[3] = 0.9514939456164770559729801920265220261323300561844336714391207835992703432662113799732175447073914194; _weight[3] = 0.002187090029371519934764961921673762746149951990276364790288993358680005697151259428847928785250727178; _points[4] = 0.9265180152719407691275609266113728355764496137049103876779217996365555765482396657211416405901523585; _weight[4] = 0.004021182485231803386534230962943425794757388828963288314425169192269667107680391493129668817354327049; _points[5] = 0.8968705411002962316766114182292236819780119355812354874912319856093777036147736123027412055456563799; _weight[5] = 0.006575340169921764095135252527351854065836319905993192237496403188926387421135809555119496073796546306; _points[6] = 0.001605877852540094476677460267393333375715283616860331804506374382205905858795931071993942459642501275; _weight[6] = 0.008224759073026150013337165044732122149231177684820350074016830574690805752082382549994400699945455583; _points[7] = 0.86287636938624473396555917869022505651157506413871461457383706913436171402038290528480498534189686; _weight[7] = 0.009885829532976952297502565856123033463512360899385135623303387224673325024682566847647387741612482973; _points[8] = 0.8249079573005494156007944812292208906787416791393452824336661869940549234669086353363655173900752772; _weight[8] = 0.01394442666818688026059107376377405494209665104256295061957681177283639436450565135033828582964307838; _points[9] = 0.7833812996605872372611127878355374096893314804833155528966749287801062427902846865455568229607412141; _weight[9] = 0.01869728163635560116792048307870749321429571415331115426277003745924714046260312547581256186227275358; _points[10] = 0.008441948804031172691750305154270751359254642677660426647805634104208696641578312638825578741506269733; _weight[10] = 0.01892773329343349779572660522959708923603067512949384638213060568878587305185604042369878972842506566; _points[11] = 0.7387513739119412937894744959680884811212751986011720468957062635753622921833823658529018354675299005; _weight[11] = 0.02404591853972230935791201088077912861061979588079558439714543772093319758864057087945139003336009097; _points[12] = 0.02066193363615915476014353455675614888152234322370671862925378861418209355011390825531581969983189155; _weight[12] = 0.02913224977147369630435371509591788516497127738021211468364733144940634553044053378111820566832924059; _points[13] = 0.6915071564230854286671345510916194350973455194579840038960101517935299316600829866562060441590159543; _weight[13] = 0.02985034246189268703045850444863408825831084746850206015839821802101854257623979915267724844383865647; _points[14] = 0.6421662656731861238287974627913649707773183543080836828973314488493767488926898483696649824941938186; _weight[14] = 0.03593413059728592678232574595449670370924216522382692396538501302643477845479560527760392817593825342; _points[15] = 0.0381346969971121293156671304127122061908427724432955368922775580973517627701451337438444969457350822; _weight[15] = 0.03855192568110300992731787948569749686052539437629187659190769761585088614005755908990193666493402233; _points[16] = 0.5912692913707834829478765566234395995724095853348927353348565847908533092030035780849500293024165982; _weight[16] = 0.04209129631860883510580700101232906094913172520881469088463222892379855573154919991407642591976469689; _points[17] = 0.06066914207658226981904661707387973061339655888382338512792452002820457736488673316674820829450741823; _weight[17] = 0.04694309426636408371953486849927191064071717332656199572683966811401250472932076965764591751878827569; _points[18] = 0.5393738717727236992403103247034391839852566119036684134142180869297304990124736025268732863129619822; _weight[18] = 0.04809463546398829869371533562782688895220513580178416037071732542065284736437622845049166880340602575; _points[19] = 0.4870485841530376732703106931946815813887093165769280917756070969164567729544177022621628404883829681; _weight[19] = 0.05370519726261224517441839350484898995722099633288349579493820971087947368967875312163865815120067472; _points[20] = 0.08801845813988722465113256457750709714087466744915465606791769806360585010539787194938103623801238897; _weight[20] = 0.05410079186859844844367088474395607795687457881564928149255949744070610415755416273667872356483112521; _points[21] = 0.4348667153860257491398700432703089870432644535249158432053836873358514943003487504468549993874690005; _weight[21] = 0.05868247100441087283841989450493688012026853494073014267958587339102668812083850425895915857506469626; _points[22] = 0.1198830276848970432901164194721133615437473706091056747138979253876140849072260495061209040067929833; _weight[22] = 0.05986514983088954149802257556131410370145028546473926100037200780395276628373010490620581743371751677; _points[23] = 0.3833999809061070668784747580919607726984317643808177613142919854072677369249366817102831666846690371; _weight[23] = 0.06279484606213871827922785530254060818304508070323358845405923153953552222330567398669030144966779909; _points[24] = 0.1559137470843829473370606131417264220555557747384501978986829188400691312404561996585751299552473492; _weight[24] = 0.06412659178073493294015772905883242677694949119956667273898712010326479351329538109259913677016902762; _points[25] = 0.3332122608640143309721523536351177737981679593513508685203846408997852637001956485169227428186550926; _weight[25] = 0.0658298886821547883177566702200576302814581710102619073023532507225593633367576164581285422538752774; _points[26] = 0.1957158615701235346271845355727618654403065491060100053893129052945034633900434287495630167925552728; _weight[26] = 0.06682903797752355680708798131643143756002374157820628443355072911779172499539671165753842492171865239; _points[27] = 0.2848534221035185149516172379240780825714158061355885118736472933422323566101288260175500745175553813; _weight[27] = 0.06760398471965420388414470001461319453931749237342308586790232501846019357132809543458076331263868046; _points[28] = 0.2388532936333663745936940565623196065759316483784380767855858606661415400153543649197279531138628582; _weight[28] = 0.06797092298173053445579386649110409707833752628689484884710968363254660466586108170267586036152601854; break; // order 58,59 case 58 : case 59 : delivered_order = 59; _points.resize(30); _weight.resize(30); _points[0] = 0.9961854092532896146028221753356389314404324408686493792874214932610240703762534389970414536663528984; _weight[0] = 0.00004881538648506998360388173728839473046687594331829239051542362498444876128405787257610641121435982496; _points[1] = 0.987250587966732915704867341539757607126329624210631340190097603536590860456898711558078237762728568; _weight[1] = 0.0002920824818819113533365390766918036968638135004181526130531057784590465269274888973274707688805240154; _points[2] = 0.9733158613935448794453820105491724343356720246202466373654937709136522090881131218997332838292498842; _weight[2] = 0.0008747452449452054528434345545792328394990878028984125283749635749400441660481138993949777526144453479; _points[3] = 0.954525315743250196891212405909841651664193121330522964818769451712885974883692851607198562628294405; _weight[3] = 0.00192432146563680853039780262267058084934464281296702761384700340884737221497115728721168215653477519; _points[4] = 0.9310719621711364212548285011966173256931864130262399049310424572383352311872885421014229760611693296; _weight[4] = 0.003544057111846242578449714083482700968747522670541078730791206739367707904169668505907464731859013099; _points[5] = 0.9031965197235615179874486945867351160142948387890865854781167311755796735993819800971467684400464672; _weight[5] = 0.005807197046687551242251792528986641465603517512649975600107358331114246119583995371657609253148391519; _points[6] = 0.001503977326638774096538941045439819204897050842323639110517193282528933882651248791240534017615526382; _weight[6] = 0.007703907526677142332781611057875534544819793506537816162172648136598926396897833220321164234763843774; _points[7] = 0.8711850490619494505257748373786477444812674413535150966051762168128661783132891618825618402191055982; _weight[7] = 0.008752554092761193897920666189535675116315443555815723285447313014922448847745255648780050131576355236; _points[8] = 0.8353660404570975782088039706260406779943814651902810216421804120682862030815465101588411782330872668; _weight[8] = 0.01238157096505112882609671713082506468468716145623744445894400365087184337768244738355009213416501403; _points[9] = 0.7961070500327450999963466408130769909254065823786988072990704501299103077656532538035315934328438486; _weight[9] = 0.01665700904270025006653225825818748132054069181447553844487836536226341303293367295386176749150289439; _points[10] = 0.007907415319962090553874910548706797889640929395624179523081760110455578957554042677725283477454649201; _weight[10] = 0.01774200002910266224241589398107510122653617419432137008802265042177278051968609016670453221518424845; _points[11] = 0.7538109306754931985292676380937912950273016582300685379467850951928081223373494944028470408186327805; _weight[11] = 0.02150333048441228769833753851508196766124541500331822808509520438345824079506333418293329410470080059; _points[12] = 0.7089116992693157344021296505007320277178336913754735555904081981587657489227382458808600070143245976; _weight[12] = 0.02680876976084624127714802836523064146869361267096646765712817819486360367453807577343673561893162335; _points[13] = 0.01935870848902583784855403050288221797598668568969896998662158485432325673456693050224134370338878558; _weight[13] = 0.02734323769023239623194332571355552815906192296906783687662345184113901926590361524395191648538035178; _points[14] = 0.6618700835772073917491354419849632203892530088735732812563719385176190205613534846026225511037711621; _weight[14] = 0.03242902027054050043405269502953432501755780381155927730280438058383449132894536615575943817616581525; _points[15] = 0.03574292537490614361442355505910787775634862347975856384163644336736875759787627385072751815153740946; _weight[15] = 0.03625397463788723790524483974173847020917492065787212600840108277078063463761026436450175975946083963; _points[16] = 0.6131687947901146656740818993889533163504756553625524311289854346046812852781127326882590856590079547; _weight[16] = 0.03819239423170725851575184801695770825061515968304590598855971096584248504449023211886317255778801667; _points[17] = 0.5633075743824562981501263532733843048016241869169987473593829812419401409863189611028075333329458588; _weight[17] = 0.04390625227933978568080902602950186417843079234280225955367345367601986305141065089129071180428246366; _points[18] = 0.05689225853525516679821004110599804301611377083656079546200661056446482284527669656096891945940680971; _weight[18] = 0.04425731927748618287257948334671876202437120287511051701022472597796561585699259418942874447794983731; _points[19] = 0.5127980661561916817746887451598282918401125275994180446481874937657033611674660693401318099368063618; _weight[19] = 0.04936444568948249182271354202432237836841853506199668047436650095508669478549848818479903009284566956; _points[20] = 0.08258976331894715037611720235316913189397065646611817204648742992390166397107742163078245234741296826; _weight[20] = 0.05116849259793773961536020333387403840090728696787416722400025316316297583997339266789880587685716188; _points[21] = 0.4621585661189246886540277907231243106393062489018270745431532167413125006992428964361637064261870771; _weight[21] = 0.05435547110670841272312359308648180196145265254699122138675635302555438086361230585239049569790033029; _points[22] = 0.112571774110936611053694579518741087338027646767961081329743508651370777248795257348659213291718789; _weight[22] = 0.0568401843945930875022309199510318410662194983414264632830750229803768435128288250456115058327183983; _points[23] = 0.4119087040813242226237090428292506153631763321335100527625422039405211351297361868627226093733969804; _weight[23] = 0.05867100684562144938879531538437321203226400947228654914597314289823584855733418457124886247351885538; _points[24] = 0.1465306454397049070797253669507133675863970812842654082165416081846888928125469797956253712673911181; _weight[24] = 0.06116708587574294585708384600511210723249655869946088776193334346188726348364913454224787676895355881; _points[25] = 0.3625641115525919243603237735395555249376544784701360196082102632275515462910475713276721125086440228; _weight[25] = 0.06211448255080993935299302013223286515895217681731822651599307938155060303705561438986736826779035532; _points[26] = 0.1841179183174382295159362040481778712255751073163280436744486781128841767238309332184203445772649971; _weight[26] = 0.06408887558478726966987172952929198476290145444949765876320874448844505401660613395137922016487293419; _points[27] = 0.3146311306484368093477133152707186848865010512147554712673141128875662531347957837834036041944222118; _weight[27] = 0.06450933095755145680015534470844576452895509725364825086687152102043276408899255479082363409045853491; _points[28] = 0.2249478990674261230239659038071794671177427343701348684130225163163224666208835088859070269965705134; _weight[28] = 0.06559148352964400742074101780590288922762063110608826979290732662425384779750749352007854814383952964; _points[29] = 0.2686016183001323810743018232453001490062411850001232918802978956024515050823666262374429233151227997; _weight[29] = 0.06570658184089414272443437205941363884723654449948817438625048156296749249405795825047760374282482709; break; // order 60,61 case 60 : case 61 : delivered_order = 61; _points.resize(31); _weight.resize(31); _points[0] = 0.9964198154713465863814005035441978010799044283122436703650320561453919687873406872890135672702316458; _weight[0] = 0.00004300369105210562692826370639121461833320652605667711416578738547360188460016161941716611831833587364; _points[1] = 0.9880318304951722914880530368106836749146235982824393858168425335568924461010604907917735038470862901; _weight[1] = 0.0002574514681284442266230751751507317607746199866536766321397160733033418132062271462470548959235436023; _points[2] = 0.9749437042544240163360031479159922744282696526039622177198702095339328818125350799450505594531097618; _weight[2] = 0.0007717057396996697641517258768670426827188915944192573597223229681262995542318343942265362056001387414; _points[3] = 0.9572825118149126493832813913549764982221829460675596349535989927608206332156385580989282616880613246; _weight[3] = 0.00169969018272393218254041765280551133219705363301035677082391746333472054338783832375495304115262724; _points[4] = 0.9352185227478344903005635619837840093875008866261301248284230002913241844856789158446614001940347283; _weight[4] = 0.003135161039546822021790675745981601732773492778297033598408165845484191268636204404626888163907635763; _points[5] = 0.9089642777365259832428053473898178551206481174446911746120405937208542772309144429777671577360346158; _weight[5] = 0.005146855981905776970511696158170320994675246401119572219172360040145011608975207596344947769210658964; _points[6] = 0.001411475965443800134825651358139039341956298466719277973633838444099651944102671436345461185232959835; _weight[6] = 0.007230975650216755624745604235452245279656002216723509408307916172060648702594299051622707208973025844; _points[7] = 0.8787726390975521425669806413071461215080266752415391212208380529932518479277636784487635052985135871; _weight[7] = 0.0077746591068403809703585541633919208182299537947198423202384641651753902336505509239560671215301708; _points[8] = 0.8449343774921062514064287344919565431900271420193003901458878575147974746179949038330386644409125033; _weight[8] = 0.0110269395456367302862777382302981553927566333560509275458448854279203254075501907732773782637812124; _points[9] = 0.8077753782079414862781562853347802220882808558955060482906917367586304344645833319010154104094802443; _weight[9] = 0.01487917669239610535935110809974107459177779203087820996598630854524461789174475235354270098848842731; _points[10] = 0.007422051826455695999029982273149380199843648470952244242156277596152147491323816744840604628235024314; _weight[10] = 0.01666384739763897032812241273494349301940479298727467776618499701123988004490992571717846310005239696; _points[11] = 0.7676535050807021900513946022822988218884222022947288784940173065942976001602180565188762480511487887; _weight[11] = 0.01927393500347561210274414657736369528739716154850885294306403397770541527835430503292412077877843752; _points[12] = 0.724955155054066052909185099237878881084330552561552842546850981707460790693381057457479986132086864; _weight[12] = 0.024122198648856929845540272680044765145707133412858515109112454837530783184804667781896838708612533; _points[13] = 0.01817476909526580384371084818030880219026844158254025954136291598091552233243165652620126345900753569; _weight[13] = 0.02571233502559233962916487514592441336832695124269937897406163393750519114984932164320084145245725209; _points[14] = 0.680091537418071236704477829714537714512091984669183389020551342806291946956036957137269710642400284; _weight[14] = 0.02930602312747382029070259723856409204900613580780841178372978455996881359391922812877220700604353425; _points[15] = 0.03356848869388057760203511836733933006131679408286549627645855414122872018381444995169640476649594173; _weight[15] = 0.0341509712866015141155229335940271146524226007444312712197754887548547987319766790888766616421082058; _points[16] = 0.6334947138634949003275653909484439122889862153213787389931455390854347121392448677482017219298371185; _weight[16] = 0.03468240935401616737828159765451323084923611155594248045105379003407352239380156383657820936225743249; _points[17] = 0.5856134376099925987278912540897165142616026682924333001806921183223956634540653543769719960785603365; _weight[17] = 0.04008825767952754596264770738045083066907786976512135760856103031172796742597777430196433932228157271; _points[18] = 0.05345525785126260801052035243425137799376937217185000461579500643018915955451401268677204289733892771; _weight[18] = 0.04178617160801825992915658801875977837905592813985782271826046732639763824111240551941946659502975067; _points[19] = 0.5369088317321095914497342490074296657907384825367613041415625936691425061246625821704741521455568662; _weight[19] = 0.04534621667933985881749779656727066820681662775058860556728564399850914215218638600268285241138664089; _points[20] = 0.07764362749241415095123711981229508670423849074450172141610710630224628092431498413286873936044139503; _weight[20] = 0.04845115329628569641400235641488049317751856187046068419552911791551587187988711064185529431040869095; _points[21] = 0.4878499483276243221234259221844367644251247402658100645076118919224730288083968168335729128892347285; _weight[21] = 0.05027120597876520794900410958133807051720717588961402097129758603339362629583444196959462479095184526; _points[22] = 0.1059006743507898902323150186915157844736889361974601035488644790649877832087183842561556969859190848; _weight[22] = 0.05401042910942297169606643634238107289080557340412569681213873962182967211009544484175484319162796908; _points[23] = 0.4389092513075168270421572355375920326554093292760278491838960877415263051727169311927625190648144359; _weight[23] = 0.05467736526761173539523204053682411291515305478198601616271701663699064504367567004571196515961782481; _points[24] = 0.1379542774855552447128780719326255863550668361596339433657214819259907437335908860511917486878175547; _weight[24] = 0.05836375229138350624160086990362615338239160080471286336192335984386192265975526908968401649778295166; _points[25] = 0.3905580663160595481669443532255889640119739535291665391197508692095761083793683382818158071394605711; _weight[25] = 0.05838516403304980397938236524245392855998127762199298477601893806562625801132740459692252467239128363; _points[26] = 0.3432620416022793630998090225239495403051757556793224800045295652949384229369749325747176898568972359; _weight[26] = 0.06122839910606623016083516397607929712359889718041574971984734730807128531033074166688103903283101319; _points[27] = 0.1734957478467754419324204886538899820795596100969803016910279626820120007603979994054583834071865742; _weight[27] = 0.06144885509138399963208906732313442111944660705453147856358092910024558128442404871634707719902707542; _points[28] = 0.2974766635554075645053147462633574325365810656072451302443779042064099713369581234883434685332375287; _weight[28] = 0.06306081016811023815063366225055830973064193329943389248977312015799791678018878924264416822426470029; _points[29] = 0.2121828040888040191351780039348599803712580510768313825900253541385619933886307214449555348905033587; _weight[29] = 0.06324282395146252460962228399357097064629451333929175881113071479705576514084592429465797579309071398; _points[30] = 0.2536428700864666432082452431813143747831005223909369486026040434260267599265945644212698451850904382; _weight[30] = 0.06376205679777034433887185779904126910661659948041441706014396168363015437816563331764831665085087739; break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } // for non-fundamental types: assign numbers as strings template void Jacobi1QuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(1); _weight.resize(1); _points[0] = ct("0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); _weight[0] = ct("1.0"); break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(2); _weight.resize(2); _points[0] = ct("0.6449489742783178098197284074705891391965947480656670128432692567250960377457315026539859433104640235"); _weight[0] = ct("0.3639172365120456612112619958496727004463362510746294373092948573749466456968158318588966981608533203"); _points[1] = ct("0.1550510257216821901802715925294108608034052519343329871567307432749039622542684973460140566895359765"); _weight[1] = ct("0.6360827634879543387887380041503272995536637489253705626907051426250533543031841681411033018391466797"); break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(3); _weight.resize(3); _points[0] = ct("0.7876594617608470560252418898759996233480800585109738408854524491392307168918253691359860554930833447"); _weight[0] = ct("0.1396539598029082450677625443581538098252225758276251979994248447935389105334084604080564612661091634"); _points[1] = ct("0.08858795951270394739554614376945619688572933192274956543116369516997648742681009672521930761610157858"); _weight[1] = ct("0.4018638274779192615443962665291996972772826161899046690923842878330733109101018240536312300474029069"); _points[2] = ct("0.4094668644407347108649262520688298940519048952805623079690981414050785099670788198530803511765293624"); _weight[2] = ct("0.4584822127191724933878411891126464928974948079824701329081908673733877785564897155383123086864879298"); break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(4); _weight.resize(4); _points[0] = ct("0.8602401356562194478479129188751197667383780225872255049242335941839742579301655644134901549264276107"); _weight[0] = ct("0.0623619419000161643477502941931506212697875166839309830761809569911317040022539361293684065166161988"); _points[1] = ct("0.5835904323689168200566976686629172486934326398967716401762938418317475019618310120056322774674562994"); _weight[1] = ct("0.2596950952164648816529124057792580292271059432720818009310478738715197515684797549856501468079414159"); _points[2] = ct("0.05710419611451768219312119255411562123507794559875016432780829293093467820207316458611381681984273682"); _weight[2] = ct("0.2710138268629762324165283481558817992920669850614066882947002084270279998974049555934063155149987714"); _points[3] = ct("0.2768430136381238276800459976856251411108891696950304683494420488311213396837080367725415285640511309"); _weight[3] = ct("0.4069291360205427215828089518717095502110395549825805276980709607103205445318613532915751311604436132"); break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(5); _weight.resize(5); _points[0] = ct("0.9014649142011735738765011021122473096194864304517102005637358130565651259599860618861752355046079332"); _weight[0] = ct("0.03149582904338455237058463313697596258298062393862741207778897431029291618946468034442481885294203153"); _points[1] = ct("0.6954642733536360945146148237211671613940015549986483590851972611325288138368238668739250465460035525"); _weight[1] = ct("0.147817740145233340701266438683407157647088123302568081608965017046687166399586788131013562994436696"); _points[2] = ct("0.03980985705146874234080669009333316770426265422838516194640774820496474562617430685450225908318456724"); _weight[2] = ct("0.1935631804533033585487219432723014706300773723042959314554533779929073487933655762166538198748335154"); _points[3] = ct("0.4379748102473861440050125200052288525167902742147401264690572735060053301210965344528972647247758255"); _weight[3] = ct("0.2927739741693396173960757387119177719719819871066279796088146708892391099142328799058439924278608752"); _points[4] = ct("0.1980134178736081725357921367952962360381863588337888792083291768272087117286465026597729214141553943"); _weight[4] = ct("0.3343492761887391309833512461953976371678718933478805952489779597608734587033500754020638058499268799"); break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(6); _weight.resize(6); _points[0] = ct("0.9269456713197411148518739658196820110561724195422832527244670796566452024525282438143394800135873916"); _weight[0] = ct("0.01747660362721906351203460662479774148929411516337233806318102016698451025225396235129028371682599565"); _points[1] = ct("0.7692338620300545009168833601156454518371421433222954161669481696365481305739532856852002115427743676"); _weight[1] = ct("0.08791033110101795101635324861086019025599267125557955276461742797557562193809890394074140334644478675"); _points[2] = ct("0.02931642715978489197205027691316491037373039256371492778691068394493603824166577874863094836518436948"); _weight[2] = ct("0.1446206614510173673109086522496639352868157617754660467953566358954592311021538274525319681276946567"); _points[3] = ct("0.5586715187715501320813933418055219400743682889654078255557472261173501228974210783238200520122825819"); _weight[3] = ct("0.1973223017813105282411690210967195758979330860171400109013608542168691368036765872249948825320820935"); _points[4] = ct("0.1480785996684842918499768524959792122302487748085944614125946418015983860908783218063693976617475761"); _weight[4] = ct("0.2710849944630372336813807932761008554153744603412901289757132736303442652218840953547976196174453532"); _points[5] = ct("0.3369846902811542990970529720807757051975687500284733471225629680736913505127840608524091411736544825"); _weight[5] = ct("0.2815851075763978562381536781418577016545899054471519224997707881147672346819326236756438426595071102"); break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(7); _weight.resize(7); _points[0] = ct("0.9437374394630778535343478089676888242202344852553769164275572083026057856516616966519018212670469614"); _weight[0] = ct("0.01042872440561480817938274860756603627285202470301292757712310575208095879452089021202956789850911329"); _points[1] = ct("0.819759308263107635012420057190818215457939379194529844677374444720182011832042478974289957052318717"); _weight[1] = ct("0.05481671344374695088866209671645257295417296286400596170705830992550156540265177605400520195059885001"); _points[2] = ct("0.02247938643871249810882549957084505992217390723560038985928427605875857575812188014380655937699869036"); _weight[2] = ct("0.1119347268469821023031242268598512673581543443021245729793031713310010121026578504175518039330847103"); _points[3] = ct("0.6473752828868303626260922298287587971919781169427252176007906613661670650910811632587999055012469012"); _weight[3] = ct("0.1327693929309829399672959775272798268160367658936009632652402776516685774949256903432965593140492997"); _points[4] = ct("0.4528463736694446169985514423476511453596140721008524586919906545143298698851397040631574340782308227"); _weight[4] = ct("0.2142501313917473399818245059997114645430845154022713345106969229642921740907764451829036761934830747"); _points[5] = ct("0.1146790531609042319096402370675146270777298245319719453889897349515683398313771981082383887487264664"); _weight[5] = ct("0.221018516381749204842241472739215549356686584462224309432389243557215340531236858632022007842467717"); _points[6] = ct("0.2657898227845894684767893916933899974369968814056098940206796867530550186172425454664726006420981076"); _weight[6] = ct("0.2547817945991766538374689715499232826990128023727599305281889688182403715832304891581911828678072318"); break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(8); _weight.resize(8); _points[0] = ct("0.9553660447100301492668789781416922384764228669900323904483832488568928548867910582521230305572279597"); _weight[0] = ct("0.006590382884497597709484632022178140232917756360727536905728685105949423544222450202661257721956446443"); _points[1] = ct("0.8556337429578544285147814797717850302864781605395751604095670933496281754845563783672978210969088188"); _weight[1] = ct("0.03568580531197241678710559440208448516980542367921554701695861934230527222794506401464323963977834126"); _points[2] = ct("0.01777991514736345181320510103767906126648839823850043366560783167875924757578300659726427675032243899"); _weight[2] = ct("0.08910160872311186265243123906792652143579327591629599162893070650953490775807421614093597558657522439"); _points[3] = ct("0.7131752428555694810513137602509073414468837909454265589730704929652137959347225387189767846054023754"); _weight[3] = ct("0.09087863900939779616611084219138819921280234422368229723283559301918617746520672846935872214646562912"); _points[4] = ct("0.5451866848034266490322722299532130551329800560537052249374829413005927647507051249095965493813529666"); _weight[4] = ct("0.1583991989846383202408163787197844534389880146907948116529832318421622220548405973903502249576825338"); _points[5] = ct("0.09132360789979395600374145807454135310704047574456766876687017263479530047915987523538037892138190674"); _weight[5] = ct("0.1822380472727472526914449235657595207038316830973420932240504518535206139038892838023314283723494268"); _points[6] = ct("0.3719321645832723024308539604826292446681000633774806778676385412497303508594868127751294857726545931"); _weight[6] = ct("0.2120947188718600214090621928223164323473301836600784587558404501112348205250685256991863152516914685"); _points[7] = ct("0.2143084793956307583575412675816703226744297175224765908137326191408580982640893227912904964441607055"); _weight[7] = ct("0.2250115989417747323435441972085622474585313183718632635826722622161065625207531342805328363235010072"); break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(9); _weight.resize(9); _points[0] = ct("0.9637421871167905390588356992319185479241288771581362138479503914355973155457527404910756919669630462"); _weight[0] = ct("0.004361694171546261745098102240033931989346658172745913415730741761530425250798256232225741196300546876"); _points[1] = ct("0.8819210212100012998077148880052647763071205854487038619129766513283089105657085985563097864503385465"); _weight[1] = ct("0.02412000856957075810345430457380053454860935724228865674231168030985443217573930570828234243797814129"); _points[2] = ct("0.7628230151850396146826933071467255329235111827037380779911005908346167214808478679770430364298828452"); _weight[2] = ct("0.06360964298210800252338021387173996796508686851938261644837130415206699494945930902374759895630440021"); _points[3] = ct("0.01441240964887654863282674081081323941174473105657808607075067912813887583460044894395069303727210119"); _weight[3] = ct("0.0725560070465597429192991958823192775999960953346010980361779016438558511176469019496579491905235033"); _points[4] = ct("0.6181172346952940246392297516035044802806674046397913475060393055585778777428482116865746364861237204"); _weight[4] = ct("0.1168023905903302211314630458032802960303593103025793617178533568693960614302271220161688241514649212"); _points[5] = ct("0.07438738970919604463591818595599858508097691328473519842679960274501992379023428096791242945498303357"); _weight[5] = ct("0.1521485102186163251601586075079285812132106027704451841051048669451110654017776300437392883754255205"); _points[6] = ct("0.4619704010810109348831431086805643081072330679787275209992998979929435248645151935609445375900637938"); _weight[6] = ct("0.1687166436898406987885000399171749817104627172846977348696669835038285248020424407597603571357401275"); _points[7] = ct("0.1761166561629952818631757460725685864113860479693058739346483371718478923148052033071589166216033504"); _weight[7] = ct("0.1970674843446914103203460407385488509023560656011704825855076061845847487566519614460658661365497313"); _points[8] = ct("0.3096675799276378170596204672294840488163890844971259245735924385417910631238453492458723772259274575"); _weight[8] = ct("0.2006176183867365793083004494651735780405723247720889520792755586297718961156570728203520324197133498"); break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(10); _weight.resize(10); _points[0] = ct("0.9699709678385135029569356423655920593053451564625792084689040051698797214284804451045965026202723376"); _weight[0] = ct("0.002998281204812788056496272008212784833084388876744268112203022420650156860159853329068353288083480999"); _points[1] = ct("0.9017109877901467703487989784097679814681176760729360475326567373055975858521386207932416878958506861"); _weight[1] = ct("0.01683863956596637483503273103740214403152870043903156313634792885260503739501482295430271106515098109"); _points[2] = ct("0.8009789210368988451379463016172425246730022622599153383117418553952368566445573598703594633591531736"); _weight[2] = ct("0.04554918290652606517297529885212039260089893374717979072674077076892597133564094826507860794028660136"); _points[3] = ct("0.01191761343241559690974558695898597603002784725837485802027599304441351971793953552093495537698887493"); _weight[3] = ct("0.06019901604807404660130951104775872423481025847493586386892954004541908963029659975623116469369904037"); _points[4] = ct("0.6759444616766651073571505089347614715039952762295357455139412301626256578790308622295455518800017058"); _weight[4] = ct("0.08680381281430125184491223517276793341846841416734091479841192293605468475240771493378858474227150558"); _points[5] = ct("0.06173207187714812552262936719425014145287208036190213218470079750300542267782554988602355308971116556"); _weight[5] = ct("0.1285743090181651457496530772577303833702586985336065153964167070111045190343947831187521473702406254"); _points[6] = ct("0.5367387657156606328730951777118890227811982315666478711601841465166401511417696449330275943910494234"); _weight[6] = ct("0.1321061511267007583321490050097555927283068703402401952281986304716746942938517327591629187622353407"); _points[7] = ct("0.3946398468857868429619521050776075022149391536489841976946611563878829320916183985232456263028812026"); _weight[7] = ct("0.1691142193816546648612911643310017367123791483004682190032143948519815060462764343108107374876334037"); _points[8] = ct("0.1471114496430702404275994355798195021337713619059297805712867093259790600660861446700545255054338431"); _weight[8] = ct("0.1724226005783520728566667214238285835326209744871433508891823477804675766487885763704506821303024848"); _points[9] = ct("0.2611596760084562402660516580548457231986357161379567253035521310935009972624582003737324443405623491"); _weight[9] = ct("0.185393787355446831689513983859421724537643612633309318840354734861116764003168534202354092520096944"); break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(11); _weight.resize(11); _points[0] = ct("0.9747263796024796502466688135383708980845368176554858005326201789921787651358684645855413515511531779"); _weight[0] = ct("0.002127334586489082815067761922450647971339436325800608036378943516449777205231547251874812699984002648"); _points[1] = ct("0.9169583865525948532931346270180274177520051095629925713521035439862432832098136415299370694612456098"); _weight[1] = ct("0.01208784192095955158546592435315376798873973678286821945884976723777153926935372997535984241012638151"); _points[2] = ct("0.8308248996228185740305665439056567039439893043182143500186679333872078183180614211671796544755957774"); _weight[2] = ct("0.03332724690336138483149424914765120772804900513036485126183239293221332762553574610457746434628575068"); _points[3] = ct("0.01001828046168040584302472986780478481479194051621623866216912370277685746144514894811474690557217854"); _weight[3] = ct("0.05073468137628285236988931703476675133207796896933092717229277653106864390791321026906916586123809916"); _points[4] = ct("0.7222032848909679255633213078046109071372364455125913944559779818780897684066745302575181714890353345"); _weight[4] = ct("0.0652830934276666920359077307795285077879127343290875547799110545738322739215666227754732791506949874"); _points[5] = ct("0.5984972797671391832277207136730435902749187521976111511339511314695356530954712310305911412553938959"); _weight[5] = ct("0.1031827213445951603861732834892155856521211990658746337177474052730046190656697225942280520050772121"); _points[6] = ct("0.0520354511271805525835426957729643224471859250583818355555288193433032785128089556252838329676615465"); _weight[6] = ct("0.1098761822657429965174933633313011358561393819756883634817227365336995079659568003680704346417901073"); _points[7] = ct("0.4681376130895840420831103807577535932852717675509161657042498476028053990410676565350775613890232895"); _weight[7] = ct("0.139063750316366099598101779267868198861848947191484699597473899124092437083773623133953772504386519"); _points[8] = ct("0.1246192251444430737352995872639092292474441300880058562471871920162296059349519090766521215975420844"); _weight[8] = ct("0.1512400961143739966427541096833209231046779325373189337898872562690835045663875992951588992175330985"); _points[9] = ct("0.3400081579146651882336052338970175277313293398208505803470934737382842096120712309333935896431331419"); _weight[9] = ct("0.163758205976126940779173703886922409929998051411988406020634300444537236239007794642416009985288504"); _points[10] = ct("0.2228406070438378555078314534573627644117252503274297081643638173616062308369832016150585853516004854"); _weight[10] = ct("0.1693188457680352424384787771038208637870956062801928026832694675642471331496036035898182671775944239"); break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(12); _weight.resize(12); _points[0] = ct("0.9784379368341496390919069169169960383680691296676253661798930654904321350621424594217105164689234999"); _weight[0] = ct("0.001550364441876056714491629023748274324615848140402517231572360221265942541320023063415527150625599336"); _points[1] = ct("0.9289421012644110178488101551343152998504932414769823471037599293899243740926428914029706095801991064"); _weight[1] = ct("0.008889615591336924645592291731656523264334512786299205998267553396394713293187392679750568752472830688"); _points[2] = ct("0.8545525437649358807902119164056171284859595037395583869615217146999851616473022152580139867380827058"); _weight[2] = ct("0.02487201833284453121496658611334714530755126260542143269983812777030176667500918269938718422593047246"); _points[3] = ct("0.008539054988427419368664460877839802806090414566577746496257927301230364575762166797509842961307629987"); _weight[3] = ct("0.04332972177374353464916694415595120758543212996143774483351792036632706037307065931531595605216654504"); _points[4] = ct("0.7595988895252270537426025740434203419422064350885379264310222786423119973912528922496277727549814325"); _weight[4] = ct("0.04975356081853086402501634458003176107706292549054632675888919684570712369316153894595850288044856231"); _points[5] = ct("0.64960065027725499276629172334298057222565311827730373485571958964856442485986620008885607294565333"); _weight[5] = ct("0.0809033074138272335212928485012913254284908033388081504474420876958459531768419460967739126481291571"); _points[6] = ct("0.04444646315540772302546679878555276624130930378899710999139642043436028639661647795803987919635307312"); _weight[6] = ct("0.09485570396075494026861836439417384912441834405354373442454022749260726809250625956872612646956304494"); _points[7] = ct("0.5309508493128176706289302428968181393245082635016252048349547896722090314354827164359000778197833608"); _weight[7] = ct("0.1132276874273352638874022103122425258241607825709588607721683748382582855487003673371838524124059047"); _points[8] = ct("0.1068544908834766576341067704324992625897998143695000275580631125622836143405186814627639697793505886"); _weight[8] = ct("0.1332135012533463962616689707039492301237993045862266872004033332675451141542576651800487628901600931"); _points[9] = ct("0.4105450812014576824890343505593324118433186951909181754985565958109519682767226149737373217217664215"); _weight[9] = ct("0.1402186799952601889918436100593420114476858105470553510722523423091126135591673604029597265238160539"); _points[10] = ct("0.1921510545298540409910572562286133303827013670215218660373964882963368867384002033277468512639620344"); _weight[10] = ct("0.1537932053600820125624089382247452165048916722672790101081421598961789423490551582621434158001226839"); _points[11] = ct("0.2953808842625802216229168343760149059398907133108521080514580880514097551832904806231230987696368169"); _weight[11] = ct("0.1553926336310620532575312621995209299875566036520209784529663159004552165437224464483364641941562454"); break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(13); _weight.resize(13); _points[0] = ct("0.9813896349890121485602806221597123115526801027908002379955097186555535838880620308147789489545503322"); _weight[0] = ct("0.001156113409872385703193022385189204618455050656599975054649145246648958439626729696480355938729999156"); _points[1] = ct("0.9385244591007310123976333867652993517339853062062887126354508873721247374248021832126814047065480957"); _weight[1] = ct("0.006676718501547543613220841284083742579141287031654765750719644999750581810915764860757199651559573378"); _points[2] = ct("0.873694821306689419367714567131743891173381534920334759444696161547514405472868541853111673402239862"); _weight[2] = ct("0.0188978489591855007323601730984825277398072170071017667796222649055973489956725747846467746142906843"); _points[3] = ct("0.007364651026089321650691498413822343611205715616446000420689416452269750033894550997416319128445293114"); _weight[3] = ct("0.037429463171230350386748817329987677463195653326885579415509956584359065159563626022275791014111276"); _points[4] = ct("0.7901570282734374855528633324993759322704266136136999317134349971780526905331558640579365443870029772"); _weight[4] = ct("0.0384279143294396412917909957274853493954585050845213350300056554246318753846340556589445192487208949"); _points[5] = ct("0.6921010017196016568970419516876697301808911008718652877381506074556730863418738419796277914411356902"); _weight[5] = ct("0.06387357432440629768476274231692273392726396567637467815805792742291004917213504197268100373444847643"); _points[6] = ct("0.03839813873967835037683252486414168591782983413635468761241601179824278069140258974034999134662094291"); _weight[6] = ct("0.08264057883967859695322341390524823284515157447829234410387722644326630504728309789009709658118130558"); _points[7] = ct("0.5844439640213404555042208478109107062952661618107888083023659837678484044838564429563713070829009516"); _weight[7] = ct("0.09199156135210478662651956906042682442879113791215881297685885117558806298728604690294432003559148446"); _points[8] = ct("0.09259522469900263528289137543861635588927985865429292632366593235281921073136849542406090039759718093"); _weight[8] = ct("0.117907875913294165072323006523922488540725339188477464752066853333436329261003962309016356899786218"); _points[9] = ct("0.472584386004117725175094642678597272871548735684737639137060650545639928993354340136687675801761997"); _weight[9] = ct("0.1182409626281846548385803119060635216477645343671270767817530063264325986532512918418359540320018567"); _points[10] = ct("0.3621313972822388004086812982273215588635004488227823666951627890767765685364866146107646481156613177"); _weight[10] = ct("0.1376310589751308344356757788733870175764464444515615290689142927534206737481584776849026461687874131"); _points[11] = ct("0.1672510113915577314955224787593571163747337087390977895834969262324481399932617359780977489832830797"); _weight[11] = ct("0.1394269365642887965028332599008539689313215803996770757259514170749411407585930292996487794819507198"); _points[12] = ct("0.2586235407057625165897907328226910025245301373917701116571591768242959721348720274973743055115115389"); _weight[12] = ct("0.1456993930316364461587680676879467103064777104195675964020137583090170105818763010757692025989815253"); break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(14); _weight.resize(14); _points[0] = ct("0.9837752340986002382812280091410008568029060918346814026541382401229231239358663224051124039381821732"); _weight[0] = ct("0.0008794274174943185095245122078521822019754611306820543635221058449937077708215836466191607368411296988"); _points[1] = ct("0.9463027000602753835334059434247240449122575138455164975479188348405641933767500076215855613747667627"); _weight[1] = ct("0.005108202635375307895958999219885338023800341194130592644971481918873169565255964058559811747742715242"); _points[2] = ct("0.8893428088195155396908716609464895647037628629053267599145054482375380565684526275834413083786664654"); _weight[2] = ct("0.01459296826642524288681984453495518538081081230683288195407175989264044277989459235431320050562344511"); _points[3] = ct("0.8153897394434746419730742186120575147090134055115116514499564217599632405912766985454621567772925713"); _weight[3] = ct("0.03006460748785728700681742950262958234619962060282172680123539669179027622963256575707868303499798465"); _points[4] = ct("0.006416760792818456810820464094507178865719839912244884307238769932733545613705239155655121904187687092"); _weight[4] = ct("0.03265350864519367963889885870153317340972173478361002456864218835784085024442850788249598470811557747"); _points[5] = ct("0.7276764528892646854360267279903316966165601685246486600874809495965456531104679399309294019000621421"); _weight[5] = ct("0.05084693081429752423013979751491821787681438824769049239677309253558218964169264456977882426851555228"); _points[6] = ct("0.03350140453201314003596392857057248161039076925284236707232192332100661384915949406912586179668633199"); _weight[6] = ct("0.07259215611088738637530423764370492657108112269853959863122175065021865096017202301997584723508772513"); _points[7] = ct("0.6300366883704039578844805941314332791605030321087179470245277359365694220786253960307680873297618343"); _weight[7] = ct("0.07488619291797165331187660365377253958575162997750359965853311053036376136149071602224720460759622726"); _points[8] = ct("0.5267378613398730320537269448128829953760927123999441876600624391842836631760001928071840738368501546"); _weight[8] = ct("0.09903890904640600916187235867150676110280042407247668375164802867487908835414687742741451294178579331"); _points[9] = ct("0.08098549968195518439245130773998218722766514758665499507829939127797017196531825081787486655370778227"); _weight[9] = ct("0.104891907003833491182163612325355902630923882710021642880128189982150297028945256249301997973770032"); _points[10] = ct("0.4222946573075702578404089875181026958217938762273438789639540713852576268236287646690911714244228904"); _weight[10] = ct("0.1195711180450631684452281183371739455866965354227942932369779043707771685058862101141744024798095759"); _points[11] = ct("0.1468048676812137299236601652607991515599694654279756227180485513313137055587256285457460550167373603"); _weight[11] = ct("0.1264260511486584068850582307158644869441896337243628225912745291094341360195650397288853205184837878"); _points[12] = ct("0.3212717439889361744023403974130354496573046310098509725155244153528428571119004042632189220394104758"); _weight[12] = ct("0.1327847012521708502656427173025549628480833128549141521111606655971088192656782192878509397656416219"); _points[13] = ct("0.2280842706492579915346440986199429719415777248320505178336090146170398503780540680375636284189205411"); _weight[13] = ct("0.1356633192083656742046946796682927954911511002736194344098397958433474422723897998813041094757195334"); break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(15); _weight.resize(15); _points[0] = ct("0.9857305452631742252659006330591292421044806623979681396367496904534811104340037194340828859918697385"); _weight[0] = ct("0.0006806847682757921219050495213766638432680058407302207119346460095765860960776864024700562258866547623"); _points[1] = ct("0.9527004099058333143380442075242620935055589938201492599119746533434704857023258451913238950513425218"); _weight[1] = ct("0.003972469386290076082067610229152060080164258093234183168970372439783118787506178115381153751505928668"); _points[2] = ct("0.9022867006793780266312385046620090802654876855849468717160511280017608939616471254566098257665163856"); _weight[2] = ct("0.01143444478944235234324930059485362276155780539908978755489501360681769092103144487510479479673066532"); _points[3] = ct("0.836430960605610123975559085654183196614405051627992133778977423021298990485129486291590400663182545"); _weight[3] = ct("0.02380838071019515768606037392049978041111467814177297555284892510317273317213807457840075998316796784"); _points[4] = ct("0.00564068897251170975750646657944420096608410698813114796797833513821814157573636404891569720358967909"); _weight[4] = ct("0.02873413924342504603822660041253805338312894456953019000237612541859506016961128946212643705469219694"); _points[5] = ct("0.7576647390313427119970742777402853179406886187590936481745381257951925531912300645820920629808513943"); _weight[5] = ct("0.04083261854523967138238199054130899238084842965133790112559698218356527355006904832983602017392245969"); _points[6] = ct("0.6690151950299598765386956390531395651245327979857527236420750144055549199665133052913040313820535802"); _weight[6] = ct("0.06121953917293708160858361757949451057101860352459654126809960020356064378300880593208989800744638434"); _points[7] = ct("0.02948229864794248663164098471800370918700961303166077760161299352098320969659464315137326588996548668"); _weight[7] = ct("0.06423808974993183175709533215289588884744112148800311203074357885220757249757941129839863550239944708"); _points[8] = ct("0.5738891609066858806714538552375264393339926267874317142496528265661645824810184689905478175189410147"); _weight[8] = ct("0.08280147036884515645762630104986933848692863219976179565650568989405659185694148889272203873424612482"); _points[9] = ct("0.07141295311515884005478390174673491912187290234227435678431701381106489005946195046185073236066259622"); _weight[9] = ct("0.09378327988811985135869114109359384457615020825902727102745231221097976938006047088803797585845547739"); _points[10] = ct("0.4759423084632348605725889920158496815427420479142534143461931573336140130566014455167924185629638753"); _weight[10] = ct("0.1028247246237729370608003387427179543718483332403108120303957336121729678371306599559686414960307901"); _points[11] = ct("0.1298310255535910559712545380942899123177230784713915452688927991403297243171614954096840860975794594"); _weight[11] = ct("0.1147976510138825787492378322328278794932624818571617498887067215859317142102959221744686929404717464"); _points[12] = ct("0.3789386886469780381065290091427738514254527443330112900124820663975192124536679674713512968590311795"); _weight[12] = ct("0.118348384119425863130042337329175114508728339622021249334756378356496508819680628536993165372220157"); _points[13] = ct("0.2024927550501040475682199883202304426029145838857816183098197713593869872838287905637745131407654636"); _weight[13] = ct("0.1258362132971938191853306984611028086637728409087228064297723636579546705764893008808467616699069615"); _points[14] = ct("0.2866060862575270599840260454843964124631835183282258747277172597764764143673373926548361027887495962"); _weight[14] = ct("0.1266879103230227850387014761385934876207673172046994042169455568651290983423795896771549684315259543"); break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(16); _weight.resize(16); _points[0] = ct("0.9873530206260416180311559031679007912251798676684086442026613475062814838402808784348941153083800942"); _weight[0] = ct("0.0005349873301110723536352523245214688183617068853187298053447754895460255914769305758271994969541214465"); _points[1] = ct("0.9580244176904754545449593445542902781690561530886972767565858987751500797120765811025149504454439451"); _weight[1] = ct("0.003134376947191639406144801392810125165152211379977657619913840594889257190569195251860266967518853567"); _points[2] = ct("0.9131083765371412746295855467032689982673591902958463102880070958924077633184989381448279078074159235"); _weight[2] = ct("0.009078464772277270136442222357225691316200205613577463083584857434992460933218018083501741086092773742"); _points[3] = ct("0.8541381477752106336651136838193234409326728494243068253734695081123194081450149725457651384431831747"); _weight[3] = ct("0.01906833576933187330993392764154659000664170074848288047274653307098419606424675728205551148860085042"); _points[4] = ct("0.004997299663771921042651149601520690335334381543416344377970522255874964157558701037502647102439618306"); _weight[4] = ct("0.0254786213146683694950996917591554882950068833129658279912640220737138513709595935845618250570916986"); _points[5] = ct("0.7831225539648680838521817825620535305797128397296362805179828091518110236513200121261822163769397743"); _weight[5] = ct("0.03307916871127158700245048416620955670443497800101336034230747234827543543117463085957742175622968897"); _points[6] = ct("0.7024801379250410444548069755376171424391608550242998874533600580057788358037540611975107319064165735"); _weight[6] = ct("0.05031846621294008117130791499383570158153393032155337021668257703869079487755627644770701989152686714"); _points[7] = ct("0.02614351368139405197854932338054296839544549585254593258969286943447829808354691926416178281901416681"); _weight[7] = ct("0.05722490518028629871511613797483697079230632259783211879752488731784247248602820192649149147829524039"); _points[8] = ct("0.6149571518764895174896408338190829300761737909570376040266234164320457869812106383069644402943986533"); _weight[8] = ct("0.06929563315857159820616975574746178675946381337997363992181349355292028244090523248488698582693559141"); _points[9] = ct("0.06343094558383674549252822277070085989944232720053606329921286336606196501991941696906214544072557158"); _weight[9] = ct("0.08425886231485656951503148108375679459878568927192553127356020255912965879211860283525552208869890524"); _points[10] = ct("0.5235341160251683205174701650756566635860722410235498499954471423511414451699874777100902273256248828"); _weight[10] = ct("0.08799476437848784634696283460898074168566203452803298141048012151277732409770913018617800056991931691"); _points[11] = ct("0.4313243435956253750835922695827402886099831559358862798400496976431495143682652974446555198615522437"); _weight[11] = ct("0.1041282756876131675099467043785466919999001988893057566387403573176304031195728572957688903687759438"); _points[12] = ct("0.1155984375798159401789236282473972563726614701242300531764409420939787630288591298296722238684111472"); _weight[12] = ct("0.1044571888079182947270193577860579511982476687312989947927842773279309587346572216043331398329162766"); _points[13] = ct("0.3414679275478230686258992979386936719113738330035523847360437885913802004557323404561019734950136269"); _weight[13] = ct("0.1154377592185356472353639909359373445130799205578497513133111318249085177414985560302496131357962334"); _points[14] = ct("0.1808705596578836662475733912556982106123115303246260325696821028817277573264066422281984062600090246"); _weight[14] = ct("0.1165084804197116707586035588447860117666087389169987223931858385521171238120053660291409688664210766"); _points[15] = ct("0.2570248078451708599229442395592698543456357763791818065543456950821702866951437507776531490026073371"); _weight[15] = ct("0.1200017097762270141107718840043310847986139968638932139267556119836512373163034295226044021116885655"); break; // order 32,33 case 32 : case 33 : delivered_order = 33; _points.resize(17); _weight.resize(17); _points[0] = ct("0.9887140406322437514171214022529600950271304358332938882155721604826076932154206388238562326534443377"); _weight[0] = ct("0.0004262325784138671616503014825668479867743121463983310760858304095888980890581472393557710822246507172"); _points[1] = ct("0.9625011978233500412504607753885055612059058670805919300838487295359170197761774966465922450143861371"); _weight[1] = ct("0.002505366878782441497821305040213450564573948855367154150978343268848357634079495184968727608399159802"); _points[2] = ct("0.9222430345922984084871073282303817691602583776161059845144196175091317355129889510768256352598660848"); _weight[2] = ct("0.007294460966842812890068913047567504341965175593956839929686155659396138028717360227340619459117792835"); _points[3] = ct("0.869166059567413619204446498011157536480619533973801747094055147008674628966944082007489138202985139"); _weight[3] = ct("0.01543284442961187739177684553210850040977377913889605049895702539591618751800244624737646088996791658"); _points[4] = ct("0.004457993567787391754506229111546399964633760100259970537810725491458494250043598437019664865493643768"); _weight[4] = ct("0.02274540622639378829776020880683720609452057522373976015749508324031731694387040746972125365570310004"); _points[5] = ct("0.8048835785249664919991777013970255022373475851134620892027287774778381435285669046560052364431526214"); _weight[5] = ct("0.02702739490460156181927791662098239956927108947038280148990998102655235785834616122857118941751450445"); _points[6] = ct("0.731348952734051382133021495562975876964288241933596559645743754150107521905228731408698776571450455"); _weight[6] = ct("0.0416065560205907241200257327515462961439659897769936343927590006521666545011746825379533316882700652"); _points[7] = ct("0.02334009412377427396702152820768312299586060057599419863449974659248238243339757550585495829405487255"); _weight[7] = ct("0.05128485584041035837150041049462227236569515810109611130226859683533715551484088425680168656439029542"); _points[8] = ct("0.6507965584533822647314874073231465774368335045672017460161248195939594014514835415159009295305527969"); _weight[8] = ct("0.05814904817541010112637471093584722632635723649505078175048544545500447542788986279551396785911403471"); _points[9] = ct("0.5656739668866343319033069760096456365875201180074841733261734685045356633266844286988014211643520509"); _weight[9] = ct("0.07518465097422447606286399704863748886393605930789172672958010315085190595784826875016684063030466313"); _points[10] = ct("0.0567079687690782395327133315565206422583954294330082911813093706572985010525054793316865221556378879"); _weight[10] = ct("0.07605145765148480040294983401333088847853799893124803854611256634704675720143211718355596447759322621"); _points[11] = ct("0.478567596853079588783710462859367863464895919649049929129470687367069564027548762072173649770694993"); _weight[11] = ct("0.09095558079828455499487784832842234327421076718008184235832962158876271346851796676218008225388408436"); _points[12] = ct("0.1035554329351970634134912269613124043655029097199118685108784305899757515572621444529640256077589927"); _weight[12] = ct("0.09528373874923688384115041853141755745633038829194399052580502788189156712111849867133924841409385054"); _points[13] = ct("0.3921241347220956580336194633319030935711764025114615789973484145740342676368815150194126405593319517"); _weight[13] = ct("0.1036194838585926665104294095256400693128383841028677293915780879742991691522033818310328703299843335"); _points[14] = ct("0.1624600034281365499816295439141031838558059790103253735306759523919908694781359490868358657162134059"); _weight[14] = ct("0.1078158633350549603832320404930530506583776814863800678782279266510495293543282695089808637986145332"); _points[15] = ct("0.3089701177521959033175242612862631293729470242289113159247135612658365232010381202115837653514093201"); _weight[15] = ct("0.1114698358471210991542580389815065276072464356895427892969110466585885649118705952943517744483555478"); _points[16] = ct("0.2316321257771721829467972257383587479080211677883964983117694939499389815368349381911564356963581668"); _weight[16] = ct("0.1131472227649430259739820683657003705456250202081623505248301578043822513167014548107893476058445038"); break; // order 34,35 case 34 : case 35 : delivered_order = 35; _points.resize(18); _weight.resize(18); _points[0] = ct("0.9898668482025971344167630227759617852272654029332944782218012796457954641639004909483002293295752187"); _weight[0] = ct("0.0003437381681963917846247430221834229151499287042287230354055143379188235978579521132163657479768314514"); _points[1] = ct("0.9663007519456325424115067464906798893423212721801663890681129055831478702436903498571145506943067162"); _weight[1] = ct("0.002026050358602094250494341820341870894120024561864795036338823580354925264367517227275244576909932423"); _points[2] = ct("0.9300208896996932164819585047276942532417932534056115051608547073927014042784861756734769306165351191"); _weight[2] = ct("0.0059248861288656750073070124596837593021079220492247058775169782719872717029736487292831561213573021"); _points[3] = ct("0.882019825362079146731241208862299348005417555808720267548968016151212864669297713515695332184984095"); _weight[3] = ct("0.01261207776476106746655648532508006599729513787362061969061111331011139156523293135970609947084018862"); _points[4] = ct("0.004001479383867386797042719910270824223541185248785833363554578344319893757114842618058463407348803735"); _weight[4] = ct("0.02042867887008126774453513345708525680111295405537645831789221858363235004907653637524376483250420953"); _points[5] = ct("0.8236074297748695658739488546206220397694931892518864127892186510351045655222244744576037075797895574"); _weight[5] = ct("0.02226374019481872490578598695715605901312264527880759493159497248783660222780139439098845774611394999"); _points[6] = ct("0.7563771934061506267981673359097779706473518228163447251511697288815637982124887651626427336664155865"); _weight[6] = ct("0.03461660096179857963094037301158265977500547563449518843396957076139936244796763506359293284799136368"); _points[7] = ct("0.02096364839376647799513560098656109675689180176538502182710065123636384918467384831554500962763531465"); _weight[7] = ct("0.04621270032675413386257866238629064300957438277868616878558323293289918331132386077257775663020718931"); _points[8] = ct("0.6821630391136515650188220799815272984812129529984549136808308873845014736266989488992730818190698119"); _weight[8] = ct("0.04897518000258343319573971841628213770242132719001940867089608917054120707937976989292545511549928993"); _points[9] = ct("0.6029893605598320721374807041874726334761957597253021332090631742614856848258536813319527445372951366"); _weight[9] = ct("0.06426961225525709848147580633301085880443436756721415851562729065246516504496265169885498286161075816"); _points[10] = ct("0.05099404158789055396677492129985342752684335179502102250490757627054764167157590973686635778722014573"); _weight[10] = ct("0.06894223784384404993007739031698519886588775153771160210566885018965190752564322224893633392985120252"); _points[11] = ct("0.5210158208707761473198147915854717855660664902319620429318729520457293008516289285224828683060695134"); _weight[11] = ct("0.07915832457721575745284593825289506100924953969440499641376678369347764830926340546224343749330271028"); _points[12] = ct("0.09328039592854495077760905882606572909110423169403601965545516113954878960271296675572769974433514713"); _weight[12] = ct("0.08714781414928617652436330187061168404379158056036702876225120391972824949607113158995664181206534451"); _points[13] = ct("0.4384784492241381176518542603874069642668262016685327878789060389076575892412083497577428502906842642"); _weight[13] = ct("0.09216480198048256152417399078564414852612846466652256992046258396446590593706414236053909750896569121"); _points[14] = ct("0.1466701036776179571516088297346119926828719790587607976177450052287675453102203350213112764829923106"); _weight[14] = ct("0.09980445383540542778220444771221204607299051846682882828893450936727624068650930424980230859564698864"); _points[15] = ct("0.357628649976634629398327142983900163551554823411966631545931014342118455385001575208686365462093356"); _weight[15] = ct("0.1018338577127481863631259923308642099185514417373884497748896700704506385950017111137663314704100197"); _points[16] = ct("0.2097070395888429667218817114520340564344572337129713950314960570502750540556726532998975043202670298"); _weight[16] = ct("0.1063846692636713200524475540357298948042757460509025466150822041706738793410034729395308181691385946"); _points[17] = ct("0.2806717900601716991068192620345454984655482490495543795697683718559155121543067476743790509001396303"); _weight[17] = ct("0.1068905756056280540407231215063610225447807915923361568235083905351292478184997124115608137022023352"); break; // order 36,37 case 36 : case 37 : delivered_order = 37; _points.resize(19); _weight.resize(19); _points[0] = ct("0.9908518052709556853530948352201172311414908971100306236116888056786547010228099804847460306449291637"); _weight[0] = ct("0.0002802551883567726748812555744779639105600352061968937989749794735813128057127028672314734203440280795"); _points[1] = ct("0.9695526370802208854719287862322660049706018326703098706378843584104484087310020229969934667704093052"); _weight[1] = ct("0.001655761521847964386692006035428965858679000056357516012475017722076239956761833907883794506161951596"); _points[2] = ct("0.9366958480743650805439055020819450266811818650579229027664901891451477928206324529848022077423518401"); _weight[2] = ct("0.004860183424086561415136332087732184813912903332909763493482554844577771785083994880850628451944158735"); _points[3] = ct("0.8930931349818449707509811545649148473623623153254222496159769165216758357705561673044346695221435769"); _weight[3] = ct("0.0103995626565567593736110930883662168930384206107188660197640952475440944449729962894776242764085632"); _points[4] = ct("0.00361164281855689303445321012625198346733275355003682919557113405867408349929295207867441611737690897"); _weight[4] = ct("0.01844807545006615338353364973844063664514747348633002796850199039649780838921192974783628927072788796"); _points[5] = ct("0.8398186157087110778386362944292882560999767507786887653784723935849407017581430396000219565181239941"); _weight[5] = ct("0.01848218385863319552539537554057223036019964756805820620573212876783093453134742074611622587750882251"); _points[6] = ct("0.7781842229767616142092996470420758791283656925578678775853071098643813559091198697527204996713931532"); _weight[6] = ct("0.02897969422421944931400246601007177204686871789749054254495145220324571113131572128329170246403961399"); _points[7] = ct("0.7097076516539023988437467831116355144608909392408906399894113065110659853244124588493665962726797404"); _weight[7] = ct("0.04142334512551560975967431967755079490752620840476902467442180073660343747997340115254631834842068448"); _points[8] = ct("0.01893183703158821725026452431694923674614045524658723100881095660938384328017838051860341840597562064"); _weight[8] = ct("0.04184930350395978096289045666597507923015930768805746257353242039038709944828752655956749265005342344"); _points[9] = ct("0.6360750448792708946910910570981647668668019198973285696987761671558681881849944225414546581423684885"); _weight[9] = ct("0.05503611628869595628296228495903234773834971955306329246189976450730557322385402735173501701009562429"); _points[10] = ct("0.04609793304843108357392477083545909375906241693422215752403930389795061196209317861717874813163785794"); _weight[10] = ct("0.06275255057146579770871362891521873929256827500121891666402911779624971524361366764385547386229422249"); _points[11] = ct("0.5590994926490319878469279758790814850485694130830958106631220505575721013709915928328659605930323349"); _weight[11] = ct("0.06879791590381478285911941087185040133275238686516501251070694318774386308432389393107853548035543575"); _points[12] = ct("0.08444722278420982059984790045116954757568547567342996475773948377116464751353011539561005675988539905"); _weight[12] = ct("0.0799247400979834838805861528846334314674922993978160391753764141223543035502626214065807498002876862"); _points[13] = ct("0.4806763935785519026332213524827062607958913951805210382735109679392374943149106385409942481778506352"); _weight[13] = ct("0.08153774174367337114460345968332885877015622313913313374058373868512964935174277352830164497093084712"); _points[14] = ct("0.4027367861650770951230470111048776348626646611402175602798726241469139422734752813325599363666955167"); _weight[14] = ct("0.09204397143227682581672576212135660932951865767707678899669727185145202547081949806407328350372842929"); _points[15] = ct("0.1330361885580987754240874239752163178462101569942577515312839921107421010353389269684892715246493502"); _weight[15] = ct("0.09246985633715682353076157026438268785806641992726473058335517773221312455376698448719205979985072617"); _points[16] = ct("0.327199800763811715728429965275660215695471902297825977016122346800179335288035110115459307288784813"); _weight[16] = ct("0.09918209293741316028263210506706355271369499867043289653925746745730565272014624896429591950124037465"); _points[17] = ct("0.1906685949047633510874746648871937910511869102030339299609855946583176259568932278761873481665619608"); _weight[17] = ct("0.09986827648083875910656821167754631038635897016436543739205281535304647362910941203114996053856106275"); _points[18] = ct("0.2559254034821029602520473972952833166965225034685666607613445549879376542400004376190936134395605969"); _weight[18] = ct("0.1020083732534387925915104591369712164449503353535754486442048495248552091996933451569357987499299783"); break; // order 38,39 case 38 : case 39 : delivered_order = 39; _points.resize(20); _weight.resize(20); _points[0] = ct("0.9916999557929327307665436596947020094146922407257829898363762060484693209882124325386440915297526987"); _weight[0] = ct("0.0002307638143513705802967255226568830728813167721599840524365336414500605445638183205419184402827059144"); _points[1] = ct("0.9723569466474369111847018716646485313955816199047026627731927463182820924001386973341816730256379103"); _weight[1] = ct("0.001366124552171843969035439751076010937012975665488565633903154123928917136910100459323476024770590956"); _points[2] = ct("0.9424655423631863386908918774276637741176541559385663981945954132521152784422837129268702079654087369"); _weight[2] = ct("0.004022915227928156013814278936824336762072286332632338071325792455668677727129064099489345807286851259"); _points[3] = ct("0.9026958717934536922763469416996700772864999425096913605427629927201564197787843225600147491273022283"); _weight[3] = ct("0.008646438225380306267478104148579112377200533623295159410282371065482011056328697434527181907858069684"); _points[4] = ct("0.8539367530358904570890043916180165250991367585634254004379927018011944789694603521437745068010803997"); _weight[4] = ct("0.01545533586010292574715613428317953854964217039480755935175135440483625462586097291289321958626061925"); _points[5] = ct("0.003276106669050098975264676112871143292010168497029644767295470063831412161584194743610327964052659495"); _weight[5] = ct("0.0167416883525451139484695594692113303959200115840109757199624734967735024433026011320234271381241498"); _points[6] = ct("0.7972775083365946877021888513752729067366395533700328215630061593076170870677993680779536516217368242"); _weight[6] = ct("0.02440809225336020855759740649158179130555848135630839155224086550001630535743462622984150349854465053"); _points[7] = ct("0.7339838582356594497320271932958407316824886943041261173702937687882678060193520684331489222685668062"); _weight[7] = ct("0.03519413375841203253537225731014733812107557483384302032295579824046286874151937628916098565550834621"); _points[8] = ct("0.01718121814525571373824770463158205217142310650921932699389301827173010299694629239806929714009353387"); _weight[8] = ct("0.03806993892740333390463550463872740520842342009670349282847748189119210800461319599436674582927199561"); _points[9] = ct("0.6654696989055136479537295881338505673772460184966543033851700597919629976818155341141170411631585467"); _weight[9] = ct("0.04725059234709778562613272088316633264786049061137085249821716995453687692356004132430763173471373923"); _points[10] = ct("0.04187143111776519524423463414370851114954902307898488691386863470682049070344137006251506996053615728"); _weight[10] = ct("0.05733647475826119260703896626884620663676526982142598197751665152278167937952506465377762486070349003"); _points[11] = ct("0.5932655334835064879673930865443734208473977411399654892597462260744716869678127565393306479732092832"); _weight[11] = ct("0.05980348368525802609816497837917858372547486798828513804350498569402473230677222080215249105521630064"); _points[12] = ct("0.5189842887035737296184117608302417580161348370994725645140664538072682185064509019793474604143752166"); _weight[12] = ct("0.07192983830772549570812637571959705220454253379516249592845826823872807811447074214345608253045060851"); _points[13] = ct("0.07680083708962197048187052301994736761573663220191864690793950376336940712642192742790120232186627601"); _weight[13] = ct("0.07350047967329571176034002983707970547786941802561395491718754226714603265744811012378159064912127635"); _points[14] = ct("0.444285286963011162128823917835975050036359774906195940140501796031417737745668160330444167600005532"); _weight[14] = ct("0.08263541363333147565166589034452447111897790526008740772996796592380070257693533775950888460291073922"); _points[15] = ct("0.1211898673236760656176861522945444470235806268943235898707887850377131524410713389898296198872403467"); _weight[15] = ct("0.08578059167595640842829204758039989126835431719768784417396580841619485004243385901000626956881311921"); _points[16] = ct("0.3708371805843968964453220795377124336991024955666204869798357877359442742262916746260159928230296167"); _weight[16] = ct("0.09094117788270695025052175053988521021573682596634589761784828202602528063874365566272648430490295018"); _points[17] = ct("0.1740471126355421652241579341996569921877681033069868901852878459116461179764358286536618532558350224"); _weight[17] = ct("0.09368338372511565569498576493650134822004762846570875646531322483816870359335260839464910457532484731"); _points[18] = ct("0.3002806768359501643662584187171734631746719686192409655675227716570747312020196669966322653788992448"); _weight[18] = ct("0.09597092321988782503051231642150166590478722336093452405759351080479348502148876405591865563178148165"); _points[19] = ct("0.2341918863135921908944557128323043352373021481231570747714734150082081622077654966849128615343105212"); _weight[19] = ct("0.09703221011970818162036374853733578584979674884812765964709076549398887310760714319754736126669081831"); break; // order 40,41 case 40 : case 41 : delivered_order = 41; _points.resize(21); _weight.resize(21); _points[0] = ct("0.9924354907256214774937902793889982068789303884718009223638209927180066784787668474833283570905445554"); _weight[0] = ct("0.000191723737059443657959199685730487354781103587725215652416642420063697623658594870138319440832039897"); _points[1] = ct("0.9747919756603656530791520912867540805522533015938938496488658734735577229804897977756749790184306923"); _weight[1] = ct("0.001136997053399528357223582471399066105620591183233813017156494435682540599458716110693253354979571245"); _points[2] = ct("0.9474855444063973466860989716611313948903221194844454580667087781352119091878179384063695290882740173"); _weight[2] = ct("0.003357512043133831072552673187562964503288479122657296229103793587294405115801504672333876098665852311"); _points[3] = ct("0.9110742658026157747796664327661934805098614945934874284421480344586480510586007787502760981037640813"); _weight[3] = ct("0.007244105739489879730472547559442240697420720259915659077551736989091842220673176735262750458582496436"); _points[4] = ct("0.8662997589709565970763633043579206958620698193352277530749704236585637715961211057848505289659337019"); _weight[4] = ct("0.01301319484729121067081350259836615564509889406165673029724426861833434880054116162097542564135199251"); _points[5] = ct("0.002985237283213062741888784075749833348045897190182021426647111448051836745590953162187136553707655404"); _weight[5] = ct("0.01526121181304637819034183537343181870586287942279387814026920795825460055220015001230074094371099912"); _points[6] = ct("0.8140736165126974167889441095793418834761159091940745540915800538406752152475818572669301867705564224"); _weight[6] = ct("0.02067841951594062532766545282048113895201409713863530682554154662668730367463374091492579251825178598"); _points[7] = ct("0.7554590544496869862658499728148629393663862148485365820478410117499734428055421838878873979671459391"); _weight[7] = ct("0.03003974522638556952704078489267777259843073958271775542411847529124306280115798397937637514899445391"); _points[8] = ct("0.01566228055757354733289561065567830149720101282930379057740690982898809746455700724957349161137445402"); _weight[8] = ct("0.0347758521523900250906201851623707590927008222558555613311917759618246838587949059386947611441063847"); _points[9] = ct("0.6916493150129622572194466789692474731114378954421946863393862533447191774980898542170077714513614257"); _weight[9] = ct("0.04069109877964301658407017730425226266443064057334065145095136833448379998485753079799217710254713125"); _points[10] = ct("0.6239433897212819474963058147440920154900191318154389436290443886013853942344250394844038511295753291"); _weight[10] = ct("0.05204609359179111023564632579998986927183950203292324804344689812665144316827079944423657995726457014"); _points[11] = ct("0.03819828824507355334483281939565778780322081882037253284478137692301839452272816351601955509121448931"); _weight[11] = ct("0.05257452016640661293744751166188692897194515113241003199215036965601069114006596457477516802652630106"); _points[12] = ct("0.5537195807282935914003656124348565130222723633112639658363114623393879406517479598116624690714085946"); _weight[12] = ct("0.06337990610025468075352666693255656013349124651231552374816444219192430946831498393294160099075286409"); _points[13] = ct("0.07013961906232579813984265676375811407081827897927155972627053849656310064145605407077470856671992207"); _weight[13] = ct("0.06777358068880635103031781043749696727813442757543512272919269504359828524130368130679642947198108584"); _points[14] = ct("0.4824074446124388805353185218595824144467997109997394967544461672573758804548396608944152015562769533"); _weight[14] = ct("0.07388402529699877110380641152857474527467150780108552765426171096663124369742378311614318387497559488"); _points[15] = ct("0.1108366733203635022376253075861617420191222518457438320529257958835099421591933038201169995724621575"); _weight[15] = ct("0.07969195514279793288914190000566235267906711260491304675619638962584196774176642443198237391267458687"); _points[16] = ct("0.4114586915619051989269753361265125049694148578387329380612416947570578330099506998594987587756143859"); _weight[16] = ct("0.08272952079399523470880740580838362330379464284872694528732063439370860031512300475525677462603061616"); _points[17] = ct("0.1594611294440652502638138083655501810579538766130618360388682958278037659580503571599755802371923706"); _weight[17] = ct("0.08787114127030075492971967145810458697850436666177532008944289193939981177542132493146261828025422332"); _points[18] = ct("0.342317632958730793723481323712457505166343984781374969599613768908520216861182272658072990449954171"); _weight[18] = ct("0.08913374937230921373396964638398331645759341581488079946582408064396578278281966817037315653266913572"); _points[19] = ct("0.2150231853580202850809121676459173588900222007857657740357006632538302506890640907152055964899157391"); _weight[19] = ct("0.09210054144651500414815597125252491515932996742881640264899141571621140700823572973382363663710533364"); _points[20] = ct("0.2763917790937831724096862097630639456644117270400405937135134283509653312425761670490246263920613148"); _weight[20] = ct("0.09242510522204482532070073767512146817197969239818616413946316147309617242947716994951510527304012945"); break; // order 42,43 case 42 : case 43 : delivered_order = 43; _points.resize(22); _weight.resize(22); _points[0] = ct("0.9930774850443482149030021066415407683406700298179706308215188462467044126812424398542732069635953363"); _weight[0] = ct("0.0001605964338749016320576856292150734027974336746659489676629679245638257528017707162633356339579309951"); _points[1] = ct("0.9769196632371288671781665711370362045685576491004758259075059336129642443913384619385342626927521243"); _weight[1] = ct("0.0009538558113180135180967949786628451294240092743928687244237285896188821328575349981455723556774242151"); _points[2] = ct("0.9518795932297199145233254132304692539088438686423388255790172833977314296065333707540227994344743905"); _weight[2] = ct("0.002823533706278848565916530037911878629982887095586678771104423447725510221470260596622430583204829748"); _points[3] = ct("0.9184257249898492632792699442543246960817983206223100233229591659202425806838473116664400173192555422"); _weight[3] = ct("0.006112428226300807468928605022472388819840529336780360990858784903836597627090362080718578428772948567"); _points[4] = ct("0.8771815974654200209935832382780264667216854819433063264149961682215358967027150316006842063229545824"); _weight[4] = ct("0.01102775020425528202183274932690576622802929805904276532381154234944322175706675534281853900355524607"); _points[5] = ct("0.002731446008884229684008970450320001444920091810195930525180269991442470544358606232863648791137992902"); _weight[5] = ct("0.01396851222739562730764330994005642798820870305226851204432919119548361416787182679620322866610583444"); _points[6] = ct("0.8289156136217265123540054985427691593398783968413130229560818673737749864709777074205767676513685463"); _weight[6] = ct("0.01761734488022181417634750650161074169827888941368967387824436676905266460390992162845846544979252123"); _points[7] = ct("0.7745269160648226353202027384109920682527303908818411141565719030087724957529183987986099954836780992"); _weight[7] = ct("0.0257584605627306793926964100933613725492722872259953914150712254770612504454578414722046723976962161"); _points[8] = ct("0.01433593348369970618530803928505257182212734984171995141756688554596877547440774718470825927907210741"); _weight[8] = ct("0.03188810690955699372913185825261865705830584729624107779763818757645318375465544204740947987843934266"); _points[9] = ct("0.7150286804747624026121578393379999446389645236341253188769096134374679986116977432704020454213976699"); _weight[9] = ct("0.03516003512030458548547005431414484593424269996086323158449180253002667739460805295412856717443142857"); _points[10] = ct("0.6515292548958144740358068223118511349859101369629558312595962074831187114090178549434212259989474758"); _weight[10] = ct("0.04537845719632199076042572155228547303759643411880068270661964657070462859342870351180007030550233198"); _points[11] = ct("0.03498632835121644938721881407108470789540507513413332008873819031943272701440377309817494943055717373"); _weight[11] = ct("0.04836847334378099951774078646756125991897967480632796321673948363274069201822403812450461165062074718"); _points[12] = ct("0.5852115179512991297552453346740838766873451701532765634475564569305673634168154853640549882370619951"); _weight[12] = ct("0.05584574164688526249815932491291670258280004563995038841006871240856953599982233845476300338102841803"); _points[13] = ct("0.06430264113215888253127507139568606483527396467455008276394607606723427123735449200295989192425551556"); _weight[13] = ct("0.06265519399875045578481791711936416627645561286020844389093385854076882602968762518293824437104395458"); _points[14] = ct("0.5173108459509911200513628668417419502531014399509647860341897330139076887981516467821142472826215626"); _weight[14] = ct("0.06590811757077106807977571305735299366400317729192485529773531632140783267376844390929590547508218283"); _points[15] = ct("0.1017393434521639240125822659379428899539853633989816895418881106050308024257778517338354719506687597"); _weight[15] = ct("0.07415410818640572896643467181854132802159376843867967796198737741804690263271070220679766274082477725"); _points[16] = ct("0.4490921009868173325138719504239347417475929920954648897808863573672971601962552955877951121911249076"); _weight[16] = ct("0.07487223293386003847932596237778164765909771195087018622881954379418589205789644518583498915989155589"); _points[17] = ct("0.3818260692567502030509512762811186856943928877507787697256756013761460030692112995057041549779558298"); _weight[17] = ct("0.08205559156388180327653087723778992847221561856887365139092586395278825727586388000965819474762431428"); _points[18] = ct("0.1465992001576654169265658426695235179279442290125604632515204687033228653332772641236747155787629019"); _weight[18] = ct("0.0824448098128229051541582393875662137076647115837413320869169037065961050583960349723017507169251583"); _points[19] = ct("0.316765788710447271834211176023788565585917218829176864381597468997832396169947236122444167801337943"); _weight[19] = ct("0.08683750029083565581666905153333353034148761155627255043342898156741359986662248660638659974313726394"); _points[20] = ct("0.1980466041181826148466050402800147983667787135049020201401014006434161174885707857036810715432879233"); _weight[20] = ct("0.08730240757260692599058627618965695877333537373682736038372387813522711622922491115184985621378186379"); _points[21] = ct("0.2551232069716869695768287350762534865017322609522133051615515472916441580767357518665803492792871761"); _weight[21] = ct("0.08870674180083961237725395424888980010638767505799639849446421318828518370656462205089634953201953275"); break; // order 44,45 case 44 : case 45 : delivered_order = 45; _points.resize(23); _weight.resize(23); _points[0] = ct("0.9936411423413659674234674659492144344825859906238375139346624942288118730536279398452978995101742923"); _weight[0] = ct("0.000135534085630299773212074130897584210836555854564225333161803433610929170770419163441050799228018816"); _points[1] = ct("0.9787895175170725588787939186958919174534641597824532080283251852183454120155341188680323899069674147"); _weight[1] = ct("0.0008060783183419481302475769328811150712121287430918492847770345087224901752876520422652114035579145278"); _points[2] = ct("0.955747055076380126306280934995655993508546571972578475189971588106363915440947204061462001894897211"); _weight[2] = ct("0.002391164993413535831600994583419511700235568916766570267257880249998309203933376284348101463868195296"); _points[3] = ct("0.9249098542075925823337164109969201318994696513183952026689198527018630611553347105313285453711814395"); _weight[3] = ct("0.005191620446910720770096011274932118364042720186345085236614939007955783549782982195562743151370410214"); _points[4] = ct("0.8868058750607934334740477882285871206071403541849894413037182530711360933825476533262438961100102982"); _weight[4] = ct("0.009401868666227652995952585963231501422382957680697780965957245463094744102323209704629371613850600187"); _points[5] = ct("0.002508689638982744438582834305084970754465513041215795244037291698106602509090989047144538885452310289"); _weight[5] = ct("0.0128331652253125979400788588633991492037855612500533267579485452992396263751800578389440168905250927"); _points[6] = ct("0.8420871815760147938272551090762841119895322905806887532216879812775912541917310769974367310218997339"); _weight[6] = ct("0.01509008390394755517476464908179904728950585618281600061596910970327096104697896113737910324026950532"); _points[7] = ct("0.791518958392199164999544811561899563969866530494357902752851291892239872938757884419906943099590211"); _weight[7] = ct("0.02218746826207120887276263590638552621253197931251564408631796147019043169238537869081644237786204674"); _points[8] = ct("0.01317098500036888781833393883008497304237693656498066106398450987552457101458753605359608128168743719"); _weight[8] = ct("0.02934304620092188218926113600741607806739210817537199870266151443933950832690670503975771066297699378"); _points[9] = ct("0.7359664575449968693948098166623482992411491974356738064983977465191447748707008794380155771341181069"); _weight[9] = ct("0.03048748451352573060772721176350031611003474117711489554566270549461388710349331159902545415320505057"); _points[10] = ct("0.6763802055359521297445541267501844773125729751061369156714561779908754921014857822086096522112308808"); _weight[10] = ct("0.0396551893481249125925521086126432747002257718640553587940071945094773848424573489581704970305004816"); _points[11] = ct("0.03216172768263549326403367565653550535205766565201664531712686624400665820371098603813869334727816456"); _weight[11] = ct("0.04463725220786037308362066413240402086136904820699921434316677932141270933111474705923954412447090065"); _points[12] = ct("0.6137797438222284322478251318001054000017788712275714851022029844218004813706509166663266125837282715"); _weight[12] = ct("0.04924611206265319667827944363701807174968086942310183494453035969494685072370452468029153544157500021"); _points[13] = ct("0.05916028461389076523322206577362019497788250568779307045784761685757471784484460194699384188422236678"); _weight[13] = ct("0.05806819763322011970374782113924425761404511862778324479824299752720919807911566279375387723149769095"); _points[14] = ct("0.5492361859337143986849444709434036999595634258787999588444642290913115681454981608358155754321058537"); _weight[14] = ct("0.05873345966894180966241572944644661616634652469095377698346786561882559594662330923115818784810304391"); _points[15] = ct("0.4838538912019967973430622916413376995836676173698294055646030869616179182331776207634155618518804048"); _weight[15] = ct("0.06754184722435728497520002182184314434614082127218346806093570515182043965457234703866461587667979884"); _points[16] = ct("0.09370523422563984366939026810701599431294843355379981255080596536633429882747373537128397881326481735"); _weight[16] = ct("0.06911669325016075584493212610566610721140551761560671679530417625630597260007129822813775191577520333"); _points[17] = ct("0.4187515692045311374092315829147009424821192511291422675616536437335683699790579610322750663361326695"); _weight[17] = ct("0.07508529186083901414100526577407837545431900256520270901278341770173066637555355144434418735382997458"); _points[18] = ct("0.1352056309863808460458454746251433160911708193841602999666708950632019186174750867966318879969589279"); _weight[18] = ct("0.07740045437700328926473449453186946979485005699189929147909285069627000897494280716076551491212405294"); _points[19] = ct("0.3550431384266732981536948763163021427209776085086219647490204456653280019775176349750919633016300716"); _weight[19] = ct("0.08080690215257658597452762845490596703525596328546181279008243628500936409123153800589940372707628206"); _points[20] = ct("0.182951434776206737817241219053163283147422248322105739279654822172669012612264918073669777008318145"); _weight[20] = ct("0.08269256057546193715477130820235096515571599625521525349385431798507764427936998623641731548676776034"); _points[21] = ct("0.2938186667005872290547424363576361134204043156282958233734911798438694506857100888924860114111920557"); _weight[21] = ct("0.08421756232457493979943437980297802638058106035661088138746759718641313900343550501435144093388206736"); _points[22] = ct("0.2361257194699659752033367975673903519867094069780877665480629132753104255091235776405840076486321074"); _weight[22] = ct("0.08493096269792264883907527383068975587810407136558906032073556299546435535076532045263371654972207912"); break; // order 46,47 case 46 : case 47 : delivered_order = 47; _points.resize(24); _weight.resize(24); _points[0] = ct("0.9941387002099847972174529494354186447065590111257385945879012558028220919933208547206036697068695813"); _weight[0] = ct("0.0001151730150479458384071635595253101782832122745104808509747143553195202907771103803048664630273115494"); _points[1] = ct("0.9804414867720773047861990092929623254654564518007672132576640373798768725183629974386659808406771145"); _weight[1] = ct("0.0006857923806901939716180130215329527076359172887024981713091355795707735117444618081210364335144106147"); _points[2] = ct("0.9591684333956145359195940133146757910921505457443845505930704566821066595074815881415270673833622153"); _weight[2] = ct("0.00203815713912692007459646347769836203946352713265341526734571099668110605270544423185729335343259772"); _points[3] = ct("0.9306567200768073264940897342948113540892147989736239490329954181172965522690414938590459685654063852"); _weight[3] = ct("0.004436613641500169169439699970626442930590561207013584324589174385384877629658784768911216861600074852"); _points[4] = ct("0.8953562946217610669903735651020598427994962565161247360082353603807290907387866393285046179471673542"); _weight[4] = ct("0.008061266812448580930088891626091521017798326749095430281313277537958062872952727474091695627913290944"); _points[5] = ct("0.002312107617798491569705276671091089554939384003636010189709388318905051457029892184514494087344005534"); _weight[5] = ct("0.01183066055113336862806942240007326328245558099447927275162523552741007390766368641044486302691611349"); _points[6] = ct("0.8538239525472523950102126950475975286633013398103204851603925633645574373545504247981078805449901342"); _weight[6] = ct("0.01299144166781244007855380199287793161149080700512316783535285734348566786945346584013675240596698465"); _points[7] = ct("0.8067147162308662079759883230462271215511214289418775696507626148867661530416063674514532295042286124"); _weight[7] = ct("0.01919585570453531090274182547445749150555233627807191180519025749427489117067745137550248266139141968"); _points[8] = ct("0.7547715409190971048511486978937648589061186652744929259781655167672301711625351688732468834021431278"); _weight[8] = ct("0.02653019230140020249207268704743023175850973695203784071226564499171372408835572203998397885347122954"); _points[9] = ct("0.01214230377107489705391618941072912260522755162446019471499380137216042202948348504762488631035567119"); _weight[9] = ct("0.02708890824143026572037962662152288020969476966472863417825282202056481771333289850444085338833423305"); _points[10] = ct("0.6988136087122555462016606377145350834461598850036410982928344624206350632284010299704447755398053868"); _weight[10] = ct("0.03474229649484084003930890647846262727505108642173711331754141432035930539668108322663152396872809195"); _points[11] = ct("0.02966481421406884694296518092415020517648541895905737943054284836662555853198029459708727505457923553"); _weight[11] = ct("0.04131359852028912070813348612469458121266906681977047751086422223751155286109440455542530956212070502"); _points[12] = ct("0.6397234134973043576554117727135736996646600113714081000045059910790721633790546552645982027501322789"); _weight[12] = ct("0.04348472766572340728540928114789743818624545599387243885741710511492122452733704265550252406972611373"); _points[13] = ct("0.5784328451129381173040996319869945856313733674576909278189693731645225384582334961614709864014439181"); _weight[13] = ct("0.05233393229745876141906451197180871793300976215540282985419030015323189126408906128503865664752988069"); _points[14] = ct("0.05460726328354278129885634528658109995675907857338212819561910072319464261893667297651857381196832126"); _weight[14] = ct("0.05394596868921663524498068262844092364170052310862208007218011372940229373250922674094381645827344836"); _points[15] = ct("0.5159084936202979568506211844229575689363706436725780992080644753405181129907634992160172026059024785"); _weight[15] = ct("0.06081487403303229439557250461246857543106709458728555540542244478846987123597889141506562545922541255"); _points[16] = ct("0.08657678275502653153027885149201366204915309675322937558650613592608210237006631190380162408379504711"); _weight[16] = ct("0.06453135870842410635528940758432413674737559106054908567625814834380452190132723118159432526647738541"); _points[17] = ct("0.4531364059378609233872602564908296475944846220926500743387614702917419726601357431551427286510223685"); _weight[17] = ct("0.06842960472039024618212495432963431108894080844633652827051493472714512862008051584998227091418043717"); _points[18] = ct("0.1250693120998313816827247034321147372716372812643793892831974422340660561775264779754430133711757073"); _weight[18] = ct("0.07272392358209171859073020012272423331634752635725114961740036064699127019826765310647657118990659075"); _points[19] = ct("0.3911065354271857628058029229759407587117961441488460253702401794353555304627992294123975242415039216"); _weight[19] = ct("0.07468800138191237704937459456995169435294967932534591746282115187766476994517745985562126268100280594"); _points[20] = ct("0.1694778408374137992122551210880916091724440900194513583551692099521297695569503211773284187174570824"); _weight[20] = ct("0.07830217864471200784132989838038854530001015874197726701210669511616739254100083028981782478774985955"); _points[21] = ct("0.3307971297342992989465449797634122839351353239458986043016484038687065359502901031392280699179553766"); _weight[21] = ct("0.07913874651520938929265736761457077631574365663020054012563532141424833258155611098929166716363521104"); _points[22] = ct("0.2191020363269966008052502214870027886228146700884203403626969975224363594600835115547810175625647987"); _weight[22] = ct("0.08117812499761111793897603388086616924056250529426903044903261905158249863418553775020821290326759497"); _points[23] = ct("0.2731593030949704981198326346716482638665286879359816866038841088473610512662532110402010110389662036"); _weight[23] = ct("0.08139860229396257985108057536193088271685230951096375019039633824613643145339319826460674182521286602"); break; // order 48,49 case 48 : case 49 : delivered_order = 49; _points.resize(25); _weight.resize(25); _points[0] = ct("0.994580098039975381755943258134921196515439243907115241892613222040274966787806323038254950411999966"); _weight[0] = ct("0.00009849406172470012342729183797120306729289956825438560707512493759046505877196757172281017650086300047"); _points[1] = ct("0.9819080873346961325077074435259613225499801670479781693750962994666519993115924159471265473976297682"); _weight[1] = ct("0.0005870930138403858080781133946229403539078885793604901154230653455535909040354642990632189297837364007"); _points[2] = ct("0.962209486590731189772863397747711003487131531065813181451688745525844129958953618722182068233988584"); _weight[2] = ct("0.001747720324216249475087491502293789694397139287420886663505338741268344649234561021604669851838969137"); _points[3] = ct("0.9357731085313031293882544650031356312195798060607631882567272915711012342389978233465384997918124043"); _weight[3] = ct("0.003813096281420520842348298710895950881889701039955631763288577889908654722745077399684986333284637478"); _points[4] = ct("0.9029847330954237846160108102144816242809611079263960417211087101890827959775348038191523331937712815"); _weight[4] = ct("0.00694869076994824250564297958061441939352289609681812839617731614595753371500276899856024923923484653"); _points[5] = ct("0.002137754840779325097003996068484341170531133944451123784608428716465128312889554565077424114622343405"); _weight[5] = ct("0.01094107579169813189091237608942257612915731472352215860492901940875784817684822085977668710227725507"); _points[6] = ct("0.8643225686575712512890930964464128884912645871039346858755335774412004904375538141581885649622616211"); _weight[6] = ct("0.01123893942176472911521814402227084965277093149641017025250777628933241674291632070615824939422379614"); _points[7] = ct("0.8203504266385679362480414025046644799692216902498877451708436721193771528836986810945627036059209933"); _weight[7] = ct("0.01667844746417703482858827412105202654768663139416267562768610651187442182435611008344612749151113714"); _points[8] = ct("0.7717095332090876532772702662299137017534216024796653237460220724084526447410338907367806228629369144"); _weight[8] = ct("0.02316874597448142681430272573677028827491415078621799535354766932626957753146747980664577809025445712"); _points[9] = ct("0.01122946060565248953765964495295842160878607386165047422524781380016346040248689425049555083510760924"); _weight[9] = ct("0.02508327722702107727564330652194328699205195700415177187291626937632732713366479790668583552899807848"); _points[10] = ct("0.7191091887702756756924733312759952703610235950003264675599094080939261671384587307200102973531914237"); _weight[10] = ct("0.03052084060846490888777912318780060035451395536472057323180285253178882915878800370061906778391131643"); _points[11] = ct("0.0274469434643197743434582952393301677966795058332544771415907730879432148015830814776531097816784999"); _weight[11] = ct("0.03834144667483376494444168127629636943855168654307775524429254616965643468194663566289872000674802254"); _points[12] = ct("0.6633164283801916080438663597093166623213491788613272167696983082588163829549425343365271477378754117"); _weight[12] = ct("0.03846345091061473349290245539794099303708019282297091901740137152519600363961583008523285646670019196"); _points[13] = ct("0.6051448381551349081424173890238120465852778156899718864521872811406263759015006314129890759192133067"); _weight[13] = ct("0.04665650137559238100136333265315206043659187299633210330041980122434126791481360689974380076448028748"); _points[14] = ct("0.05055738036921262563480593409648928639639291900566926165094194152128925730424342105114094576969514026"); _weight[14] = ct("0.05023107977579624293082489939776848612795440206268521504827201101988163471721421863245982233173798446"); _points[15] = ct("0.5454426920332588243126070891910049145712573150611219268116870762412938483414356567846858208870956794"); _weight[15] = ct("0.05470911337993017133325658954591537464613243821693582754945733906555848787274909343811964787857264477"); _points[16] = ct("0.0802242209123347788711806562294006865192884691392240487497176541792428819362495039574470334376226373"); _weight[16] = ct("0.06035303547197594011536946214697428562244105735504644592761780204490024094524008923007047324841406013"); _points[17] = ct("0.4850805823554158825739775389860063675732738097640718535822201240883097297180151158721545179097262209"); _weight[17] = ct("0.06220107820158806088435333669253889377963299096493770394973335210519773180746305069290850138698745457"); _points[18] = ct("0.1160149645874870172347350473465606669489106230158662308693922678144886136045272672526553037082963898"); _weight[18] = ct("0.06839537544316108834152713171531975770585381497544037444937248176128482598116938100169841603692543401"); _points[19] = ct("0.4249387248171481696883001024393147385589320252409908017977547745824610905505913984042249884129209462"); _weight[19] = ct("0.06870658133314383697685351362085691413583117735597939494713400804125932270303523200365795429917671417"); _points[20] = ct("0.3658941229846370226364064314991338752818897598016621885592227542838233793054347295626319302125106143"); _weight[20] = ct("0.07381880949267258745570611132264679808177411201634040263123836073740074140392720781241131139297762215"); _points[21] = ct("0.1574077383886659652193159384891105328541375646502171946705997212341715684439550613338558276683796734"); _weight[21] = ct("0.07414640177550565019867457680187590050097479701658588964064176822972214718382922048913127448484917208"); _points[22] = ct("0.3088077795622951038979119439836161009663783922166299606375840033527997031278586274863047483670254866"); _weight[22] = ct("0.07717401233298538239701017926660146653703606970898668982214027556915412179838143641951278835213681971"); _points[23] = ct("0.2037989575831378225336879722401727700751661453631751449300676446592974173952675347684620523747703873"); _weight[23] = ct("0.07750307846489530106069001626917005366648185167101180936037628557609221967072401671463450488288759469"); _points[24] = ct("0.2545121408770102731752042678534638511633337808460910662787207479083865625018202584499175428930839519"); _weight[24] = ct("0.07847361442854745129999858918728471494155807095267460162304348042572581006206020856357340736457611768"); break; // order 50,51 case 50 : case 51 : delivered_order = 51; _points.resize(26); _weight.resize(26); _points[0] = ct("0.9949734758572125109018548468457757451414034454994678437134746777377314759592836642394933873290978458"); _weight[0] = ct("0.0000847266482218448156947327605447326126419659617844272871156905786136235122516774210387065414626002125"); _points[1] = ct("0.9832159998661838487495423597867820380401895721015838753714698965929400840517768491779043505066538759"); _weight[1] = ct("0.0005055010659316268156697904469713558505999011355121561471933639284915004498018912965831367132020459454"); _points[2] = ct("0.9649243392355685769676789331181850486069916808216714189009346206348469238729501303425886192745964061"); _weight[2] = ct("0.001507051270060215245738339727124017471225049056873612094515045979327154650350622172691802201761831085"); _points[3] = ct("0.9403473057218671707575661924897942312565963618065724508702617539552909102894060455499272532250298864"); _weight[3] = ct("0.003294701834427150802711378133094103566373633324556116068118172306506898075038472954763116221312803249"); _points[4] = ct("0.9098175190772664572577288936685780032938885885639025695186218563884849263622085581336329392731539935"); _weight[4] = ct("0.006019673135257074110480920880712994889898064197316878936261920311358339469987576574531217903905751702"); _points[5] = ct("0.8737479163770055563444293398713444395647730795686451952308337238766361425385557764556171897935901199"); _weight[5] = ct("0.009767577246988349844368959326074245339906130164224783443389859320911296477027153023249454065509989329"); _points[6] = ct("0.001982402312500991974764508701509203188187092356310070549948036260509797246427442856641364318118786936"); _weight[6] = ct("0.01014808420232600024203421407891864326967813611225317519604953710526452069416772253977839448461609008"); _points[7] = ct("0.8326263048793096592840319901487043552909483798146004051450267827213551566378150192788626666368150197"); _weight[7] = ct("0.01455065777740560048945432725678785020079291621240239065081833184010255621019635602390937881818659981"); _points[8] = ct("0.787008796159314796328080238209286307636016143142496025622674079035016921733834146837825179233227587"); _weight[8] = ct("0.02030423177222357942405312178653612755525415648826535986135120681968192455152752689740341633477985469"); _points[9] = ct("0.01041571203509252666821917702931014674935479485106816524423187191810390241276843270721704469819313156"); _weight[9] = ct("0.02329114401400434107623960101019748682844868035669047120616072012257778273808340621085543544339633781"); _points[10] = ct("0.7375122949172582536693195662187433097563287951254783157564549381318449761373581277895857265168695533"); _weight[10] = ct("0.02688756442258594394198564943536074963802617244572964250768720667333181166040705692347132345670597557"); _points[11] = ct("0.6848061597563768691573930360166283266837702181638087861103877824608012560472566171090269983928681477"); _weight[11] = ct("0.03408916470242993251882218894046125122731292371714041110875776292446406522925454370012819778710050886"); _points[12] = ct("0.02546814775045601344292075058542701375019841643628081237335239638580493646438840089869787286535769335"); _weight[12] = ct("0.03567383035949472508322253846200779250258506124560617922629226954076677145218050153633101412079701784"); _points[13] = ct("0.629603152646366832440005835186433246405811585188146038276837837280437272150104697014026598810722124"); _weight[13] = ct("0.04163624742448221054690511799845617999254992276850739950519913819788930854925306643839091326449477419"); _points[14] = ct("0.04693954797272390029719352115915356373546076220882119542989174060489332587033482373906263198125120149"); _weight[14] = ct("0.04687405429551426087558989633323650022463453467699547900364888632785840215419132950168073015892539337"); _points[15] = ct("0.5726498006750368846698153034557769759301843942142236134513678722424631571284058108657451973547353036"); _weight[15] = ct("0.04920787783957516399463353490332616402964507354307016190860555769829433495204703242645409835846820773"); _points[16] = ct("0.514716300858142001351707261638654109705083087690772118910357707639424905325977021819699527601195918"); _weight[16] = ct("0.0564511112660067597072396547032695132870542650221711623908710568510712801252163799195090529486065156"); _points[17] = ct("0.07453996747497746177748212306933832256427367540970293847144712393640101788929532457190961305371464226"); _weight[17] = ct("0.05654047670425408731673641746840444106706145938580495870768149053927784423957084294480749076126356119"); _points[18] = ct("0.4565861046963797540479864485503725667356963030172069689574101221860311846558745203443032208709777164"); _weight[18] = ct("0.06299927337564799294914832905905277124462503427963309452997012853782168724233937070149924372893476695"); _points[19] = ct("0.1078962587148670518369933864179128680363862543318018393308158240698289232868109968676399249029215776"); _weight[19] = ct("0.06439218521754601961609217515415748254965335209980546776078885523102830281793937574743462706467966926"); _points[20] = ct("0.3990453234002412501528182579168397671593845939181776667219899610514800606114315767563476820928747503"); _weight[20] = ct("0.06849140575169568012668800722262161522613334377457403128300937582927520679256050458344419628226694089"); _points[21] = ct("0.1465573689781110622454405645211420385843833471460570019307330150135958433471094540487915029769819494"); _weight[21] = ct("0.07022960671117586974426525058832575750953055446936506488322864597988955028307342935889618929244731548"); _points[22] = ct("0.3428720970842849252151378642974238623794694294290994447908012269211766838901167147393952220069469325"); _weight[22] = ct("0.0725918327712018624120357190515451543007959976782386099644323142584005972169684717387584764973049203"); _points[23] = ct("0.1900004870599828336341439787909794085126181077453390929451879495109536533280805490705145871629269747"); _weight[23] = ct("0.07394209946166916222101129200752939221868094362783113220849632853398411916937608256518092603124973877"); _points[24] = ct("0.2888260716927312263060031147583258288008503288275055379968170057607358670390531602234574905707601279"); _weight[24] = ct("0.07500879353237672763699801406961978229108936240432004642829627625630132640321505130936349085986904773"); _points[25] = ct("0.2376381259328170562198557150947490838125062796023926838503683108907578655346968932790673406258904327"); _weight[25] = ct("0.07551112719749781844218082919566389510580336585132778769206085830750979488397455548961364118188574334"); break; // order 52,53 case 52 : case 53 : delivered_order = 53; _points.resize(27); _weight.resize(27); _points[0] = ct("0.9953255513271093328270351894495473119057794466212460828361309213612753533892573799919314231415102235"); _weight[0] = ct("0.00007328186742973457248973346335268348308990106749721830402804514884874852544364092321383075279342271722"); _points[1] = ct("0.9843872802327865221402703305050865376477358992329912305682706127051502754664076249624229033974971323"); _weight[1] = ct("0.0004375835695954694319402968526394878093805906978934431788809678901563370832892874754776959120609792781"); _points[2] = ct("0.967357856993813442888042181474701065240585349524088001841956352807017098269912180578703569993125112"); _weight[2] = ct("0.001306291162482041307513273595746611017270220411081977254624897447679861162403842854671409547310733369"); _points[3] = ct("0.9444527826987507331425260090411746078705975423460296253295198573755605731026031630850456677387944581"); _weight[3] = ct("0.002860989938171968740611001933779543816374542989923606744174802748622344893560754537563466895557173069"); _points[4] = ct("0.9159603411903557702727824364325821830316077077386156250540469597358886472259235994667255020111350392"); _weight[4] = ct("0.005239419741905222510689162974228147278566274534968597513495834319549298869840982032689155040662882629"); _points[5] = ct("0.8822389102341396454689826313057027389226267678942236210056160455752391145785184091546650419162996677"); _weight[5] = ct("0.008525852555960638572219657461707102521891573539394917046403114188820346919404426896027012171696186572"); _points[6] = ct("0.001843386661593831967726735667295828873915982082832672961302707423046245066116804281541879869808804072"); _weight[6] = ct("0.009438203890880110866596413809031958726344004381082942643778752283009119164009190109057284600952362998"); _points[7] = ct("0.8437125821466905369938778855425381743397595579708781792466494145717162173438121723567149172814722983"); _weight[7] = ct("0.0127443068031079317715688761451132541542067222744958632051824594229015519066742950552553740091615511"); _points[8] = ct("0.8008658592874873234732464957552331150349938591747462274480585030882443351844636275401613601250526774"); _weight[8] = ct("0.01785496844943601640277750879058008805396662109216816766106464135700233982039264716056288080389367592"); _points[9] = ct("0.009687231019540805273828081504282131116359659467549445267187225423223113523010002437844497609237991749"); _weight[9] = ct("0.02168341697171634922387206163071664777223232067278973251502576675723184728219216643152310340730796864"); _points[10] = ct("0.7542375697640191565673740509855886563757234218511268984625872592197338373290508090761113687668744005"); _weight[10] = ct("0.02375402799044424959072051962268325181356197297482915729116896189554605021009758096115809530581689383"); _points[11] = ct("0.7044140944718857265433052486560377972151930169197974524635302295609988027848098312397552342521119597"); _weight[11] = ct("0.03027696861193742610784335894757796436342078243942527942081998530055037186894711078030414144043462203"); _points[12] = ct("0.02369534823915010708382497244256481068013762237691314340450484701623746518298477536252903465995659874"); _weight[12] = ct("0.03327121392996553082051253960656141674676698664874091138577924743699340286248666375068308662950781324"); _points[13] = ct("0.6520219943065595128144520218202029835324140443758028088226666444218422243992797923412452670120753289"); _weight[13] = ct("0.03720516474612843252115408793185275353855779065005451754273434428797531460701296701493334494925037368"); _points[14] = ct("0.04369473580455800013769324464294019749014271105473332584282951242378903272580157799981535573499100973"); _weight[14] = ct("0.04383223890274716207783270394301581492732858579499438231354191010417070821260416813703099811250239746"); _points[15] = ct("0.5977201313878155000196942168596513335913650222028782052701089676472197217513431621531390052097054438"); _weight[15] = ct("0.0442754809043745166049102553444756242629834754947539739688308925406328335470728344353699778944724549"); _points[16] = ct("0.5421913837761862949497505196736063188110717433003851565440307389535776130912578939384032088911835582"); _weight[16] = ct("0.05119240661403538109314247413068615838127744479416697841527953461192940260522878214085058664786929483"); _points[17] = ct("0.0694342787989322199730161870599743899193417310335786837684089594535236674250451492247500562398937346"); _weight[17] = ct("0.05305637157700611567035240177857449090592886836998970530450787053641364840432593332954674885802999604"); _points[18] = ct("0.486134058031581842105811479741619256441348442651950033915572669570835846369697411190512406608564496"); _weight[18] = ct("0.05764213229207180802657160281800379487874937184851651202260951686951263830209716610394437458473375141"); _points[19] = ct("0.1005903811326853915190140549903467621805094580706385252308216095694597532629310010567882974571874852"); _weight[19] = ct("0.06069078747570479786231324288739386744739844478687997246810594496612261624138048834339131455140341535"); _points[20] = ct("0.4302531076729567979697915582545114448017590910700067673138678746580049425247712359442692580026425598"); _weight[20] = ct("0.06330786957011047808854565517611624075329395117374875437813393453496000829664673633228191742678929595"); _points[21] = ct("0.136771268210552437602568374864889972745034266593335441275391608114954920387727316437892629650041949"); _weight[21] = ct("0.06654908535523464685397561098642480640115961409995553567285259367625967934405564418116203664782725719"); _points[22] = ct("0.3752512679997629534933730456435740542694401655843067372579497841123207581560234471930509217275150035"); _weight[22] = ct("0.06788565307649292039687283320238157402058107784817118583358955398507924022035164383119891786003106666"); _points[23] = ct("0.1775219573659193028130614393988634183199427689032530418019253526001223410476168743574185750257449093"); _weight[23] = ct("0.07051803275142590627456213690666551450110300183953213724808652522368240015081698904312404196825072647"); _points[24] = ct("0.3218202187671672377769064975778236252489272904134530562088575656239167866863330675121375687111015968"); _weight[24] = ct("0.07109983236886887427029839467974307139978913310686388388211605126488499602691446213807129528454306465"); _points[25] = ct("0.2223299911830712808191360033542121533705911233623428600494451493718258335612207931646668848912206942"); _weight[25] = ct("0.07256094481011321558801623950042687835571243590410499523542589298533471692607778934127785986264937661"); _points[26] = ct("0.2706318858403828388174545619009036764776417627277516962633080821607300256186263524972127095298013223"); _weight[26] = ct("0.07271747407265305475209795588052125266906429056397565154975795821613017654667180666213671766173563337"); break; // order 54,55 case 54 : case 55 : delivered_order = 55; _points.resize(28); _weight.resize(28); _points[0] = ct("0.9956419077642228317186491333620060237601315295415473070854638905269220407116028222638890083449209743"); _weight[0] = ct("0.00006370515996210101725745472702265633711758913990764554459024871592454748893659112280483407229406835385"); _points[1] = ct("0.9854402875829232562843797204417416195238244745167805643345209779564325262374245842623134551401451341"); _weight[1] = ct("0.0003806839593599654687052937172487546861406951983143054441628893654176073429097708717496854771009674265"); _points[2] = ct("0.9695474769380218769795841255378286564895236407683444524251818691481329207472659134792764782657673718"); _weight[2] = ct("0.0011377791456507986924889327557193353897988937145668760114411400073408539511318751097684318098934036"); _points[3] = ct("0.9481510589669756248379883268157639950428963847697689099425419930439997189239613345109477892587155246"); _weight[3] = ct("0.002495982237871979415829687616319526354929321484971594260093162240535500992872031481890968421521032581"); _points[4] = ct("0.9215021099473594085155151704718151363517054432469130506984103322769692925488804599027244231343314117"); _weight[4] = ct("0.004580509469313366317241966253684956837737283433524900914903528095852603465920170011166099239052318532"); _points[5] = ct("0.8899131284723934956831712532221734523372783412412214239234061344184586027297876948955008948655299972"); _weight[5] = ct("0.007472731568327629262425404229139219420008809551561161327362666088823157856139752051538235243301389832"); _points[6] = ct("0.001718495293402246663028020771266791644996181934602356641243498668963609900790262554124227544054489556"); _weight[6] = ct("0.008800223579860048483254710294217191577207739024953436339979561240637942739941017301399737983542058875"); _points[7] = ct("0.8537544904322088788247775513811542988294457872776482108393252112089107868125245581262654586120792931"); _weight[7] = ct("0.01120427189543885884005076223431923448359865792254287286501113213756952844083798362642400838278667982"); _points[8] = ct("0.8134501334282394697267215578375188617234481770369277012202582476084865180325716182203592738059608096"); _weight[8] = ct("0.01575357142381088974813226281442771906887412741280410221144539737971025231278995461878959887619881906"); _points[9] = ct("0.009032518495310017290182668008309766335460710175829955817301796886950012957313421273553999923511387801"); _weight[9] = ct("0.02023576838137988786034698670252521582177125525959502980263720470161220865339795485231134855413136611"); _points[10] = ct("0.7694725945042181706805050432690356903413932244153720708644567415131536687406382160956998961745973101"); _weight[10] = ct("0.02104510391067328185606724574426733926381029950552618742473734044634105412953922386528522423178877086"); _points[11] = ct("0.7223374729826939086395173882436445520337460324133837205062443405405843577730351703929806948350872225"); _weight[11] = ct("0.02695129894362714574317820278902739133656214753061143720194269756412480787235284583042023250023369184"); _points[12] = ct("0.02210098135778681137268521021888062944151160946598760331796165999691174140377074554738617759820391624"); _weight[12] = ct("0.03110015822865166067702923886015083025462579664580579398440848573178798449726498246324159018595777494"); _points[13] = ct("0.6725973867373374963190421178579525574571588976574083160637357387177511124421386108602402867292366295"); _weight[13] = ct("0.03329710179283746617377097231688107447881161015071885848544979051240828473437080881621446821160749512"); _points[14] = ct("0.6208354938051186180751604988886875212206555915139963242977997641728491315993006032194731774639848879"); _weight[14] = ct("0.0398669733284307313096721339861435149472677529777038992004750528535172531348461975711478042333117905"); _points[15] = ct("0.04077361101977503091299474371167607706934898162520204845715575724018978323744190358853092513413754222"); _weight[15] = ct("0.04106881180888533341596419244898047338318591795943706620487407038350580428826353390074697779662723614"); _points[16] = ct("0.567658655663528963950549089025851521052663287662634927318125089113081431332606079713178298077963132"); _weight[16] = ct("0.04641401659297863618279998467239187373005512892102633459543014117149358423998773507108652281038679931"); _points[17] = ct("0.06483185036310752409761920639076661009926122221841610874216905587622670223518452033164935524580956556"); _weight[17] = ct("0.04986722172799528536062300428357175719538303706187497370739264376729336818031041386760448700580612527"); _points[18] = ct("0.5136903224747328748359169275644776550261521565143655052175059751887984135439312756239786212853367327"); _weight[18] = ct("0.05267081444046336301346320191574594298873507545356939242387535251298683116224294172328249432628441329"); _points[19] = ct("0.09399372568531336584140604037988657514003928824741309138398524913091673982081934491751314695582119002"); _weight[19] = ct("0.05726781728496770116342685381854171257294862281728752208595617722281137028532049290933995766813740385"); _points[20] = ct("0.4595632237739050247007580803181932916401376476628329857646448103515031096132724631061051072771519328"); _weight[20] = ct("0.05836147977632291693862247694575220416360419006726144133894084241127940580809791871084881643492680216"); _points[21] = ct("0.1279173699497222880332522902374298487321410081872785108652567404644903241925006868210433634637075585"); _weight[21] = ct("0.06309759998920903832871619063187736427798328292865043490361484313506251495597716084182017491112556288"); _points[22] = ct("0.4059119503245874996847819872096119528855570149194244408537244840158077666547928989884755351269759843"); _weight[22] = ct("0.06321436026746541740578527862238867356580627473567945958614016390860714467272442769773655632274855485"); _points[23] = ct("0.3533655141226461443509711091964390610724843762952359906320931037906887192044490676408869047345885822"); _weight[23] = ct("0.06697480576198529947544249860329464644901197190434949442692233737598107738389930962131631795027128428"); _points[24] = ct("0.1662050715215077754955928759549225525500957899853919033389963748850263839788521736378389887243452743"); _weight[24] = ct("0.06724408184431729629610348227194436576417121590563488018244433962007116416697608344776265973965821892"); _points[25] = ct("0.302539973775495358074098333008187919125959354053583216851150863022968872658500709858348412122672375"); _weight[25] = ct("0.0694174006753446002943627136391517107293962502719934382621097138969527028293570715409689190762229163"); _points[26] = ct("0.2084079478245644898876042894881013130324364643445421872994684928640539779603323923616045542186026246"); _weight[26] = ct("0.06965864122232914783245525515766061197702074092320849650604718467156459693423628053637574476087616474"); _points[27] = ct("0.2540312117051822502779332060989567717949333472202278170522577722830524357606964327183922476911471108"); _weight[27] = ct("0.07035708558254015342678361194760470294443631209691896475761189284078684747935547051565534476561309205"); break; // order 56,57 case 56 : case 57 : delivered_order = 57; _points.resize(29); _weight.resize(29); _points[0] = ct("0.9959272163607104691288374259807873291852593765446743146044815163863520054377631604148207633157846463"); _weight[0] = ct("0.00005564241358714027532095053065803486490740943017680132607960936195006065033342071382225621345431696057"); _points[1] = ct("0.9863904025392899117534861248015055941531051693629358191149649118720756782810516399238781644834428962"); _weight[1] = ct("0.0003327279866112555094128006597084461188640953367772790824749440720953263498256535625988508076668608904"); _points[2] = ct("0.9715246308559920866035488013575234119830975119551380701750238183981258606107602886980920135470270639"); _weight[2] = ct("0.0009955114404107457036282987011420741036488422258616618973463593330141214449773470206395792824078634067"); _points[3] = ct("0.9514939456164770559729801920265220261323300561844336714391207835992703432662113799732175447073914194"); _weight[3] = ct("0.002187090029371519934764961921673762746149951990276364790288993358680005697151259428847928785250727178"); _points[4] = ct("0.9265180152719407691275609266113728355764496137049103876779217996365555765482396657211416405901523585"); _weight[4] = ct("0.004021182485231803386534230962943425794757388828963288314425169192269667107680391493129668817354327049"); _points[5] = ct("0.8968705411002962316766114182292236819780119355812354874912319856093777036147736123027412055456563799"); _weight[5] = ct("0.006575340169921764095135252527351854065836319905993192237496403188926387421135809555119496073796546306"); _points[6] = ct("0.001605877852540094476677460267393333375715283616860331804506374382205905858795931071993942459642501275"); _weight[6] = ct("0.008224759073026150013337165044732122149231177684820350074016830574690805752082382549994400699945455583"); _points[7] = ct("0.86287636938624473396555917869022505651157506413871461457383706913436171402038290528480498534189686"); _weight[7] = ct("0.009885829532976952297502565856123033463512360899385135623303387224673325024682566847647387741612482973"); _points[8] = ct("0.8249079573005494156007944812292208906787416791393452824336661869940549234669086353363655173900752772"); _weight[8] = ct("0.01394442666818688026059107376377405494209665104256295061957681177283639436450565135033828582964307838"); _points[9] = ct("0.7833812996605872372611127878355374096893314804833155528966749287801062427902846865455568229607412141"); _weight[9] = ct("0.01869728163635560116792048307870749321429571415331115426277003745924714046260312547581256186227275358"); _points[10] = ct("0.008441948804031172691750305154270751359254642677660426647805634104208696641578312638825578741506269733"); _weight[10] = ct("0.01892773329343349779572660522959708923603067512949384638213060568878587305185604042369878972842506566"); _points[11] = ct("0.7387513739119412937894744959680884811212751986011720468957062635753622921833823658529018354675299005"); _weight[11] = ct("0.02404591853972230935791201088077912861061979588079558439714543772093319758864057087945139003336009097"); _points[12] = ct("0.02066193363615915476014353455675614888152234322370671862925378861418209355011390825531581969983189155"); _weight[12] = ct("0.02913224977147369630435371509591788516497127738021211468364733144940634553044053378111820566832924059"); _points[13] = ct("0.6915071564230854286671345510916194350973455194579840038960101517935299316600829866562060441590159543"); _weight[13] = ct("0.02985034246189268703045850444863408825831084746850206015839821802101854257623979915267724844383865647"); _points[14] = ct("0.6421662656731861238287974627913649707773183543080836828973314488493767488926898483696649824941938186"); _weight[14] = ct("0.03593413059728592678232574595449670370924216522382692396538501302643477845479560527760392817593825342"); _points[15] = ct("0.0381346969971121293156671304127122061908427724432955368922775580973517627701451337438444969457350822"); _weight[15] = ct("0.03855192568110300992731787948569749686052539437629187659190769761585088614005755908990193666493402233"); _points[16] = ct("0.5912692913707834829478765566234395995724095853348927353348565847908533092030035780849500293024165982"); _weight[16] = ct("0.04209129631860883510580700101232906094913172520881469088463222892379855573154919991407642591976469689"); _points[17] = ct("0.06066914207658226981904661707387973061339655888382338512792452002820457736488673316674820829450741823"); _weight[17] = ct("0.04694309426636408371953486849927191064071717332656199572683966811401250472932076965764591751878827569"); _points[18] = ct("0.5393738717727236992403103247034391839852566119036684134142180869297304990124736025268732863129619822"); _weight[18] = ct("0.04809463546398829869371533562782688895220513580178416037071732542065284736437622845049166880340602575"); _points[19] = ct("0.4870485841530376732703106931946815813887093165769280917756070969164567729544177022621628404883829681"); _weight[19] = ct("0.05370519726261224517441839350484898995722099633288349579493820971087947368967875312163865815120067472"); _points[20] = ct("0.08801845813988722465113256457750709714087466744915465606791769806360585010539787194938103623801238897"); _weight[20] = ct("0.05410079186859844844367088474395607795687457881564928149255949744070610415755416273667872356483112521"); _points[21] = ct("0.4348667153860257491398700432703089870432644535249158432053836873358514943003487504468549993874690005"); _weight[21] = ct("0.05868247100441087283841989450493688012026853494073014267958587339102668812083850425895915857506469626"); _points[22] = ct("0.1198830276848970432901164194721133615437473706091056747138979253876140849072260495061209040067929833"); _weight[22] = ct("0.05986514983088954149802257556131410370145028546473926100037200780395276628373010490620581743371751677"); _points[23] = ct("0.3833999809061070668784747580919607726984317643808177613142919854072677369249366817102831666846690371"); _weight[23] = ct("0.06279484606213871827922785530254060818304508070323358845405923153953552222330567398669030144966779909"); _points[24] = ct("0.1559137470843829473370606131417264220555557747384501978986829188400691312404561996585751299552473492"); _weight[24] = ct("0.06412659178073493294015772905883242677694949119956667273898712010326479351329538109259913677016902762"); _points[25] = ct("0.3332122608640143309721523536351177737981679593513508685203846408997852637001956485169227428186550926"); _weight[25] = ct("0.0658298886821547883177566702200576302814581710102619073023532507225593633367576164581285422538752774"); _points[26] = ct("0.1957158615701235346271845355727618654403065491060100053893129052945034633900434287495630167925552728"); _weight[26] = ct("0.06682903797752355680708798131643143756002374157820628443355072911779172499539671165753842492171865239"); _points[27] = ct("0.2848534221035185149516172379240780825714158061355885118736472933422323566101288260175500745175553813"); _weight[27] = ct("0.06760398471965420388414470001461319453931749237342308586790232501846019357132809543458076331263868046"); _points[28] = ct("0.2388532936333663745936940565623196065759316483784380767855858606661415400153543649197279531138628582"); _weight[28] = ct("0.06797092298173053445579386649110409707833752628689484884710968363254660466586108170267586036152601854"); break; // order 58,59 case 58 : case 59 : delivered_order = 59; _points.resize(30); _weight.resize(30); _points[0] = ct("0.9961854092532896146028221753356389314404324408686493792874214932610240703762534389970414536663528984"); _weight[0] = ct("0.00004881538648506998360388173728839473046687594331829239051542362498444876128405787257610641121435982496"); _points[1] = ct("0.987250587966732915704867341539757607126329624210631340190097603536590860456898711558078237762728568"); _weight[1] = ct("0.0002920824818819113533365390766918036968638135004181526130531057784590465269274888973274707688805240154"); _points[2] = ct("0.9733158613935448794453820105491724343356720246202466373654937709136522090881131218997332838292498842"); _weight[2] = ct("0.0008747452449452054528434345545792328394990878028984125283749635749400441660481138993949777526144453479"); _points[3] = ct("0.954525315743250196891212405909841651664193121330522964818769451712885974883692851607198562628294405"); _weight[3] = ct("0.00192432146563680853039780262267058084934464281296702761384700340884737221497115728721168215653477519"); _points[4] = ct("0.9310719621711364212548285011966173256931864130262399049310424572383352311872885421014229760611693296"); _weight[4] = ct("0.003544057111846242578449714083482700968747522670541078730791206739367707904169668505907464731859013099"); _points[5] = ct("0.9031965197235615179874486945867351160142948387890865854781167311755796735993819800971467684400464672"); _weight[5] = ct("0.005807197046687551242251792528986641465603517512649975600107358331114246119583995371657609253148391519"); _points[6] = ct("0.001503977326638774096538941045439819204897050842323639110517193282528933882651248791240534017615526382"); _weight[6] = ct("0.007703907526677142332781611057875534544819793506537816162172648136598926396897833220321164234763843774"); _points[7] = ct("0.8711850490619494505257748373786477444812674413535150966051762168128661783132891618825618402191055982"); _weight[7] = ct("0.008752554092761193897920666189535675116315443555815723285447313014922448847745255648780050131576355236"); _points[8] = ct("0.8353660404570975782088039706260406779943814651902810216421804120682862030815465101588411782330872668"); _weight[8] = ct("0.01238157096505112882609671713082506468468716145623744445894400365087184337768244738355009213416501403"); _points[9] = ct("0.7961070500327450999963466408130769909254065823786988072990704501299103077656532538035315934328438486"); _weight[9] = ct("0.01665700904270025006653225825818748132054069181447553844487836536226341303293367295386176749150289439"); _points[10] = ct("0.007907415319962090553874910548706797889640929395624179523081760110455578957554042677725283477454649201"); _weight[10] = ct("0.01774200002910266224241589398107510122653617419432137008802265042177278051968609016670453221518424845"); _points[11] = ct("0.7538109306754931985292676380937912950273016582300685379467850951928081223373494944028470408186327805"); _weight[11] = ct("0.02150333048441228769833753851508196766124541500331822808509520438345824079506333418293329410470080059"); _points[12] = ct("0.7089116992693157344021296505007320277178336913754735555904081981587657489227382458808600070143245976"); _weight[12] = ct("0.02680876976084624127714802836523064146869361267096646765712817819486360367453807577343673561893162335"); _points[13] = ct("0.01935870848902583784855403050288221797598668568969896998662158485432325673456693050224134370338878558"); _weight[13] = ct("0.02734323769023239623194332571355552815906192296906783687662345184113901926590361524395191648538035178"); _points[14] = ct("0.6618700835772073917491354419849632203892530088735732812563719385176190205613534846026225511037711621"); _weight[14] = ct("0.03242902027054050043405269502953432501755780381155927730280438058383449132894536615575943817616581525"); _points[15] = ct("0.03574292537490614361442355505910787775634862347975856384163644336736875759787627385072751815153740946"); _weight[15] = ct("0.03625397463788723790524483974173847020917492065787212600840108277078063463761026436450175975946083963"); _points[16] = ct("0.6131687947901146656740818993889533163504756553625524311289854346046812852781127326882590856590079547"); _weight[16] = ct("0.03819239423170725851575184801695770825061515968304590598855971096584248504449023211886317255778801667"); _points[17] = ct("0.5633075743824562981501263532733843048016241869169987473593829812419401409863189611028075333329458588"); _weight[17] = ct("0.04390625227933978568080902602950186417843079234280225955367345367601986305141065089129071180428246366"); _points[18] = ct("0.05689225853525516679821004110599804301611377083656079546200661056446482284527669656096891945940680971"); _weight[18] = ct("0.04425731927748618287257948334671876202437120287511051701022472597796561585699259418942874447794983731"); _points[19] = ct("0.5127980661561916817746887451598282918401125275994180446481874937657033611674660693401318099368063618"); _weight[19] = ct("0.04936444568948249182271354202432237836841853506199668047436650095508669478549848818479903009284566956"); _points[20] = ct("0.08258976331894715037611720235316913189397065646611817204648742992390166397107742163078245234741296826"); _weight[20] = ct("0.05116849259793773961536020333387403840090728696787416722400025316316297583997339266789880587685716188"); _points[21] = ct("0.4621585661189246886540277907231243106393062489018270745431532167413125006992428964361637064261870771"); _weight[21] = ct("0.05435547110670841272312359308648180196145265254699122138675635302555438086361230585239049569790033029"); _points[22] = ct("0.112571774110936611053694579518741087338027646767961081329743508651370777248795257348659213291718789"); _weight[22] = ct("0.0568401843945930875022309199510318410662194983414264632830750229803768435128288250456115058327183983"); _points[23] = ct("0.4119087040813242226237090428292506153631763321335100527625422039405211351297361868627226093733969804"); _weight[23] = ct("0.05867100684562144938879531538437321203226400947228654914597314289823584855733418457124886247351885538"); _points[24] = ct("0.1465306454397049070797253669507133675863970812842654082165416081846888928125469797956253712673911181"); _weight[24] = ct("0.06116708587574294585708384600511210723249655869946088776193334346188726348364913454224787676895355881"); _points[25] = ct("0.3625641115525919243603237735395555249376544784701360196082102632275515462910475713276721125086440228"); _weight[25] = ct("0.06211448255080993935299302013223286515895217681731822651599307938155060303705561438986736826779035532"); _points[26] = ct("0.1841179183174382295159362040481778712255751073163280436744486781128841767238309332184203445772649971"); _weight[26] = ct("0.06408887558478726966987172952929198476290145444949765876320874448844505401660613395137922016487293419"); _points[27] = ct("0.3146311306484368093477133152707186848865010512147554712673141128875662531347957837834036041944222118"); _weight[27] = ct("0.06450933095755145680015534470844576452895509725364825086687152102043276408899255479082363409045853491"); _points[28] = ct("0.2249478990674261230239659038071794671177427343701348684130225163163224666208835088859070269965705134"); _weight[28] = ct("0.06559148352964400742074101780590288922762063110608826979290732662425384779750749352007854814383952964"); _points[29] = ct("0.2686016183001323810743018232453001490062411850001232918802978956024515050823666262374429233151227997"); _weight[29] = ct("0.06570658184089414272443437205941363884723654449948817438625048156296749249405795825047760374282482709"); break; // order 60,61 case 60 : case 61 : delivered_order = 61; _points.resize(31); _weight.resize(31); _points[0] = ct("0.9964198154713465863814005035441978010799044283122436703650320561453919687873406872890135672702316458"); _weight[0] = ct("0.00004300369105210562692826370639121461833320652605667711416578738547360188460016161941716611831833587364"); _points[1] = ct("0.9880318304951722914880530368106836749146235982824393858168425335568924461010604907917735038470862901"); _weight[1] = ct("0.0002574514681284442266230751751507317607746199866536766321397160733033418132062271462470548959235436023"); _points[2] = ct("0.9749437042544240163360031479159922744282696526039622177198702095339328818125350799450505594531097618"); _weight[2] = ct("0.0007717057396996697641517258768670426827188915944192573597223229681262995542318343942265362056001387414"); _points[3] = ct("0.9572825118149126493832813913549764982221829460675596349535989927608206332156385580989282616880613246"); _weight[3] = ct("0.00169969018272393218254041765280551133219705363301035677082391746333472054338783832375495304115262724"); _points[4] = ct("0.9352185227478344903005635619837840093875008866261301248284230002913241844856789158446614001940347283"); _weight[4] = ct("0.003135161039546822021790675745981601732773492778297033598408165845484191268636204404626888163907635763"); _points[5] = ct("0.9089642777365259832428053473898178551206481174446911746120405937208542772309144429777671577360346158"); _weight[5] = ct("0.005146855981905776970511696158170320994675246401119572219172360040145011608975207596344947769210658964"); _points[6] = ct("0.001411475965443800134825651358139039341956298466719277973633838444099651944102671436345461185232959835"); _weight[6] = ct("0.007230975650216755624745604235452245279656002216723509408307916172060648702594299051622707208973025844"); _points[7] = ct("0.8787726390975521425669806413071461215080266752415391212208380529932518479277636784487635052985135871"); _weight[7] = ct("0.0077746591068403809703585541633919208182299537947198423202384641651753902336505509239560671215301708"); _points[8] = ct("0.8449343774921062514064287344919565431900271420193003901458878575147974746179949038330386644409125033"); _weight[8] = ct("0.0110269395456367302862777382302981553927566333560509275458448854279203254075501907732773782637812124"); _points[9] = ct("0.8077753782079414862781562853347802220882808558955060482906917367586304344645833319010154104094802443"); _weight[9] = ct("0.01487917669239610535935110809974107459177779203087820996598630854524461789174475235354270098848842731"); _points[10] = ct("0.007422051826455695999029982273149380199843648470952244242156277596152147491323816744840604628235024314"); _weight[10] = ct("0.01666384739763897032812241273494349301940479298727467776618499701123988004490992571717846310005239696"); _points[11] = ct("0.7676535050807021900513946022822988218884222022947288784940173065942976001602180565188762480511487887"); _weight[11] = ct("0.01927393500347561210274414657736369528739716154850885294306403397770541527835430503292412077877843752"); _points[12] = ct("0.724955155054066052909185099237878881084330552561552842546850981707460790693381057457479986132086864"); _weight[12] = ct("0.024122198648856929845540272680044765145707133412858515109112454837530783184804667781896838708612533"); _points[13] = ct("0.01817476909526580384371084818030880219026844158254025954136291598091552233243165652620126345900753569"); _weight[13] = ct("0.02571233502559233962916487514592441336832695124269937897406163393750519114984932164320084145245725209"); _points[14] = ct("0.680091537418071236704477829714537714512091984669183389020551342806291946956036957137269710642400284"); _weight[14] = ct("0.02930602312747382029070259723856409204900613580780841178372978455996881359391922812877220700604353425"); _points[15] = ct("0.03356848869388057760203511836733933006131679408286549627645855414122872018381444995169640476649594173"); _weight[15] = ct("0.0341509712866015141155229335940271146524226007444312712197754887548547987319766790888766616421082058"); _points[16] = ct("0.6334947138634949003275653909484439122889862153213787389931455390854347121392448677482017219298371185"); _weight[16] = ct("0.03468240935401616737828159765451323084923611155594248045105379003407352239380156383657820936225743249"); _points[17] = ct("0.5856134376099925987278912540897165142616026682924333001806921183223956634540653543769719960785603365"); _weight[17] = ct("0.04008825767952754596264770738045083066907786976512135760856103031172796742597777430196433932228157271"); _points[18] = ct("0.05345525785126260801052035243425137799376937217185000461579500643018915955451401268677204289733892771"); _weight[18] = ct("0.04178617160801825992915658801875977837905592813985782271826046732639763824111240551941946659502975067"); _points[19] = ct("0.5369088317321095914497342490074296657907384825367613041415625936691425061246625821704741521455568662"); _weight[19] = ct("0.04534621667933985881749779656727066820681662775058860556728564399850914215218638600268285241138664089"); _points[20] = ct("0.07764362749241415095123711981229508670423849074450172141610710630224628092431498413286873936044139503"); _weight[20] = ct("0.04845115329628569641400235641488049317751856187046068419552911791551587187988711064185529431040869095"); _points[21] = ct("0.4878499483276243221234259221844367644251247402658100645076118919224730288083968168335729128892347285"); _weight[21] = ct("0.05027120597876520794900410958133807051720717588961402097129758603339362629583444196959462479095184526"); _points[22] = ct("0.1059006743507898902323150186915157844736889361974601035488644790649877832087183842561556969859190848"); _weight[22] = ct("0.05401042910942297169606643634238107289080557340412569681213873962182967211009544484175484319162796908"); _points[23] = ct("0.4389092513075168270421572355375920326554093292760278491838960877415263051727169311927625190648144359"); _weight[23] = ct("0.05467736526761173539523204053682411291515305478198601616271701663699064504367567004571196515961782481"); _points[24] = ct("0.1379542774855552447128780719326255863550668361596339433657214819259907437335908860511917486878175547"); _weight[24] = ct("0.05836375229138350624160086990362615338239160080471286336192335984386192265975526908968401649778295166"); _points[25] = ct("0.3905580663160595481669443532255889640119739535291665391197508692095761083793683382818158071394605711"); _weight[25] = ct("0.05838516403304980397938236524245392855998127762199298477601893806562625801132740459692252467239128363"); _points[26] = ct("0.3432620416022793630998090225239495403051757556793224800045295652949384229369749325747176898568972359"); _weight[26] = ct("0.06122839910606623016083516397607929712359889718041574971984734730807128531033074166688103903283101319"); _points[27] = ct("0.1734957478467754419324204886538899820795596100969803016910279626820120007603979994054583834071865742"); _weight[27] = ct("0.06144885509138399963208906732313442111944660705453147856358092910024558128442404871634707719902707542"); _points[28] = ct("0.2974766635554075645053147462633574325365810656072451302443779042064099713369581234883434685332375287"); _weight[28] = ct("0.06306081016811023815063366225055830973064193329943389248977312015799791678018878924264416822426470029"); _points[29] = ct("0.2121828040888040191351780039348599803712580510768313825900253541385619933886307214449555348905033587"); _weight[29] = ct("0.06324282395146252460962228399357097064629451333929175881113071479705576514084592429465797579309071398"); _points[30] = ct("0.2536428700864666432082452431813143747831005223909369486026040434260267599265945644212698451850904382"); _weight[30] = ct("0.06376205679777034433887185779904126910661659948041441706014396168363015437816563331764831665085087739"); break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } template Jacobi1QuadratureRule::Jacobi1QuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; Jacobi1QuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_Jacobi1_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/jacobi2quadrature.hh000066400000000000000000010031721411346603000262550ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by jacobian.mac! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_Jacobi2_HH #define DUNE_GEOMETRY_QUADRATURE_Jacobi2_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class Jacobi2QuadratureRule; template using Jacobi2QuadratureRule1D = Jacobi2QuadratureRule; template class Jacobi2QuadratureRule : public QuadratureRule { public: /** brief The highest quadrature order available */ enum { highest_order=61 }; private: friend class QuadratureRuleFactory; Jacobi2QuadratureRule (int p); ~Jacobi2QuadratureRule(){} }; //! internal Helper template for the initialization of the quadrature rules template::value> struct Jacobi2QuadratureInitHelper; template struct Jacobi2QuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct Jacobi2QuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void Jacobi2QuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(1); _weight.resize(1); _points[0] = 0.25; _weight[0] = 1.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333; break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(2); _weight.resize(2); _points[0] = 0.5441518440112252887999262362955145689146370092883477884571669901861729625759492147562832072252866864; _weight[0] = 0.4031435283193017223334255379639401221900370717228985977618745956006171301133968148879793243017249754; _points[1] = 0.1225148226554413778667404303711520977520296573783188782094996764804937040907174519103834594413799803; _weight[1] = 0.930189805014031610999907795369393211143296261610434735571458737732716203219936518445354009031608358; break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(3); _weight.resize(3); _points[0] = 0.7050022098884983831223984775840482527404615621673957968187330274666375934719617430536332178860666683; _weight[0] = 0.1198028120343227920459059630233091355547326268137250385594040589278280490932505000994631471190946468; _points[1] = 0.3470037660383518847217635434039484551401490745262501021878985827903559852608331357830049271464466709; _weight[1] = 0.5849850770394640880140480814569575834996833285430405912588393379710804430684155659655248860334828359; _points[2] = 0.07299402407314973215583797901200329211938936330635410099336838974300642126720512116336185496748666083; _weight[2] = 0.6285454442595464532733792888530666142789173779765677035150899364344248411716672672683453001807558508; break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(4); _weight.resize(4); _points[0] = 0.795851417896772863303377960793240153655111814369133947337218428490843889786355454581170273360860138; _weight[0] = 0.04140896299967226113759062618655673912665921802650887351261598768091744489940921375092075799421354484; _points[1] = 0.5170472951043675023405733693830732661441577674815143184126459202288394285156186604132268185358169055; _weight[1] = 0.2745355486916923012695053801672421777585462337521019227783801195324800153896617288464511839350699153; _points[2] = 0.04850054944699732929706725709898599476427280622804138308697676906809043140700237130756061833546337107; _weight[2] = 0.4435536624451119347329252698757826095062322419475350982016036681051358053754859408526879761621947264; _points[3] = 0.2386007375518623050589814127247005854364576119213103511631588822122262502910235136980422897678595854; _weight[3] = 0.5738351591968568361933120571037518069418956396071874388407335580148000676687764498832734152418551447; break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(5); _weight.resize(5); _points[0] = 0.8510542129470164181162241874100130578037999355252331298775577412327508226081337242789670271254366003; _weight[0] = 0.0164553008123960318344649664771932761384129705299198594819023493276538663334439422044756555173918885; _points[1] = 0.6343334726308867723471638889206191121277336440958369160307851769971809925102122993798727580295999099; _weight[1] = 0.1282224028918476770189957222265331112459675505313588758170175986042217305503148083830364356533270504; _points[2] = 0.03457893991821509152445742863152659272391875376414497155987987848502413583832078858238836643039194193; _weight[2] = 0.3270591371430836716195229316894094001951854345378653863487891391459565840633676758520507731631799336; _points[3] = 0.3898863870655193282408954103849949929685699479384607713625473160659384788871254703280644555908817828; _weight[3] = 0.3568006448863600007450179722815356404122106902138793907440693610940259530233602522779046002721091408; _points[4] = 0.1734803207716957231045924179861795777093110520096575445025632205524389034895410507640407261570230985; _weight[4] = 0.504795847599645952115331740658661905341556687520309820941554885161475199362846654615865868727325323; break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(6); _weight.resize(6); _points[0] = 0.8868056161775618663012660060104907510040863218112851455728573015303583622861762166128254348593013689; _weight[0] = 0.007324303227477190931113822360224935405864216618905867216202122367913348061134720321894342299951728867; _points[1] = 0.7156811273117139187676626245936073635482655112817582867648513925864912489801365831589316400094114546; _weight[1] = 0.06288118873978020531140504852007971390788413793492071598436679202370012665529257375196229311689702309; _points[2] = 0.5090364131647520840110399051677197756066865099413616255162800068449833494040551477253328196372325307; _weight[2] = 0.2051582845184648408805173003076769826286071695771531963106651422253387765576255251446619284393054827; _points[3] = 0.02590455509366719275464360699723454895681812392531925015861057429610266045438042891711695398904589615; _weight[3] = 0.2501548109063237515141062258733267440660779616350562328954095848025901035201055026000940757458649068; _points[4] = 0.3024369180228912327499055779185451938801342419623170862494499684632895155693734121375470591583017143; _weight[4] = 0.3783087469941648142731682068802065098680549714701846873490169027817905712014531819167360652747890985; _points[5] = 0.1315639416579851339869108507409737955754378625065300343093793277073462918773067828768175209181356068; _weight[5] = 0.429505998947122530423022729391818447456844876097112633577672789132000407337721829597984628456525117; break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(7); _weight.resize(7); _points[0] = 0.9111831665630027636393173672090451969487181513569967751421124434536487739752746787009550475957343985; _weight[0] = 0.003570752134756827216036107377022441360104908358539661885927757477239078187959563376287977244479836972; _points[1] = 0.773517246591437501111998996426027488026169366066348465200565244218230399988368494001938326057139926; _weight[1] = 0.03265170252921877802892723627488505435251712336400851214223824298292417299877194662090599291711606812; _points[2] = 0.6000215132789929301939687728899372881025806599131930023285085834549592653990404218944489240088978781; _weight[2] = 0.1176888451581144593629814079400447094617082760975046287638279082701242348479743647408809166847127138; _points[3] = 0.02013277377340050723050168711747234907764398490423277046410233635340207429864852275760640623962261817; _weight[3] = 0.1971060071057524832937165163396190757998916431027808644906762554468035992816828007706400085856980319; _points[4] = 0.4140021445970597464182872488505667767590220835312978380704205456186698145026653746810963941381988064; _weight[4] = 0.2525855148355651908381357619247951567605016016259007795136116178216199124634212453015846804292228417; _points[5] = 0.1030890291480490147522267860059511003289175929398917699266215140490606015002180084249458354155438582; _weight[5] = 0.3627952984507445781478699198894979377596337461185747060555815360747820057455407114922673477814266561; _points[6] = 0.2405541260480575366536991415009998007569481612880393788676693328520290703357844995390090665448625147; _weight[6] = 0.3669352131191810164456663835874689578389760346660241804814700152598403298079827010307664096906772971; break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(8); _weight.resize(8); _points[0] = 0.9285089649599068972010186178492256918523361943035918234239993038443100956977829527716887186137627323; _weight[0] = 0.001874071136138789023159770129253368619333666877009514163776075880783138331582326154790170679105180906; _points[1] = 0.8157717035832837607547517869758669198734561249520251057926437981546786829099776657599632715409829299; _weight[1] = 0.01789808685205763198302608401313458028471472087364949967388597034873997270243168913625909195923823938; _points[2] = 0.6695522718243614518301145105543719346057236571343379507230403873080542508578187492621559364188985917; _weight[2] = 0.06898745512093993121697462309944726926414242801556028350923661517840760011679153538454549507030134072; _points[3] = 0.01609775955192103353201355009661792907673719717398634906421435485594927605852943376972866088945344409; _weight[3] = 0.159115831226762239320425823705592796269808307236583292588717392773719674740770700496721345833462587; _points[4] = 0.5055970781844891719400618650060764872884489602668891730627538404857596368160581228502258304169030991; _weight[4] = 0.1632577055541760927458463846085917092703302398116046797151312588917290824986672513574976000713409909; _points[5] = 0.3416519914772022202729622621623959437357864175820185645023555961530872229142955610693253060030617732; _weight[5] = 0.2737887336866130889881088024434078279685567928059228224395487281994529345472410304920512689098080725; _points[6] = 0.08290061748565110270036635338038834250469178513978329482769857057078194045432465770034793117405856385; _weight[6] = 0.3072723730688904992180269402731618118770031436482066776403339468731082588061946079180966199553820393; _points[7] = 0.1954751684887399173242666095306123066183752190029232941588497041829344498467684123721199004984344214; _weight[7] = 0.3411390766877550608377649050607439697794440340647965636027033451873926715896541923933717408546950035; break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(9); _weight.resize(9); _points[0] = 0.9412458642132742114143421271349757145307710728810603227584263072556399818130810425576470087365192321; _weight[0] = 0.001045049386077851771963674594932099904728987905881137936245423011782888065286438712365833246324346971; _points[1] = 0.8474368420132373201731804250196182721512229028198623679712683516725259240759225460110084747448902275; _weight[1] = 0.01029759458243489240932686362241481242050381516644947786284291452404221754858892924302398732118007726; _points[2] = 0.7232685717403354318179601582002055305769054380507989053229094988979833043442432382442417433411755164; _weight[2] = 0.04162446631740894820970534894375261359629703551183251098420143946239913509520566870940318195593343379; _points[3] = 0.5796940563511631262657724133119889515943464601677762686678217724998474141044996039946483039194661255; _weight[3] = 0.1053731236101993429518987840106901998442418069136281392168534644913155857561231942134211646777062514; _points[4] = 0.01316588559711449054519053781797215136082076089770230465987155514510039146923769474012679115743814305; _weight[4] = 0.1310405804441588858472781603370944604810978794735901694842259117976972694085138327178975817670983234; _points[5] = 0.4294536453878127925092480022865873331648138310301004847453416352653628845263290243369473840494158542; _weight[5] = 0.1941625114580260318381122496994582838080221982357833412996720724777967285153688457928679921481932565; _points[6] = 0.0680845295937675874765058569868224421713297601092686688022203256854416426151243571888926792972427821; _weight[6] = 0.261958148133586527127756428815648823072391939069180744506022629993832327961890621152764564116753725; _points[7] = 0.2858910883392203977279895669126411861610178692391895516747553642738332353741698871551056243758169287; _weight[7] = 0.2771375827592188368629111413955671111448010879552790959675288132265547247642744146956024875388283137; _points[8] = 0.1617595167640746420698109123291884182887719048042411253973851893042652216773926057713819903780351905; _weight[8] = 0.3106942766422220163143806819137749290612485831017087160757406643479124562180813880959865405613147766; break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(10); _weight.resize(10); _points[0] = 0.950874292640523166446349484610325177054138698008876247521880845732145601052447073904101954699264569; _weight[0] = 0.0006129601467886433685130280913870182321267020111436205319486707118462805612131738008391387787268322555; _points[1] = 0.8717100745744084876118613420054236108762703517899922187764993623709234200889090646472972713573702869; _weight[1] = 0.006182092778946314514341307258874506510233203740474247976315870788020555404045823349159258546354102964; _points[2] = 0.7653476795481078962095331272446001935281254701059371299400639154174230207720369856446774138268604502; _weight[2] = 0.02587955627423411691892242624371044143548514233481194134088846643064833839260516482542276239452851382; _points[3] = 0.6396094886547097093285365061669561436997898167778574491235731369280604031123928829202652930591428398; _weight[3] = 0.06879030018621203231655000929591000454971704580551112869775545888215954689422647507462355006505397947; _points[4] = 0.0109684524561741342502810329904322267331336681681923877355192963785056979625337637538110478171937813; _weight[4] = 0.1097363548403899878418065943379411944061396284924080166565554103294093888964177063474961793610317609; _points[5] = 0.5038071264148739070055306420572277096670551499038191289399601781301074701278289240976204997968793742; _weight[5] = 0.1354182600672564641764042852374920057830707307904626801110973942414191156942172243587060817600027027; _points[6] = 0.368007850449337717604769566250171596247982565113976890620368550952044195900000495246411103376721109; _weight[6] = 0.2115351550678566328395393557696844837464895827386582581706740133267465009849730196407481293438002147; _points[7] = 0.05689815053365792071143485937912054793467820298666632147108136436086362854588603274828183051491504926; _weight[7] = 0.225091745611232505129663328610836642061495180030943960685427476047529432641869184478743685148813548; _points[8] = 0.2422811961325235611113945553650933509790917920092800543802211222195903604925019606707436266710657206; _weight[8] = 0.2698088775257512998821031772547641973726038694971785623654789998437662428652904614577889155923326546; _points[9] = 0.1359502340502289542657634293851948978251888305899476260362867729648816564909173618213354134260413652; _weight[9] = 0.2802780308346653363454898212327328392359722478917409167971915727317879309984750999998056323426925601; break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(11); _weight.resize(11); _points[0] = 0.9583251437866482019244391246661515172975807330371457605995597415964384943234249185759655416699374958; _weight[0] = 0.000375201944039112274110771110315908356687730405206470034411653934686036893473293306588774880319268213; _points[1] = 0.8906910993543921891508128999060838449706283276255334717255508939690538822374778360353169582497335915; _weight[1] = 0.00385208230217295633280149495827083673193151247870147197552704364619028592854368826873460383639665097; _points[2] = 0.7987843585909146419746087280073481414657603642892225070265379669025781304819516320234507849776994695; _weight[2] = 0.01656001705287608941907074982129804342900595679782926547479362297629040174388475144000347871328583658; _points[3] = 0.688324239862956685695533975808089616887768561474068757166363819171422275318388614243984518557290749; _weight[3] = 0.0456583636723904729996850512271237669584876826738233279287055153455876677454530500071081468737087832; _points[4] = 0.009278973831348834202946610301344755180099785584988668019087892028035392237328733017396657895312042244; _weight[4] = 0.09320340020555350966024561740341972459706270009058980336483720700004390524125197996306174927564459171; _points[5] = 0.5662398391545683135675124719348766600394909006313209815451544722188689876257081925222297826462922053; _weight[5] = 0.09435865415522771459726664777523037712224413619385624135202085655621859469783133863488143428243946943; _points[6] = 0.4401983998588624670826813221763196944009306574309261115292338038944935336942601582950581383666207959; _weight[6] = 0.1571608711937424489861433436853150352752777007115971600215818769351715159348001703309820163758798218; _points[7] = 0.048249692094286258286483723731131691367687071501178650576197695398469355275111244782622963767846247; _weight[7] = 0.1949834441226579674578013161123198903391393493913141165710324158456011237446879391336948781555402736; _points[8] = 0.3181179519062339663774464665791396822719791120780551488743875923139814199674731765500037687261335592; _weight[8] = 0.2185288892841797042827148607708304088540070080506917135110024995552378489195340132318724808370494739; _points[9] = 0.1157886266293952259603059182556492085885288892943482283961924853822757749603844675338080199944631066; _weight[9] = 0.2519181720014695773533359952445167095153987763649309891459044750285736696026664998184742228754605857; _points[10] = 0.2076683415970598824438954253005318541962122637198783812084003037910494205451576930868295318153374046; _weight[10] = 0.2567342373990237799701574852246926321540907801747927739535161665097322828812066091979315472275857163; break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(12); _weight.resize(12); _points[0] = 0.9642065352926715512129553062783893235051470791627773576749579921411683197960515088339540982065266612; _weight[0] = 0.0002382014392332466553295292468100035402588379323819602604826503406568381379009877933689507069923317518; _points[1] = 0.9057950735445437268017964703997392322761079119953073066163678713751459636010637378082399631441249729; _weight[1] = 0.002479813594178077693466924685437339297957267049610856766740237535355291735573310962968151138526176774; _points[2] = 0.8257185142147869017640833629537027093736435575778818152064773066577478052593968978372571869786865626; _weight[2] = 0.01088336857641535741816614466540524551935021467910130060680909665551588747958855091474710790206617211; _points[3] = 0.7282464529530726864288803300611436952397911534452751751134554512822045797431115007040988123166108503; _weight[3] = 0.03086546809554570647515094649861202512818448992619175640122761773789205214076726685224260000604713766; _points[4] = 0.618623863458456046293548861891138148294720180209701783497547364656844356405705986332563927357603768; _weight[4] = 0.06618937457843764840554885416015182450294519306581249015227764712822431773609940807764767959301801296; _points[5] = 0.00795204570263843687621909334004042303258789157901845111211954077607260954906099644364827702074452761; _weight[5] = 0.08012445033899501177523089686688632200915300524216047110927662984377082923088939924661277616536887942; _points[6] = 0.5027573604490322032793092784391183027172079885763226380243920422697606141569862957949651716180958326; _weight[6] = 0.1156322073549094419776139687208225491632847535363357613046929611804166587438361502417881862465344624; _points[7] = 0.04142781045429459079077016519479508238169039978959055353403669646892966829653108165370954342425005537; _weight[7] = 0.1702264614696225510918739636030398201621484344112814996354913309233794603455227611295265426262321147; _points[8] = 0.3868920099976897916656347038054368617573779726132266856600842411622840190011408572046787141187486327; _weight[8] = 0.171059054280755609269063747143514548405033082766416787099850451303096574198806692484217307152058153; _points[9] = 0.2772734577993151198175389183105218031690793465049448069023914667625432657455874204304984154028694716; _weight[9] = 0.2182957646569263313022348391211610218077554917110947715591671593278409360063080187628820023513092495; _points[10] = 0.09975762554261415706608170348029973993914665962085252482832659967377232598679917985998074692048546311; _weight[10] = 0.2263367389978962785859121446178675121101775526351403133866313748357859288961118901399429789565430877; _points[11] = 0.1798107890524232495416433443072131398519613973866393633683049652350649339970260755579436050297147405; _weight[11] = 0.2410024299504180726837413740036251216870850103778053650506861765213985586819288967273890504882725107; break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(13); _weight.resize(13); _points[0] = 0.9689288942285889621118118173027414862466810321685627399195946722689891537382806172804214947762563879; _weight[0] = 0.0001560679730565849110018877622564030522971963926107455394995589020798212499287723463265570237517657826; _points[1] = 0.9179996455372066795336259702883514644585607264667402765509172640216951031101831301991193963406574736; _weight[1] = 0.001642883567163541667137135579634586264318797523514426083342476902975498845674881247797284810378208794; _points[2] = 0.8476910439472323909103140489514170370916151645340936646068779732870007405006591332706754097819751753; _weight[2] = 0.007329564556957514349394257676697856873834127393279604943260422811450298594922588905052267132904176197; _points[3] = 0.761249766308276972276659526393430789096233559591680956812385294673641776520411182465771879851800669; _weight[3] = 0.0212542773553305537922236577273894920266795630618925270008614094028470673633842799803854792283483557; _points[4] = 0.6627093135603885423214631521232583899762109853102761874503785215844447164251275965254928056783280667; _weight[4] = 0.04691303837240752265188152459747705248625923503706344789441878308197981725976028730594650682213315277; _points[5] = 0.006890831309958731396681534153406989161031292429588421666464684973903589904229316285895671436921466539; _weight[5] = 0.06960491444024738195232456693410433617039772704751655810891567455689639937541737691245714318024412803; _points[6] = 0.556674622629455010696946642362080582274005790127050520864708239847742359838170526149629812384999097; _weight[6] = 0.08501998685902645212445243555463312092509357047145464604938440147163681074074875244898739601239204062; _points[7] = 0.448102638905709853628734308793979708730769418234673142154600177113914833602501069027983838668057836; _weight[7] = 0.1317618067137311603345937815895239661737637824034451034501350134739730493893049812226124269295047473; _points[8] = 0.0359533627001700955011328119695205132217760105545034090502050160774587979100248003869028934390782858; _weight[8] = 0.149706832675376159814665192745896090274423343707367752518259997752083720102762657728173384760833919; _points[9] = 0.3420695126460753234745079965662670426694598946354515144515707529248230901101547245184760072145509804; _weight[9] = 0.1784984030224598177222653499089708881761495368969374648507406094628872556990281953015547320237188519; _points[10] = 0.08681178015758543328428030769060128035868046724108182524481800707505654573671895497355362141572101772; _weight[10] = 0.2036393228507800763716273887505590308873494434785424621492199411922564371066863588578324885550135641; _points[11] = 0.2435328995871284444190341035677509233546420884568021588363910256954815690060216467377269714945612026; _weight[11] = 0.2133600864234869829016066656915215457043166425583673690879063724648569706987753465045737718877610556; _points[12] = 0.1570999741965092747305220655514795076460478559637808966768026561701334378832315878926359118028066273; _weight[12] = 0.2244461485233095847401594888146689643184503673613412256573886718574101869069388545716338949684001378; break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(14); _weight.resize(14); _points[0] = 0.972777120741183230452963363167272376141832232066661615502209934421620349446232535307554709008591307; _weight[0] = 0.0001051046466755994190066812166292344685646859351848575804945921359672835410758237589818594844183713655; _points[1] = 0.9279957387467523249837781220393962330973069328106674535182517668455918785733163177668632107772943337; _weight[1] = 0.001116397363787513880357822426330897791338165514714505129793583213369776447193493631912488567194436826; _points[2] = 0.8658249007315969536711408351810170671281166559680840985364216536761121893264203663610169524834368559; _weight[2] = 0.005047135580629952165313333678903904301766740735495618421679475165368531852851525344466712644979621146; _points[3] = 0.788774238434560715340304885598911781259911841674992787459123085551496025352674899149699384244556166; _weight[3] = 0.01489950270113143528621524991386061259196283121337933421213015237018974938111932684980666809215126327; _points[4] = 0.6999909171699064974107366639384890954484520793287566604677488395049079890581595895812516182137613225; _weight[4] = 0.03365190694854584883843086111142799005260169355843994956162857554818205354238736452087127825321312291; _points[5] = 0.006028808871066648170088747712159971400916567403381750549695222043202403723743444571483478785282597294; _weight[5] = 0.06102082447779318149404536788951199265358380400157561994830938903862191015641396072434298492746016295; _points[6] = 0.6031073967275967836818955665403615514497986107892801003779313726143183351054969157643569313893089786; _weight[6] = 0.06277732914029182873972173919394741932291208929247041454114182049684592982407685936803284668904118036; _points[7] = 0.5020891397499784100693253980496002910686100916885675007465829924443020109731422291660366333167504029; _weight[7] = 0.100864734147356220137224880808875104302052192464766848649639628532366084837666605920237506855583525; _points[8] = 0.03149425981865759070730671276631670807205021271980635578223819813728679761179934797609978862835346418; _weight[8] = 0.1325583818798422395037209033460692313542102941236965236002400055105646280610200698756731543890029501; _points[9] = 0.4010713786971543575811860320519884685924384191572501525138619910884257329369228617255111752487734427; _weight[9] = 0.1429560411700584519366501032413827809654950517490789640352810210845232863752618039772883247583044508; _points[10] = 0.3041895281416563096323663549044031022663432275568421834000345432977346183474641407178311135015966833; _weight[10] = 0.181013729017843525860489494264088046051451408765004892376855696951718958925979135336553761794343072; _points[11] = 0.07621362247485386758640678634002269316243941065388009043581495037460591816702556531771748717780648104; _weight[11] = 0.1836590884586847156456151997787713864338837649250093240214366377932523271705213409778289378534453448; _points[12] = 0.2154097570688955749006955320851489135121375905412025496653310142236265218036971673059371903435771384; _weight[12] = 0.2055596961578860130952322610656504885177771188630820243106415066192827887029009016919044018841550359; _points[13] = 0.13836652595947406914513833295824508073297946097396003437808776911010256290723795262197366021424416; _weight[13] = 0.2081034616428068073313094353978842445257334921914344569440612488730800245148651213554324071384231894; break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(15); _weight.resize(15); _points[0] = 0.9759538743350237095620038412791153907886111958465214282812663898287649311216709075768610974652202589; _weight[0] = 0.00007251514227803490388636640769623041371922231503159275050960701128191249448264412063567318483535691285; _points[1] = 0.9362818217355187421025193722871475594082635803646883892837426450201379107391391453318432405302555511; _weight[1] = 0.0007759490522557821973605351452471324906775817329617622870809982729562547897699646378604645579100034014; _points[2] = 0.8809495287153136023880805549365229247192257620249850286280431657774932073581341528362053919854452732; _weight[2] = 0.003546294540936386695929109813840513953405630969412226155615325774569207011586893659157938322767788821; _points[3] = 0.811925477275009666689693121201954242771620008829733004296824074056702209005600015576730552774306681; _weight[3] = 0.01062265194309727672451284568453333373257143901288406177087267655658817988164428587123611239563582801; _points[4] = 0.7316979730525232062993394846752112991776703416144255053301405080726071072308400265108448666008619891; _weight[4] = 0.02444420044082419616486125716889612243023339647683950965594801711901059340309718047264869243476431921; _points[5] = 0.6431646017687849385394940088418749344687178001026537323433816746667626232189289933810809550840731543; _weight[5] = 0.04667432993910655425413732479156533084522800284809613605669453781660467725115778296456898579690543322; _points[6] = 0.005319052002843740590997840273977394950171778649845101239090388582865436842261195140802135539827222464; _weight[6] = 0.05392665090053721636106293416964196355047711087332304374347740716255549922473738865652698714578246672; _points[7] = 0.5495243555935513136546896219603138697609059893623113297331642759135899174924012857390026360474762955; _weight[7] = 0.07717366634109808194395315371897661481697794303982356504901090232725807785964281183615873931332253627; _points[8] = 0.454161235754477099160096249961882970440028290412084992137967720315620010546080107378450741085561459; _weight[8] = 0.1133062126969649905762758964950627527929647767293146529704816117151296007557005216726923669605708807; _points[9] = 0.02781456191826005157198070923807354759531829239720000300594134265113548577494995954028054810204631919; _weight[9] = 0.1181106030271928203575530674800549317555657907909469016820334832959564842606168165865226255761452183; _points[10] = 0.360521693587057648157784440778396533845073304851300600175139415981041719351211561421203525213788629; _weight[10] = 0.1498955031684052123812771871602716067084415379038225419304375844804254640021209627209252643892922648; _points[11] = 0.06743186583899861338456857757181849448994028471133539011140154174279356463786171047590124871058861619; _weight[11] = 0.1661252306064170614951978271811555413440569614651595199924632464948276552123825945778602473840727527; _points[12] = 0.2719899659294862030563380079302590480247942543957991004491026215444180175182375256505110567396822931; _weight[12] = 0.1799662232824637334629206112030205761825115733710491636849576725169740218336869361061489424124481296; _points[13] = 0.1227482862154978393395873240130317032151265317293409309723332247616160353114996846526951659728971574; _weight[13] = 0.1925282306741192635536195068795429148549620175078239732019144990499724648233740495658097375472587461; _points[14] = 0.1917657062776536255028268450504200863445325847077754640124610110844518238511837287875868381479691005; _weight[14] = 0.1961650715776367222607857100338277674615403482968446824018357637392232405293324998845805559263136167; break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(16); _weight.resize(16); _points[0] = 0.9786064374986970125728009137812822496042690312088548040286436320973606732995221437659921341073019234; _weight[0] = 0.00005111364227877400497664824914822312187523131871077788171487966030019098788805718497028848685167938348; _points[1] = 0.9432242857122455935254506623929578257508869485688987484186741352804265152613888933335080761298126981; _weight[1] = 0.0005503124159022070098783811162627949675055432854454242381238069353356523893162308519719894537983138428; _points[2] = 0.8936859745488040188148696987681606327646834274095997914162494394444252336597543340153733132728571942; _weight[2] = 0.00253783999827534747204339587398565531121845521667075873722207114552047240564197912364057170241739288; _points[3] = 0.8315558830264619518892063548240608922762470054306231569778660096958033620199460946608882490135090267; _weight[3] = 0.007694127704267096909529759414250766143904775295057170663912123460022589036462078267439682969987203195; _points[4] = 0.7588252579491414133542794053511356108796435680365038583957695605622632533727925268078632201504708403; _weight[4] = 0.01797939540591943553282655904326541648736843405213664835704382086461644807389169392510655535237023706; _points[5] = 0.6778299174145608113025127726414777500320971717496155010727267379426891048458460258015622127620921854; _weight[5] = 0.03499018198244827989832060255651272931793234290752719755245012805681995519918979378047157992202798509; _points[6] = 0.004727687122934592206150610445064477185987713349095208078315620471990461862622014098091988804943732811; _weight[6] = 0.04799762249876787834602678161657048141079099237527991579241094505115520768176249489883380358692632167; _points[7] = 0.5911723853165030889707605187763419229680436878682765211186872551925076536578972852139357400884025256; _weight[7] = 0.05921510663100695336095700399081714160082916113233465165244891577971830694111417358117886339758554005; _points[8] = 0.5016375561531875937001304323508376116775809382887043798099322048009739763486344428459428277727638743; _weight[8] = 0.08942874259811972089333893705457462540747878902452832779327225337155148601273155358526763706035859378; _points[9] = 0.02474296761943498451260345626953567205761528650626344100702897707414062868822532862058633802247189094; _weight[9] = 0.1058433700693581081617490582582260489397739540049851972587515247508128778921240398581401705139086582; _points[10] = 0.4121029641168595969172842136225134716264638462851170381104799491302816048435587877644761732164741742; _weight[10] = 0.1224481516713504381677953376318549301968971738616216687469062423535307787680712176524375047323900127; _points[11] = 0.06007643771663799227524225532811249949040794230939448604178028132546709554288543218317352848544150918; _weight[11] = 0.150743298727674291333260325777243530241463714895605434027434973309301093690716384177669881743882149; _points[12] = 0.3254462100241296148268368519018063901298314159028243246203929830145913417696717843549623084103386732; _weight[12] = 0.1533921878047438226943307636411683225532230366129434468301308130372556609842068604135406661181292303; _points[13] = 0.244452431744511377302076561602752031033579055361062019964516938437829086971547471305886973271011502; _weight[13] = 0.1764506307035974844556454963572807953528221877075630527904162026163913063727413866339740371354372271; _points[14] = 0.1096006092587706028678975846195003827709889318416547509152886361080137785970255407503143033719803205; _weight[14] = 0.1779862938901728599046041983508410784211710356810272044473323158434144748195799575920162751395462319; _points[15] = 0.1717247594830021079030741779126958738693210887070413817883535217741774057292701297715602601789514587; _weight[15] = 0.1860249575894506351880500844013307938590785059618964565637623170975868320778954318066738261222629478; break; // order 32,33 case 32 : case 33 : delivered_order = 33; _points.resize(17); _weight.resize(17); _points[0] = 0.9808438938474125636766637209275972068403939450087260749208889199283197846333843968554117528460090215; _weight[0] = 0.00003672321680050201588893508809125700046531141997623090861092178661431081419170841266491721846696051565; _points[1] = 0.9490970165965445702465476283565708297246607755586873532653724677803087032874699499858701150851049691; _weight[1] = 0.0003974261013418958398496273404764511239692337872082450246160077318175409175170546288895012284106365673; _points[2] = 0.9045054233143287003790610093283550812376120574920944369394302938533880974366435920451390516090983422; _weight[2] = 0.001846696235108452323081740268246607255059909970851485069280721260167157397850582769904163871861571394; _points[3] = 0.8483270857099506075790635313717878056529164545129232857765525221759979278054482949739136814535756339; _weight[3] = 0.005655535035824528926649613561049219086512768112197461770524280675540737290522504605487405853423758352; _points[4] = 0.7821731030812211281011385401557176313519720275190703032263911897342087238744392146926368605116439999; _weight[4] = 0.01338606916727926148618970164658395028370018090423553621907901080091060043469655162093802538030485222; _points[5] = 0.707945001385085567943622426073089923213717087524592918375047496075645698517876359910689968651062034; _weight[5] = 0.02646567904144685891462284647978091273368422635641062894104746521612846499613282277673498551270934374; _points[6] = 0.004229765486490767874991987781300685340308435773431352185301973416816197017575857315649567725783395143; _weight[6] = 0.0429926041230744866513362488197449940557411715901469062889684425716121073405792471713585540944974964; _points[7] = 0.6277775385468142725656053809477606660481926914076750686903817659859352892916227568745400677875818882; _weight[7] = 0.04565456895454675099029361310226524142448988405389158412248073822256735245132154460401903761295545258; _points[8] = 0.5439766780904757097451521743554710584231978091980306940950977666498348773038378260887674018571215284; _weight[8] = 0.07055515732420044207392583546335768383670146789242918934183781450503912339593438180917722727222643093; _points[9] = 0.02215270531183023229420900210157300154854505840882207694347863994881565153556420004262394660019368648; _weight[9] = 0.09535104807481297848202429866106118257566228137557417660332400853161662680302761699773305885383429565; _points[10] = 0.4589530533530190808593345147437514652455985649810014296771181666727254937874683576150552189676820445; _weight[10] = 0.09931702444790433120952426058302138873908984792726837791724440362064021175262692440686069358710680237; _points[11] = 0.3751525416408178820083477139222646171835998951809981629079410853435870113997403594064257319049096888; _weight[11] = 0.1286542804495145568686598485110360146860251475979356089399894897424306248964305507294249894650268248; _points[12] = 0.05385601482718482956676032201364452390207889406802519433016964589948411947150472054630517663168267146; _weight[12] = 0.1372315591826875201137474777560073360546853485740573862533356511173364265079156697526661117060022962; _points[13] = 0.2949858662980234886510059849705601329210424075903350147902591485628362645969755211291710565803372332; _weight[13] = 0.1542209677884094145128943284286812925327302523010098402991289260221514316057089544615700030218449205; _points[14] = 0.09843493683054136249424692423709782639488974724295841277288648647004523568418618804137473135772561813; _weight[14] = 0.1645759033882728284844431118628830743614989413169168358659006260722663488738016626358120054114977563; _points[15] = 0.2207592251921513839136378776833585067846629363530123208654012539977418973898636052213362063366054326; _weight[15] = 0.171301615711738213205756533380504272892453453514380537158994786696403130130385394099728124635078177; _points[16] = 0.1546079282658856298783890388078768159643889899573936780160589552820868047441765770328672418716605903; _weight[16] = 0.1756904750903703112344453123805424546908639066388433026089700387600911377246901618503645283631366504; break; // order 34,35 case 34 : case 35 : delivered_order = 35; _points.resize(18); _weight.resize(18); _points[0] = 0.982748407594286960633073899546303045149028562784532859367422241743337841463798829462474307855455184; _weight[0] = 0.00002684034449817248636307890670990759607627648491468895416588504339235192716316452092184439475732072083; _points[1] = 0.9541078955173166588189030938461288380596566681165619454485636499417392056850149493349451358778683482; _weight[1] = 0.0002917480346564748213126518173258607508890442325216746931561102953965933068483693177921983263851560636; _points[2] = 0.913769864110792936166123189791591200842146787728630171609250287891749264970030467465031991732660097; _weight[2] = 0.001364364814750619931583941001892832710526596444814880095801559791422327117557391969710365759943918772; _points[3] = 0.8627567207000550133608166202160961738680665986694630756476656758603077150109726400447325844934459061; _weight[3] = 0.004214201135828769484963761390752045700215974350846961473780225330124447098246374619584268057948317043; _points[4] = 0.8023851498364174702066737905851700573574353078541166033802958270590653479162625703154687749291640617; _weight[4] = 0.01008288655374502320909828094580508673228285324540546402052877073095600352583258281978552537379255498; _points[5] = 0.7342173081350132503192173614025312330653864334982702635244595308063572372883774041853861365278221063; _weight[5] = 0.02020099515341872526673649424020333062100969085759988997176723342299630382322198514555179632843105095; _points[6] = 0.6600181272253155465521234027038088059575554457571711316782527733933985664095417196979606497396358233; _weight[6] = 0.03540911290037990977420098813904969531272785240516766309095652038688854805794084594012390191614815156; _points[7] = 0.003806582247501876383648534354890812883653084218143725055850915751286505483558068230455044287128636871; _weight[7] = 0.03872959521506409270998592307661178898880126487708449836871701251355028383578477016496915438790270965; _points[8] = 0.5817090526709179282288375852933077443864571121132991743769987023431980248853066657774790851887703593; _weight[8] = 0.05577559061459162570281412768389355996651397767708828589498056037792211480330590031535721170146035938; _points[9] = 0.5013181027502735883646759853790557548582408474545762758344248448850577878823309680705395605759116039; _weight[9] = 0.08031456678547888071777527613084748403550086714243964330239128562327769673230247753017547024436125657; _points[10] = 0.01994835104734301866630127355057796010747457504422512741431541670739879638700930791801503643734067254; _weight[10] = 0.08631509071677530810863100163952706294278370989850041392675520998322403679573746872013264641728964926; _points[11] = 0.4209272758703179558039109560839247557191088306211527841459293605637953895210495784407565029266997559; _weight[11] = 0.1068936974758404779443918912465824233672883504398824139817461678734416233217909028738142876058300019; _points[12] = 0.04854964530422463096552581822459659415208810269879122661467419186763858390450800500055006660727244013; _weight[12] = 0.1253356306869180533118015916525710771304275652121960162491546992025945693808868351192974349323507061; _points[13] = 0.3426185978020083004514048444648040212380882146133496205314099376215388144800483221755275703026317421; _weight[13] = 0.1323839048082899911826910765424937040163915594177335399366773159697079625785760931901186843037828332; _points[14] = 0.08887625911649738804818139219495746882989597915475128356802041517986238494141608853322148611303921851; _weight[14] = 0.1523005370137907506618312924014636112216561687461645368895555297544914491320199297299184081013271168; _points[15] = 0.2684201827866020844201471280361786628127359425869124458724958784949980847348751285744762131603672814; _weight[15] = 0.1530511786893971990313986250253572460871774396855398171527438104801138575696244796632962408451428573; _points[16] = 0.2002536959236303382067125585321085063433107257362303407043370644457116850092167808120166500781902619; _weight[16] = 0.1651346632398309976571473150915354252515252272981002584619642650179028278177299248154542524099377471; _points[17] = 0.1398845708351692649300383552676525748959865708235061557519490749172429745529982954346474136929122904; _weight[17] = 0.1655087291500782613306060164007111909015389149173326868684911715359303365087638368773296390165836235; break; // order 36,37 case 36 : case 37 : delivered_order = 37; _points.resize(19); _weight.resize(19); _points[0] = 0.9843828065517020106761276174556909144026325831604026447615399145866983347355888758046066379113914637; _weight[0] = 0.00001992280932787647270670068121504406904050878009796350082427834039239683808319955860954897199570269474; _points[1] = 0.9584169024234071451034779092669423904741880674092767651904315631184608661010553708352299289446592984; _weight[1] = 0.0002173705725280176670944890960502804423166204597532801450098392340276614206659788761434319343756988316; _points[2] = 0.9217606817291400488993742163227374545276684154855298882918293363660999418596388711657739790912190745; _weight[2] = 0.001022123435563885025902206640552076666567191786422602535420698723807095034807642183511143694636939209; _points[3] = 0.8752531629838266800659489088760858408079696488715943336759069360574915944199538127854460103635272211; _weight[3] = 0.003180177301794237493019314012687144031688576745974063615856410069920493919217044916534773054139522466; _points[4] = 0.8199803570632373353795400684102916116941435268852334780207569085081760303785333606287354427331798866; _weight[4] = 0.007679153890769252819349084362266762034680794496687220780226080890557707688737671772550611046414520838; _points[5] = 0.7572365191732979354973693279466696491303870879952976126011813160845715548094948766085611653832161417; _weight[5] = 0.01555913925021236084119398351318324635350878964483833382275711925200825311327878919159166803224050802; _points[6] = 0.6884917909140949891898655120380168800849788729479226796014048212433893444546592668647864865663296238; _weight[6] = 0.02764324431172879278940581658661853456999576463765561596565228984548554485346431017256946431651819152; _points[7] = 0.00344389040386249028069405093317222181182377640029914128584811126158447282426935788168626248683411491; _weight[7] = 0.03506918822751692946455730452233595458916116289923823285432079838303497328566987932630680788077123048; _points[8] = 0.6153572448045471654669401635833708805050867627458286076001673229030120048708698995373393775522832916; _weight[8] = 0.04424576251614803158884713918509202323760369304517733604518806841090123069603439631756455979147352893; _points[9] = 0.5395469627920880876694306633299818817017043399462428376541362226335526976593984274704483496113346924; _weight[9] = 0.06492726128798530252071044988969133477365566175334068106698994747182582468433303021020195666737121263; _points[10] = 0.01805697833790056286303009395434268665894880733591034692641015267785535091595126090806803068847434545; _weight[10] = 0.07848342536092973805160513510880688200259433707189886999155358202518740624336539197330534394096169371; _points[11] = 0.4628377985520202782022048705469377514873721078497890685487969094434993704576336247176078079949870379; _weight[11] = 0.08836225259929596186133469102150733448918159724655286754038526721794532427584912859912903335150515709; _points[12] = 0.3870277027693322034154529075168274250441355570183945919149496613274873431354056703498844308990953007; _weight[12] = 0.1123664317444116305965655143169402510025365271744523979648159561101015872421911323846125879396222849; _points[13] = 0.04398739509084273445519883277365948261943201401533755288465140272078804107508383052868780286880037334; _weight[13] = 0.1148325991148163444911640277657323543047270823476765245035320839854858063568929732605305651848156571; _points[14] = 0.3138935674182182241524085986530725421833888559124072140832271736633880973343121552225350975792017752; _weight[14] = 0.134100272282441135843622802269838878514535106695959606198030755727139751181154620361343864744773243; _points[15] = 0.08063327636666141546972177666301584599572774478496515259512648347202733971049631258972859243872553855; _weight[15] = 0.1411124687979040017383983383889387833636924536378786579842406801114338206400330468092921847805161686; _points[16] = 0.2451495690951685705524921770182137890794445582375331816751643930651784772617999016157149898754773397; _weight[16] = 0.1504300020813901758036486944453268769096163950084233519532702102196909305554659060185430103650449769; _points[17] = 0.1271364098615602695300253508396918022790446090548847239057383641397465202768706860278890106271755421; _weight[17] = 0.1556895448890469502039433952460571175059219100966614582090178761629870656252840687807066371333142135; _points[18] = 0.1824069836690918531306969538712789495119226639431501787827330067269926177189844384572705963840879384; _weight[18] = 0.1583929928595227080602642462804924544723091598046442686562413911514004596788051226202861652655253789; break; // order 38,39 case 38 : case 39 : delivered_order = 39; _points.resize(20); _weight.resize(20); _points[0] = 0.9857957888406418466800231313592152785604899067877207377306395965180365635041144860468676436334983574; _weight[0] = 0.00001499688397334853909009654734905514945521257651242233497492603278336052697351239051006226204854156653; _points[1] = 0.9621487121504981897091608064229207407940341288068742181995487210154653226478330645824175987235472225; _weight[1] = 0.0001641564083492808221962961635922449664007417807376345432948175005715964939937779190026714134500071776; _points[2] = 0.9286990149187505453450978371672693948888756101758623893390553359882107838318818368546819590506483564; _weight[2] = 0.0007755532384700472430793540610379271893135838353708382828748805776320956014381700141548785598395884206; _points[3] = 0.8861413029145471436872829303649495040166030756579052437556327864000033121939155088226394817590025748; _weight[3] = 0.002428182817069033016610894924350833114680897738357536155240424761102475327226118558922110562054613683; _points[4] = 0.835378914631561725171518394713412658084401759968059337516039711093759997511552876897585105888108726; _weight[4] = 0.005909777767885943225135430582621307955547100153876209416844747358074494910134249252257133135713181473; _points[5] = 0.7774925920354867535511259458365767833501645594282318185786818344152523063340596941838540072199020297; _weight[5] = 0.01208995668362951749967394391224448828054059207291389348694724435189801244587869887557864332435867969; _points[6] = 0.7137156110152876807420834353539261845083764977327116606392342641138367359145141329606212643884043524; _weight[6] = 0.02172836322449210980004804457059473249949021836957893650421253545420376191894281707541313281395790445; _points[7] = 0.003130683740743589562150141749546251006558087897339829841211539349738274314866496852982779908203455384; _weight[7] = 0.03190317094510660674090924062970198411577078121671833534897277070677203833980338615982239630856403199; _points[8] = 0.6454070457773675666173208347639696868480924890494238974440167033076937496843430736866993320402326217; _weight[8] = 0.03525422431297342131570109267190665101713924409722248740423389077510379965048840746566703817840967523; _points[9] = 0.5740226581828268717275121966537067538016418929949592700206557877680052279117492170391822933202016281; _weight[9] = 0.05256367702664660696843253488312400143294584902673080355015772217448264100685386833519746415036752641; _points[10] = 0.01642208813398783290254161425625752298093599837033552370593506952105049398340715992554357459620698864; _weight[10] = 0.07165500930295423640709583546529029927063232240443669945496644251219376217691519736672476809671709037; _points[11] = 0.5010838154828485513706246541369263270496076238639477776074661526726511056457717245333351712537248934; _weight[11] = 0.07288201367307476620737326123903540949531459313127703706325526164891890426846954818738827733176229809; _points[12] = 0.4281450409332566846154250347724519581718006946562795606850444879460088034322223621075385140190445604; _weight[12] = 0.09472916165698421592346580106597904566789390110319129543362928719528014089962861825723013260548530379; _points[13] = 0.04003690046190678099632014982879280251919218202100623418922253900409985734318539080916720634178996678; _weight[13] = 0.1055302577165023391780536338961832585932656024160937632538479770610925703787292264148375828435711154; _points[14] = 0.3567608701024531056470550666332594421879937365627218234316645015120881052816834839729303782691229973; _weight[14] = 0.1160096189823571406796654290456113281805357426540610444070368909950710161534150063798066831796666365; _points[15] = 0.07347719178528528305756654528587446712162956746829331567597923056648385302094819196497247815553334907; _weight[15] = 0.1309385772702925921899186259959536648124379399531342254695653323236852472377607884882919968014591912; _points[16] = 0.2884527121812723847719407066523953852068123046578582394812568730574474727765765420104187934722455199; _weight[16] = 0.134225725813901973916010859290956315174257925122368934739958261965474015514859603925292839755104494; _points[17] = 0.1160309076554868049466974315674778539277330768012538553063813735353261223084763159059242881112717542; _weight[17] = 0.1463516662129082599464371823076988796401775386811170193209364125128477705820631778004347152301799095; _points[18] = 0.2246764193843050384093819648321044864540754911683337333822542507266562834493851020811842664368541631; _weight[18] = 0.1467896818880725308530169982826116192006045612648753091087111859984896015533920748162929571735174518; _points[19] = 0.1667912534810094300129807014584903280447908397404053429938887652977094384333228625709776729362660067; _weight[19] = 0.1513895615076893628614187777974902875769289857347589080536723214276560283463670856505077453685905939; break; // order 40,41 case 40 : case 41 : delivered_order = 41; _points.resize(21); _weight.resize(21); _points[0] = 0.9870255665787578365469005516471821103487323205471391754376943598319864464211860106934058825645258605; _weight[0] = 0.00001143393418724068380170413895308611060849814044915809164226820001407628104622909351779375362862754133; _points[1] = 0.9654016073657424580929490790442942557127428617746879386553787549823009422401519559419539901187908714; _weight[1] = 0.0001255089335871709281118126890978511883410232408935299359481594966361344340514817928666164963461870615; _points[2] = 0.9347604364012299479827942935966019857975433066835579885667315868005288394577841513140255125926971028; _weight[2] = 0.0005953999959462022743715146028300385175077092750037786268248278976636240495566479815754772134557262851; _points[3] = 0.8956817429254667605282025742976504630403884116278020040145896760872923029903183803945118949524779672; _weight[3] = 0.001874294450135896801731784503573779401671276969326976735014995475320855077785022212257014129577865045; _points[4] = 0.8489227735376888398440174689512629925240544749893709330516913793468738663135396111526364874935057414; _weight[4] = 0.004592965682865899309081525926914390207513681471407921864480309470237783124356199535498939949623202478; _points[5] = 0.7953925737461314623249865033277437002775654540111543847783430994750663228409525643598837266227268953; _weight[5] = 0.009474486138446127589636908414029505700709517833191754141564237314203429084320420413231363560359878364; _points[6] = 0.736132620597287348464102976702205297915724058040746277165260616804853384913595025246627455052229207; _weight[6] = 0.01719724025685366088414548084037341187485771394568726343623778138278751292702859398535198066378906091; _points[7] = 0.6722961409869296162899704994812126870277260383783201960320999269060656781743057964570096111577941914; _weight[7] = 0.02822928389744864174544586786898217788137229652458972736832397295131736231647885061286268917613281016; _points[8] = 0.00285835060009189432225562771682668948582857512454396863027797721426567661617667311949044311935799591; _weight[8] = 0.02914652692549772359825191743397280020164868373562383178741132669912525302067096472110019756153082352; _points[9] = 0.6051255339761019284481098523077407624240428731564207776008663713434935031358888405650262217950025242; _weight[9] = 0.04266508146203472287514740814497105426127212704884677528002189938589343854792402933566360152308841045; _points[10] = 0.5359281386930321609326895183917609968520364389050114840655237758106639373854988648624902834575404957; _weight[10] = 0.06009811216766876110645301901080290470540542252779656010666162330015632690205531715683178923222126385; _points[11] = 0.01499936497207552234035713591602254705393618831318367785565166039034387086356684984726917088159977164; _weight[11] = 0.06566824457697127529902981695220767771270006886685278602736453053393289071075554704667985742556471193; _points[12] = 0.4660507666351746484729664900381236689850117104625250010739461671795351570200905473063913279087995362; _weight[12] = 0.07955912026541126007769813685510363475963878808713764989375842730287294266866641538077148042860200142; _points[13] = 0.03659386328114012262654505528218600854572346118015453102909226025011769718948800713156805117021348771; _weight[13] = 0.09726429982522235339421302162613403019875891383246840547625842897557731247557947987411501254680287177; _points[14] = 0.3968534769856190095039434290948319231559830819379799669417186235032912613191108923209116958842566661; _weight[14] = 0.0995403355010239132382717196606446428701230436642824894483894589415408071164372671565051418449066339; _points[15] = 0.3296830989901027237373491420545228582656516694202723447101849302637120749496599731334902543040306285; _weight[15] = 0.1181122908083299756311975390634647250493155093193591314865424228051155593226483354511888038664192693; _points[16] = 0.06722644166793863852656394767467500357144072170962214241165856897826976130638620748193107205233694509; _weight[16] = 0.1216954186195147767859181700852196598453398974387542750341310709128680231375238395840669422159454729; _points[17] = 0.2658470140108159098108921515437181536788750914282933339485578881666960769687043708156597820375066426; _weight[17] = 0.1331241870513333849458925379704009194981324486702047607071260864313889685659564325467513394603855075; _points[18] = 0.1063014797376931175504486884739310046446260359816027861282438230188065644711946783060826726008422005; _weight[18] = 0.1375542142025096877653615060378353535237823217814758119642712415097028824989683064469150618759633061; _points[19] = 0.2065877060825335686769803341751510840175689986107977624063634924301173628588357156175136088108010249; _weight[19] = 0.1424637790987724784544985952839802649730864625728979547070145816086846459169762856846041536108135636; _points[20] = 0.1530585749557192122497019530096285339475255004440860527688523339429919998362921566593935826956915166; _weight[20] = 0.1443411095395721799450733462238414248515479283870827912143456827382935051545476673209780806694503178; break; // order 42,43 case 42 : case 43 : delivered_order = 43; _points.resize(22); _weight.resize(22); _points[0] = 0.9881024599908778831834893508543820892773502151203394249702418542482522913410591542225873730537640238; _weight[0] = 0.000008819828241607839113836319188467664692011455724039965611658207161388061470286555951138804647517523762; _points[1] = 0.9682538838165636528816421008794414241196089368489573782572610534009132752925859249504071948887717238; _weight[1] = 0.00009705271167906710277821920044618755965438716605308287260605611296691915914345444845503274559759113985; _points[2] = 0.9400856692108184696160307746610789762831294650129674325772200327073362883580966732090847381891661162; _weight[2] = 0.0004620588367040999729282212179118719403671385452681342157971829216665667312380747639184954064858913054; _points[3] = 0.9040851784977527206617013643188418266790222208067682092434771080729602120076277567836036898919526278; _weight[3] = 0.001461453138691387066178714368792017613580659773821636378785062623685765189258882757952421529824382382; _points[4] = 0.860891752762866217306561289088760798024280407816610933118125205649126736100379365501381094748080698; _weight[4] = 0.003602665011170079496010454313375118125820248682611777483518813337130543978051137706444943926445444968; _points[5] = 0.8112752068392205078781186463119643007891999522242449004575256452024235067993066706011518445018605716; _weight[5] = 0.007485551813034275817216951148497417410643864099134073165862080079074318408799086608465326459832194165; _points[6] = 0.756120559178934871229287935277861726124138068090238740139279322617849153755355308054543314195952641; _weight[6] = 0.01370427408387923505535094139296990898530719232986605891147317475726272903114323254491117374114252769; _points[7] = 0.6964118629859517266112670768971276038290954874249845702950806736765993872213401445317623482971794438; _weight[7] = 0.02272307353970016175798801382037590056507281990311145345973578790932392062647349992155849279080103849; _points[8] = 0.002620074720371159424859367455264888905528254905967075341414209716403766002695753259982505462790702161; _weight[8] = 0.02673172609568654751853295736245388910769904510379438631959110356067466777925600320462833457894380703; _points[9] = 0.6332145255726628427916625618237318565701781915004554642631578635011061799446656933683602264420425428; _weight[9] = 0.03474679389549965662247861906215097123019694954611807141411557017597677027192888562429244380178121545; _points[10] = 0.5676562502726097870217726677178769223611025672537427859994804146174746381249794034881861040558801353; _weight[10] = 0.04960981404383829993700779271549480288885853637660176997186571280097470956587682931711438082157298981; _points[11] = 0.01375365798738580402575675070905872963577871007529049791330105411351782591035575021061471597349499472; _weight[11] = 0.06039224968649528527797201695304747719350890246767119584138949538030174755780883063573431771451573801; _points[12] = 0.5009068926479350501177501589277218806508226892948913257700098794311718939499484259368208163972501152; _weight[12] = 0.06670592951879767846792762476690622296014280028874613091699757533426509227995492281918325108396123329; _points[13] = 0.4341575748401551375082012124710567475311318981229697451221181030460066453494908033714119124482954651; _weight[13] = 0.08497667125409721785945148880879745505881359027847151653606924351274875356349984209037489762238788007; _points[14] = 0.03357522684802669271430819164015782255936555354251479618256136085248644097781000029083755653408339061; _weight[14] = 0.08989485493810659201312259319068572635263313059560239420597839977609904961839090425684384721793834645; _points[15] = 0.3685994249559412825032166420129271053410258894370369258634481384659319950868454860519985944915827024; _weight[15] = 0.1029672849391876735260280671946109142630666826269145737607246207862594409036669986746323585832975334; _points[16] = 0.06173556162306960169082657439530799232593239853434981616795449869395358825349510725475770984104108369; _weight[16] = 0.1132978321011550534569339446690910280401715810568023622298179018105850110347547332801463511728914714; _points[17] = 0.3054023184425990231526085351824413364932159709089239800101319162552567160333479391342542847608906839; _weight[17] = 0.118949346513709232985602192391896693374558508471962113359062925535623349061768764063169676690434175; _points[18] = 0.09773269667536864245847988499672332346923869097633493640302023050164801771896428112688852124513295678; _weight[18] = 0.1293178958114777478613063500315394516761550424810764340961225637292240059327409033219260993510310263; _points[19] = 0.245693999624503322224465199004346511040095219161282162101130888622591782757543602487249492370203605; _weight[19] = 0.1310983476019885069549959653684284929730374753089605272225430034875336215931548267651214213714624036; _points[20] = 0.14092439775695158519450619775816451884611959708690538685783129704464061843005866589153388941048851; _weight[20] = 0.1373943986576711189457038637687127484198195244023737460240143431480038626621631210916534276483539123; _points[21] = 0.1905399551842166284991396915288050974055091810716148172940553365188707797144828728812777249740083098; _weight[21] = 0.1377052393125228077987045052679605699295332423726478549816510583467911003227901128808596332546938645; break; // order 44,45 case 44 : case 45 : delivered_order = 45; _points.resize(23); _weight.resize(23); _points[0] = 0.9890507733735791253543712469758400035281773409051211956278514761266032259261348911429860283320820851; _weight[0] = 0.000006876667443448386873597174615624846641300742166712499390444623619723899261299135896561250296435335989; _points[1] = 0.9707685195733889938794720318771182548024669818727768010084319949615096226307776604478341088419960687; _weight[1] = 0.00007583423894827645199529497212749310045124079552553215845278302430393444077320694676832428355417760795; _points[2] = 0.9447885021959101873192640703319531140411645602202181230261730429904477029248254097807519999563813321; _weight[2] = 0.0003621778022397484227568716984452699810122401675080385621920809602503235452142352579992064490492180786; _points[3] = 0.9115232476013712848631727800493825734445243013466233941759256931038532414323388171548016643162639101; _weight[3] = 0.001150314682984822344334855610916138444468915824198344682212336984814856306470038289503572924918974143; _points[4] = 0.8715161336713438696663789268096078560203102425650686035780009545736051097600251592363012603490395307; _weight[4] = 0.002850497081093543249504950370776049252981886294476489764789366131665472664109268239563547266953185198; _points[5] = 0.8254231835351607786693628066740285412448723033292098215120413379094288517271797907093120388750575164; _weight[5] = 0.005960272673820516018892550728367359102119125009944955607272944225823529645958240764551805100276375076; _points[6] = 0.774000884826103954870602865039850232459354767308173945418496573567419087448226053026498675219714321; _weight[6] = 0.01099396318272331474169753508597427233921996009999619601995167163454190521119038525024744167647511149; _points[7] = 0.718093423039932334870528968550415558136496950365395538952664548514450259640017620337759804908076215; _weight[7] = 0.01838949716531371895801221750607384775779877835883666504812201193134363107981822179196427825682835979; _points[8] = 0.002410403998251780792451856588101972909066529739119798212188046208814258289064772101273823619146110848; _weight[8] = 0.02460458715379363680944285409901799406845331559876742556717226362516710861484213381914616524325269173; _points[9] = 0.6586187096898888135130219138910443233073970121048619807684601196253997338641760466888560080659310002; _weight[9] = 0.02840664653778501707948217016440661524304227052022033505140575431516377941086740846607743484483156773; _points[10] = 0.5965532681512670094276258199980622909368222170766033931827570264949111422639694369359726047707370604; _weight[10] = 0.04103337000606945503503522217670326104878723363104651468601157260930516194676854942670347964613293905; _points[11] = 0.0126567991854554032486919041147616055178068993488019404920062315307023102839017774129144625521651445; _weight[11] = 0.05572024457122334686306970307932336946322249656441291155755441029051172750463539491200291665562579443; _points[12] = 0.5329161809469259852961679422880949408372018266872169088225806359785246671619598639988003464099914504; _weight[12] = 0.05591706970939040592614623445525001285248857059702692030395415650257556886501471071456697084452361735; _points[13] = 0.4687523477214090214073558308296168896809398353261455806058774838069360883559041595095033610401987426; _weight[13] = 0.07233501875091631840919628023809183145752557746817854260441269393620510970432941834632187160557783416; _points[14] = 0.03091420521685777042524659261449895967467270312206086783863872080618109788426269086493255324515362316; _weight[14] = 0.08330302639229947932606202543244005159580104495976244028104260557408709909900455946501879510312450854; _points[15] = 0.4051153234824939152589899821459852518084292041960127091818387323191589246479819549763061565524843399; _weight[15] = 0.08921331592042749615179791387250922454007077948520920020945311505702881983826510488006429430176552302; _points[16] = 0.3430500166905744572249642236228373303079210262636306213248867962132213743211306739909111276661963969; _weight[16] = 0.1051971301902735212171552740490809864687285728732286101918097259253218725264728006157687448724567674; _points[17] = 0.05688697073444690821032588838336961743654015907339725082650819749305629473627316130856328689737426324; _weight[17] = 0.1056636634236599800025960030696444996116926205371369655056408389679930032480510185451962577501990656; _points[18] = 0.2835755302598378337994539658113249207907562733532297915625840729145925650514832273388671279031826889; _weight[18] = 0.1187676404312684393557883257269936135587246278818678797038987739015900277273626487102457050127845038; _points[19] = 0.09014913455773984691589948612922737211413253931649758225808067949438711851934860889153068726819551827; _weight[19] = 0.1216392044936975061036741688714549551287865944305569473422823525233694802740589876102729570564236371; _points[20] = 0.2276684266411056773027710770956689945976517001579188130220661151724974754332539072451049501434355138; _weight[20] = 0.1283940193233969697677293919549598541264664191744484566283510181595252794240699445354258114294514256; _points[21] = 0.1301546569620392647297136145470657135930380187181655783102116317627332537731657610993460755762494399; _weight[21] = 0.1306458637267026875983182867538939685731303811410348704694137140183344576684464387632647813109838146; _points[22] = 0.1762466912782491162874995389654770161435899409370830936250632217648999272579318891342051808242810613; _weight[22] = 0.132703099207861685113771606242267040771719381177782378888546698410791460688349318846771129681170662; break; // order 46,47 case 46 : case 47 : delivered_order = 47; _points.resize(24); _weight.resize(24); _points[0] = 0.9898901712174520906251165597593773918847523673221438024487047832202131975743714655305404620841092336; _weight[0] = 0.000005414795649621589410956891889788871742947297812794956478833735739984001890036849423513416122201443394; _points[1] = 0.9729966238607434240581902575081331739557554587997081204643390924536815578867557077759207213916891928; _weight[1] = 0.00005982741578200805140757442756876710357681187764184129492998044221027472286015156917522457282670014999; _points[2] = 0.9489617024727324761890720630019867067891512669388670367116995074683944983852471238704034144706207455; _weight[2] = 0.0002865262744228954315248621894840737436204226419751809547178299642115143727296322854938132384108068028; _points[3] = 0.9181367783042758317115298970528403234116421141197280467998314494812585311720032200286955057989618405; _weight[3] = 0.0009133865187289247367136496244884025935049017690707982258831296507599797381201681041293897274275549488; _points[4] = 0.8809865112004901553982606734371066424293828263572332748538020660425345593942795437337711303415925046; _weight[4] = 0.002273816875030566631082337760719505683063855834506483104577945072621905255965654055089511921562870697; _points[5] = 0.8380732394393357620477594707813738107956440957803211619128696670627887064733041577933862555402708822; _weight[5] = 0.00478099155488135631829927873735610850636015195412822564225728586449440911997072816425107894901952503; _points[6] = 0.7900471558143551952024299464595864800685694943997857653563880504121078982496465547542056175539248754; _weight[6] = 0.008877010801018946117185025924342474510540324525513331403312263343710478394357406571414381506861644254; _points[7] = 0.7376361331966650834319952799565664239997149439085959623604215726217384164028452637066239693458780367; _weight[7] = 0.0149629346691495350546165739431368442535998577893856441120639179339871284732782984334631217432407532; _points[8] = 0.002224935452613053665891943069255750028001477799647205535966283412159514791582999304672758496614559806; _weight[8] = 0.02272123685713789434030881931524938582897026979966692028426173000267001400447472415900288947310363378; _points[9] = 0.6816345890584223343347584224654693833359846182784640936142748749084889259843441535034498170983533268; _weight[9] = 0.02331919963843795558856289001178667829714874513151429202299104727270255015570026749611235251715190262; _points[10] = 0.6228914041763613552769405578811627797744735067301256611232410007539390365503687846951176550441159124; _weight[10] = 0.03402821314534665504742300668651742375478680187207505350701851655484252062079811817240060870672024125; _points[11] = 0.5622970377001162863211472577185407563882405046536041909948441852501756198349145685895124686912743446; _weight[11] = 0.0469115578091407435119135971531759206211456446784961440590979776235609374016068710085926652077969101; _points[12] = 0.01168600396976784119585970645372596213506262775598593366556381424441620764977273721853043934271845157; _weight[12] = 0.05156450302852561733106515247255298513224662256829380501788829770758411341850704243518347036063351569; _points[13] = 0.5007700206965443044420384481447814267438751908957880531164770293158552605883981361981888199260713036; _weight[13] = 0.06149308156503639872799358294626381094725788384605781475174499580448305892704309824786744398644990349; _points[14] = 0.4392430280138590771400222586966484479281187490364367805606402616906997553927361513577773490887077744; _weight[14] = 0.07699630754163361492101271509761239393849942140377941862209472613642061946357771589251994659060800813; _points[15] = 0.02855661419100575078433773106991474313748189689392150746530677045392972682926951708896373028078886491; _weight[15] = 0.07738771704125657665401015992403564121662898479846865035804772254684527134060060366464554448623310962; _points[16] = 0.3786487375725983130255223763826594151980352418923449568992150385696141263998799737945727620052669868; _weight[16] = 0.09238041135649377632848298626350660907150032768554403014238224628817114536167770593375677111179164115; _points[17] = 0.05258483976432183438541473688430542352634574929408691847030569765319726770565337571037990112697772436; _weight[17] = 0.09871617322318441702547220169324858290886567033955491182963415229959747527921243023604411058331651761; _points[18] = 0.3199056905142705147196284477592600478118677860085346296646837337943071384012733116212835394981488244; _weight[18] = 0.1064140204072954464118267057242311153891075934728738476926957640344192610080730226508773305006220935; _points[19] = 0.08340690827115669342265715031914870712393513349406943625573196053823905284341476460595076132799896886; _weight[19] = 0.1144998723800464282627119569938636431402696445948437363201340620984458709118113476601838585175390686; _points[20] = 0.2639043660726025930345938310051340067520452082079640857559305951097397292053028574030042265001554412; _weight[20] = 0.1177809496131256963154687299353704343516432112100715198188912862742036151417784070771267150847230789; _points[21] = 0.1205557027005187819785359775783852711983906679686549822611192158244964090168065655430091806355845052; _weight[21] = 0.1241560818892750740513319197449305270799796663008705162149327212005494018765146066229283656762922961; _points[22] = 0.2114936819377605655182888616348370137102012365281441126857995265139411092227855461865391104829793346; _weight[22] = 0.1252073956815181771346127294596215849298975190508766297740178851158073346196145842747014091777703977; _points[23] = 0.1634681244020306820900081449797999118733278369358442810228438232040837540450435199855004039271963652; _weight[23] = 0.127596703251215007750895920412380631459376052890311743223279016365294469723170711769195350434667225; break; // order 48,49 case 48 : case 49 : delivered_order = 49; _points.resize(25); _weight.resize(25); _points[0] = 0.9906367009503252040186638786057673854869752103072860840212608497776729091053687956427078165918374823; _weight[0] = 0.000004302755109283992853390612984473905388520107606420784662639203221026015612852498093180719624771642562; _points[1] = 0.9749800156322561440080537979319428058608688920634258011461633746480601222229645349760627442122976592; _weight[1] = 0.00004762148988535869484357810517214382489037315091947178037681066416731762841027085559169817014266353776; _points[2] = 0.9526814786656007765604428427646471107128280724641542445681143547072496089803389360499312827713045016; _weight[2] = 0.0002286333412778897125360878868810677218018864957423887924835086482637072540841046732817968346432845905; _points[3] = 0.924042107591375088183860270299603460716277839946970651202689016561215748927105401944373367096390483; _weight[3] = 0.0007312150296955576038999427301489336061245571898075392624561063075884138374981784504825108417887624151; _points[4] = 0.8894615186907393745656503873951861823090345844702245018938672248913223057207012920176380233027947257; _weight[4] = 0.001827746097251135206530204407903268733428075081612346622935423986110324998010804043842916652568803827; _points[5] = 0.8494243882656275732290900248503280680907322871463571360374955681062300158144452515011786494799600204; _weight[5] = 0.003862047153394014885660554694647840111512019761959973821093873699280118779178659279767371558180975605; _points[6] = 0.8044924465194527143198696101390306595020306714115014471218090194399979166482091146097001614651134795; _weight[6] = 0.0072126346647461759192556190144110051057368556634141677806079889518799372758034872159931011806213675; _points[7] = 0.7552962978229513043581799301877042674961500659949106188709770331116463725525761120695916327062411829; _weight[7] = 0.0122400733886804262239638702260922483882869874656751208959231837292087749645032165693967788849201739; _points[8] = 0.7025264744308617327764735628652519707991262430777878489777111185176795447563520263257678166613306619; _weight[8] = 0.01922488755916925990273545208551839304413598984038948928740273847627349626429186204670641466309370472; _points[9] = 0.002060081929097883499230548771256641683030644135588557914779023101696836289714772146200530803150593157; _weight[9] = 0.02104584654991310894984769694957997264389234706488954830869366146363669643607673681276112765962831785; _points[10] = 0.6469237071357920937508249478501848787366871342377897238574359882034872352624041632877614982121503125; _weight[10] = 0.02830437637751160048700083768002130944295668211190091848676117122152547090095035944438706910338866601; _points[11] = 0.5892685115570647814127303043715788194113182486287723623739652905892272971097895471854805549415698537; _weight[11] = 0.03941749238248017695654904390708201200479612204684234083409815391209463268142666322461799547268657044; _points[12] = 0.01082268301359031138105841238638610741754419495014618572099843382803432892580641158216400725801855869; _weight[12] = 0.04785247342860094090713410636696065372543581105275627351894179124877984338090126845647482492287693387; _points[13] = 0.5303702240359852173396065663591384210267634451500462472121109299789877460508376633515105839528377266; _weight[13] = 0.05226654254025416026230055459765768735408748982342137352210401586284879927470555960353573242755475313; _points[14] = 0.4710556365226797192363701668337433453652680273700752120149035736826756466148957367682835979522326213; _weight[14] = 0.06630287633400960740664405539791593674018482270105306573866739446952101295678770123011621440596649791; _points[15] = 0.02645812972355433281261111502741448762381582930484579072074942380857494497686847934716860456297192619; _weight[15] = 0.07206284363820171160165937570261028877417915555039796312170958415818099948789627440800921583584439041; _points[16] = 0.4121573881255929482897040156029304602803026810481251319022819080784439249416642297798100544798503957; _weight[16] = 0.08074110304100429667322390015353026479458249971802668553808949061734867458681218551998618063433486086; _points[17] = 0.04875046551971594256626048405495149863872650262007427692289050523464258580283035772642693653318980664; _weight[17] = 0.09238508110486277697046072106183462307349301111542269581192066431251586682339655452939053211823346898; _points[18] = 0.3545022754336092801330830225246756319748235396671835065241829375954950971669723822236925390213555707; _weight[18] = 0.09460303776621984255911428340425176633044568964941211415406548859126157076222722306525009261263870048; _points[19] = 0.2988996452854616817472628058730197227314433867599336194504840923830631129196201993067222862706236927; _weight[19] = 0.106788917328849938310343580342129676248041289822079930729453242089902642978743856332781087264853323; _points[20] = 0.07738719047941864058844549035651095463419321093462887741820043230753007046145151599424606907648132144; _weight[20] = 0.1078731206753558255699920516316999773845920194453412445398199388813993235893370279142238853057140305; _points[21] = 0.2461300326799557368501708657724630388374281519477683919406243379905396093914799829014978822920175362; _weight[21] = 0.1161699062528098563285204629158808188551384494639865932612070092262711343486676737524132437966100165; _points[22] = 0.1119664131211797080591453118900233568411335618341266482302911307568798211658937390561142794026721151; _weight[22] = 0.1179603120946719806730046151597300929107578524479463578273411646787924756993067021805470346187081039; _points[23] = 0.1969342031254723248318136513226723837261617920675631369200407885476768048090584724200227907109775708; _weight[23] = 0.1216929757207637586818931039746277834402913288184501947402046698604718770716389339788734360764541048; _points[24] = 0.1520027529734087162506287551943575708665665516914832278052044133827396241518816510167155210118609714; _weight[24] = 0.1224872666186146488533662443240610951691534977442791141723136190727891953370651772473494342557863352; break; // order 50,51 case 50 : case 51 : delivered_order = 51; _points.resize(26); _weight.resize(26); _points[0] = 0.9913035622385110788790336653178278306638685473029327049342568556768750779226166802910464862467032347; _weight[0] = 0.000003448114359757205756745360166489525198386376580749197638121869912495215206262890112928773755959767302; _points[1] = 0.9767531733280232298662661702683429698796977567485282341214009937436918106009940247102813503324814623; _weight[1] = 0.00003822053883255387900554746410523715204390828917060415678743895044994612478539092658170443346156339384; _points[2] = 0.9560108839274215742662198697342406595278034313234337217490396871934265900098665899697971229408821363; _weight[2] = 0.0001839034851575356489389594530597318328668080169779138264875530228689413045229252063322910022564475327; _points[3] = 0.9293359602715748334061432334478793404990512001092018428658048417839597361733846070929979731803178747; _weight[3] = 0.0005898711555596490013159173847175552002172211131197603246704873932959527131487834703954937504716351496; _points[4] = 0.8970739084211864094916125355818095043974285476361644489211453364655049867582275024468773277447054481; _weight[4] = 0.001479803510496533483770404222388761836968823110573963984604554556290327130157655956042477051021174593; _points[5] = 0.8596446098087925495341476044048610631434683111426290228292610152787315792738718461682721701424965136; _weight[5] = 0.003140570491033566324169178308200812903593777775611657950464043256177915220403707237044709370474184913; _points[6] = 0.8175357317097885446226654263638273500789689214285257860423082060382710028297478571779544782286374496; _weight[6] = 0.005895624378770345168835737990923267314213457921731405554223994080869703797491624920386576159748071496; _points[7] = 0.7712960967780431853930398083442015153386640842171062566103950893923844867230098706227918714691709195; _weight[7] = 0.0100652911435293349214185972039361728837965416629534978495957715958597173303805799754230918997120829; _points[8] = 0.7215284411637628205782811219801685752763893687252454146020804663752143651812554588012584507935377958; _weight[8] = 0.01591836500223050457908558597913063177486827168378060246011515511359787919282859563519099594101698746; _points[9] = 0.00191289717110327028836078524521752905378221643873610211392586422613620030638054085761591113838798103; _weight[9] = 0.01954892722439377291610145584289408938746223353894233403593192849234043653992666165122219128617863008; _points[10] = 0.6688815237617270248821108145549645861198322343286327852974929404210073467991331540955757170564355139; _weight[10] = 0.023620926866716590429781746080458886913912057392116175755472052610577816983937979347311540801052264; _points[11] = 0.6140416543163906865961035725129271962910179605530973598443859211090243690612314978954036450474195975; _weight[11] = 0.03318912383294029289365821071167045100713239775208250096989712764224744184932990528332463294336165887; _points[12] = 0.5577237395010012764647206840844501727253666372843105914449844804197466442981144131225215846683212315; _weight[12] = 0.0444526422478849071887171168971656648124189504190488385065799238682532085490823182384757209786707533; _points[13] = 0.01005154895905705829101837163776007839887286894178746427295654042900506836125523943248910412169749112; _weight[13] = 0.04452377548054358057693152306974293779850488015842524187316405913445811445216693334515560304563508699; _points[14] = 0.5006619595031362884856902687713503167221436363552477393781189311589046478109453733251474626310385349; _weight[14] = 0.05703475748022071828509619466256332516846561787218921379234532042280759325691321139002913907127018233; _points[15] = 0.02458221593567344139959951442945173604525227542008597683706536629066562897106555863890846130241857954; _weight[15] = 0.06725495107308428165273852693974342265312725376252435168146700914145779601982415440317967786025974281; _points[16] = 0.4436001949306515828559333823823612392858936114867615745808688805378474705116095676777622646630552513; _weight[16] = 0.07035322704434977742682228930847787787019711543667177558572243193480196890984850180718542235275479292; _points[17] = 0.3872823280574549937989445036865958828972832166536714882484665313850184327167229220473239233584617594; _weight[17] = 0.08364408140790913806503136264243828949700520235558282644016434999787678203843397466411902861456776414; _points[18] = 0.04531874608969985141125939892871352392582349070041744450306418403609338292543286780416369042306744593; _weight[18] = 0.08660682167204660370080193943728064352793416035738853172340408852080310732523056866657018900396374964; _points[19] = 0.332442544464647897764370591677219362088665986717434604231536379957097306038335636912411521157132378; _weight[19] = 0.09600780433395996459611005163022683822666687189995853795269920650589609941099345779579700299706512646; _points[20] = 0.07199121113320913897952303263315337990844978682594543098496219654933140959926243370975522920210941871; _weight[20] = 0.1017277570591432847348180174383227213260284916100920427592935367507284866022929405674356028872702434; _points[21] = 0.2797957613012491859655855463898480988672060062249520276103935539643102128193564469419623506479628483; _weight[21] = 0.106474774156680812568561370518019168161628546270578460416498320073426923055252814931939825477870784; _points[22] = 0.1042519922933739349627321569155201289060616104436747962912852388186208673319729357666535825336812708; _weight[22] = 0.1120761181427334190032010245158099690638256138925814165287686360873920886305053666402815536031124781; _points[23] = 0.23002830680682207126412919932716909390208658580572414780253225469621533437570891507880804871836099; _weight[23] = 0.1140844639890417668241464892471366407764480789831449930204960242372119155349985796101274929370035803; _points[24] = 0.1416805541841085939424499105077162112269282743432822292773459439118180445686557930664348991933582934; _weight[24] = 0.117447028575268886080283905928003969128044025940981427337594705298274644106623945515582721239819385; _points[25] = 0.1837889724621079951285773493909411733485119513609893231234408186596165165503607848643038915766770985; _weight[25] = 0.1179710549264457561782354350967497775907646397405245096492474927754560320390464932600093231430017935; break; // order 52,53 case 52 : case 53 : delivered_order = 53; _points.resize(27); _weight.resize(27); _points[0] = 0.9919016921030858633563363794429817847379787714779279595620322545994397707381328467786508349830459968; _weight[0] = 0.000002785016388572537705690681609177755671609902607460882831309119306006182467890894946863671115671403669; _points[1] = 0.9783447246593427423009234194577171124968296718365230530311186830121782128183606331424343744729291301; _weight[1] = 0.00003091244161938983408314671147246492772583236893784015618585479755757538573429388679225037321883934137; _points[2] = 0.9590024350798769967347900672867432755261033514982111722784661932934780135998830463243946849777047705; _weight[2] = 0.0001490333111707578435026953455921951778699719566794053596354648989169784384847030615809371744890831862; _points[3] = 0.9340992449559257825950427906558732935953068512720009591535099193403502312605076880588140292621747714; _weight[3] = 0.0004792697453785258073340451419757222154191164076444721019392392800535122603874466076414496344511966982; _points[4] = 0.9039353597784711070157033597360474229931818363030729923680719044761889533438408210305605660116515178; _weight[4] = 0.00120624834619181937137603199441914360465912857765792171269659313799452594208005653184665745154759608; _points[5] = 0.8688762741806575564667761401536189780901445930466251209065034762678430393181039572235882829647519408; _weight[5] = 0.002570049171197175931361063941668867313971915134023462330557089030766363955154108296199489949582894189; _points[6] = 0.8293472971383944771598355049274250058834269029021771996399619672863673163568105696112267907482074549; _weight[6] = 0.004846921295440348694709177690869156229797846446689132658058902702383248719112744082435662948118295653; _points[7] = 0.7858281353779031227352117058077111616012152440575051383618183698144842122819671305036791359257553671; _weight[7] = 0.008319259767931359303359612245105396666555498914945895238762583811716697454039472166862699670678373469; _points[8] = 0.7388469893624735910922449829548469590275526861901167534999751484805700903189045500413201466516638816; _weight[8] = 0.01323785353886628364655051789746491666869904914948154796436523205630295604837132271358219443071008338; _points[9] = 0.001780943143570460885558792886611446878630789847066000390270576459560516274569752479856156412462092889; _weight[9] = 0.01820603118871048582942728891063964187212465208682135554645716213359324348541984930031410535990257893; _points[10] = 0.6889741108323418280816571990178261232404686847403558539490499437753002791024731150404667801081009793; _weight[10] = 0.01978061738005189821681119732188615744078771959445292827828842468044747984641395372722160776435764143; _points[11] = 0.6368148674104017419630307715995676902754314764405299930956289867406713625910027046038473059912601229; _weight[11] = 0.02801276453548874808009747976668363223186535565759695290998544442635238085147611006105071688900964825; _points[12] = 0.5830023879264334250663902804376328580572440100955175317865653839064321210069269191484571926567993637; _weight[12] = 0.03785356234773460919311606411888319543129071813262592167579519593720136903085223560528795008414460997; _points[13] = 0.009359937258201115028705457829872668484510565995513908264444078497284370515863726402824600698033502681; _weight[13] = 0.04152785829844875717943172756938377186734953754235234311353404373544544228087795063232762728857180007; _points[14] = 0.528189873835532934021657722740027508548208196505456013409035767085006436526769095345534024824517463; _weight[14] = 0.04905440341529198363865576676516031676767482097727449018102715309052236173245485358847778720174353105; _points[15] = 0.4730426684520476703602592878224296830904178855899382298873897364315299239631836659193743186739257835; _weight[15] = 0.06119194926537683569355451543997997296618926203848359030101583951544914289940470883109383512474600588; _points[16] = 0.02289854263907702050395291455569141311738970919189788652592377127458263144110401632397331449331526483; _weight[16] = 0.06290119746144746482802734864589386618833347317601423057015638714495873048300389063863893761442406516; _points[17] = 0.4182301795447049734724846472391014243667560340702901180312848174318171551123809662146069605014604107; _weight[17] = 0.07367865526297174418825984472902459506331849312468798056148539468443217520004723844738101147944550983; _points[18] = 0.04223546938345160520274859443846427423042665304287693049731721062888330792747246995094108230190228905; _weight[18] = 0.08132436136446986193739170532758880791397877196523611071292546215873628519179693987936952305884224755; _points[19] = 0.3644177529904574950557756096570565098512806680305704179066355757972527488832137323378563137368606048; _weight[19] = 0.08579121209195122447243328295236127860714191311346550727152062805058661851930724613643640236403073954; _points[20] = 0.06713636929901124659578390479055933650185406663414917887488142333093823351973104095111454943659991062; _weight[20] = 0.09603082810201882415311963795104748870818268807470347887502846531247874858577708795396729820518612173; _points[21] = 0.3122585959444232262993504592262882061838804975738422821976444443102486079512087157897605571708467093; _weight[21] = 0.09671552705946981898751774104684219583762712809680328375846161035397016840278817983469759130134249606; _points[22] = 0.2623858474559273881160617913883325511276096577994481672721349608546023050783281843153256814191171124; _weight[22] = 0.1056050230492805119709298866476760648000510141882851923408616735140549390641398474028584341314146003; _points[23] = 0.0972990698736721763753164344064238004527912129365851467031032541694671325752127600065236562459329176; _weight[23] = 0.1065088544552712310709129163765736239560946416142489520312256996469840584797893553601506329292924869; _points[24] = 0.2154048926944543171651652614570632101946667733364492996249967765409568376782797064089297968838438259; _weight[24] = 0.1116474563280293741109965065113128931866832316104691669164509221561199637581464430175629066034208639; _points[25] = 0.1323574675652328254198509862867790334541690279550368666466192187710882991061076711351679865215991105; _weight[25] = 0.1125263755484285883365205837252928997215348671664386328271427347062622899654077798856335746521576459; _points[26] = 0.1718860139720701680722426766544501251353813244874586832784733002806207478525176577679137330683948481; _weight[26] = 0.1141343235447071384761478578769258902127350763147060770569388232507400711703976247938788173159387682; break; // order 54,55 case 54 : case 55 : delivered_order = 55; _points.resize(28); _weight.resize(28); _points[0] = 0.9924402145386934818494062074608256710512573670377708826247066201588500246796209226609635064997675722; _weight[0] = 0.000002265958598962605196822743329763905246915735782078382024974317229330583473761254873410776872767826297; _points[1] = 0.9797785960640749944438190057145039152741074495249043615408383040614782568644584229549468171687733794; _weight[1] = 0.00002518191216312457714080057893628203062066238548219866715788280885486052172769692157029551682300980055; _points[2] = 0.9617001463459457899861099885807198305217759101371616261805924955343739972380075801124042375869170113; _weight[2] = 0.0001216212208108765183086984702980407460962842267066259167107608532532670446458238411718198672773186945; _points[3] = 0.9384000294379855101586491825366150982471974093849676442221321111107915020236599462447922597108121458; _weight[3] = 0.0003920317051831638475926050565561955006834349747351228816020734233503026528227612365401820950255750158; _points[4] = 0.9101403003668531082536780547017155187065153962208111283714408048069939649812595801927679940070241872; _weight[4] = 0.0009895645441188801027588830624824366661410419145577967624579589789470698427514257565112370532368473272; _points[5] = 0.8772405436497879573891723774128885767103809571602310600748670880625265196548463651442992083091059555; _weight[5] = 0.002115799069802587276112448389274307711426310369019676527371289223126989553627023040825265918413245453; _points[6] = 0.8400732837976637417846403075634608381826446882830863254766087793874579013383417858472750832694708386; _weight[6] = 0.00400676996382688876369694147974047973154866283886113397519166712993033774666693888227342383322420845; _points[7] = 0.7990595276685624868995636153621286979861878231866964890727280422713114601123812756416012428130639633; _weight[7] = 0.006910213443566888748466176890723625292539468755284525612640801075874152045527474588594349300760027866; _points[8] = 0.7546639187593059817872803597557685898853275116792760713753923349366380454793941649397924902062412319; _weight[8] = 0.01105609190631242552105479324746823601234418177691168238419979938124926144067391591450784016492233245; _points[9] = 0.7073894438877855706285149361350268987939100593278504681962772015788814614262279003604123878408133833; _weight[9] = 0.01662340411686909034142413466450566565032418406426186662411255986983551839951256909951884474445425856; _points[10] = 0.001662188334010344257891461771211848609193102668366344886339851471823721411659306650434237708070485101; _weight[10] = 0.01699675331355490717411502137389388500094524603859825757063307660350119689582330207269535543572269786; _points[11] = 0.6577717217542247768084005053389194499315878203674783143278934979688418886464254544545346213089894437; _weight[11] = 0.02370693220667251758884754554263331205128739505850822623279313400923071925972365938987128520658945004; _points[12] = 0.6063729282730147073480576391241726828720982008190425665943509503596611618340212969981896009477717553; _weight[12] = 0.03228783996502644895650898643668602554416833029918697762571085207553801460068086760948486028196731261; _points[13] = 0.00873728447239214139065712242090646257020090445870447567282855490448705888193735202767834234353241308; _weight[13] = 0.0388221611401857501373760319181405664443831529949018732380163213415938798961715598697675365133475528; _points[14] = 0.5537754238684313594769240249501645635328248608561576380556038385473320553947237200652050810344918645; _weight[14] = 0.04221188066485391017179843621910132663247325582481799896194480286103572326145048899412823414104578068; _points[15] = 0.500575153441983623093869111019478966255819651560523227417590738918084787952706570511471287773556073; _weight[15] = 0.05317840198085355889436749877935944937229816786481312186261562562730237943218926093884454876384009258; _points[16] = 0.02138176483568373963034271336149516841266556866258386679039806082475071487814678080051058192488994791; _weight[16] = 0.05894766595670255670963440873302383759119498225513535332185369018894998992852923391583154766651460418; _points[17] = 0.4473748931198531751312384976638757267785856330538905813203215779969809276248509403699505273214443105; _weight[17] = 0.06474239890218384617641579074397429560281200820034847743486255276201782999215045306318422919140676195; _points[18] = 0.3947774199723313116769052107500062552907725427703361632104188629638226399349568702184562114618754642; _weight[18] = 0.0763306503770435867799217376007081375452687618911842652302001273146809417858403010269360961540654852; _points[19] = 0.03945520864053971121154986277226662685144080719364934557672928701141422590945414778597456317172456995; _weight[19] = 0.0764867860250257028448602879104010451834884717881588252543887775929982012360821861240101576752354614; _points[20] = 0.3433786819261913150681460413651973878949845823554863178403679470149846273838432659226376928927518381; _weight[20] = 0.08727159968574142456653607461431136580558843981507980115301946075240580150496406025982314095123393874; _points[21] = 0.06275318712545885999983743626481590179256400882623205243754304532648865470273322717790632337377314921; _weight[21] = 0.09074930386242807574850384737192231428927990682057845126440329212535996959549697864971331918463330868; _points[22] = 0.2937610451613514326972750749668948134956539051387656916985961515253610703405985442498156612536971559; _weight[22] = 0.09683723892284496243133400305982014503220595603741460800960591274877472218951050937958199531634003946; _points[23] = 0.09101180937213291493037786336117976907264810765721540819421996451301742291635988315532695530375611578; _weight[23] = 0.1012555974889907126108460496940755561934638347853673107289657786337559632509483599958359377654219545; _points[24] = 0.2464866954363530558083411840821592805659340568933689671152241449226482215610440148989074112781467142; _weight[24] = 0.1042939762323390317306252800023900820145384876648703530515689827183667386399613716670604816775598012; _points[25] = 0.1239109225098248943986786571525365727357700121269974363446057563225513757008341619263478384404697343; _weight[25] = 0.1077593224554183504441506568716594810393974684605908180762875165119213414701629886814347926818068901; _points[26] = 0.2020912680468832554423969706448920337400445843902748221160223851312616827201318751974338594370225009; _weight[26] = 0.1089584330514553833792479007201945848483678110902207242804925059301547571776537296722336644764227275; _points[27] = 0.161077778503025586034483484317896992168941561016791412920534016160288076683236712455481216991357141; _weight[27] = 0.1102534472607597186864914711577228898952005094019551823025011564740940733845646315084537049532027231; break; // order 56,57 case 56 : case 57 : delivered_order = 57; _points.resize(29); _weight.resize(29); _points[0] = 0.9929267893183628062269525350662871775653492285199651525986086819393629175725051227057650509336396086; _weight[0] = 0.000001856283772081021646463917006645502930051466535420769785785415393719988368277496916640181442415746151; _points[1] = 0.9810749076596256309006437136691611689533352449026726879855908015035858117277035374554302084570421548; _weight[1] = 0.00002065193379483673723520305410719094953030456381599065092914301994814430006275832864617928309149435563; _points[2] = 0.9641411217247745946828870542493190904639324758002400985928337168007851931895173178552116298526335159; _weight[2] = 0.00009990263394095784408772527008183937133715876054979511341138744323762818463231844388684177314495142668; _points[3] = 0.9422958895903871330495337162486475572840128154973285809341967704118304237104033071590241332038178755; _weight[3] = 0.0003227041908195134456269653088472861986621444725248385753566297569081862963005760178204697655072584826; _points[4] = 0.9157689585742375160527209731782209778138377544703193428562270193431316521163635958472103988871596499; _weight[4] = 0.0008167123025929537791590779222624889046680614565866252043480296283513012023263276872665424708570029282; _points[5] = 0.8848409513746070720478295357950882608136439751437339020150931391920340490511768348960488253412100603; _weight[5] = 0.001751756104040543812056707746636424489524091405182527252251987207967076087908850752406343551247101325; _points[6] = 0.8498394858283586592068606159884429949323530710404946731082134176863686453602964965002298383195124693; _weight[6] = 0.003329732099534716525904959471022450189067525736458400646569973558736059350650571180620965956491897284; _points[7] = 0.8111354807272444642075213249964705278931214853178016839227908886334439887655616436591190604415518726; _weight[7] = 0.005767322345572894815450450032797290470663786874293720580846143468974332971619800222681111399152007128; _points[8] = 0.7691391534023484768538220758922565584262388759203507506806944987604814945430447384460512918718215989; _weight[8] = 0.009272946255348385389541458548765573070689017484996409398510543999367015481576466379271350142341662023; _points[9] = 0.7242956444888707043560871701745064455538860059199548248154436973480104217103385414072838784155034141; _weight[9] = 0.01402009861333367145022482741179595153263656328537495601342898943949469294535231397346053110908384423; _points[10] = 0.001554929031256665420006752942495427838027482475136930592211048929383071266978688100380198645182484977; _weight[10] = 0.01590395547416049373084283970446254939586728862730454297894007025395012962095073015384060063814125139; _points[11] = 0.6770802877492443573266568704467015351806311769675395683120767898431579951848013577283510561777889766; _weight[11] = 0.02011976844683497331844387739702727260430369510653869789575590786230420302940347608481479643127976595; _points[12] = 0.627993565916526262182013707529617129394893152972341580368269585709554733044579996298702311470791131; _weight[12] = 0.02759491436298458106580574784196132821947800084432000401014943541800534280281110554230420725253142823; _points[13] = 0.5775558026309174452553151152733625043245901657653645490736680818890881281137921627962913404073228691; _weight[13] = 0.03635995684886709788958406007756343059353121747834284301899201980737194866787438745763436873700570147; _points[14] = 0.008174723674418611559103865544392948102157036888087052346790286307717131377449463638956498141460460573; _weight[14] = 0.03637065893665729571075344593916540199657241009646385824767892047382103100320528018288122982250320447; _points[15] = 0.5263016453375968201653794928636041556860229130020205964062744256271705159139407454117566470052847889; _weight[15] = 0.04620793050943086619045368766579074375745787430897608290923105422272112793759027659747296191028447982; _points[16] = 0.02001057277537863729118447337248115231454020584682554184760410583574379386658825873304229289136911038; _weight[16] = 0.05534795630399538850185456211297123893344168142281776267574745603114279671978481699568799512634590668; _points[17] = 0.4747743970009873561917723160531700205066921026924445193997049795210527057905182697247116916931894192; _weight[17] = 0.05680734250845563585288858316504839656434131896796498476261765390734591853152656637737926312889479053; _points[18] = 0.4235202564181097995474113146850489926682673472663289206460620937489498826422878291086158784870130803; _weight[18] = 0.06770995846565736534187178620911510510981331439007344136937490702077560334537629961218632220124974517; _points[19] = 0.0369396752916812645959209072886222502266940175506431296353140616816413196565410066864982546882814814; _weight[19] = 0.07204878416716868669494228779171087877055190291879777468441869777323207283284792884162808840671618476; _points[20] = 0.3730825280293374465690792859201248695856590531186829500141964698180241770761618137437466075148481282; _weight[20] = 0.07836975770978971115427402907838920161802800682518189208674079546857625920569703907869991396907702626; _points[21] = 0.05878290626605055885840865218087174046495481944251207998810378852091522787940776630512797824354282017; _weight[21] = 0.08585111618606221894547223897051276062455717563898810682264732561837504271642097505325204467579434545; _points[22] = 0.3239958625177051466248603397041584055661175398120534880219141687715302778163413540837796763370016129; _weight[22] = 0.08817225630680597612003660163949371818078447184949948235473102539086671161349867433599036467547766318; _points[23] = 0.08530880093329033563236471055857523621058808223719875374718841141972960523222133992450790818395778101; _weight[23] = 0.09630795187080586094841976728359810551551172932908124410591486740160430723013263344522700978629878583; _points[24] = 0.2767805891942973708577879729031042713879054366854930668603078587622459594790114634625651543742909842; _weight[24] = 0.09647238670452894868290795505134096581869886645007816822694179149988004663996108299166340298176479467; _points[25] = 0.2319372002063364238357113561581231468239578677677663627198771197540715838680988610437419882956982289; _weight[25] = 0.1026382437620365051961261302742550581710573153809810112602447887157691824281457449099765356526344903; _points[26] = 0.1162362048829853425076721375397609970107436875069462593303916880434153281948281248095660108756043849; _weight[26] = 0.1031676988619209181710558830873856413004363444827527678541306109133352094102382641980490562172708412; _points[27] = 0.1899410449901282865692379014213471630254082529921559753456718118947261873986526053764810399620158524; _weight[27] = 0.1060973443529894398202373165023237945259903765282338008207222574643863851930328256989138033717840287; _points[28] = 0.1512372911316014780919207790227039606491053931442636445013472589695144451175544237584698175481308518; _weight[28] = 0.1063816687914308151764286948578946009532016371806181830429151351514918575960369656164444521272090252; break; // order 58,59 case 58 : case 59 : delivered_order = 59; _points.resize(30); _weight.resize(30); _points[0] = 0.9933678849972890218242967429754756290348422812012610131690790938192644595723658942993255322380362377; _weight[0] = 0.000001530435692303559679202880600194069095291373243359882366029366110361351387216726316141966166113640561; _points[1] = 0.9822506759732043911736678171948047795906753507549646731542099473217074609302325111913020773007465754; _weight[1] = 0.00001704378210976846570170738949485625046237981076825018201228716265008270161857594461594414931549012417; _points[2] = 0.966356811610316331681829740124114472013698341152903565974034839219633588997916371133226198626933423; _weight[2] = 0.00008256807322596642712675172300945914195274209200047916147521082294370472442789555182791610679371970876; _points[3] = 0.9458357764492203337808419002032066885955503076575948450871012659368499041349175484945986129340774309; _weight[3] = 0.0002672199620663056472135919658807958654052121724338065121842860076057742788764139847141623009890424742; _points[4] = 0.9208898151139505953144638557329905235774970627249343559514095081325116537677830281076745417185029103; _weight[4] = 0.000677900876045822301748513097607136324210204873984589460746651754413842077422919562829610184363090602; _points[5] = 0.891766318682024711351680965262570788260699668723203291111539656543622803240979767532198330039144181; _weight[5] = 0.001458186687285437575395832778065189046874964252128656421832651017529503747672066055109671092349859249; _points[6] = 0.8587545173866958177170051992400022157663057683841349552780806326443491728626503313132174680442865727; _weight[6] = 0.002781045433058290735823690629828006775647419013227642282327332200732301717026140608010860330831076808; _points[7] = 0.8221823987382739350146679257725087410887946678055925816102530058347225710144385002987812579603934522; _weight[7] = 0.004835687651116839589207388506661792798688732351920846841568469474501450058791552883867826144653376215; _points[8] = 0.7824133817283033117351654063389710102986058216354587982007414417461506029482383411221290125361309735; _weight[8] = 0.00780951217924887175492555552277335297710152074877213295106913265321637430098410393345892760990754618; _points[9] = 0.7398426798885768781476865343971963892441993313179320887011131454876353948716056468750647185101546415; _weight[9] = 0.01186669231590524206744646319730034674869664293542161685991368345216694946396047626719698432221560565; _points[10] = 0.00145772783390650359258939349065175917847200065310815600213746054046489330060751964957340354200936242; _weight[10] = 0.01491315901155340446212604717451004862856152600028923881167748393402243077917276774270736813868227456; _points[11] = 0.6948933626480090846660737470948052491622820351678518066893206318036909102531481156845209039989461428; _weight[11] = 0.01712539544532892132744625893725802414621796017291600334410496954630813410240948250791722805919453726; _points[12] = 0.6480121455331503208705669145595995298479983344533984988806949082338790572395468688493909284724971216; _weight[12] = 0.02363589773545442376826921873044047832436878049349748821622300008932827072699686486257968668165021934; _points[13] = 0.5996649478704976551018373593654268159180810688501359806278139203431894217253568566355352104940005754; _weight[13] = 0.03136191451975259960451311523450739540697146877711414235255154582511143225744543683656798934447392143; _points[14] = 0.007664767864806790652510700943612758896490081250185334891650651104295876629089337085527195459046516929; _weight[14] = 0.03414270443637351996552524689520019651518918125519284231276373992492543701158246339820206496302363977; _points[15] = 0.5503322608308270557491787984340267743359031321325234333208060314419409333934168725488976010462177834; _weight[15] = 0.04016730562047342836983353438926568287679859907672033401806590163348537364732569259646213424815701809; _points[16] = 0.5005043712628964789717639236953963031984790603234627725767742098965776650636318606390262908257531406; _weight[16] = 0.04980994243944509670193186882596801360805780285331470412300413488400333743558037202503741391583451747; _points[17] = 0.0187669462746132244982993301440387916639043908855580554548242427097167553740409721090435065543842118; _weight[17] = 0.05206201194506336946652736896631086980047779181323752545621446604559586912360486216640464809850709849; _points[18] = 0.4506764885015598873510899584766044215966881241176557888841618510954362349594222860652999748365539745; _weight[18] = 0.05994396892391193201878777221886819034342923382714188936785401233706685684647954234713000168528380992; _points[19] = 0.0346564195659897349491044844339792828709394875646473158245898065449187036414264888486758751330533654; _weight[19] = 0.06797009893843161497359823823660113226698137894136207676183867733482609286998692739265881943481490805; _points[20] = 0.4013438224374185454639967766405275317142917022652449466333117794386845094513689829895546561946178324; _weight[20] = 0.07013099742401690013591360102740147731104180921542862503107396753093730582466635836943847279118991919; _points[21] = 0.3529966616853502786154550912575915364162723119239058502674939729539710162974658936315002971501451098; _weight[21] = 0.07986001209119680090675229090743842319473780511267993616803209051048773098007336509737306748332389762; _points[22] = 0.05517557808804576973579901521230398806718249322486323341936662310406570235218106947237236467595813226; _weight[22] = 0.08130576744926203003727351913523010351524516224444640024452683616344850950559158640251626220781181102; _points[23] = 0.3061155007205121813665886906735831563842230803361353335661166203013891520931517709134796871698281319; _weight[23] = 0.08857497394178217650471618391876129842077745883814547442007841660655316881345758283854245886546129746; _points[24] = 0.080120567112325535828402317065571442809308606707266764109231947703747384584007510546030547316032919; _weight[24] = 0.09165404412254467064066511550040554298695455034951684961821682398973282747671045386111241554317353069; _points[25] = 0.2611662643784974751033364418861637841052167095569197616325843294380357783689767519724808893027702637; _weight[25] = 0.0957084022537584356706622834178274651556869909900460229728119906274110824605147609337241300199247589; _points[26] = 0.1092434970626521088746731873448846222774206414347470411530922780957733620062425548835010678261700806; _weight[26] = 0.09876432908795536536032697004673551868704851460757200597881816491701736581480140253736911574432935214; _points[27] = 0.2185956771518845796303573075738189314253271962040366483829882206456924780212396799680806333911303056; _weight[27] = 0.1007186117616301279878554305959197341608245889317283916519828674052671542386577064173516389649996562; _points[28] = 0.1422549415999572144877609341053898829708731999301570680786197421573754663025852228845161221643511937; _weight[28] = 0.1025585393150491257467352768657020962566165514453482039316467571702515714029648271882670353598411089; _points[29] = 0.1788268232673087628783417984246983287220358061763450736249227518897393446664815732877331590542564701; _weight[29] = 0.1031278694745945415596052946177605117292110687637337979963517529456830375931435175722210364638955055; break; // order 60,61 case 60 : case 61 : delivered_order = 61; _points.resize(31); _weight.resize(31); _points[0] = 0.9937689943617638927613642550978404132193052847562085323183044817501866272149029814389654785747097187; _weight[0] = 0.000001269380626764678675373195326975758127251201208308023241385711948424755100169194183552495211808790648; _points[1] = 0.9833203701304175412485368480405225262637155639849370527489909821657295035574559858424684689497338574; _weight[1] = 0.00001414938875337667805842756312550972005132023758238594466807507236888151577830837913556555707754238027; _points[2] = 0.9683740118091604909480627251752021631877538352896943636065161160288890490739816800738966445710808703; _weight[2] = 0.00006863667359946888101889453121545292318816146796189038823923159828041558018051222520524730639664121677; _points[3] = 0.9490615100934992658665533661080479770940064242550734057590726835551016985542145903458461174891410266; _weight[3] = 0.0002225184113616753332835954161816580608307938220209914664726703106957494701509062705922833939390795155; _points[4] = 0.9255615822969551781356416726446810501492182917520502742877697614194101962468919439115832052932058982; _weight[4] = 0.0005657189666091238390709933068514304280659458878866494461459971250893209363885838891569990679795923031; _points[5] = 0.8980931407181669215572452752900580046388620566439707644527159091729569427638691092610084112862033889; _weight[5] = 0.001220041621260954623648068103750166494687433751337417055023692920392477150831347375208885934591540607; _points[6] = 0.8669124518396082568693596616154962977199040720951216992805820343587833819211852462891270723734944261; _weight[6] = 0.002333953705311331245464177602173047072288137060715168141773548841446522030992039657050969440578857492; _points[7] = 0.8323105489456515383744404260031629487070666431913964811955248376360356215462432754715923979789363373; _weight[7] = 0.004072567301324925286978191910109165210998809923518336725405684136878371982652710248244288816607680173; _points[8] = 0.7946104527758169326169679366928319864361859757363904011714581588637172599413472813223525772026136789; _weight[8] = 0.006603470707394316985994280362337310811861259335771870656920474608040126953653365813322975171532715797; _points[9] = 0.7541641319977899149388944264594135600637795973965264582163907849633878659064268645380961165020694247; _weight[9] = 0.01007952176991829850305258664289729474571005385425765929827171877545918882642476290287480815922844768; _points[10] = 0.001369365209100103662902538016497745627238368452352123490012738406772631849672261901196138706142526928; _weight[10] = 0.01401206490544436609023237121587349969746045006567761855081695008238920197145638880861484379937998666; _points[11] = 0.7113492068095685558133006667709819451575054362840455447176740142822369749162251926869838973346927698; _weight[11] = 0.01462008082783841976253308183893206231436847698410446515106255101009664107357060645472473645139699297; _points[12] = 0.6665654183773303861601326760614604743638563595328351949371522965073714357445225242299623003309299524; _weight[12] = 0.0202924034506888834074595019625389661145966542394859226818867916101663400848195357909655861316795088; _points[13] = 0.6202308940878964763528673529670363355339785112518597470011666286148975401503787651670787009253429759; _weight[13] = 0.02709500690386953751069178406838636815384967226318121133814435788253336859351359886090392628083630055; _points[14] = 0.007201060193187964367610144103097238265492936079471944871780273309543373182405493269711341122292980795; _weight[14] = 0.03211210056592242810234944055571401839762527500713589024854398810028566527822993288311027606844957208; _points[15] = 0.5727782422577024113870603024175540683472059621151315030913358644137301739485372481202450035572725181; _weight[15] = 0.03494475743428021057568935242276602073648520792237513277063007881830750670821227031289900085144260704; _points[16] = 0.5246505122103465455728183462099190147096086687630914369775031785647986088465765153290482473234440025; _weight[16] = 0.04366919988107116389230886514702208452192610172539603303155281880114132121310772290910736617814420272; _points[17] = 0.01763556469398653294408221167167162733992627300109424080406116588738610893975770523667372303912533056; _weight[17] = 0.04905514352007358740541302270051117036844203516552518776904458507336171955803915816081656601013491224; _points[18] = 0.4762970571775839012599109438642786787910227011918298028869481968383657046401344160723604121339610397; _weight[18] = 0.05300528235407393210593432792415778543059070542062211133149380520643792420434901154289638364872976669; _points[19] = 0.4281693385154156194417410742899825270370966980210852141448274402465912219366930868936595777620858797; _weight[19] = 0.06260514491381266112476446763960717503457148868267332156770556143624906440752520753898794314174248398; _points[20] = 0.03257779777966460886729942692136668100246248118137555022234282287177062321775785540900615891817245201; _weight[20] = 0.06421499003447563667095761947959886068101567810299905758943015986959607413434210190727781793751764501; _points[21] = 0.3807167103369646932919817405792130746606355782010403499486364214947528760107143133850084127060875174; _weight[21] = 0.07204908076371079309214829918846290043710821174646453642360675733877644714506224903242378673973541619; _points[22] = 0.05188853615392920947892793281212631775109602038992669350693691676633220365356651819015841212998281432; _weight[22] = 0.07708465591944440214978664678877579601642420763348919100177459902890693290204556050005832293398972658; _points[23] = 0.3343822238776351252419685447725649719691406591568741892752991492068380593197644708700909207098419998; _weight[23] = 0.08086518702868964921973768964419167020096598662788053379862951223461825278781407685710065195767206447; _points[24] = 0.07538754998514038394719127514008188990831275431228255760504153387312193075577455329791578743446834647; _weight[24] = 0.08727993087125598404851885924736203445983237573749491484102820440464420680359587863705024778690839844; _points[25] = 0.2895984907391475920138782464308026880200802349630140545217731202754357179091084031758311229993710084; _weight[25] = 0.08855464875380005756652072587576624284557300886023695065934716903300558691518263136396252574033032507; _points[26] = 0.10285545867509340672666309459934025824749333553664562240979626482386876152189922577567755172827218; _weight[26] = 0.09455543857311113942533268852024714918001646007576128813201633172025531623575828932114719978313621885; _points[27] = 0.2467836436155710933199228384538418511090271873523499710413024876413592298225490102948311490242624505; _weight[27] = 0.09462109265174807424873122469747347887669228616198273398437836689671301713817820752750902650005237804; _points[28] = 0.2063374321933079647369611133634897836240770185127581624195509150737302861230656791747631614142527725; _weight[28] = 0.09860204997970906763399803849822200678637561736800941509032055186211162575531237866562542497106307103; _points[29] = 0.1340358114983876564339860740140341196816667539203883664849981452786512463510185666317257255430747126; _weight[29] = 0.09881291012170006693456267092177765186618637716012470654782718891302456217838158452385974238915451355; _points[30] = 0.1686374906442098356617268634134017813732783166791782966045346757082471444333592363931357649357351428; _weight[30] = 0.1001003159524530363104180663619783799874178898404524336779305249101130790426842115444418169199692081; break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } // for non-fundamental types: assign numbers as strings template void Jacobi2QuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { // order 0,1 case 0 : case 1 : delivered_order = 1; _points.resize(1); _weight.resize(1); _points[0] = ct("0.25"); _weight[0] = ct("1.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"); break; // order 2,3 case 2 : case 3 : delivered_order = 3; _points.resize(2); _weight.resize(2); _points[0] = ct("0.5441518440112252887999262362955145689146370092883477884571669901861729625759492147562832072252866864"); _weight[0] = ct("0.4031435283193017223334255379639401221900370717228985977618745956006171301133968148879793243017249754"); _points[1] = ct("0.1225148226554413778667404303711520977520296573783188782094996764804937040907174519103834594413799803"); _weight[1] = ct("0.930189805014031610999907795369393211143296261610434735571458737732716203219936518445354009031608358"); break; // order 4,5 case 4 : case 5 : delivered_order = 5; _points.resize(3); _weight.resize(3); _points[0] = ct("0.7050022098884983831223984775840482527404615621673957968187330274666375934719617430536332178860666683"); _weight[0] = ct("0.1198028120343227920459059630233091355547326268137250385594040589278280490932505000994631471190946468"); _points[1] = ct("0.3470037660383518847217635434039484551401490745262501021878985827903559852608331357830049271464466709"); _weight[1] = ct("0.5849850770394640880140480814569575834996833285430405912588393379710804430684155659655248860334828359"); _points[2] = ct("0.07299402407314973215583797901200329211938936330635410099336838974300642126720512116336185496748666083"); _weight[2] = ct("0.6285454442595464532733792888530666142789173779765677035150899364344248411716672672683453001807558508"); break; // order 6,7 case 6 : case 7 : delivered_order = 7; _points.resize(4); _weight.resize(4); _points[0] = ct("0.795851417896772863303377960793240153655111814369133947337218428490843889786355454581170273360860138"); _weight[0] = ct("0.04140896299967226113759062618655673912665921802650887351261598768091744489940921375092075799421354484"); _points[1] = ct("0.5170472951043675023405733693830732661441577674815143184126459202288394285156186604132268185358169055"); _weight[1] = ct("0.2745355486916923012695053801672421777585462337521019227783801195324800153896617288464511839350699153"); _points[2] = ct("0.04850054944699732929706725709898599476427280622804138308697676906809043140700237130756061833546337107"); _weight[2] = ct("0.4435536624451119347329252698757826095062322419475350982016036681051358053754859408526879761621947264"); _points[3] = ct("0.2386007375518623050589814127247005854364576119213103511631588822122262502910235136980422897678595854"); _weight[3] = ct("0.5738351591968568361933120571037518069418956396071874388407335580148000676687764498832734152418551447"); break; // order 8,9 case 8 : case 9 : delivered_order = 9; _points.resize(5); _weight.resize(5); _points[0] = ct("0.8510542129470164181162241874100130578037999355252331298775577412327508226081337242789670271254366003"); _weight[0] = ct("0.0164553008123960318344649664771932761384129705299198594819023493276538663334439422044756555173918885"); _points[1] = ct("0.6343334726308867723471638889206191121277336440958369160307851769971809925102122993798727580295999099"); _weight[1] = ct("0.1282224028918476770189957222265331112459675505313588758170175986042217305503148083830364356533270504"); _points[2] = ct("0.03457893991821509152445742863152659272391875376414497155987987848502413583832078858238836643039194193"); _weight[2] = ct("0.3270591371430836716195229316894094001951854345378653863487891391459565840633676758520507731631799336"); _points[3] = ct("0.3898863870655193282408954103849949929685699479384607713625473160659384788871254703280644555908817828"); _weight[3] = ct("0.3568006448863600007450179722815356404122106902138793907440693610940259530233602522779046002721091408"); _points[4] = ct("0.1734803207716957231045924179861795777093110520096575445025632205524389034895410507640407261570230985"); _weight[4] = ct("0.504795847599645952115331740658661905341556687520309820941554885161475199362846654615865868727325323"); break; // order 10,11 case 10 : case 11 : delivered_order = 11; _points.resize(6); _weight.resize(6); _points[0] = ct("0.8868056161775618663012660060104907510040863218112851455728573015303583622861762166128254348593013689"); _weight[0] = ct("0.007324303227477190931113822360224935405864216618905867216202122367913348061134720321894342299951728867"); _points[1] = ct("0.7156811273117139187676626245936073635482655112817582867648513925864912489801365831589316400094114546"); _weight[1] = ct("0.06288118873978020531140504852007971390788413793492071598436679202370012665529257375196229311689702309"); _points[2] = ct("0.5090364131647520840110399051677197756066865099413616255162800068449833494040551477253328196372325307"); _weight[2] = ct("0.2051582845184648408805173003076769826286071695771531963106651422253387765576255251446619284393054827"); _points[3] = ct("0.02590455509366719275464360699723454895681812392531925015861057429610266045438042891711695398904589615"); _weight[3] = ct("0.2501548109063237515141062258733267440660779616350562328954095848025901035201055026000940757458649068"); _points[4] = ct("0.3024369180228912327499055779185451938801342419623170862494499684632895155693734121375470591583017143"); _weight[4] = ct("0.3783087469941648142731682068802065098680549714701846873490169027817905712014531819167360652747890985"); _points[5] = ct("0.1315639416579851339869108507409737955754378625065300343093793277073462918773067828768175209181356068"); _weight[5] = ct("0.429505998947122530423022729391818447456844876097112633577672789132000407337721829597984628456525117"); break; // order 12,13 case 12 : case 13 : delivered_order = 13; _points.resize(7); _weight.resize(7); _points[0] = ct("0.9111831665630027636393173672090451969487181513569967751421124434536487739752746787009550475957343985"); _weight[0] = ct("0.003570752134756827216036107377022441360104908358539661885927757477239078187959563376287977244479836972"); _points[1] = ct("0.773517246591437501111998996426027488026169366066348465200565244218230399988368494001938326057139926"); _weight[1] = ct("0.03265170252921877802892723627488505435251712336400851214223824298292417299877194662090599291711606812"); _points[2] = ct("0.6000215132789929301939687728899372881025806599131930023285085834549592653990404218944489240088978781"); _weight[2] = ct("0.1176888451581144593629814079400447094617082760975046287638279082701242348479743647408809166847127138"); _points[3] = ct("0.02013277377340050723050168711747234907764398490423277046410233635340207429864852275760640623962261817"); _weight[3] = ct("0.1971060071057524832937165163396190757998916431027808644906762554468035992816828007706400085856980319"); _points[4] = ct("0.4140021445970597464182872488505667767590220835312978380704205456186698145026653746810963941381988064"); _weight[4] = ct("0.2525855148355651908381357619247951567605016016259007795136116178216199124634212453015846804292228417"); _points[5] = ct("0.1030890291480490147522267860059511003289175929398917699266215140490606015002180084249458354155438582"); _weight[5] = ct("0.3627952984507445781478699198894979377596337461185747060555815360747820057455407114922673477814266561"); _points[6] = ct("0.2405541260480575366536991415009998007569481612880393788676693328520290703357844995390090665448625147"); _weight[6] = ct("0.3669352131191810164456663835874689578389760346660241804814700152598403298079827010307664096906772971"); break; // order 14,15 case 14 : case 15 : delivered_order = 15; _points.resize(8); _weight.resize(8); _points[0] = ct("0.9285089649599068972010186178492256918523361943035918234239993038443100956977829527716887186137627323"); _weight[0] = ct("0.001874071136138789023159770129253368619333666877009514163776075880783138331582326154790170679105180906"); _points[1] = ct("0.8157717035832837607547517869758669198734561249520251057926437981546786829099776657599632715409829299"); _weight[1] = ct("0.01789808685205763198302608401313458028471472087364949967388597034873997270243168913625909195923823938"); _points[2] = ct("0.6695522718243614518301145105543719346057236571343379507230403873080542508578187492621559364188985917"); _weight[2] = ct("0.06898745512093993121697462309944726926414242801556028350923661517840760011679153538454549507030134072"); _points[3] = ct("0.01609775955192103353201355009661792907673719717398634906421435485594927605852943376972866088945344409"); _weight[3] = ct("0.159115831226762239320425823705592796269808307236583292588717392773719674740770700496721345833462587"); _points[4] = ct("0.5055970781844891719400618650060764872884489602668891730627538404857596368160581228502258304169030991"); _weight[4] = ct("0.1632577055541760927458463846085917092703302398116046797151312588917290824986672513574976000713409909"); _points[5] = ct("0.3416519914772022202729622621623959437357864175820185645023555961530872229142955610693253060030617732"); _weight[5] = ct("0.2737887336866130889881088024434078279685567928059228224395487281994529345472410304920512689098080725"); _points[6] = ct("0.08290061748565110270036635338038834250469178513978329482769857057078194045432465770034793117405856385"); _weight[6] = ct("0.3072723730688904992180269402731618118770031436482066776403339468731082588061946079180966199553820393"); _points[7] = ct("0.1954751684887399173242666095306123066183752190029232941588497041829344498467684123721199004984344214"); _weight[7] = ct("0.3411390766877550608377649050607439697794440340647965636027033451873926715896541923933717408546950035"); break; // order 16,17 case 16 : case 17 : delivered_order = 17; _points.resize(9); _weight.resize(9); _points[0] = ct("0.9412458642132742114143421271349757145307710728810603227584263072556399818130810425576470087365192321"); _weight[0] = ct("0.001045049386077851771963674594932099904728987905881137936245423011782888065286438712365833246324346971"); _points[1] = ct("0.8474368420132373201731804250196182721512229028198623679712683516725259240759225460110084747448902275"); _weight[1] = ct("0.01029759458243489240932686362241481242050381516644947786284291452404221754858892924302398732118007726"); _points[2] = ct("0.7232685717403354318179601582002055305769054380507989053229094988979833043442432382442417433411755164"); _weight[2] = ct("0.04162446631740894820970534894375261359629703551183251098420143946239913509520566870940318195593343379"); _points[3] = ct("0.5796940563511631262657724133119889515943464601677762686678217724998474141044996039946483039194661255"); _weight[3] = ct("0.1053731236101993429518987840106901998442418069136281392168534644913155857561231942134211646777062514"); _points[4] = ct("0.01316588559711449054519053781797215136082076089770230465987155514510039146923769474012679115743814305"); _weight[4] = ct("0.1310405804441588858472781603370944604810978794735901694842259117976972694085138327178975817670983234"); _points[5] = ct("0.4294536453878127925092480022865873331648138310301004847453416352653628845263290243369473840494158542"); _weight[5] = ct("0.1941625114580260318381122496994582838080221982357833412996720724777967285153688457928679921481932565"); _points[6] = ct("0.0680845295937675874765058569868224421713297601092686688022203256854416426151243571888926792972427821"); _weight[6] = ct("0.261958148133586527127756428815648823072391939069180744506022629993832327961890621152764564116753725"); _points[7] = ct("0.2858910883392203977279895669126411861610178692391895516747553642738332353741698871551056243758169287"); _weight[7] = ct("0.2771375827592188368629111413955671111448010879552790959675288132265547247642744146956024875388283137"); _points[8] = ct("0.1617595167640746420698109123291884182887719048042411253973851893042652216773926057713819903780351905"); _weight[8] = ct("0.3106942766422220163143806819137749290612485831017087160757406643479124562180813880959865405613147766"); break; // order 18,19 case 18 : case 19 : delivered_order = 19; _points.resize(10); _weight.resize(10); _points[0] = ct("0.950874292640523166446349484610325177054138698008876247521880845732145601052447073904101954699264569"); _weight[0] = ct("0.0006129601467886433685130280913870182321267020111436205319486707118462805612131738008391387787268322555"); _points[1] = ct("0.8717100745744084876118613420054236108762703517899922187764993623709234200889090646472972713573702869"); _weight[1] = ct("0.006182092778946314514341307258874506510233203740474247976315870788020555404045823349159258546354102964"); _points[2] = ct("0.7653476795481078962095331272446001935281254701059371299400639154174230207720369856446774138268604502"); _weight[2] = ct("0.02587955627423411691892242624371044143548514233481194134088846643064833839260516482542276239452851382"); _points[3] = ct("0.6396094886547097093285365061669561436997898167778574491235731369280604031123928829202652930591428398"); _weight[3] = ct("0.06879030018621203231655000929591000454971704580551112869775545888215954689422647507462355006505397947"); _points[4] = ct("0.0109684524561741342502810329904322267331336681681923877355192963785056979625337637538110478171937813"); _weight[4] = ct("0.1097363548403899878418065943379411944061396284924080166565554103294093888964177063474961793610317609"); _points[5] = ct("0.5038071264148739070055306420572277096670551499038191289399601781301074701278289240976204997968793742"); _weight[5] = ct("0.1354182600672564641764042852374920057830707307904626801110973942414191156942172243587060817600027027"); _points[6] = ct("0.368007850449337717604769566250171596247982565113976890620368550952044195900000495246411103376721109"); _weight[6] = ct("0.2115351550678566328395393557696844837464895827386582581706740133267465009849730196407481293438002147"); _points[7] = ct("0.05689815053365792071143485937912054793467820298666632147108136436086362854588603274828183051491504926"); _weight[7] = ct("0.225091745611232505129663328610836642061495180030943960685427476047529432641869184478743685148813548"); _points[8] = ct("0.2422811961325235611113945553650933509790917920092800543802211222195903604925019606707436266710657206"); _weight[8] = ct("0.2698088775257512998821031772547641973726038694971785623654789998437662428652904614577889155923326546"); _points[9] = ct("0.1359502340502289542657634293851948978251888305899476260362867729648816564909173618213354134260413652"); _weight[9] = ct("0.2802780308346653363454898212327328392359722478917409167971915727317879309984750999998056323426925601"); break; // order 20,21 case 20 : case 21 : delivered_order = 21; _points.resize(11); _weight.resize(11); _points[0] = ct("0.9583251437866482019244391246661515172975807330371457605995597415964384943234249185759655416699374958"); _weight[0] = ct("0.000375201944039112274110771110315908356687730405206470034411653934686036893473293306588774880319268213"); _points[1] = ct("0.8906910993543921891508128999060838449706283276255334717255508939690538822374778360353169582497335915"); _weight[1] = ct("0.00385208230217295633280149495827083673193151247870147197552704364619028592854368826873460383639665097"); _points[2] = ct("0.7987843585909146419746087280073481414657603642892225070265379669025781304819516320234507849776994695"); _weight[2] = ct("0.01656001705287608941907074982129804342900595679782926547479362297629040174388475144000347871328583658"); _points[3] = ct("0.688324239862956685695533975808089616887768561474068757166363819171422275318388614243984518557290749"); _weight[3] = ct("0.0456583636723904729996850512271237669584876826738233279287055153455876677454530500071081468737087832"); _points[4] = ct("0.009278973831348834202946610301344755180099785584988668019087892028035392237328733017396657895312042244"); _weight[4] = ct("0.09320340020555350966024561740341972459706270009058980336483720700004390524125197996306174927564459171"); _points[5] = ct("0.5662398391545683135675124719348766600394909006313209815451544722188689876257081925222297826462922053"); _weight[5] = ct("0.09435865415522771459726664777523037712224413619385624135202085655621859469783133863488143428243946943"); _points[6] = ct("0.4401983998588624670826813221763196944009306574309261115292338038944935336942601582950581383666207959"); _weight[6] = ct("0.1571608711937424489861433436853150352752777007115971600215818769351715159348001703309820163758798218"); _points[7] = ct("0.048249692094286258286483723731131691367687071501178650576197695398469355275111244782622963767846247"); _weight[7] = ct("0.1949834441226579674578013161123198903391393493913141165710324158456011237446879391336948781555402736"); _points[8] = ct("0.3181179519062339663774464665791396822719791120780551488743875923139814199674731765500037687261335592"); _weight[8] = ct("0.2185288892841797042827148607708304088540070080506917135110024995552378489195340132318724808370494739"); _points[9] = ct("0.1157886266293952259603059182556492085885288892943482283961924853822757749603844675338080199944631066"); _weight[9] = ct("0.2519181720014695773533359952445167095153987763649309891459044750285736696026664998184742228754605857"); _points[10] = ct("0.2076683415970598824438954253005318541962122637198783812084003037910494205451576930868295318153374046"); _weight[10] = ct("0.2567342373990237799701574852246926321540907801747927739535161665097322828812066091979315472275857163"); break; // order 22,23 case 22 : case 23 : delivered_order = 23; _points.resize(12); _weight.resize(12); _points[0] = ct("0.9642065352926715512129553062783893235051470791627773576749579921411683197960515088339540982065266612"); _weight[0] = ct("0.0002382014392332466553295292468100035402588379323819602604826503406568381379009877933689507069923317518"); _points[1] = ct("0.9057950735445437268017964703997392322761079119953073066163678713751459636010637378082399631441249729"); _weight[1] = ct("0.002479813594178077693466924685437339297957267049610856766740237535355291735573310962968151138526176774"); _points[2] = ct("0.8257185142147869017640833629537027093736435575778818152064773066577478052593968978372571869786865626"); _weight[2] = ct("0.01088336857641535741816614466540524551935021467910130060680909665551588747958855091474710790206617211"); _points[3] = ct("0.7282464529530726864288803300611436952397911534452751751134554512822045797431115007040988123166108503"); _weight[3] = ct("0.03086546809554570647515094649861202512818448992619175640122761773789205214076726685224260000604713766"); _points[4] = ct("0.618623863458456046293548861891138148294720180209701783497547364656844356405705986332563927357603768"); _weight[4] = ct("0.06618937457843764840554885416015182450294519306581249015227764712822431773609940807764767959301801296"); _points[5] = ct("0.00795204570263843687621909334004042303258789157901845111211954077607260954906099644364827702074452761"); _weight[5] = ct("0.08012445033899501177523089686688632200915300524216047110927662984377082923088939924661277616536887942"); _points[6] = ct("0.5027573604490322032793092784391183027172079885763226380243920422697606141569862957949651716180958326"); _weight[6] = ct("0.1156322073549094419776139687208225491632847535363357613046929611804166587438361502417881862465344624"); _points[7] = ct("0.04142781045429459079077016519479508238169039978959055353403669646892966829653108165370954342425005537"); _weight[7] = ct("0.1702264614696225510918739636030398201621484344112814996354913309233794603455227611295265426262321147"); _points[8] = ct("0.3868920099976897916656347038054368617573779726132266856600842411622840190011408572046787141187486327"); _weight[8] = ct("0.171059054280755609269063747143514548405033082766416787099850451303096574198806692484217307152058153"); _points[9] = ct("0.2772734577993151198175389183105218031690793465049448069023914667625432657455874204304984154028694716"); _weight[9] = ct("0.2182957646569263313022348391211610218077554917110947715591671593278409360063080187628820023513092495"); _points[10] = ct("0.09975762554261415706608170348029973993914665962085252482832659967377232598679917985998074692048546311"); _weight[10] = ct("0.2263367389978962785859121446178675121101775526351403133866313748357859288961118901399429789565430877"); _points[11] = ct("0.1798107890524232495416433443072131398519613973866393633683049652350649339970260755579436050297147405"); _weight[11] = ct("0.2410024299504180726837413740036251216870850103778053650506861765213985586819288967273890504882725107"); break; // order 24,25 case 24 : case 25 : delivered_order = 25; _points.resize(13); _weight.resize(13); _points[0] = ct("0.9689288942285889621118118173027414862466810321685627399195946722689891537382806172804214947762563879"); _weight[0] = ct("0.0001560679730565849110018877622564030522971963926107455394995589020798212499287723463265570237517657826"); _points[1] = ct("0.9179996455372066795336259702883514644585607264667402765509172640216951031101831301991193963406574736"); _weight[1] = ct("0.001642883567163541667137135579634586264318797523514426083342476902975498845674881247797284810378208794"); _points[2] = ct("0.8476910439472323909103140489514170370916151645340936646068779732870007405006591332706754097819751753"); _weight[2] = ct("0.007329564556957514349394257676697856873834127393279604943260422811450298594922588905052267132904176197"); _points[3] = ct("0.761249766308276972276659526393430789096233559591680956812385294673641776520411182465771879851800669"); _weight[3] = ct("0.0212542773553305537922236577273894920266795630618925270008614094028470673633842799803854792283483557"); _points[4] = ct("0.6627093135603885423214631521232583899762109853102761874503785215844447164251275965254928056783280667"); _weight[4] = ct("0.04691303837240752265188152459747705248625923503706344789441878308197981725976028730594650682213315277"); _points[5] = ct("0.006890831309958731396681534153406989161031292429588421666464684973903589904229316285895671436921466539"); _weight[5] = ct("0.06960491444024738195232456693410433617039772704751655810891567455689639937541737691245714318024412803"); _points[6] = ct("0.556674622629455010696946642362080582274005790127050520864708239847742359838170526149629812384999097"); _weight[6] = ct("0.08501998685902645212445243555463312092509357047145464604938440147163681074074875244898739601239204062"); _points[7] = ct("0.448102638905709853628734308793979708730769418234673142154600177113914833602501069027983838668057836"); _weight[7] = ct("0.1317618067137311603345937815895239661737637824034451034501350134739730493893049812226124269295047473"); _points[8] = ct("0.0359533627001700955011328119695205132217760105545034090502050160774587979100248003869028934390782858"); _weight[8] = ct("0.149706832675376159814665192745896090274423343707367752518259997752083720102762657728173384760833919"); _points[9] = ct("0.3420695126460753234745079965662670426694598946354515144515707529248230901101547245184760072145509804"); _weight[9] = ct("0.1784984030224598177222653499089708881761495368969374648507406094628872556990281953015547320237188519"); _points[10] = ct("0.08681178015758543328428030769060128035868046724108182524481800707505654573671895497355362141572101772"); _weight[10] = ct("0.2036393228507800763716273887505590308873494434785424621492199411922564371066863588578324885550135641"); _points[11] = ct("0.2435328995871284444190341035677509233546420884568021588363910256954815690060216467377269714945612026"); _weight[11] = ct("0.2133600864234869829016066656915215457043166425583673690879063724648569706987753465045737718877610556"); _points[12] = ct("0.1570999741965092747305220655514795076460478559637808966768026561701334378832315878926359118028066273"); _weight[12] = ct("0.2244461485233095847401594888146689643184503673613412256573886718574101869069388545716338949684001378"); break; // order 26,27 case 26 : case 27 : delivered_order = 27; _points.resize(14); _weight.resize(14); _points[0] = ct("0.972777120741183230452963363167272376141832232066661615502209934421620349446232535307554709008591307"); _weight[0] = ct("0.0001051046466755994190066812166292344685646859351848575804945921359672835410758237589818594844183713655"); _points[1] = ct("0.9279957387467523249837781220393962330973069328106674535182517668455918785733163177668632107772943337"); _weight[1] = ct("0.001116397363787513880357822426330897791338165514714505129793583213369776447193493631912488567194436826"); _points[2] = ct("0.8658249007315969536711408351810170671281166559680840985364216536761121893264203663610169524834368559"); _weight[2] = ct("0.005047135580629952165313333678903904301766740735495618421679475165368531852851525344466712644979621146"); _points[3] = ct("0.788774238434560715340304885598911781259911841674992787459123085551496025352674899149699384244556166"); _weight[3] = ct("0.01489950270113143528621524991386061259196283121337933421213015237018974938111932684980666809215126327"); _points[4] = ct("0.6999909171699064974107366639384890954484520793287566604677488395049079890581595895812516182137613225"); _weight[4] = ct("0.03365190694854584883843086111142799005260169355843994956162857554818205354238736452087127825321312291"); _points[5] = ct("0.006028808871066648170088747712159971400916567403381750549695222043202403723743444571483478785282597294"); _weight[5] = ct("0.06102082447779318149404536788951199265358380400157561994830938903862191015641396072434298492746016295"); _points[6] = ct("0.6031073967275967836818955665403615514497986107892801003779313726143183351054969157643569313893089786"); _weight[6] = ct("0.06277732914029182873972173919394741932291208929247041454114182049684592982407685936803284668904118036"); _points[7] = ct("0.5020891397499784100693253980496002910686100916885675007465829924443020109731422291660366333167504029"); _weight[7] = ct("0.100864734147356220137224880808875104302052192464766848649639628532366084837666605920237506855583525"); _points[8] = ct("0.03149425981865759070730671276631670807205021271980635578223819813728679761179934797609978862835346418"); _weight[8] = ct("0.1325583818798422395037209033460692313542102941236965236002400055105646280610200698756731543890029501"); _points[9] = ct("0.4010713786971543575811860320519884685924384191572501525138619910884257329369228617255111752487734427"); _weight[9] = ct("0.1429560411700584519366501032413827809654950517490789640352810210845232863752618039772883247583044508"); _points[10] = ct("0.3041895281416563096323663549044031022663432275568421834000345432977346183474641407178311135015966833"); _weight[10] = ct("0.181013729017843525860489494264088046051451408765004892376855696951718958925979135336553761794343072"); _points[11] = ct("0.07621362247485386758640678634002269316243941065388009043581495037460591816702556531771748717780648104"); _weight[11] = ct("0.1836590884586847156456151997787713864338837649250093240214366377932523271705213409778289378534453448"); _points[12] = ct("0.2154097570688955749006955320851489135121375905412025496653310142236265218036971673059371903435771384"); _weight[12] = ct("0.2055596961578860130952322610656504885177771188630820243106415066192827887029009016919044018841550359"); _points[13] = ct("0.13836652595947406914513833295824508073297946097396003437808776911010256290723795262197366021424416"); _weight[13] = ct("0.2081034616428068073313094353978842445257334921914344569440612488730800245148651213554324071384231894"); break; // order 28,29 case 28 : case 29 : delivered_order = 29; _points.resize(15); _weight.resize(15); _points[0] = ct("0.9759538743350237095620038412791153907886111958465214282812663898287649311216709075768610974652202589"); _weight[0] = ct("0.00007251514227803490388636640769623041371922231503159275050960701128191249448264412063567318483535691285"); _points[1] = ct("0.9362818217355187421025193722871475594082635803646883892837426450201379107391391453318432405302555511"); _weight[1] = ct("0.0007759490522557821973605351452471324906775817329617622870809982729562547897699646378604645579100034014"); _points[2] = ct("0.8809495287153136023880805549365229247192257620249850286280431657774932073581341528362053919854452732"); _weight[2] = ct("0.003546294540936386695929109813840513953405630969412226155615325774569207011586893659157938322767788821"); _points[3] = ct("0.811925477275009666689693121201954242771620008829733004296824074056702209005600015576730552774306681"); _weight[3] = ct("0.01062265194309727672451284568453333373257143901288406177087267655658817988164428587123611239563582801"); _points[4] = ct("0.7316979730525232062993394846752112991776703416144255053301405080726071072308400265108448666008619891"); _weight[4] = ct("0.02444420044082419616486125716889612243023339647683950965594801711901059340309718047264869243476431921"); _points[5] = ct("0.6431646017687849385394940088418749344687178001026537323433816746667626232189289933810809550840731543"); _weight[5] = ct("0.04667432993910655425413732479156533084522800284809613605669453781660467725115778296456898579690543322"); _points[6] = ct("0.005319052002843740590997840273977394950171778649845101239090388582865436842261195140802135539827222464"); _weight[6] = ct("0.05392665090053721636106293416964196355047711087332304374347740716255549922473738865652698714578246672"); _points[7] = ct("0.5495243555935513136546896219603138697609059893623113297331642759135899174924012857390026360474762955"); _weight[7] = ct("0.07717366634109808194395315371897661481697794303982356504901090232725807785964281183615873931332253627"); _points[8] = ct("0.454161235754477099160096249961882970440028290412084992137967720315620010546080107378450741085561459"); _weight[8] = ct("0.1133062126969649905762758964950627527929647767293146529704816117151296007557005216726923669605708807"); _points[9] = ct("0.02781456191826005157198070923807354759531829239720000300594134265113548577494995954028054810204631919"); _weight[9] = ct("0.1181106030271928203575530674800549317555657907909469016820334832959564842606168165865226255761452183"); _points[10] = ct("0.360521693587057648157784440778396533845073304851300600175139415981041719351211561421203525213788629"); _weight[10] = ct("0.1498955031684052123812771871602716067084415379038225419304375844804254640021209627209252643892922648"); _points[11] = ct("0.06743186583899861338456857757181849448994028471133539011140154174279356463786171047590124871058861619"); _weight[11] = ct("0.1661252306064170614951978271811555413440569614651595199924632464948276552123825945778602473840727527"); _points[12] = ct("0.2719899659294862030563380079302590480247942543957991004491026215444180175182375256505110567396822931"); _weight[12] = ct("0.1799662232824637334629206112030205761825115733710491636849576725169740218336869361061489424124481296"); _points[13] = ct("0.1227482862154978393395873240130317032151265317293409309723332247616160353114996846526951659728971574"); _weight[13] = ct("0.1925282306741192635536195068795429148549620175078239732019144990499724648233740495658097375472587461"); _points[14] = ct("0.1917657062776536255028268450504200863445325847077754640124610110844518238511837287875868381479691005"); _weight[14] = ct("0.1961650715776367222607857100338277674615403482968446824018357637392232405293324998845805559263136167"); break; // order 30,31 case 30 : case 31 : delivered_order = 31; _points.resize(16); _weight.resize(16); _points[0] = ct("0.9786064374986970125728009137812822496042690312088548040286436320973606732995221437659921341073019234"); _weight[0] = ct("0.00005111364227877400497664824914822312187523131871077788171487966030019098788805718497028848685167938348"); _points[1] = ct("0.9432242857122455935254506623929578257508869485688987484186741352804265152613888933335080761298126981"); _weight[1] = ct("0.0005503124159022070098783811162627949675055432854454242381238069353356523893162308519719894537983138428"); _points[2] = ct("0.8936859745488040188148696987681606327646834274095997914162494394444252336597543340153733132728571942"); _weight[2] = ct("0.00253783999827534747204339587398565531121845521667075873722207114552047240564197912364057170241739288"); _points[3] = ct("0.8315558830264619518892063548240608922762470054306231569778660096958033620199460946608882490135090267"); _weight[3] = ct("0.007694127704267096909529759414250766143904775295057170663912123460022589036462078267439682969987203195"); _points[4] = ct("0.7588252579491414133542794053511356108796435680365038583957695605622632533727925268078632201504708403"); _weight[4] = ct("0.01797939540591943553282655904326541648736843405213664835704382086461644807389169392510655535237023706"); _points[5] = ct("0.6778299174145608113025127726414777500320971717496155010727267379426891048458460258015622127620921854"); _weight[5] = ct("0.03499018198244827989832060255651272931793234290752719755245012805681995519918979378047157992202798509"); _points[6] = ct("0.004727687122934592206150610445064477185987713349095208078315620471990461862622014098091988804943732811"); _weight[6] = ct("0.04799762249876787834602678161657048141079099237527991579241094505115520768176249489883380358692632167"); _points[7] = ct("0.5911723853165030889707605187763419229680436878682765211186872551925076536578972852139357400884025256"); _weight[7] = ct("0.05921510663100695336095700399081714160082916113233465165244891577971830694111417358117886339758554005"); _points[8] = ct("0.5016375561531875937001304323508376116775809382887043798099322048009739763486344428459428277727638743"); _weight[8] = ct("0.08942874259811972089333893705457462540747878902452832779327225337155148601273155358526763706035859378"); _points[9] = ct("0.02474296761943498451260345626953567205761528650626344100702897707414062868822532862058633802247189094"); _weight[9] = ct("0.1058433700693581081617490582582260489397739540049851972587515247508128778921240398581401705139086582"); _points[10] = ct("0.4121029641168595969172842136225134716264638462851170381104799491302816048435587877644761732164741742"); _weight[10] = ct("0.1224481516713504381677953376318549301968971738616216687469062423535307787680712176524375047323900127"); _points[11] = ct("0.06007643771663799227524225532811249949040794230939448604178028132546709554288543218317352848544150918"); _weight[11] = ct("0.150743298727674291333260325777243530241463714895605434027434973309301093690716384177669881743882149"); _points[12] = ct("0.3254462100241296148268368519018063901298314159028243246203929830145913417696717843549623084103386732"); _weight[12] = ct("0.1533921878047438226943307636411683225532230366129434468301308130372556609842068604135406661181292303"); _points[13] = ct("0.244452431744511377302076561602752031033579055361062019964516938437829086971547471305886973271011502"); _weight[13] = ct("0.1764506307035974844556454963572807953528221877075630527904162026163913063727413866339740371354372271"); _points[14] = ct("0.1096006092587706028678975846195003827709889318416547509152886361080137785970255407503143033719803205"); _weight[14] = ct("0.1779862938901728599046041983508410784211710356810272044473323158434144748195799575920162751395462319"); _points[15] = ct("0.1717247594830021079030741779126958738693210887070413817883535217741774057292701297715602601789514587"); _weight[15] = ct("0.1860249575894506351880500844013307938590785059618964565637623170975868320778954318066738261222629478"); break; // order 32,33 case 32 : case 33 : delivered_order = 33; _points.resize(17); _weight.resize(17); _points[0] = ct("0.9808438938474125636766637209275972068403939450087260749208889199283197846333843968554117528460090215"); _weight[0] = ct("0.00003672321680050201588893508809125700046531141997623090861092178661431081419170841266491721846696051565"); _points[1] = ct("0.9490970165965445702465476283565708297246607755586873532653724677803087032874699499858701150851049691"); _weight[1] = ct("0.0003974261013418958398496273404764511239692337872082450246160077318175409175170546288895012284106365673"); _points[2] = ct("0.9045054233143287003790610093283550812376120574920944369394302938533880974366435920451390516090983422"); _weight[2] = ct("0.001846696235108452323081740268246607255059909970851485069280721260167157397850582769904163871861571394"); _points[3] = ct("0.8483270857099506075790635313717878056529164545129232857765525221759979278054482949739136814535756339"); _weight[3] = ct("0.005655535035824528926649613561049219086512768112197461770524280675540737290522504605487405853423758352"); _points[4] = ct("0.7821731030812211281011385401557176313519720275190703032263911897342087238744392146926368605116439999"); _weight[4] = ct("0.01338606916727926148618970164658395028370018090423553621907901080091060043469655162093802538030485222"); _points[5] = ct("0.707945001385085567943622426073089923213717087524592918375047496075645698517876359910689968651062034"); _weight[5] = ct("0.02646567904144685891462284647978091273368422635641062894104746521612846499613282277673498551270934374"); _points[6] = ct("0.004229765486490767874991987781300685340308435773431352185301973416816197017575857315649567725783395143"); _weight[6] = ct("0.0429926041230744866513362488197449940557411715901469062889684425716121073405792471713585540944974964"); _points[7] = ct("0.6277775385468142725656053809477606660481926914076750686903817659859352892916227568745400677875818882"); _weight[7] = ct("0.04565456895454675099029361310226524142448988405389158412248073822256735245132154460401903761295545258"); _points[8] = ct("0.5439766780904757097451521743554710584231978091980306940950977666498348773038378260887674018571215284"); _weight[8] = ct("0.07055515732420044207392583546335768383670146789242918934183781450503912339593438180917722727222643093"); _points[9] = ct("0.02215270531183023229420900210157300154854505840882207694347863994881565153556420004262394660019368648"); _weight[9] = ct("0.09535104807481297848202429866106118257566228137557417660332400853161662680302761699773305885383429565"); _points[10] = ct("0.4589530533530190808593345147437514652455985649810014296771181666727254937874683576150552189676820445"); _weight[10] = ct("0.09931702444790433120952426058302138873908984792726837791724440362064021175262692440686069358710680237"); _points[11] = ct("0.3751525416408178820083477139222646171835998951809981629079410853435870113997403594064257319049096888"); _weight[11] = ct("0.1286542804495145568686598485110360146860251475979356089399894897424306248964305507294249894650268248"); _points[12] = ct("0.05385601482718482956676032201364452390207889406802519433016964589948411947150472054630517663168267146"); _weight[12] = ct("0.1372315591826875201137474777560073360546853485740573862533356511173364265079156697526661117060022962"); _points[13] = ct("0.2949858662980234886510059849705601329210424075903350147902591485628362645969755211291710565803372332"); _weight[13] = ct("0.1542209677884094145128943284286812925327302523010098402991289260221514316057089544615700030218449205"); _points[14] = ct("0.09843493683054136249424692423709782639488974724295841277288648647004523568418618804137473135772561813"); _weight[14] = ct("0.1645759033882728284844431118628830743614989413169168358659006260722663488738016626358120054114977563"); _points[15] = ct("0.2207592251921513839136378776833585067846629363530123208654012539977418973898636052213362063366054326"); _weight[15] = ct("0.171301615711738213205756533380504272892453453514380537158994786696403130130385394099728124635078177"); _points[16] = ct("0.1546079282658856298783890388078768159643889899573936780160589552820868047441765770328672418716605903"); _weight[16] = ct("0.1756904750903703112344453123805424546908639066388433026089700387600911377246901618503645283631366504"); break; // order 34,35 case 34 : case 35 : delivered_order = 35; _points.resize(18); _weight.resize(18); _points[0] = ct("0.982748407594286960633073899546303045149028562784532859367422241743337841463798829462474307855455184"); _weight[0] = ct("0.00002684034449817248636307890670990759607627648491468895416588504339235192716316452092184439475732072083"); _points[1] = ct("0.9541078955173166588189030938461288380596566681165619454485636499417392056850149493349451358778683482"); _weight[1] = ct("0.0002917480346564748213126518173258607508890442325216746931561102953965933068483693177921983263851560636"); _points[2] = ct("0.913769864110792936166123189791591200842146787728630171609250287891749264970030467465031991732660097"); _weight[2] = ct("0.001364364814750619931583941001892832710526596444814880095801559791422327117557391969710365759943918772"); _points[3] = ct("0.8627567207000550133608166202160961738680665986694630756476656758603077150109726400447325844934459061"); _weight[3] = ct("0.004214201135828769484963761390752045700215974350846961473780225330124447098246374619584268057948317043"); _points[4] = ct("0.8023851498364174702066737905851700573574353078541166033802958270590653479162625703154687749291640617"); _weight[4] = ct("0.01008288655374502320909828094580508673228285324540546402052877073095600352583258281978552537379255498"); _points[5] = ct("0.7342173081350132503192173614025312330653864334982702635244595308063572372883774041853861365278221063"); _weight[5] = ct("0.02020099515341872526673649424020333062100969085759988997176723342299630382322198514555179632843105095"); _points[6] = ct("0.6600181272253155465521234027038088059575554457571711316782527733933985664095417196979606497396358233"); _weight[6] = ct("0.03540911290037990977420098813904969531272785240516766309095652038688854805794084594012390191614815156"); _points[7] = ct("0.003806582247501876383648534354890812883653084218143725055850915751286505483558068230455044287128636871"); _weight[7] = ct("0.03872959521506409270998592307661178898880126487708449836871701251355028383578477016496915438790270965"); _points[8] = ct("0.5817090526709179282288375852933077443864571121132991743769987023431980248853066657774790851887703593"); _weight[8] = ct("0.05577559061459162570281412768389355996651397767708828589498056037792211480330590031535721170146035938"); _points[9] = ct("0.5013181027502735883646759853790557548582408474545762758344248448850577878823309680705395605759116039"); _weight[9] = ct("0.08031456678547888071777527613084748403550086714243964330239128562327769673230247753017547024436125657"); _points[10] = ct("0.01994835104734301866630127355057796010747457504422512741431541670739879638700930791801503643734067254"); _weight[10] = ct("0.08631509071677530810863100163952706294278370989850041392675520998322403679573746872013264641728964926"); _points[11] = ct("0.4209272758703179558039109560839247557191088306211527841459293605637953895210495784407565029266997559"); _weight[11] = ct("0.1068936974758404779443918912465824233672883504398824139817461678734416233217909028738142876058300019"); _points[12] = ct("0.04854964530422463096552581822459659415208810269879122661467419186763858390450800500055006660727244013"); _weight[12] = ct("0.1253356306869180533118015916525710771304275652121960162491546992025945693808868351192974349323507061"); _points[13] = ct("0.3426185978020083004514048444648040212380882146133496205314099376215388144800483221755275703026317421"); _weight[13] = ct("0.1323839048082899911826910765424937040163915594177335399366773159697079625785760931901186843037828332"); _points[14] = ct("0.08887625911649738804818139219495746882989597915475128356802041517986238494141608853322148611303921851"); _weight[14] = ct("0.1523005370137907506618312924014636112216561687461645368895555297544914491320199297299184081013271168"); _points[15] = ct("0.2684201827866020844201471280361786628127359425869124458724958784949980847348751285744762131603672814"); _weight[15] = ct("0.1530511786893971990313986250253572460871774396855398171527438104801138575696244796632962408451428573"); _points[16] = ct("0.2002536959236303382067125585321085063433107257362303407043370644457116850092167808120166500781902619"); _weight[16] = ct("0.1651346632398309976571473150915354252515252272981002584619642650179028278177299248154542524099377471"); _points[17] = ct("0.1398845708351692649300383552676525748959865708235061557519490749172429745529982954346474136929122904"); _weight[17] = ct("0.1655087291500782613306060164007111909015389149173326868684911715359303365087638368773296390165836235"); break; // order 36,37 case 36 : case 37 : delivered_order = 37; _points.resize(19); _weight.resize(19); _points[0] = ct("0.9843828065517020106761276174556909144026325831604026447615399145866983347355888758046066379113914637"); _weight[0] = ct("0.00001992280932787647270670068121504406904050878009796350082427834039239683808319955860954897199570269474"); _points[1] = ct("0.9584169024234071451034779092669423904741880674092767651904315631184608661010553708352299289446592984"); _weight[1] = ct("0.0002173705725280176670944890960502804423166204597532801450098392340276614206659788761434319343756988316"); _points[2] = ct("0.9217606817291400488993742163227374545276684154855298882918293363660999418596388711657739790912190745"); _weight[2] = ct("0.001022123435563885025902206640552076666567191786422602535420698723807095034807642183511143694636939209"); _points[3] = ct("0.8752531629838266800659489088760858408079696488715943336759069360574915944199538127854460103635272211"); _weight[3] = ct("0.003180177301794237493019314012687144031688576745974063615856410069920493919217044916534773054139522466"); _points[4] = ct("0.8199803570632373353795400684102916116941435268852334780207569085081760303785333606287354427331798866"); _weight[4] = ct("0.007679153890769252819349084362266762034680794496687220780226080890557707688737671772550611046414520838"); _points[5] = ct("0.7572365191732979354973693279466696491303870879952976126011813160845715548094948766085611653832161417"); _weight[5] = ct("0.01555913925021236084119398351318324635350878964483833382275711925200825311327878919159166803224050802"); _points[6] = ct("0.6884917909140949891898655120380168800849788729479226796014048212433893444546592668647864865663296238"); _weight[6] = ct("0.02764324431172879278940581658661853456999576463765561596565228984548554485346431017256946431651819152"); _points[7] = ct("0.00344389040386249028069405093317222181182377640029914128584811126158447282426935788168626248683411491"); _weight[7] = ct("0.03506918822751692946455730452233595458916116289923823285432079838303497328566987932630680788077123048"); _points[8] = ct("0.6153572448045471654669401635833708805050867627458286076001673229030120048708698995373393775522832916"); _weight[8] = ct("0.04424576251614803158884713918509202323760369304517733604518806841090123069603439631756455979147352893"); _points[9] = ct("0.5395469627920880876694306633299818817017043399462428376541362226335526976593984274704483496113346924"); _weight[9] = ct("0.06492726128798530252071044988969133477365566175334068106698994747182582468433303021020195666737121263"); _points[10] = ct("0.01805697833790056286303009395434268665894880733591034692641015267785535091595126090806803068847434545"); _weight[10] = ct("0.07848342536092973805160513510880688200259433707189886999155358202518740624336539197330534394096169371"); _points[11] = ct("0.4628377985520202782022048705469377514873721078497890685487969094434993704576336247176078079949870379"); _weight[11] = ct("0.08836225259929596186133469102150733448918159724655286754038526721794532427584912859912903335150515709"); _points[12] = ct("0.3870277027693322034154529075168274250441355570183945919149496613274873431354056703498844308990953007"); _weight[12] = ct("0.1123664317444116305965655143169402510025365271744523979648159561101015872421911323846125879396222849"); _points[13] = ct("0.04398739509084273445519883277365948261943201401533755288465140272078804107508383052868780286880037334"); _weight[13] = ct("0.1148325991148163444911640277657323543047270823476765245035320839854858063568929732605305651848156571"); _points[14] = ct("0.3138935674182182241524085986530725421833888559124072140832271736633880973343121552225350975792017752"); _weight[14] = ct("0.134100272282441135843622802269838878514535106695959606198030755727139751181154620361343864744773243"); _points[15] = ct("0.08063327636666141546972177666301584599572774478496515259512648347202733971049631258972859243872553855"); _weight[15] = ct("0.1411124687979040017383983383889387833636924536378786579842406801114338206400330468092921847805161686"); _points[16] = ct("0.2451495690951685705524921770182137890794445582375331816751643930651784772617999016157149898754773397"); _weight[16] = ct("0.1504300020813901758036486944453268769096163950084233519532702102196909305554659060185430103650449769"); _points[17] = ct("0.1271364098615602695300253508396918022790446090548847239057383641397465202768706860278890106271755421"); _weight[17] = ct("0.1556895448890469502039433952460571175059219100966614582090178761629870656252840687807066371333142135"); _points[18] = ct("0.1824069836690918531306969538712789495119226639431501787827330067269926177189844384572705963840879384"); _weight[18] = ct("0.1583929928595227080602642462804924544723091598046442686562413911514004596788051226202861652655253789"); break; // order 38,39 case 38 : case 39 : delivered_order = 39; _points.resize(20); _weight.resize(20); _points[0] = ct("0.9857957888406418466800231313592152785604899067877207377306395965180365635041144860468676436334983574"); _weight[0] = ct("0.00001499688397334853909009654734905514945521257651242233497492603278336052697351239051006226204854156653"); _points[1] = ct("0.9621487121504981897091608064229207407940341288068742181995487210154653226478330645824175987235472225"); _weight[1] = ct("0.0001641564083492808221962961635922449664007417807376345432948175005715964939937779190026714134500071776"); _points[2] = ct("0.9286990149187505453450978371672693948888756101758623893390553359882107838318818368546819590506483564"); _weight[2] = ct("0.0007755532384700472430793540610379271893135838353708382828748805776320956014381700141548785598395884206"); _points[3] = ct("0.8861413029145471436872829303649495040166030756579052437556327864000033121939155088226394817590025748"); _weight[3] = ct("0.002428182817069033016610894924350833114680897738357536155240424761102475327226118558922110562054613683"); _points[4] = ct("0.835378914631561725171518394713412658084401759968059337516039711093759997511552876897585105888108726"); _weight[4] = ct("0.005909777767885943225135430582621307955547100153876209416844747358074494910134249252257133135713181473"); _points[5] = ct("0.7774925920354867535511259458365767833501645594282318185786818344152523063340596941838540072199020297"); _weight[5] = ct("0.01208995668362951749967394391224448828054059207291389348694724435189801244587869887557864332435867969"); _points[6] = ct("0.7137156110152876807420834353539261845083764977327116606392342641138367359145141329606212643884043524"); _weight[6] = ct("0.02172836322449210980004804457059473249949021836957893650421253545420376191894281707541313281395790445"); _points[7] = ct("0.003130683740743589562150141749546251006558087897339829841211539349738274314866496852982779908203455384"); _weight[7] = ct("0.03190317094510660674090924062970198411577078121671833534897277070677203833980338615982239630856403199"); _points[8] = ct("0.6454070457773675666173208347639696868480924890494238974440167033076937496843430736866993320402326217"); _weight[8] = ct("0.03525422431297342131570109267190665101713924409722248740423389077510379965048840746566703817840967523"); _points[9] = ct("0.5740226581828268717275121966537067538016418929949592700206557877680052279117492170391822933202016281"); _weight[9] = ct("0.05256367702664660696843253488312400143294584902673080355015772217448264100685386833519746415036752641"); _points[10] = ct("0.01642208813398783290254161425625752298093599837033552370593506952105049398340715992554357459620698864"); _weight[10] = ct("0.07165500930295423640709583546529029927063232240443669945496644251219376217691519736672476809671709037"); _points[11] = ct("0.5010838154828485513706246541369263270496076238639477776074661526726511056457717245333351712537248934"); _weight[11] = ct("0.07288201367307476620737326123903540949531459313127703706325526164891890426846954818738827733176229809"); _points[12] = ct("0.4281450409332566846154250347724519581718006946562795606850444879460088034322223621075385140190445604"); _weight[12] = ct("0.09472916165698421592346580106597904566789390110319129543362928719528014089962861825723013260548530379"); _points[13] = ct("0.04003690046190678099632014982879280251919218202100623418922253900409985734318539080916720634178996678"); _weight[13] = ct("0.1055302577165023391780536338961832585932656024160937632538479770610925703787292264148375828435711154"); _points[14] = ct("0.3567608701024531056470550666332594421879937365627218234316645015120881052816834839729303782691229973"); _weight[14] = ct("0.1160096189823571406796654290456113281805357426540610444070368909950710161534150063798066831796666365"); _points[15] = ct("0.07347719178528528305756654528587446712162956746829331567597923056648385302094819196497247815553334907"); _weight[15] = ct("0.1309385772702925921899186259959536648124379399531342254695653323236852472377607884882919968014591912"); _points[16] = ct("0.2884527121812723847719407066523953852068123046578582394812568730574474727765765420104187934722455199"); _weight[16] = ct("0.134225725813901973916010859290956315174257925122368934739958261965474015514859603925292839755104494"); _points[17] = ct("0.1160309076554868049466974315674778539277330768012538553063813735353261223084763159059242881112717542"); _weight[17] = ct("0.1463516662129082599464371823076988796401775386811170193209364125128477705820631778004347152301799095"); _points[18] = ct("0.2246764193843050384093819648321044864540754911683337333822542507266562834493851020811842664368541631"); _weight[18] = ct("0.1467896818880725308530169982826116192006045612648753091087111859984896015533920748162929571735174518"); _points[19] = ct("0.1667912534810094300129807014584903280447908397404053429938887652977094384333228625709776729362660067"); _weight[19] = ct("0.1513895615076893628614187777974902875769289857347589080536723214276560283463670856505077453685905939"); break; // order 40,41 case 40 : case 41 : delivered_order = 41; _points.resize(21); _weight.resize(21); _points[0] = ct("0.9870255665787578365469005516471821103487323205471391754376943598319864464211860106934058825645258605"); _weight[0] = ct("0.00001143393418724068380170413895308611060849814044915809164226820001407628104622909351779375362862754133"); _points[1] = ct("0.9654016073657424580929490790442942557127428617746879386553787549823009422401519559419539901187908714"); _weight[1] = ct("0.0001255089335871709281118126890978511883410232408935299359481594966361344340514817928666164963461870615"); _points[2] = ct("0.9347604364012299479827942935966019857975433066835579885667315868005288394577841513140255125926971028"); _weight[2] = ct("0.0005953999959462022743715146028300385175077092750037786268248278976636240495566479815754772134557262851"); _points[3] = ct("0.8956817429254667605282025742976504630403884116278020040145896760872923029903183803945118949524779672"); _weight[3] = ct("0.001874294450135896801731784503573779401671276969326976735014995475320855077785022212257014129577865045"); _points[4] = ct("0.8489227735376888398440174689512629925240544749893709330516913793468738663135396111526364874935057414"); _weight[4] = ct("0.004592965682865899309081525926914390207513681471407921864480309470237783124356199535498939949623202478"); _points[5] = ct("0.7953925737461314623249865033277437002775654540111543847783430994750663228409525643598837266227268953"); _weight[5] = ct("0.009474486138446127589636908414029505700709517833191754141564237314203429084320420413231363560359878364"); _points[6] = ct("0.736132620597287348464102976702205297915724058040746277165260616804853384913595025246627455052229207"); _weight[6] = ct("0.01719724025685366088414548084037341187485771394568726343623778138278751292702859398535198066378906091"); _points[7] = ct("0.6722961409869296162899704994812126870277260383783201960320999269060656781743057964570096111577941914"); _weight[7] = ct("0.02822928389744864174544586786898217788137229652458972736832397295131736231647885061286268917613281016"); _points[8] = ct("0.00285835060009189432225562771682668948582857512454396863027797721426567661617667311949044311935799591"); _weight[8] = ct("0.02914652692549772359825191743397280020164868373562383178741132669912525302067096472110019756153082352"); _points[9] = ct("0.6051255339761019284481098523077407624240428731564207776008663713434935031358888405650262217950025242"); _weight[9] = ct("0.04266508146203472287514740814497105426127212704884677528002189938589343854792402933566360152308841045"); _points[10] = ct("0.5359281386930321609326895183917609968520364389050114840655237758106639373854988648624902834575404957"); _weight[10] = ct("0.06009811216766876110645301901080290470540542252779656010666162330015632690205531715683178923222126385"); _points[11] = ct("0.01499936497207552234035713591602254705393618831318367785565166039034387086356684984726917088159977164"); _weight[11] = ct("0.06566824457697127529902981695220767771270006886685278602736453053393289071075554704667985742556471193"); _points[12] = ct("0.4660507666351746484729664900381236689850117104625250010739461671795351570200905473063913279087995362"); _weight[12] = ct("0.07955912026541126007769813685510363475963878808713764989375842730287294266866641538077148042860200142"); _points[13] = ct("0.03659386328114012262654505528218600854572346118015453102909226025011769718948800713156805117021348771"); _weight[13] = ct("0.09726429982522235339421302162613403019875891383246840547625842897557731247557947987411501254680287177"); _points[14] = ct("0.3968534769856190095039434290948319231559830819379799669417186235032912613191108923209116958842566661"); _weight[14] = ct("0.0995403355010239132382717196606446428701230436642824894483894589415408071164372671565051418449066339"); _points[15] = ct("0.3296830989901027237373491420545228582656516694202723447101849302637120749496599731334902543040306285"); _weight[15] = ct("0.1181122908083299756311975390634647250493155093193591314865424228051155593226483354511888038664192693"); _points[16] = ct("0.06722644166793863852656394767467500357144072170962214241165856897826976130638620748193107205233694509"); _weight[16] = ct("0.1216954186195147767859181700852196598453398974387542750341310709128680231375238395840669422159454729"); _points[17] = ct("0.2658470140108159098108921515437181536788750914282933339485578881666960769687043708156597820375066426"); _weight[17] = ct("0.1331241870513333849458925379704009194981324486702047607071260864313889685659564325467513394603855075"); _points[18] = ct("0.1063014797376931175504486884739310046446260359816027861282438230188065644711946783060826726008422005"); _weight[18] = ct("0.1375542142025096877653615060378353535237823217814758119642712415097028824989683064469150618759633061"); _points[19] = ct("0.2065877060825335686769803341751510840175689986107977624063634924301173628588357156175136088108010249"); _weight[19] = ct("0.1424637790987724784544985952839802649730864625728979547070145816086846459169762856846041536108135636"); _points[20] = ct("0.1530585749557192122497019530096285339475255004440860527688523339429919998362921566593935826956915166"); _weight[20] = ct("0.1443411095395721799450733462238414248515479283870827912143456827382935051545476673209780806694503178"); break; // order 42,43 case 42 : case 43 : delivered_order = 43; _points.resize(22); _weight.resize(22); _points[0] = ct("0.9881024599908778831834893508543820892773502151203394249702418542482522913410591542225873730537640238"); _weight[0] = ct("0.000008819828241607839113836319188467664692011455724039965611658207161388061470286555951138804647517523762"); _points[1] = ct("0.9682538838165636528816421008794414241196089368489573782572610534009132752925859249504071948887717238"); _weight[1] = ct("0.00009705271167906710277821920044618755965438716605308287260605611296691915914345444845503274559759113985"); _points[2] = ct("0.9400856692108184696160307746610789762831294650129674325772200327073362883580966732090847381891661162"); _weight[2] = ct("0.0004620588367040999729282212179118719403671385452681342157971829216665667312380747639184954064858913054"); _points[3] = ct("0.9040851784977527206617013643188418266790222208067682092434771080729602120076277567836036898919526278"); _weight[3] = ct("0.001461453138691387066178714368792017613580659773821636378785062623685765189258882757952421529824382382"); _points[4] = ct("0.860891752762866217306561289088760798024280407816610933118125205649126736100379365501381094748080698"); _weight[4] = ct("0.003602665011170079496010454313375118125820248682611777483518813337130543978051137706444943926445444968"); _points[5] = ct("0.8112752068392205078781186463119643007891999522242449004575256452024235067993066706011518445018605716"); _weight[5] = ct("0.007485551813034275817216951148497417410643864099134073165862080079074318408799086608465326459832194165"); _points[6] = ct("0.756120559178934871229287935277861726124138068090238740139279322617849153755355308054543314195952641"); _weight[6] = ct("0.01370427408387923505535094139296990898530719232986605891147317475726272903114323254491117374114252769"); _points[7] = ct("0.6964118629859517266112670768971276038290954874249845702950806736765993872213401445317623482971794438"); _weight[7] = ct("0.02272307353970016175798801382037590056507281990311145345973578790932392062647349992155849279080103849"); _points[8] = ct("0.002620074720371159424859367455264888905528254905967075341414209716403766002695753259982505462790702161"); _weight[8] = ct("0.02673172609568654751853295736245388910769904510379438631959110356067466777925600320462833457894380703"); _points[9] = ct("0.6332145255726628427916625618237318565701781915004554642631578635011061799446656933683602264420425428"); _weight[9] = ct("0.03474679389549965662247861906215097123019694954611807141411557017597677027192888562429244380178121545"); _points[10] = ct("0.5676562502726097870217726677178769223611025672537427859994804146174746381249794034881861040558801353"); _weight[10] = ct("0.04960981404383829993700779271549480288885853637660176997186571280097470956587682931711438082157298981"); _points[11] = ct("0.01375365798738580402575675070905872963577871007529049791330105411351782591035575021061471597349499472"); _weight[11] = ct("0.06039224968649528527797201695304747719350890246767119584138949538030174755780883063573431771451573801"); _points[12] = ct("0.5009068926479350501177501589277218806508226892948913257700098794311718939499484259368208163972501152"); _weight[12] = ct("0.06670592951879767846792762476690622296014280028874613091699757533426509227995492281918325108396123329"); _points[13] = ct("0.4341575748401551375082012124710567475311318981229697451221181030460066453494908033714119124482954651"); _weight[13] = ct("0.08497667125409721785945148880879745505881359027847151653606924351274875356349984209037489762238788007"); _points[14] = ct("0.03357522684802669271430819164015782255936555354251479618256136085248644097781000029083755653408339061"); _weight[14] = ct("0.08989485493810659201312259319068572635263313059560239420597839977609904961839090425684384721793834645"); _points[15] = ct("0.3685994249559412825032166420129271053410258894370369258634481384659319950868454860519985944915827024"); _weight[15] = ct("0.1029672849391876735260280671946109142630666826269145737607246207862594409036669986746323585832975334"); _points[16] = ct("0.06173556162306960169082657439530799232593239853434981616795449869395358825349510725475770984104108369"); _weight[16] = ct("0.1132978321011550534569339446690910280401715810568023622298179018105850110347547332801463511728914714"); _points[17] = ct("0.3054023184425990231526085351824413364932159709089239800101319162552567160333479391342542847608906839"); _weight[17] = ct("0.118949346513709232985602192391896693374558508471962113359062925535623349061768764063169676690434175"); _points[18] = ct("0.09773269667536864245847988499672332346923869097633493640302023050164801771896428112688852124513295678"); _weight[18] = ct("0.1293178958114777478613063500315394516761550424810764340961225637292240059327409033219260993510310263"); _points[19] = ct("0.245693999624503322224465199004346511040095219161282162101130888622591782757543602487249492370203605"); _weight[19] = ct("0.1310983476019885069549959653684284929730374753089605272225430034875336215931548267651214213714624036"); _points[20] = ct("0.14092439775695158519450619775816451884611959708690538685783129704464061843005866589153388941048851"); _weight[20] = ct("0.1373943986576711189457038637687127484198195244023737460240143431480038626621631210916534276483539123"); _points[21] = ct("0.1905399551842166284991396915288050974055091810716148172940553365188707797144828728812777249740083098"); _weight[21] = ct("0.1377052393125228077987045052679605699295332423726478549816510583467911003227901128808596332546938645"); break; // order 44,45 case 44 : case 45 : delivered_order = 45; _points.resize(23); _weight.resize(23); _points[0] = ct("0.9890507733735791253543712469758400035281773409051211956278514761266032259261348911429860283320820851"); _weight[0] = ct("0.000006876667443448386873597174615624846641300742166712499390444623619723899261299135896561250296435335989"); _points[1] = ct("0.9707685195733889938794720318771182548024669818727768010084319949615096226307776604478341088419960687"); _weight[1] = ct("0.00007583423894827645199529497212749310045124079552553215845278302430393444077320694676832428355417760795"); _points[2] = ct("0.9447885021959101873192640703319531140411645602202181230261730429904477029248254097807519999563813321"); _weight[2] = ct("0.0003621778022397484227568716984452699810122401675080385621920809602503235452142352579992064490492180786"); _points[3] = ct("0.9115232476013712848631727800493825734445243013466233941759256931038532414323388171548016643162639101"); _weight[3] = ct("0.001150314682984822344334855610916138444468915824198344682212336984814856306470038289503572924918974143"); _points[4] = ct("0.8715161336713438696663789268096078560203102425650686035780009545736051097600251592363012603490395307"); _weight[4] = ct("0.002850497081093543249504950370776049252981886294476489764789366131665472664109268239563547266953185198"); _points[5] = ct("0.8254231835351607786693628066740285412448723033292098215120413379094288517271797907093120388750575164"); _weight[5] = ct("0.005960272673820516018892550728367359102119125009944955607272944225823529645958240764551805100276375076"); _points[6] = ct("0.774000884826103954870602865039850232459354767308173945418496573567419087448226053026498675219714321"); _weight[6] = ct("0.01099396318272331474169753508597427233921996009999619601995167163454190521119038525024744167647511149"); _points[7] = ct("0.718093423039932334870528968550415558136496950365395538952664548514450259640017620337759804908076215"); _weight[7] = ct("0.01838949716531371895801221750607384775779877835883666504812201193134363107981822179196427825682835979"); _points[8] = ct("0.002410403998251780792451856588101972909066529739119798212188046208814258289064772101273823619146110848"); _weight[8] = ct("0.02460458715379363680944285409901799406845331559876742556717226362516710861484213381914616524325269173"); _points[9] = ct("0.6586187096898888135130219138910443233073970121048619807684601196253997338641760466888560080659310002"); _weight[9] = ct("0.02840664653778501707948217016440661524304227052022033505140575431516377941086740846607743484483156773"); _points[10] = ct("0.5965532681512670094276258199980622909368222170766033931827570264949111422639694369359726047707370604"); _weight[10] = ct("0.04103337000606945503503522217670326104878723363104651468601157260930516194676854942670347964613293905"); _points[11] = ct("0.0126567991854554032486919041147616055178068993488019404920062315307023102839017774129144625521651445"); _weight[11] = ct("0.05572024457122334686306970307932336946322249656441291155755441029051172750463539491200291665562579443"); _points[12] = ct("0.5329161809469259852961679422880949408372018266872169088225806359785246671619598639988003464099914504"); _weight[12] = ct("0.05591706970939040592614623445525001285248857059702692030395415650257556886501471071456697084452361735"); _points[13] = ct("0.4687523477214090214073558308296168896809398353261455806058774838069360883559041595095033610401987426"); _weight[13] = ct("0.07233501875091631840919628023809183145752557746817854260441269393620510970432941834632187160557783416"); _points[14] = ct("0.03091420521685777042524659261449895967467270312206086783863872080618109788426269086493255324515362316"); _weight[14] = ct("0.08330302639229947932606202543244005159580104495976244028104260557408709909900455946501879510312450854"); _points[15] = ct("0.4051153234824939152589899821459852518084292041960127091818387323191589246479819549763061565524843399"); _weight[15] = ct("0.08921331592042749615179791387250922454007077948520920020945311505702881983826510488006429430176552302"); _points[16] = ct("0.3430500166905744572249642236228373303079210262636306213248867962132213743211306739909111276661963969"); _weight[16] = ct("0.1051971301902735212171552740490809864687285728732286101918097259253218725264728006157687448724567674"); _points[17] = ct("0.05688697073444690821032588838336961743654015907339725082650819749305629473627316130856328689737426324"); _weight[17] = ct("0.1056636634236599800025960030696444996116926205371369655056408389679930032480510185451962577501990656"); _points[18] = ct("0.2835755302598378337994539658113249207907562733532297915625840729145925650514832273388671279031826889"); _weight[18] = ct("0.1187676404312684393557883257269936135587246278818678797038987739015900277273626487102457050127845038"); _points[19] = ct("0.09014913455773984691589948612922737211413253931649758225808067949438711851934860889153068726819551827"); _weight[19] = ct("0.1216392044936975061036741688714549551287865944305569473422823525233694802740589876102729570564236371"); _points[20] = ct("0.2276684266411056773027710770956689945976517001579188130220661151724974754332539072451049501434355138"); _weight[20] = ct("0.1283940193233969697677293919549598541264664191744484566283510181595252794240699445354258114294514256"); _points[21] = ct("0.1301546569620392647297136145470657135930380187181655783102116317627332537731657610993460755762494399"); _weight[21] = ct("0.1306458637267026875983182867538939685731303811410348704694137140183344576684464387632647813109838146"); _points[22] = ct("0.1762466912782491162874995389654770161435899409370830936250632217648999272579318891342051808242810613"); _weight[22] = ct("0.132703099207861685113771606242267040771719381177782378888546698410791460688349318846771129681170662"); break; // order 46,47 case 46 : case 47 : delivered_order = 47; _points.resize(24); _weight.resize(24); _points[0] = ct("0.9898901712174520906251165597593773918847523673221438024487047832202131975743714655305404620841092336"); _weight[0] = ct("0.000005414795649621589410956891889788871742947297812794956478833735739984001890036849423513416122201443394"); _points[1] = ct("0.9729966238607434240581902575081331739557554587997081204643390924536815578867557077759207213916891928"); _weight[1] = ct("0.00005982741578200805140757442756876710357681187764184129492998044221027472286015156917522457282670014999"); _points[2] = ct("0.9489617024727324761890720630019867067891512669388670367116995074683944983852471238704034144706207455"); _weight[2] = ct("0.0002865262744228954315248621894840737436204226419751809547178299642115143727296322854938132384108068028"); _points[3] = ct("0.9181367783042758317115298970528403234116421141197280467998314494812585311720032200286955057989618405"); _weight[3] = ct("0.0009133865187289247367136496244884025935049017690707982258831296507599797381201681041293897274275549488"); _points[4] = ct("0.8809865112004901553982606734371066424293828263572332748538020660425345593942795437337711303415925046"); _weight[4] = ct("0.002273816875030566631082337760719505683063855834506483104577945072621905255965654055089511921562870697"); _points[5] = ct("0.8380732394393357620477594707813738107956440957803211619128696670627887064733041577933862555402708822"); _weight[5] = ct("0.00478099155488135631829927873735610850636015195412822564225728586449440911997072816425107894901952503"); _points[6] = ct("0.7900471558143551952024299464595864800685694943997857653563880504121078982496465547542056175539248754"); _weight[6] = ct("0.008877010801018946117185025924342474510540324525513331403312263343710478394357406571414381506861644254"); _points[7] = ct("0.7376361331966650834319952799565664239997149439085959623604215726217384164028452637066239693458780367"); _weight[7] = ct("0.0149629346691495350546165739431368442535998577893856441120639179339871284732782984334631217432407532"); _points[8] = ct("0.002224935452613053665891943069255750028001477799647205535966283412159514791582999304672758496614559806"); _weight[8] = ct("0.02272123685713789434030881931524938582897026979966692028426173000267001400447472415900288947310363378"); _points[9] = ct("0.6816345890584223343347584224654693833359846182784640936142748749084889259843441535034498170983533268"); _weight[9] = ct("0.02331919963843795558856289001178667829714874513151429202299104727270255015570026749611235251715190262"); _points[10] = ct("0.6228914041763613552769405578811627797744735067301256611232410007539390365503687846951176550441159124"); _weight[10] = ct("0.03402821314534665504742300668651742375478680187207505350701851655484252062079811817240060870672024125"); _points[11] = ct("0.5622970377001162863211472577185407563882405046536041909948441852501756198349145685895124686912743446"); _weight[11] = ct("0.0469115578091407435119135971531759206211456446784961440590979776235609374016068710085926652077969101"); _points[12] = ct("0.01168600396976784119585970645372596213506262775598593366556381424441620764977273721853043934271845157"); _weight[12] = ct("0.05156450302852561733106515247255298513224662256829380501788829770758411341850704243518347036063351569"); _points[13] = ct("0.5007700206965443044420384481447814267438751908957880531164770293158552605883981361981888199260713036"); _weight[13] = ct("0.06149308156503639872799358294626381094725788384605781475174499580448305892704309824786744398644990349"); _points[14] = ct("0.4392430280138590771400222586966484479281187490364367805606402616906997553927361513577773490887077744"); _weight[14] = ct("0.07699630754163361492101271509761239393849942140377941862209472613642061946357771589251994659060800813"); _points[15] = ct("0.02855661419100575078433773106991474313748189689392150746530677045392972682926951708896373028078886491"); _weight[15] = ct("0.07738771704125657665401015992403564121662898479846865035804772254684527134060060366464554448623310962"); _points[16] = ct("0.3786487375725983130255223763826594151980352418923449568992150385696141263998799737945727620052669868"); _weight[16] = ct("0.09238041135649377632848298626350660907150032768554403014238224628817114536167770593375677111179164115"); _points[17] = ct("0.05258483976432183438541473688430542352634574929408691847030569765319726770565337571037990112697772436"); _weight[17] = ct("0.09871617322318441702547220169324858290886567033955491182963415229959747527921243023604411058331651761"); _points[18] = ct("0.3199056905142705147196284477592600478118677860085346296646837337943071384012733116212835394981488244"); _weight[18] = ct("0.1064140204072954464118267057242311153891075934728738476926957640344192610080730226508773305006220935"); _points[19] = ct("0.08340690827115669342265715031914870712393513349406943625573196053823905284341476460595076132799896886"); _weight[19] = ct("0.1144998723800464282627119569938636431402696445948437363201340620984458709118113476601838585175390686"); _points[20] = ct("0.2639043660726025930345938310051340067520452082079640857559305951097397292053028574030042265001554412"); _weight[20] = ct("0.1177809496131256963154687299353704343516432112100715198188912862742036151417784070771267150847230789"); _points[21] = ct("0.1205557027005187819785359775783852711983906679686549822611192158244964090168065655430091806355845052"); _weight[21] = ct("0.1241560818892750740513319197449305270799796663008705162149327212005494018765146066229283656762922961"); _points[22] = ct("0.2114936819377605655182888616348370137102012365281441126857995265139411092227855461865391104829793346"); _weight[22] = ct("0.1252073956815181771346127294596215849298975190508766297740178851158073346196145842747014091777703977"); _points[23] = ct("0.1634681244020306820900081449797999118733278369358442810228438232040837540450435199855004039271963652"); _weight[23] = ct("0.127596703251215007750895920412380631459376052890311743223279016365294469723170711769195350434667225"); break; // order 48,49 case 48 : case 49 : delivered_order = 49; _points.resize(25); _weight.resize(25); _points[0] = ct("0.9906367009503252040186638786057673854869752103072860840212608497776729091053687956427078165918374823"); _weight[0] = ct("0.000004302755109283992853390612984473905388520107606420784662639203221026015612852498093180719624771642562"); _points[1] = ct("0.9749800156322561440080537979319428058608688920634258011461633746480601222229645349760627442122976592"); _weight[1] = ct("0.00004762148988535869484357810517214382489037315091947178037681066416731762841027085559169817014266353776"); _points[2] = ct("0.9526814786656007765604428427646471107128280724641542445681143547072496089803389360499312827713045016"); _weight[2] = ct("0.0002286333412778897125360878868810677218018864957423887924835086482637072540841046732817968346432845905"); _points[3] = ct("0.924042107591375088183860270299603460716277839946970651202689016561215748927105401944373367096390483"); _weight[3] = ct("0.0007312150296955576038999427301489336061245571898075392624561063075884138374981784504825108417887624151"); _points[4] = ct("0.8894615186907393745656503873951861823090345844702245018938672248913223057207012920176380233027947257"); _weight[4] = ct("0.001827746097251135206530204407903268733428075081612346622935423986110324998010804043842916652568803827"); _points[5] = ct("0.8494243882656275732290900248503280680907322871463571360374955681062300158144452515011786494799600204"); _weight[5] = ct("0.003862047153394014885660554694647840111512019761959973821093873699280118779178659279767371558180975605"); _points[6] = ct("0.8044924465194527143198696101390306595020306714115014471218090194399979166482091146097001614651134795"); _weight[6] = ct("0.0072126346647461759192556190144110051057368556634141677806079889518799372758034872159931011806213675"); _points[7] = ct("0.7552962978229513043581799301877042674961500659949106188709770331116463725525761120695916327062411829"); _weight[7] = ct("0.0122400733886804262239638702260922483882869874656751208959231837292087749645032165693967788849201739"); _points[8] = ct("0.7025264744308617327764735628652519707991262430777878489777111185176795447563520263257678166613306619"); _weight[8] = ct("0.01922488755916925990273545208551839304413598984038948928740273847627349626429186204670641466309370472"); _points[9] = ct("0.002060081929097883499230548771256641683030644135588557914779023101696836289714772146200530803150593157"); _weight[9] = ct("0.02104584654991310894984769694957997264389234706488954830869366146363669643607673681276112765962831785"); _points[10] = ct("0.6469237071357920937508249478501848787366871342377897238574359882034872352624041632877614982121503125"); _weight[10] = ct("0.02830437637751160048700083768002130944295668211190091848676117122152547090095035944438706910338866601"); _points[11] = ct("0.5892685115570647814127303043715788194113182486287723623739652905892272971097895471854805549415698537"); _weight[11] = ct("0.03941749238248017695654904390708201200479612204684234083409815391209463268142666322461799547268657044"); _points[12] = ct("0.01082268301359031138105841238638610741754419495014618572099843382803432892580641158216400725801855869"); _weight[12] = ct("0.04785247342860094090713410636696065372543581105275627351894179124877984338090126845647482492287693387"); _points[13] = ct("0.5303702240359852173396065663591384210267634451500462472121109299789877460508376633515105839528377266"); _weight[13] = ct("0.05226654254025416026230055459765768735408748982342137352210401586284879927470555960353573242755475313"); _points[14] = ct("0.4710556365226797192363701668337433453652680273700752120149035736826756466148957367682835979522326213"); _weight[14] = ct("0.06630287633400960740664405539791593674018482270105306573866739446952101295678770123011621440596649791"); _points[15] = ct("0.02645812972355433281261111502741448762381582930484579072074942380857494497686847934716860456297192619"); _weight[15] = ct("0.07206284363820171160165937570261028877417915555039796312170958415818099948789627440800921583584439041"); _points[16] = ct("0.4121573881255929482897040156029304602803026810481251319022819080784439249416642297798100544798503957"); _weight[16] = ct("0.08074110304100429667322390015353026479458249971802668553808949061734867458681218551998618063433486086"); _points[17] = ct("0.04875046551971594256626048405495149863872650262007427692289050523464258580283035772642693653318980664"); _weight[17] = ct("0.09238508110486277697046072106183462307349301111542269581192066431251586682339655452939053211823346898"); _points[18] = ct("0.3545022754336092801330830225246756319748235396671835065241829375954950971669723822236925390213555707"); _weight[18] = ct("0.09460303776621984255911428340425176633044568964941211415406548859126157076222722306525009261263870048"); _points[19] = ct("0.2988996452854616817472628058730197227314433867599336194504840923830631129196201993067222862706236927"); _weight[19] = ct("0.106788917328849938310343580342129676248041289822079930729453242089902642978743856332781087264853323"); _points[20] = ct("0.07738719047941864058844549035651095463419321093462887741820043230753007046145151599424606907648132144"); _weight[20] = ct("0.1078731206753558255699920516316999773845920194453412445398199388813993235893370279142238853057140305"); _points[21] = ct("0.2461300326799557368501708657724630388374281519477683919406243379905396093914799829014978822920175362"); _weight[21] = ct("0.1161699062528098563285204629158808188551384494639865932612070092262711343486676737524132437966100165"); _points[22] = ct("0.1119664131211797080591453118900233568411335618341266482302911307568798211658937390561142794026721151"); _weight[22] = ct("0.1179603120946719806730046151597300929107578524479463578273411646787924756993067021805470346187081039"); _points[23] = ct("0.1969342031254723248318136513226723837261617920675631369200407885476768048090584724200227907109775708"); _weight[23] = ct("0.1216929757207637586818931039746277834402913288184501947402046698604718770716389339788734360764541048"); _points[24] = ct("0.1520027529734087162506287551943575708665665516914832278052044133827396241518816510167155210118609714"); _weight[24] = ct("0.1224872666186146488533662443240610951691534977442791141723136190727891953370651772473494342557863352"); break; // order 50,51 case 50 : case 51 : delivered_order = 51; _points.resize(26); _weight.resize(26); _points[0] = ct("0.9913035622385110788790336653178278306638685473029327049342568556768750779226166802910464862467032347"); _weight[0] = ct("0.000003448114359757205756745360166489525198386376580749197638121869912495215206262890112928773755959767302"); _points[1] = ct("0.9767531733280232298662661702683429698796977567485282341214009937436918106009940247102813503324814623"); _weight[1] = ct("0.00003822053883255387900554746410523715204390828917060415678743895044994612478539092658170443346156339384"); _points[2] = ct("0.9560108839274215742662198697342406595278034313234337217490396871934265900098665899697971229408821363"); _weight[2] = ct("0.0001839034851575356489389594530597318328668080169779138264875530228689413045229252063322910022564475327"); _points[3] = ct("0.9293359602715748334061432334478793404990512001092018428658048417839597361733846070929979731803178747"); _weight[3] = ct("0.0005898711555596490013159173847175552002172211131197603246704873932959527131487834703954937504716351496"); _points[4] = ct("0.8970739084211864094916125355818095043974285476361644489211453364655049867582275024468773277447054481"); _weight[4] = ct("0.001479803510496533483770404222388761836968823110573963984604554556290327130157655956042477051021174593"); _points[5] = ct("0.8596446098087925495341476044048610631434683111426290228292610152787315792738718461682721701424965136"); _weight[5] = ct("0.003140570491033566324169178308200812903593777775611657950464043256177915220403707237044709370474184913"); _points[6] = ct("0.8175357317097885446226654263638273500789689214285257860423082060382710028297478571779544782286374496"); _weight[6] = ct("0.005895624378770345168835737990923267314213457921731405554223994080869703797491624920386576159748071496"); _points[7] = ct("0.7712960967780431853930398083442015153386640842171062566103950893923844867230098706227918714691709195"); _weight[7] = ct("0.0100652911435293349214185972039361728837965416629534978495957715958597173303805799754230918997120829"); _points[8] = ct("0.7215284411637628205782811219801685752763893687252454146020804663752143651812554588012584507935377958"); _weight[8] = ct("0.01591836500223050457908558597913063177486827168378060246011515511359787919282859563519099594101698746"); _points[9] = ct("0.00191289717110327028836078524521752905378221643873610211392586422613620030638054085761591113838798103"); _weight[9] = ct("0.01954892722439377291610145584289408938746223353894233403593192849234043653992666165122219128617863008"); _points[10] = ct("0.6688815237617270248821108145549645861198322343286327852974929404210073467991331540955757170564355139"); _weight[10] = ct("0.023620926866716590429781746080458886913912057392116175755472052610577816983937979347311540801052264"); _points[11] = ct("0.6140416543163906865961035725129271962910179605530973598443859211090243690612314978954036450474195975"); _weight[11] = ct("0.03318912383294029289365821071167045100713239775208250096989712764224744184932990528332463294336165887"); _points[12] = ct("0.5577237395010012764647206840844501727253666372843105914449844804197466442981144131225215846683212315"); _weight[12] = ct("0.0444526422478849071887171168971656648124189504190488385065799238682532085490823182384757209786707533"); _points[13] = ct("0.01005154895905705829101837163776007839887286894178746427295654042900506836125523943248910412169749112"); _weight[13] = ct("0.04452377548054358057693152306974293779850488015842524187316405913445811445216693334515560304563508699"); _points[14] = ct("0.5006619595031362884856902687713503167221436363552477393781189311589046478109453733251474626310385349"); _weight[14] = ct("0.05703475748022071828509619466256332516846561787218921379234532042280759325691321139002913907127018233"); _points[15] = ct("0.02458221593567344139959951442945173604525227542008597683706536629066562897106555863890846130241857954"); _weight[15] = ct("0.06725495107308428165273852693974342265312725376252435168146700914145779601982415440317967786025974281"); _points[16] = ct("0.4436001949306515828559333823823612392858936114867615745808688805378474705116095676777622646630552513"); _weight[16] = ct("0.07035322704434977742682228930847787787019711543667177558572243193480196890984850180718542235275479292"); _points[17] = ct("0.3872823280574549937989445036865958828972832166536714882484665313850184327167229220473239233584617594"); _weight[17] = ct("0.08364408140790913806503136264243828949700520235558282644016434999787678203843397466411902861456776414"); _points[18] = ct("0.04531874608969985141125939892871352392582349070041744450306418403609338292543286780416369042306744593"); _weight[18] = ct("0.08660682167204660370080193943728064352793416035738853172340408852080310732523056866657018900396374964"); _points[19] = ct("0.332442544464647897764370591677219362088665986717434604231536379957097306038335636912411521157132378"); _weight[19] = ct("0.09600780433395996459611005163022683822666687189995853795269920650589609941099345779579700299706512646"); _points[20] = ct("0.07199121113320913897952303263315337990844978682594543098496219654933140959926243370975522920210941871"); _weight[20] = ct("0.1017277570591432847348180174383227213260284916100920427592935367507284866022929405674356028872702434"); _points[21] = ct("0.2797957613012491859655855463898480988672060062249520276103935539643102128193564469419623506479628483"); _weight[21] = ct("0.106474774156680812568561370518019168161628546270578460416498320073426923055252814931939825477870784"); _points[22] = ct("0.1042519922933739349627321569155201289060616104436747962912852388186208673319729357666535825336812708"); _weight[22] = ct("0.1120761181427334190032010245158099690638256138925814165287686360873920886305053666402815536031124781"); _points[23] = ct("0.23002830680682207126412919932716909390208658580572414780253225469621533437570891507880804871836099"); _weight[23] = ct("0.1140844639890417668241464892471366407764480789831449930204960242372119155349985796101274929370035803"); _points[24] = ct("0.1416805541841085939424499105077162112269282743432822292773459439118180445686557930664348991933582934"); _weight[24] = ct("0.117447028575268886080283905928003969128044025940981427337594705298274644106623945515582721239819385"); _points[25] = ct("0.1837889724621079951285773493909411733485119513609893231234408186596165165503607848643038915766770985"); _weight[25] = ct("0.1179710549264457561782354350967497775907646397405245096492474927754560320390464932600093231430017935"); break; // order 52,53 case 52 : case 53 : delivered_order = 53; _points.resize(27); _weight.resize(27); _points[0] = ct("0.9919016921030858633563363794429817847379787714779279595620322545994397707381328467786508349830459968"); _weight[0] = ct("0.000002785016388572537705690681609177755671609902607460882831309119306006182467890894946863671115671403669"); _points[1] = ct("0.9783447246593427423009234194577171124968296718365230530311186830121782128183606331424343744729291301"); _weight[1] = ct("0.00003091244161938983408314671147246492772583236893784015618585479755757538573429388679225037321883934137"); _points[2] = ct("0.9590024350798769967347900672867432755261033514982111722784661932934780135998830463243946849777047705"); _weight[2] = ct("0.0001490333111707578435026953455921951778699719566794053596354648989169784384847030615809371744890831862"); _points[3] = ct("0.9340992449559257825950427906558732935953068512720009591535099193403502312605076880588140292621747714"); _weight[3] = ct("0.0004792697453785258073340451419757222154191164076444721019392392800535122603874466076414496344511966982"); _points[4] = ct("0.9039353597784711070157033597360474229931818363030729923680719044761889533438408210305605660116515178"); _weight[4] = ct("0.00120624834619181937137603199441914360465912857765792171269659313799452594208005653184665745154759608"); _points[5] = ct("0.8688762741806575564667761401536189780901445930466251209065034762678430393181039572235882829647519408"); _weight[5] = ct("0.002570049171197175931361063941668867313971915134023462330557089030766363955154108296199489949582894189"); _points[6] = ct("0.8293472971383944771598355049274250058834269029021771996399619672863673163568105696112267907482074549"); _weight[6] = ct("0.004846921295440348694709177690869156229797846446689132658058902702383248719112744082435662948118295653"); _points[7] = ct("0.7858281353779031227352117058077111616012152440575051383618183698144842122819671305036791359257553671"); _weight[7] = ct("0.008319259767931359303359612245105396666555498914945895238762583811716697454039472166862699670678373469"); _points[8] = ct("0.7388469893624735910922449829548469590275526861901167534999751484805700903189045500413201466516638816"); _weight[8] = ct("0.01323785353886628364655051789746491666869904914948154796436523205630295604837132271358219443071008338"); _points[9] = ct("0.001780943143570460885558792886611446878630789847066000390270576459560516274569752479856156412462092889"); _weight[9] = ct("0.01820603118871048582942728891063964187212465208682135554645716213359324348541984930031410535990257893"); _points[10] = ct("0.6889741108323418280816571990178261232404686847403558539490499437753002791024731150404667801081009793"); _weight[10] = ct("0.01978061738005189821681119732188615744078771959445292827828842468044747984641395372722160776435764143"); _points[11] = ct("0.6368148674104017419630307715995676902754314764405299930956289867406713625910027046038473059912601229"); _weight[11] = ct("0.02801276453548874808009747976668363223186535565759695290998544442635238085147611006105071688900964825"); _points[12] = ct("0.5830023879264334250663902804376328580572440100955175317865653839064321210069269191484571926567993637"); _weight[12] = ct("0.03785356234773460919311606411888319543129071813262592167579519593720136903085223560528795008414460997"); _points[13] = ct("0.009359937258201115028705457829872668484510565995513908264444078497284370515863726402824600698033502681"); _weight[13] = ct("0.04152785829844875717943172756938377186734953754235234311353404373544544228087795063232762728857180007"); _points[14] = ct("0.528189873835532934021657722740027508548208196505456013409035767085006436526769095345534024824517463"); _weight[14] = ct("0.04905440341529198363865576676516031676767482097727449018102715309052236173245485358847778720174353105"); _points[15] = ct("0.4730426684520476703602592878224296830904178855899382298873897364315299239631836659193743186739257835"); _weight[15] = ct("0.06119194926537683569355451543997997296618926203848359030101583951544914289940470883109383512474600588"); _points[16] = ct("0.02289854263907702050395291455569141311738970919189788652592377127458263144110401632397331449331526483"); _weight[16] = ct("0.06290119746144746482802734864589386618833347317601423057015638714495873048300389063863893761442406516"); _points[17] = ct("0.4182301795447049734724846472391014243667560340702901180312848174318171551123809662146069605014604107"); _weight[17] = ct("0.07367865526297174418825984472902459506331849312468798056148539468443217520004723844738101147944550983"); _points[18] = ct("0.04223546938345160520274859443846427423042665304287693049731721062888330792747246995094108230190228905"); _weight[18] = ct("0.08132436136446986193739170532758880791397877196523611071292546215873628519179693987936952305884224755"); _points[19] = ct("0.3644177529904574950557756096570565098512806680305704179066355757972527488832137323378563137368606048"); _weight[19] = ct("0.08579121209195122447243328295236127860714191311346550727152062805058661851930724613643640236403073954"); _points[20] = ct("0.06713636929901124659578390479055933650185406663414917887488142333093823351973104095111454943659991062"); _weight[20] = ct("0.09603082810201882415311963795104748870818268807470347887502846531247874858577708795396729820518612173"); _points[21] = ct("0.3122585959444232262993504592262882061838804975738422821976444443102486079512087157897605571708467093"); _weight[21] = ct("0.09671552705946981898751774104684219583762712809680328375846161035397016840278817983469759130134249606"); _points[22] = ct("0.2623858474559273881160617913883325511276096577994481672721349608546023050783281843153256814191171124"); _weight[22] = ct("0.1056050230492805119709298866476760648000510141882851923408616735140549390641398474028584341314146003"); _points[23] = ct("0.0972990698736721763753164344064238004527912129365851467031032541694671325752127600065236562459329176"); _weight[23] = ct("0.1065088544552712310709129163765736239560946416142489520312256996469840584797893553601506329292924869"); _points[24] = ct("0.2154048926944543171651652614570632101946667733364492996249967765409568376782797064089297968838438259"); _weight[24] = ct("0.1116474563280293741109965065113128931866832316104691669164509221561199637581464430175629066034208639"); _points[25] = ct("0.1323574675652328254198509862867790334541690279550368666466192187710882991061076711351679865215991105"); _weight[25] = ct("0.1125263755484285883365205837252928997215348671664386328271427347062622899654077798856335746521576459"); _points[26] = ct("0.1718860139720701680722426766544501251353813244874586832784733002806207478525176577679137330683948481"); _weight[26] = ct("0.1141343235447071384761478578769258902127350763147060770569388232507400711703976247938788173159387682"); break; // order 54,55 case 54 : case 55 : delivered_order = 55; _points.resize(28); _weight.resize(28); _points[0] = ct("0.9924402145386934818494062074608256710512573670377708826247066201588500246796209226609635064997675722"); _weight[0] = ct("0.000002265958598962605196822743329763905246915735782078382024974317229330583473761254873410776872767826297"); _points[1] = ct("0.9797785960640749944438190057145039152741074495249043615408383040614782568644584229549468171687733794"); _weight[1] = ct("0.00002518191216312457714080057893628203062066238548219866715788280885486052172769692157029551682300980055"); _points[2] = ct("0.9617001463459457899861099885807198305217759101371616261805924955343739972380075801124042375869170113"); _weight[2] = ct("0.0001216212208108765183086984702980407460962842267066259167107608532532670446458238411718198672773186945"); _points[3] = ct("0.9384000294379855101586491825366150982471974093849676442221321111107915020236599462447922597108121458"); _weight[3] = ct("0.0003920317051831638475926050565561955006834349747351228816020734233503026528227612365401820950255750158"); _points[4] = ct("0.9101403003668531082536780547017155187065153962208111283714408048069939649812595801927679940070241872"); _weight[4] = ct("0.0009895645441188801027588830624824366661410419145577967624579589789470698427514257565112370532368473272"); _points[5] = ct("0.8772405436497879573891723774128885767103809571602310600748670880625265196548463651442992083091059555"); _weight[5] = ct("0.002115799069802587276112448389274307711426310369019676527371289223126989553627023040825265918413245453"); _points[6] = ct("0.8400732837976637417846403075634608381826446882830863254766087793874579013383417858472750832694708386"); _weight[6] = ct("0.00400676996382688876369694147974047973154866283886113397519166712993033774666693888227342383322420845"); _points[7] = ct("0.7990595276685624868995636153621286979861878231866964890727280422713114601123812756416012428130639633"); _weight[7] = ct("0.006910213443566888748466176890723625292539468755284525612640801075874152045527474588594349300760027866"); _points[8] = ct("0.7546639187593059817872803597557685898853275116792760713753923349366380454793941649397924902062412319"); _weight[8] = ct("0.01105609190631242552105479324746823601234418177691168238419979938124926144067391591450784016492233245"); _points[9] = ct("0.7073894438877855706285149361350268987939100593278504681962772015788814614262279003604123878408133833"); _weight[9] = ct("0.01662340411686909034142413466450566565032418406426186662411255986983551839951256909951884474445425856"); _points[10] = ct("0.001662188334010344257891461771211848609193102668366344886339851471823721411659306650434237708070485101"); _weight[10] = ct("0.01699675331355490717411502137389388500094524603859825757063307660350119689582330207269535543572269786"); _points[11] = ct("0.6577717217542247768084005053389194499315878203674783143278934979688418886464254544545346213089894437"); _weight[11] = ct("0.02370693220667251758884754554263331205128739505850822623279313400923071925972365938987128520658945004"); _points[12] = ct("0.6063729282730147073480576391241726828720982008190425665943509503596611618340212969981896009477717553"); _weight[12] = ct("0.03228783996502644895650898643668602554416833029918697762571085207553801460068086760948486028196731261"); _points[13] = ct("0.00873728447239214139065712242090646257020090445870447567282855490448705888193735202767834234353241308"); _weight[13] = ct("0.0388221611401857501373760319181405664443831529949018732380163213415938798961715598697675365133475528"); _points[14] = ct("0.5537754238684313594769240249501645635328248608561576380556038385473320553947237200652050810344918645"); _weight[14] = ct("0.04221188066485391017179843621910132663247325582481799896194480286103572326145048899412823414104578068"); _points[15] = ct("0.500575153441983623093869111019478966255819651560523227417590738918084787952706570511471287773556073"); _weight[15] = ct("0.05317840198085355889436749877935944937229816786481312186261562562730237943218926093884454876384009258"); _points[16] = ct("0.02138176483568373963034271336149516841266556866258386679039806082475071487814678080051058192488994791"); _weight[16] = ct("0.05894766595670255670963440873302383759119498225513535332185369018894998992852923391583154766651460418"); _points[17] = ct("0.4473748931198531751312384976638757267785856330538905813203215779969809276248509403699505273214443105"); _weight[17] = ct("0.06474239890218384617641579074397429560281200820034847743486255276201782999215045306318422919140676195"); _points[18] = ct("0.3947774199723313116769052107500062552907725427703361632104188629638226399349568702184562114618754642"); _weight[18] = ct("0.0763306503770435867799217376007081375452687618911842652302001273146809417858403010269360961540654852"); _points[19] = ct("0.03945520864053971121154986277226662685144080719364934557672928701141422590945414778597456317172456995"); _weight[19] = ct("0.0764867860250257028448602879104010451834884717881588252543887775929982012360821861240101576752354614"); _points[20] = ct("0.3433786819261913150681460413651973878949845823554863178403679470149846273838432659226376928927518381"); _weight[20] = ct("0.08727159968574142456653607461431136580558843981507980115301946075240580150496406025982314095123393874"); _points[21] = ct("0.06275318712545885999983743626481590179256400882623205243754304532648865470273322717790632337377314921"); _weight[21] = ct("0.09074930386242807574850384737192231428927990682057845126440329212535996959549697864971331918463330868"); _points[22] = ct("0.2937610451613514326972750749668948134956539051387656916985961515253610703405985442498156612536971559"); _weight[22] = ct("0.09683723892284496243133400305982014503220595603741460800960591274877472218951050937958199531634003946"); _points[23] = ct("0.09101180937213291493037786336117976907264810765721540819421996451301742291635988315532695530375611578"); _weight[23] = ct("0.1012555974889907126108460496940755561934638347853673107289657786337559632509483599958359377654219545"); _points[24] = ct("0.2464866954363530558083411840821592805659340568933689671152241449226482215610440148989074112781467142"); _weight[24] = ct("0.1042939762323390317306252800023900820145384876648703530515689827183667386399613716670604816775598012"); _points[25] = ct("0.1239109225098248943986786571525365727357700121269974363446057563225513757008341619263478384404697343"); _weight[25] = ct("0.1077593224554183504441506568716594810393974684605908180762875165119213414701629886814347926818068901"); _points[26] = ct("0.2020912680468832554423969706448920337400445843902748221160223851312616827201318751974338594370225009"); _weight[26] = ct("0.1089584330514553833792479007201945848483678110902207242804925059301547571776537296722336644764227275"); _points[27] = ct("0.161077778503025586034483484317896992168941561016791412920534016160288076683236712455481216991357141"); _weight[27] = ct("0.1102534472607597186864914711577228898952005094019551823025011564740940733845646315084537049532027231"); break; // order 56,57 case 56 : case 57 : delivered_order = 57; _points.resize(29); _weight.resize(29); _points[0] = ct("0.9929267893183628062269525350662871775653492285199651525986086819393629175725051227057650509336396086"); _weight[0] = ct("0.000001856283772081021646463917006645502930051466535420769785785415393719988368277496916640181442415746151"); _points[1] = ct("0.9810749076596256309006437136691611689533352449026726879855908015035858117277035374554302084570421548"); _weight[1] = ct("0.00002065193379483673723520305410719094953030456381599065092914301994814430006275832864617928309149435563"); _points[2] = ct("0.9641411217247745946828870542493190904639324758002400985928337168007851931895173178552116298526335159"); _weight[2] = ct("0.00009990263394095784408772527008183937133715876054979511341138744323762818463231844388684177314495142668"); _points[3] = ct("0.9422958895903871330495337162486475572840128154973285809341967704118304237104033071590241332038178755"); _weight[3] = ct("0.0003227041908195134456269653088472861986621444725248385753566297569081862963005760178204697655072584826"); _points[4] = ct("0.9157689585742375160527209731782209778138377544703193428562270193431316521163635958472103988871596499"); _weight[4] = ct("0.0008167123025929537791590779222624889046680614565866252043480296283513012023263276872665424708570029282"); _points[5] = ct("0.8848409513746070720478295357950882608136439751437339020150931391920340490511768348960488253412100603"); _weight[5] = ct("0.001751756104040543812056707746636424489524091405182527252251987207967076087908850752406343551247101325"); _points[6] = ct("0.8498394858283586592068606159884429949323530710404946731082134176863686453602964965002298383195124693"); _weight[6] = ct("0.003329732099534716525904959471022450189067525736458400646569973558736059350650571180620965956491897284"); _points[7] = ct("0.8111354807272444642075213249964705278931214853178016839227908886334439887655616436591190604415518726"); _weight[7] = ct("0.005767322345572894815450450032797290470663786874293720580846143468974332971619800222681111399152007128"); _points[8] = ct("0.7691391534023484768538220758922565584262388759203507506806944987604814945430447384460512918718215989"); _weight[8] = ct("0.009272946255348385389541458548765573070689017484996409398510543999367015481576466379271350142341662023"); _points[9] = ct("0.7242956444888707043560871701745064455538860059199548248154436973480104217103385414072838784155034141"); _weight[9] = ct("0.01402009861333367145022482741179595153263656328537495601342898943949469294535231397346053110908384423"); _points[10] = ct("0.001554929031256665420006752942495427838027482475136930592211048929383071266978688100380198645182484977"); _weight[10] = ct("0.01590395547416049373084283970446254939586728862730454297894007025395012962095073015384060063814125139"); _points[11] = ct("0.6770802877492443573266568704467015351806311769675395683120767898431579951848013577283510561777889766"); _weight[11] = ct("0.02011976844683497331844387739702727260430369510653869789575590786230420302940347608481479643127976595"); _points[12] = ct("0.627993565916526262182013707529617129394893152972341580368269585709554733044579996298702311470791131"); _weight[12] = ct("0.02759491436298458106580574784196132821947800084432000401014943541800534280281110554230420725253142823"); _points[13] = ct("0.5775558026309174452553151152733625043245901657653645490736680818890881281137921627962913404073228691"); _weight[13] = ct("0.03635995684886709788958406007756343059353121747834284301899201980737194866787438745763436873700570147"); _points[14] = ct("0.008174723674418611559103865544392948102157036888087052346790286307717131377449463638956498141460460573"); _weight[14] = ct("0.03637065893665729571075344593916540199657241009646385824767892047382103100320528018288122982250320447"); _points[15] = ct("0.5263016453375968201653794928636041556860229130020205964062744256271705159139407454117566470052847889"); _weight[15] = ct("0.04620793050943086619045368766579074375745787430897608290923105422272112793759027659747296191028447982"); _points[16] = ct("0.02001057277537863729118447337248115231454020584682554184760410583574379386658825873304229289136911038"); _weight[16] = ct("0.05534795630399538850185456211297123893344168142281776267574745603114279671978481699568799512634590668"); _points[17] = ct("0.4747743970009873561917723160531700205066921026924445193997049795210527057905182697247116916931894192"); _weight[17] = ct("0.05680734250845563585288858316504839656434131896796498476261765390734591853152656637737926312889479053"); _points[18] = ct("0.4235202564181097995474113146850489926682673472663289206460620937489498826422878291086158784870130803"); _weight[18] = ct("0.06770995846565736534187178620911510510981331439007344136937490702077560334537629961218632220124974517"); _points[19] = ct("0.0369396752916812645959209072886222502266940175506431296353140616816413196565410066864982546882814814"); _weight[19] = ct("0.07204878416716868669494228779171087877055190291879777468441869777323207283284792884162808840671618476"); _points[20] = ct("0.3730825280293374465690792859201248695856590531186829500141964698180241770761618137437466075148481282"); _weight[20] = ct("0.07836975770978971115427402907838920161802800682518189208674079546857625920569703907869991396907702626"); _points[21] = ct("0.05878290626605055885840865218087174046495481944251207998810378852091522787940776630512797824354282017"); _weight[21] = ct("0.08585111618606221894547223897051276062455717563898810682264732561837504271642097505325204467579434545"); _points[22] = ct("0.3239958625177051466248603397041584055661175398120534880219141687715302778163413540837796763370016129"); _weight[22] = ct("0.08817225630680597612003660163949371818078447184949948235473102539086671161349867433599036467547766318"); _points[23] = ct("0.08530880093329033563236471055857523621058808223719875374718841141972960523222133992450790818395778101"); _weight[23] = ct("0.09630795187080586094841976728359810551551172932908124410591486740160430723013263344522700978629878583"); _points[24] = ct("0.2767805891942973708577879729031042713879054366854930668603078587622459594790114634625651543742909842"); _weight[24] = ct("0.09647238670452894868290795505134096581869886645007816822694179149988004663996108299166340298176479467"); _points[25] = ct("0.2319372002063364238357113561581231468239578677677663627198771197540715838680988610437419882956982289"); _weight[25] = ct("0.1026382437620365051961261302742550581710573153809810112602447887157691824281457449099765356526344903"); _points[26] = ct("0.1162362048829853425076721375397609970107436875069462593303916880434153281948281248095660108756043849"); _weight[26] = ct("0.1031676988619209181710558830873856413004363444827527678541306109133352094102382641980490562172708412"); _points[27] = ct("0.1899410449901282865692379014213471630254082529921559753456718118947261873986526053764810399620158524"); _weight[27] = ct("0.1060973443529894398202373165023237945259903765282338008207222574643863851930328256989138033717840287"); _points[28] = ct("0.1512372911316014780919207790227039606491053931442636445013472589695144451175544237584698175481308518"); _weight[28] = ct("0.1063816687914308151764286948578946009532016371806181830429151351514918575960369656164444521272090252"); break; // order 58,59 case 58 : case 59 : delivered_order = 59; _points.resize(30); _weight.resize(30); _points[0] = ct("0.9933678849972890218242967429754756290348422812012610131690790938192644595723658942993255322380362377"); _weight[0] = ct("0.000001530435692303559679202880600194069095291373243359882366029366110361351387216726316141966166113640561"); _points[1] = ct("0.9822506759732043911736678171948047795906753507549646731542099473217074609302325111913020773007465754"); _weight[1] = ct("0.00001704378210976846570170738949485625046237981076825018201228716265008270161857594461594414931549012417"); _points[2] = ct("0.966356811610316331681829740124114472013698341152903565974034839219633588997916371133226198626933423"); _weight[2] = ct("0.00008256807322596642712675172300945914195274209200047916147521082294370472442789555182791610679371970876"); _points[3] = ct("0.9458357764492203337808419002032066885955503076575948450871012659368499041349175484945986129340774309"); _weight[3] = ct("0.0002672199620663056472135919658807958654052121724338065121842860076057742788764139847141623009890424742"); _points[4] = ct("0.9208898151139505953144638557329905235774970627249343559514095081325116537677830281076745417185029103"); _weight[4] = ct("0.000677900876045822301748513097607136324210204873984589460746651754413842077422919562829610184363090602"); _points[5] = ct("0.891766318682024711351680965262570788260699668723203291111539656543622803240979767532198330039144181"); _weight[5] = ct("0.001458186687285437575395832778065189046874964252128656421832651017529503747672066055109671092349859249"); _points[6] = ct("0.8587545173866958177170051992400022157663057683841349552780806326443491728626503313132174680442865727"); _weight[6] = ct("0.002781045433058290735823690629828006775647419013227642282327332200732301717026140608010860330831076808"); _points[7] = ct("0.8221823987382739350146679257725087410887946678055925816102530058347225710144385002987812579603934522"); _weight[7] = ct("0.004835687651116839589207388506661792798688732351920846841568469474501450058791552883867826144653376215"); _points[8] = ct("0.7824133817283033117351654063389710102986058216354587982007414417461506029482383411221290125361309735"); _weight[8] = ct("0.00780951217924887175492555552277335297710152074877213295106913265321637430098410393345892760990754618"); _points[9] = ct("0.7398426798885768781476865343971963892441993313179320887011131454876353948716056468750647185101546415"); _weight[9] = ct("0.01186669231590524206744646319730034674869664293542161685991368345216694946396047626719698432221560565"); _points[10] = ct("0.00145772783390650359258939349065175917847200065310815600213746054046489330060751964957340354200936242"); _weight[10] = ct("0.01491315901155340446212604717451004862856152600028923881167748393402243077917276774270736813868227456"); _points[11] = ct("0.6948933626480090846660737470948052491622820351678518066893206318036909102531481156845209039989461428"); _weight[11] = ct("0.01712539544532892132744625893725802414621796017291600334410496954630813410240948250791722805919453726"); _points[12] = ct("0.6480121455331503208705669145595995298479983344533984988806949082338790572395468688493909284724971216"); _weight[12] = ct("0.02363589773545442376826921873044047832436878049349748821622300008932827072699686486257968668165021934"); _points[13] = ct("0.5996649478704976551018373593654268159180810688501359806278139203431894217253568566355352104940005754"); _weight[13] = ct("0.03136191451975259960451311523450739540697146877711414235255154582511143225744543683656798934447392143"); _points[14] = ct("0.007664767864806790652510700943612758896490081250185334891650651104295876629089337085527195459046516929"); _weight[14] = ct("0.03414270443637351996552524689520019651518918125519284231276373992492543701158246339820206496302363977"); _points[15] = ct("0.5503322608308270557491787984340267743359031321325234333208060314419409333934168725488976010462177834"); _weight[15] = ct("0.04016730562047342836983353438926568287679859907672033401806590163348537364732569259646213424815701809"); _points[16] = ct("0.5005043712628964789717639236953963031984790603234627725767742098965776650636318606390262908257531406"); _weight[16] = ct("0.04980994243944509670193186882596801360805780285331470412300413488400333743558037202503741391583451747"); _points[17] = ct("0.0187669462746132244982993301440387916639043908855580554548242427097167553740409721090435065543842118"); _weight[17] = ct("0.05206201194506336946652736896631086980047779181323752545621446604559586912360486216640464809850709849"); _points[18] = ct("0.4506764885015598873510899584766044215966881241176557888841618510954362349594222860652999748365539745"); _weight[18] = ct("0.05994396892391193201878777221886819034342923382714188936785401233706685684647954234713000168528380992"); _points[19] = ct("0.0346564195659897349491044844339792828709394875646473158245898065449187036414264888486758751330533654"); _weight[19] = ct("0.06797009893843161497359823823660113226698137894136207676183867733482609286998692739265881943481490805"); _points[20] = ct("0.4013438224374185454639967766405275317142917022652449466333117794386845094513689829895546561946178324"); _weight[20] = ct("0.07013099742401690013591360102740147731104180921542862503107396753093730582466635836943847279118991919"); _points[21] = ct("0.3529966616853502786154550912575915364162723119239058502674939729539710162974658936315002971501451098"); _weight[21] = ct("0.07986001209119680090675229090743842319473780511267993616803209051048773098007336509737306748332389762"); _points[22] = ct("0.05517557808804576973579901521230398806718249322486323341936662310406570235218106947237236467595813226"); _weight[22] = ct("0.08130576744926203003727351913523010351524516224444640024452683616344850950559158640251626220781181102"); _points[23] = ct("0.3061155007205121813665886906735831563842230803361353335661166203013891520931517709134796871698281319"); _weight[23] = ct("0.08857497394178217650471618391876129842077745883814547442007841660655316881345758283854245886546129746"); _points[24] = ct("0.080120567112325535828402317065571442809308606707266764109231947703747384584007510546030547316032919"); _weight[24] = ct("0.09165404412254467064066511550040554298695455034951684961821682398973282747671045386111241554317353069"); _points[25] = ct("0.2611662643784974751033364418861637841052167095569197616325843294380357783689767519724808893027702637"); _weight[25] = ct("0.0957084022537584356706622834178274651556869909900460229728119906274110824605147609337241300199247589"); _points[26] = ct("0.1092434970626521088746731873448846222774206414347470411530922780957733620062425548835010678261700806"); _weight[26] = ct("0.09876432908795536536032697004673551868704851460757200597881816491701736581480140253736911574432935214"); _points[27] = ct("0.2185956771518845796303573075738189314253271962040366483829882206456924780212396799680806333911303056"); _weight[27] = ct("0.1007186117616301279878554305959197341608245889317283916519828674052671542386577064173516389649996562"); _points[28] = ct("0.1422549415999572144877609341053898829708731999301570680786197421573754663025852228845161221643511937"); _weight[28] = ct("0.1025585393150491257467352768657020962566165514453482039316467571702515714029648271882670353598411089"); _points[29] = ct("0.1788268232673087628783417984246983287220358061763450736249227518897393446664815732877331590542564701"); _weight[29] = ct("0.1031278694745945415596052946177605117292110687637337979963517529456830375931435175722210364638955055"); break; // order 60,61 case 60 : case 61 : delivered_order = 61; _points.resize(31); _weight.resize(31); _points[0] = ct("0.9937689943617638927613642550978404132193052847562085323183044817501866272149029814389654785747097187"); _weight[0] = ct("0.000001269380626764678675373195326975758127251201208308023241385711948424755100169194183552495211808790648"); _points[1] = ct("0.9833203701304175412485368480405225262637155639849370527489909821657295035574559858424684689497338574"); _weight[1] = ct("0.00001414938875337667805842756312550972005132023758238594466807507236888151577830837913556555707754238027"); _points[2] = ct("0.9683740118091604909480627251752021631877538352896943636065161160288890490739816800738966445710808703"); _weight[2] = ct("0.00006863667359946888101889453121545292318816146796189038823923159828041558018051222520524730639664121677"); _points[3] = ct("0.9490615100934992658665533661080479770940064242550734057590726835551016985542145903458461174891410266"); _weight[3] = ct("0.0002225184113616753332835954161816580608307938220209914664726703106957494701509062705922833939390795155"); _points[4] = ct("0.9255615822969551781356416726446810501492182917520502742877697614194101962468919439115832052932058982"); _weight[4] = ct("0.0005657189666091238390709933068514304280659458878866494461459971250893209363885838891569990679795923031"); _points[5] = ct("0.8980931407181669215572452752900580046388620566439707644527159091729569427638691092610084112862033889"); _weight[5] = ct("0.001220041621260954623648068103750166494687433751337417055023692920392477150831347375208885934591540607"); _points[6] = ct("0.8669124518396082568693596616154962977199040720951216992805820343587833819211852462891270723734944261"); _weight[6] = ct("0.002333953705311331245464177602173047072288137060715168141773548841446522030992039657050969440578857492"); _points[7] = ct("0.8323105489456515383744404260031629487070666431913964811955248376360356215462432754715923979789363373"); _weight[7] = ct("0.004072567301324925286978191910109165210998809923518336725405684136878371982652710248244288816607680173"); _points[8] = ct("0.7946104527758169326169679366928319864361859757363904011714581588637172599413472813223525772026136789"); _weight[8] = ct("0.006603470707394316985994280362337310811861259335771870656920474608040126953653365813322975171532715797"); _points[9] = ct("0.7541641319977899149388944264594135600637795973965264582163907849633878659064268645380961165020694247"); _weight[9] = ct("0.01007952176991829850305258664289729474571005385425765929827171877545918882642476290287480815922844768"); _points[10] = ct("0.001369365209100103662902538016497745627238368452352123490012738406772631849672261901196138706142526928"); _weight[10] = ct("0.01401206490544436609023237121587349969746045006567761855081695008238920197145638880861484379937998666"); _points[11] = ct("0.7113492068095685558133006667709819451575054362840455447176740142822369749162251926869838973346927698"); _weight[11] = ct("0.01462008082783841976253308183893206231436847698410446515106255101009664107357060645472473645139699297"); _points[12] = ct("0.6665654183773303861601326760614604743638563595328351949371522965073714357445225242299623003309299524"); _weight[12] = ct("0.0202924034506888834074595019625389661145966542394859226818867916101663400848195357909655861316795088"); _points[13] = ct("0.6202308940878964763528673529670363355339785112518597470011666286148975401503787651670787009253429759"); _weight[13] = ct("0.02709500690386953751069178406838636815384967226318121133814435788253336859351359886090392628083630055"); _points[14] = ct("0.007201060193187964367610144103097238265492936079471944871780273309543373182405493269711341122292980795"); _weight[14] = ct("0.03211210056592242810234944055571401839762527500713589024854398810028566527822993288311027606844957208"); _points[15] = ct("0.5727782422577024113870603024175540683472059621151315030913358644137301739485372481202450035572725181"); _weight[15] = ct("0.03494475743428021057568935242276602073648520792237513277063007881830750670821227031289900085144260704"); _points[16] = ct("0.5246505122103465455728183462099190147096086687630914369775031785647986088465765153290482473234440025"); _weight[16] = ct("0.04366919988107116389230886514702208452192610172539603303155281880114132121310772290910736617814420272"); _points[17] = ct("0.01763556469398653294408221167167162733992627300109424080406116588738610893975770523667372303912533056"); _weight[17] = ct("0.04905514352007358740541302270051117036844203516552518776904458507336171955803915816081656601013491224"); _points[18] = ct("0.4762970571775839012599109438642786787910227011918298028869481968383657046401344160723604121339610397"); _weight[18] = ct("0.05300528235407393210593432792415778543059070542062211133149380520643792420434901154289638364872976669"); _points[19] = ct("0.4281693385154156194417410742899825270370966980210852141448274402465912219366930868936595777620858797"); _weight[19] = ct("0.06260514491381266112476446763960717503457148868267332156770556143624906440752520753898794314174248398"); _points[20] = ct("0.03257779777966460886729942692136668100246248118137555022234282287177062321775785540900615891817245201"); _weight[20] = ct("0.06421499003447563667095761947959886068101567810299905758943015986959607413434210190727781793751764501"); _points[21] = ct("0.3807167103369646932919817405792130746606355782010403499486364214947528760107143133850084127060875174"); _weight[21] = ct("0.07204908076371079309214829918846290043710821174646453642360675733877644714506224903242378673973541619"); _points[22] = ct("0.05188853615392920947892793281212631775109602038992669350693691676633220365356651819015841212998281432"); _weight[22] = ct("0.07708465591944440214978664678877579601642420763348919100177459902890693290204556050005832293398972658"); _points[23] = ct("0.3343822238776351252419685447725649719691406591568741892752991492068380593197644708700909207098419998"); _weight[23] = ct("0.08086518702868964921973768964419167020096598662788053379862951223461825278781407685710065195767206447"); _points[24] = ct("0.07538754998514038394719127514008188990831275431228255760504153387312193075577455329791578743446834647"); _weight[24] = ct("0.08727993087125598404851885924736203445983237573749491484102820440464420680359587863705024778690839844"); _points[25] = ct("0.2895984907391475920138782464308026880200802349630140545217731202754357179091084031758311229993710084"); _weight[25] = ct("0.08855464875380005756652072587576624284557300886023695065934716903300558691518263136396252574033032507"); _points[26] = ct("0.10285545867509340672666309459934025824749333553664562240979626482386876152189922577567755172827218"); _weight[26] = ct("0.09455543857311113942533268852024714918001646007576128813201633172025531623575828932114719978313621885"); _points[27] = ct("0.2467836436155710933199228384538418511090271873523499710413024876413592298225490102948311490242624505"); _weight[27] = ct("0.09462109265174807424873122469747347887669228616198273398437836689671301713817820752750902650005237804"); _points[28] = ct("0.2063374321933079647369611133634897836240770185127581624195509150737302861230656791747631614142527725"); _weight[28] = ct("0.09860204997970906763399803849822200678637561736800941509032055186211162575531237866562542497106307103"); _points[29] = ct("0.1340358114983876564339860740140341196816667539203883664849981452786512463510185666317257255430747126"); _weight[29] = ct("0.09881291012170006693456267092177765186618637716012470654782718891302456217838158452385974238915451355"); _points[30] = ct("0.1686374906442098356617268634134017813732783166791782966045346757082471444333592363931357649357351428"); _weight[30] = ct("0.1001003159524530363104180663619783799874178898404524336779305249101130790426842115444418169199692081"); break; default : DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << p << " not supported!"); } } template Jacobi2QuadratureRule::Jacobi2QuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; Jacobi2QuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_Jacobi2_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/jacobiNquadrature.hh000066400000000000000000000137671411346603000263230ustar00rootroot00000000000000#ifndef DUNE_GEOMETRY_QUADRATURERULES_JACOBI_N_0_H #define DUNE_GEOMETRY_QUADRATURERULES_JACOBI_N_0_H #include #include #include #include #include #include #include #include namespace Dune { /* * This class calculates 1D quadrature rules of dynamic order, that respect the * weightfunctions resulting from the conical product. * For quadrature rules with order <= highest order (61) and dimension <= 3 exact quadrature rules are used. * Else the quadrature rules are computed by Lapack and thus a floating point type is required. * For more information see the comment in `tensorproductquadrature.hh` * */ template class JacobiNQuadratureRule; template using JacobiNQuadratureRule1D = JacobiNQuadratureRule; template class JacobiNQuadratureRule : public QuadratureRule { public: // compile time parameters enum { dim=1 }; private: typedef QuadratureRule Rule; friend class QuadratureRuleFactory; template< class ctype, int dimension> friend class TensorProductQuadratureRule; explicit JacobiNQuadratureRule (int const order, int const alpha=0) : Rule( GeometryTypes::line ) { if (unsigned(order) > maxOrder()) DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule " << order << " not supported!"); auto&& rule = decideRule(order,alpha); for( auto qpoint : rule ) this->push_back(qpoint); this->delivered_order = 2*rule.size()-1; } static unsigned maxOrder() { return 127; // can be changed } QuadratureRule decideRule(int const degree, int const alpha) { const auto maxOrder = std::min( unsigned(GaussQuadratureRule1D::highest_order), std::min( unsigned(Jacobi1QuadratureRule1D::highest_order), unsigned(Jacobi2QuadratureRule1D::highest_order)) ); return unsigned(degree) < maxOrder ? decideRuleExponent(degree,alpha) : UseLapackOrError(degree, alpha); } #if HAVE_LAPACK template::value)>* = nullptr> QuadratureRule UseLapackOrError( int const degree, int const alpha) { DUNE_THROW(QuadratureOrderOutOfRange, "Quadrature rule with degree: "<< degree << " and jacobi exponent: "<< alpha<< " is not supported for this type!"); } template::value>* = nullptr> QuadratureRule UseLapackOrError( int const degree, int const alpha) { return jacobiNodesWeights(degree, alpha); } #else template QuadratureRule UseLapackOrError( int const, int const) { DUNE_THROW(NotImplemented, "LAPACK must be enable to use JacobiN quadrature rules."); } #endif QuadratureRule decideRuleExponent(int const degree, int const alpha) { switch(alpha) { case 0 : return QuadratureRules::rule(GeometryTypes::line, degree, QuadratureType::GaussLegendre); case 1 : { // scale already existing weights by 0.5 auto&& rule = QuadratureRules::rule(GeometryTypes::line, degree, QuadratureType::GaussJacobi_1_0); QuadratureRule quadratureRule; quadratureRule.reserve(rule.size()); for( auto qpoint : rule ) quadratureRule.push_back(QuadraturePoint(qpoint.position(),ct(0.5)*qpoint.weight())); return quadratureRule; } case 2 : { // scale already existing weights by 0.25 auto&& rule = QuadratureRules::rule(GeometryTypes::line, degree, QuadratureType::GaussJacobi_2_0); QuadratureRule quadratureRule; quadratureRule.reserve(rule.size()); for( auto qpoint : rule ) quadratureRule.push_back(QuadraturePoint(qpoint.position(),ct(0.25)*qpoint.weight())); return quadratureRule; } default : return UseLapackOrError(degree,alpha); } } #if HAVE_LAPACK // computes the nodes and weights for the weight function (1-x)^alpha, which are exact for given polynomials with degree "degree" template::value>* = nullptr> QuadratureRule jacobiNodesWeights(int const degree, int const alpha) { using std::sqrt; // compute the degree of the needed jacobi polynomial const int n = degree/2 +1; DynamicMatrix J(n,n,0); J[0][0] = -double(alpha)/(2 + alpha); for(int i=1; i > eigenValues(n,0); std::vector > eigenVectors(n, DynamicVector(n,0)); DynamicMatrixHelp::eigenValuesNonSym(J, eigenValues, &eigenVectors); double mu = 1.0/(alpha + 1); QuadratureRule quadratureRule; quadratureRule.reserve(n); for (int i=0; i node(1,0.5*eigenValues[i].real() + 0.5); // bundle the nodes and the weights QuadraturePoint temp(node, weight); quadratureRule.push_back(temp); } return quadratureRule; } #endif }; } #endif dune-geometry-2.8.0/dune/geometry/quadraturerules/pointquadrature.hh000066400000000000000000000020221411346603000260650ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_QUADRATURE_POINT_HH #define DUNE_GEOMETRY_QUADRATURE_POINT_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /** \brief Quadrature for a point (0D) */ template class PointQuadratureRule : public QuadratureRule { // compile time parameters enum { dim=0 }; friend class QuadratureRuleFactory; PointQuadratureRule () : QuadratureRule(GeometryTypes::vertex) { FieldVector point(0.0); // Any function is integrated exactly, hence the order is infinite this->delivered_order = std::numeric_limits::max(); this->push_back(QuadraturePoint(point, 1.0)); } ~PointQuadratureRule(){} }; } // end namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_POINT_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/prismquadrature.hh000066400000000000000000000110261411346603000260720ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_QUADRATURE_PRISM_HH #define DUNE_GEOMETRY_QUADRATURE_PRISM_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /*********************************** * quadrature for Prism **********************************/ /** \brief Quadrature rules for prisms \ingroup Quadrature */ template class PrismQuadratureRule; /** \brief Quadrature rules for prisms \ingroup Quadrature */ template class PrismQuadratureRule : public QuadratureRule { public: /** \brief The highest quadrature order available */ enum { highest_order = 2 }; private: friend class QuadratureRuleFactory; PrismQuadratureRule(int p); ~PrismQuadratureRule(){} }; /** \todo Please doc me! */ template class PrismQuadraturePoints; /** \brief Singleton holding the Prism Quadrature points \ingroup Quadrature */ template struct PrismQuadraturePointsSingleton {}; /** \brief Singleton holding the Prism Quadrature points \ingroup Quadrature */ template<> struct PrismQuadraturePointsSingleton<3> { static PrismQuadraturePoints<3> prqp; }; /** \todo Please doc me! */ template<> class PrismQuadraturePoints<3> { public: enum { MAXP=6}; enum { highest_order=2 }; //! initialize quadrature points on the interval for all orders PrismQuadraturePoints () { int m = 0; O[m] = 0; // polynom degree 0 ??? m = 6; G[m][0][0] = 0.0; G[m][0][1] = 0.0; G[m][0][2] = 0.0; G[m][1][0] = 1.0; G[m][1][1] = 0.0; G[m][1][2] = 0.0; G[m][2][0] = 0.0; G[m][2][1] = 1.0; G[m][2][2] = 0.0; G[m][3][0] = 0.0; G[m][3][1] = 0.0; G[m][3][2] = 1.0; G[m][4][0] = 1.0; G[m][4][1] = 0.0; G[m][4][2] = 1.0; G[m][5][0] = 0.0; G[m][5][1] = 0.1; G[m][5][2] = 1.0; W[m][0] = 0.16666666666666666 / 2.0; W[m][1] = 0.16666666666666666 / 2.0; W[m][2] = 0.16666666666666666 / 2.0; W[m][3] = 0.16666666666666666 / 2.0; W[m][4] = 0.16666666666666666 / 2.0; W[m][5] = 0.16666666666666666 / 2.0; O[m] = 0; // verify ???????? // polynom degree 2 ??? m = 6; G[m][0][0] =0.66666666666666666 ; G[m][0][1] =0.16666666666666666 ; G[m][0][2] =0.211324865405187 ; G[m][1][0] = 0.16666666666666666; G[m][1][1] =0.66666666666666666 ; G[m][1][2] = 0.211324865405187; G[m][2][0] = 0.16666666666666666; G[m][2][1] = 0.16666666666666666; G[m][2][2] = 0.211324865405187; G[m][3][0] = 0.66666666666666666; G[m][3][1] = 0.16666666666666666; G[m][3][2] = 0.788675134594813; G[m][4][0] = 0.16666666666666666; G[m][4][1] = 0.66666666666666666; G[m][4][2] = 0.788675134594813; G[m][5][0] = 0.16666666666666666; G[m][5][1] = 0.16666666666666666; G[m][5][2] = 0.788675134594813; W[m][0] = 0.16666666666666666 / 2.0; W[m][1] = 0.16666666666666666 / 2.0; W[m][2] = 0.16666666666666666 / 2.0; W[m][3] = 0.16666666666666666 / 2.0; W[m][4] = 0.16666666666666666 / 2.0; W[m][5] = 0.16666666666666666 / 2.0; O[m] = 2; // verify ???????? } /** \todo Please doc me! */ FieldVector point(int m, int i) { return G[m][i]; } /** \todo Please doc me! */ double weight (int m, int i) { return W[m][i]; } /** \todo Please doc me! */ int order (int m) { return O[m]; } private: FieldVector G[MAXP+1][MAXP]; //positions double W[MAXP+1][MAXP]; // weights associated with points int O[MAXP+1]; // order of the rule }; template PrismQuadratureRule::PrismQuadratureRule(int /* p */) : QuadratureRule(GeometryTypes::prism) { int m=6; this->delivered_order = PrismQuadraturePointsSingleton<3>::prqp.order(m); for(int i=0; i local = PrismQuadraturePointsSingleton<3>::prqp.point(m,i); ct weight = PrismQuadraturePointsSingleton<3>::prqp.weight(m,i); // put in container this->push_back(QuadraturePoint(local,weight)); } } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_PRISM_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/quadraturerules.cc000066400000000000000000000023011411346603000260540ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #include "config.h" #define DUNE_NO_EXTERN_QUADRATURERULES #include "../quadraturerules.hh" #undef DUNE_NO_EXTERN_QUADRATURERULES namespace Dune { /** Singleton holding the Gauss points on the interval */ SimplexQuadraturePoints<2> SimplexQuadraturePointsSingleton<2>::sqp; /** Singleton holding the SimplexQuadrature points dim==3 */ SimplexQuadraturePoints<3> SimplexQuadraturePointsSingleton<3>::sqp; /** Singleton holding the Prism Quadrature points */ PrismQuadraturePoints<3> PrismQuadraturePointsSingleton<3>::prqp; // explicit template instatiation template class GaussLobattoQuadratureRule; template class GaussQuadratureRule; template class GaussRadauLeftQuadratureRule; template class GaussRadauRightQuadratureRule; template class Jacobi1QuadratureRule; template class Jacobi2QuadratureRule; template class JacobiNQuadratureRule; template class PrismQuadratureRule; template class SimplexQuadratureRule; template class SimplexQuadratureRule; } // namespace dune-geometry-2.8.0/dune/geometry/quadraturerules/simplexquadrature.hh000066400000000000000000001207171411346603000264310ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_QUADRATURE_SIMPLEX_HH #define DUNE_GEOMETRY_QUADRATURE_SIMPLEX_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for Simplices/Triangle *************************************************/ /** \brief Quadrature rules for simplices \ingroup Quadrature */ template class SimplexQuadratureRule; /** \brief Quadrature rules for triangles \ingroup Quadrature */ template class SimplexQuadratureRule : public QuadratureRule { public: /** \brief The highest quadrature order available */ enum { highest_order = 12 }; private: friend class QuadratureRuleFactory; SimplexQuadratureRule (int p); ~SimplexQuadratureRule(){} }; /** \brief Quadrature rules for tetrahedra \ingroup Quadrature */ template class SimplexQuadratureRule : public QuadratureRule { public: /** \brief The highest quadrature order available */ enum { highest_order = 5 }; private: friend class QuadratureRuleFactory; SimplexQuadratureRule (int p); ~SimplexQuadratureRule(){} }; //! template class SimplexQuadraturePoints; /** Singleton holding the Gauss points on the interval */ template struct SimplexQuadraturePointsSingleton {}; template<> struct SimplexQuadraturePointsSingleton<2> { static SimplexQuadraturePoints<2> sqp; }; template<> struct SimplexQuadraturePointsSingleton<3> { static SimplexQuadraturePoints<3> sqp; }; template<> class SimplexQuadraturePoints<2> { public: enum { MAXP=33}; enum { highest_order=12 }; //! initialize quadrature points on the interval for all orders SimplexQuadraturePoints () { init(); } void init() { int m = 0; O[m] = 0; // polynom degree 1 // Rule t2-1-1 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 1-1, P. 307, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 1; G[m][0][0] = 0.333333333333333333333333333333333; G[m][0][1] = 0.333333333333333333333333333333333; W[m][0] = 0.5; O[m] = 1; // polynom degree 2 // symmetric // Rule t2-2-3a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 2-1, P. 307, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 3; G[m][0][0] = 4.0/6.0; G[m][0][1] = 1.0/6.0; G[m][1][0] = 1.0/6.0; G[m][1][1] = 4.0/6.0; G[m][2][0] = 1.0/6.0; G[m][2][1] = 1.0/6.0; W[m][0] = 0.5/3.0; W[m][1] = 0.5/3.0; W[m][2] = 0.5/3.0; O[m] = 2; // polynom degree 3 // symmetric // Rule t2-3-4a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 3-1, P. 308, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 4; G[m][0][0] = 10.0/30.0; G[m][0][1] = 10.0/30.0; G[m][1][0] = 18.0/30.0; G[m][1][1] = 6.0/30.0; G[m][2][0] = 6.0/30.0; G[m][2][1] = 18.0/30.0; G[m][3][0] = 6.0/30.0; G[m][3][1] = 6.0/30.0; W[m][0] = 0.5 * -27.0/48.0; W[m][1] = 0.5 * 25.0/48.0; W[m][2] = 0.5 * 25.0/48.0; W[m][3] = 0.5 * 25.0/48.0; O[m] = 3; // polynomial degree 4 // symmetric points // Rule t2-4-6a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Appendix II, D.A. Dunavant, High degree efficient symmetrical Gaussian quadrature rules for the triangle m = 6; G[m][0][0] = 0.81684757298045851308085707319560; G[m][0][1] = 0.091576213509770743459571463402202; G[m][1][0] = 0.091576213509770743459571463402202; G[m][1][1] = 0.81684757298045851308085707319560; G[m][2][0] = 0.091576213509770743459571463402202; G[m][2][1] = 0.091576213509770743459571463402202; G[m][3][0] = 0.10810301816807022736334149223390; G[m][3][1] = 0.44594849091596488631832925388305; G[m][4][0] = 0.44594849091596488631832925388305; G[m][4][1] = 0.10810301816807022736334149223390; G[m][5][0] = 0.44594849091596488631832925388305; G[m][5][1] = 0.44594849091596488631832925388305; W[m][0] = 0.5 * 0.10995174365532186763832632490021; W[m][1] = 0.5 * 0.10995174365532186763832632490021; W[m][2] = 0.5 * 0.10995174365532186763832632490021; W[m][3] = 0.5 * 0.22338158967801146569500700843312; W[m][4] = 0.5 * 0.22338158967801146569500700843312; W[m][5] = 0.5 * 0.22338158967801146569500700843312; O[m] = 4; // polynomial degree 5 // symmetric points // Rule t2-5-7 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 5-1, P. 314, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 7; G[m][0][0] = 0.333333333333333333333333333333333; G[m][0][1] = 0.333333333333333333333333333333333; G[m][1][0] = 0.79742698535308732239802527616975; G[m][1][1] = 0.1012865073234563388009873619151; G[m][2][0] = 0.10128650732345633880098736191512; G[m][2][1] = 0.79742698535308732239802527616975; G[m][3][0] = 0.10128650732345633880098736191512; G[m][3][1] = 0.10128650732345633880098736191512; G[m][4][0] = 0.05971587178976982045911758097311; G[m][4][1] = 0.47014206410511508977044120951345; G[m][5][0] = 0.47014206410511508977044120951345; G[m][5][1] = 0.05971587178976982045911758097311; G[m][6][0] = 0.47014206410511508977044120951345; G[m][6][1] = 0.47014206410511508977044120951345; W[m][0] = 0.5 * 0.225; W[m][1] = 0.5 * 0.12593918054482715259568394550018; W[m][2] = 0.5 * 0.12593918054482715259568394550018; W[m][3] = 0.5 * 0.12593918054482715259568394550018; W[m][4] = 0.5 * 0.13239415278850618073764938783315; W[m][5] = 0.5 * 0.13239415278850618073764938783315; W[m][6] = 0.5 * 0.13239415278850618073764938783315; O[m] = 5; // polynomial degree 6 /* 12 inner Gauss points, positive weights */ // Rule t2-6-12a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Appendix II, D.A. Dunavant, High degree efficient symmetrical Gaussian quadrature rules for the triangle m=12; G[m][0][0] = 0.063089014491502228340331602870819; G[m][0][1] = 0.063089014491502228340331602870819; G[m][1][0] = 0.063089014491502228340331602870819; G[m][1][1] = 0.87382197101699554331933679425836; G[m][2][0] = 0.87382197101699554331933679425836; G[m][2][1] = 0.063089014491502228340331602870819; G[m][3][0] = 0.24928674517091042129163855310702; G[m][3][1] = 0.24928674517091042129163855310702; G[m][4][0] = 0.24928674517091042129163855310702; G[m][4][1] = 0.50142650965817915741672289378596; G[m][5][0] = 0.50142650965817915741672289378596; G[m][5][1] = 0.24928674517091042129163855310702; G[m][6][0] = 0.053145049844816947353249671631398; G[m][6][1] = 0.31035245103378440541660773395655; G[m][7][0] = 0.053145049844816947353249671631398; G[m][7][1] = 0.63650249912139864723014259441205; G[m][8][0] = 0.31035245103378440541660773395655; G[m][8][1] = 0.053145049844816947353249671631398; G[m][9][0] = 0.31035245103378440541660773395655; G[m][9][1] = 0.63650249912139864723014259441205; G[m][10][0] = 0.63650249912139864723014259441205; G[m][10][1] = 0.053145049844816947353249671631398; G[m][11][0] = 0.63650249912139864723014259441205; G[m][11][1] = 0.31035245103378440541660773395655; W[m][0] = 0.5 * 0.050844906370206816920936809106869; W[m][1] = 0.5 * 0.050844906370206816920936809106869; W[m][2] = 0.5 * 0.050844906370206816920936809106869; W[m][3] = 0.5 * 0.11678627572637936602528961138558; W[m][4] = 0.5 * 0.11678627572637936602528961138558; W[m][5] = 0.5 * 0.11678627572637936602528961138558; W[m][6] = 0.5 * 0.082851075618373575193553456420442; W[m][7] = 0.5 * 0.082851075618373575193553456420442; W[m][8] = 0.5 * 0.082851075618373575193553456420442; W[m][9] = 0.5 * 0.082851075618373575193553456420442; W[m][10] = 0.5 * 0.082851075618373575193553456420442; W[m][11] = 0.5 * 0.082851075618373575193553456420442; O[m] = 6; // polynomial degree 7 /* 12 inner Gauss points, positive weights */ // Rule t2-7-12 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Table 5, K. Gatermann, The construction of symmetric cubature formulas for the square and the triangle m=12; G[m][0][0] = 0.0623822650944021181736830009963499; G[m][0][1] = 0.0675178670739160854425571310508685; G[m][1][0] = 0.0675178670739160854425571310508685; G[m][1][1] = 0.870099867831681796383759867952782; G[m][2][0] = 0.870099867831681796383759867952782; G[m][2][1] = 0.0623822650944021181736830009963499; G[m][3][0] = 0.0552254566569266117374791902756449; G[m][3][1] = 0.321502493851981822666307849199202; G[m][4][0] = 0.321502493851981822666307849199202; G[m][4][1] = 0.623272049491091565596212960525153; G[m][5][0] = 0.623272049491091565596212960525153; G[m][5][1] = 0.0552254566569266117374791902756449; G[m][6][0] = 0.0343243029450971464696306424839376; G[m][6][1] = 0.660949196186735657611980310197799; G[m][7][0] = 0.660949196186735657611980310197799; G[m][7][1] = 0.304726500868167195918389047318263; G[m][8][0] = 0.304726500868167195918389047318263; G[m][8][1] = 0.0343243029450971464696306424839376; G[m][9][0] = 0.515842334353591779257463386826430; G[m][9][1] = 0.277716166976391782569581871393723; G[m][10][0] = 0.277716166976391782569581871393723; G[m][10][1] = 0.20644149867001643817295474177985; G[m][11][0] = 0.20644149867001643817295474177985; G[m][11][1] = 0.515842334353591779257463386826430; W[m][0] = 0.5 * 0.053034056314872502857508360921478; W[m][1] = 0.5 * 0.053034056314872502857508360921478; W[m][2] = 0.5 * 0.053034056314872502857508360921478; W[m][3] = 0.5 * 0.087762817428892110073539806278575; W[m][4] = 0.5 * 0.087762817428892110073539806278575; W[m][5] = 0.5 * 0.087762817428892110073539806278575; W[m][6] = 0.5 * 0.057550085569963171476890993800437; W[m][7] = 0.5 * 0.057550085569963171476890993800437; W[m][8] = 0.5 * 0.057550085569963171476890993800437; W[m][9] = 0.5 * 0.13498637401960554892539417233284; W[m][10] = 0.5 * 0.13498637401960554892539417233284; W[m][11] = 0.5 * 0.13498637401960554892539417233284; O[m] = 7; // polynomial degree 8 /* 16 inner Gauss points, positive weights */ // Rule t2-8-16a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Appendix II, A. Dunavant, High degree efficient symmetrical Gaussian quadrature rules for the triangle m=16; G[m][0][0] = 0.33333333333333333333333333333333; G[m][0][1] = 0.33333333333333333333333333333333; G[m][1][0] = 0.17056930775176020662229350149146; G[m][1][1] = 0.17056930775176020662229350149146; G[m][2][0] = 0.17056930775176020662229350149146; G[m][2][1] = 0.65886138449647958675541299701707; G[m][3][0] = 0.65886138449647958675541299701707; G[m][3][1] = 0.17056930775176020662229350149146; G[m][4][0] = 0.050547228317030975458423550596599; G[m][4][1] = 0.050547228317030975458423550596599; G[m][5][0] = 0.050547228317030975458423550596599; G[m][5][1] = 0.89890554336593804908315289880680; G[m][6][0] = 0.89890554336593804908315289880680; G[m][6][1] = 0.050547228317030975458423550596599; G[m][7][0] = 0.45929258829272315602881551449417; G[m][7][1] = 0.45929258829272315602881551449417; G[m][8][0] = 0.45929258829272315602881551449417; G[m][8][1] = 0.08141482341455368794236897101166; G[m][9][0] = 0.08141482341455368794236897101166; G[m][9][1] = 0.45929258829272315602881551449417; G[m][10][0] = 0.72849239295540428124100037917606; G[m][10][1] = 0.26311282963463811342178578628464; G[m][11][0] = 0.72849239295540428124100037917606; G[m][11][1] = 0.00839477740995760533721383453930; G[m][12][0] = 0.26311282963463811342178578628464; G[m][12][1] = 0.72849239295540428124100037917606; G[m][13][0] = 0.26311282963463811342178578628464; G[m][13][1] = 0.00839477740995760533721383453930; G[m][14][0] = 0.00839477740995760533721383453930; G[m][14][1] = 0.72849239295540428124100037917606; G[m][15][0] = 0.00839477740995760533721383453930; G[m][15][1] = 0.26311282963463811342178578628464; W[m][0] = 0.5 * 0.14431560767778716825109111048906; W[m][1] = 0.5 * 0.10321737053471825028179155029213; W[m][2] = 0.5 * 0.10321737053471825028179155029213; W[m][3] = 0.5 * 0.10321737053471825028179155029213; W[m][4] = 0.5 * 0.032458497623198080310925928341780; W[m][5] = 0.5 * 0.032458497623198080310925928341780; W[m][6] = 0.5 * 0.032458497623198080310925928341780; W[m][7] = 0.5 * 0.095091634267284624793896104388584; W[m][8] = 0.5 * 0.095091634267284624793896104388584; W[m][9] = 0.5 * 0.095091634267284624793896104388584; W[m][10] = 0.5 * 0.027230314174434994264844690073909; W[m][11] = 0.5 * 0.027230314174434994264844690073909; W[m][12] = 0.5 * 0.027230314174434994264844690073909; W[m][13] = 0.5 * 0.027230314174434994264844690073909; W[m][14] = 0.5 * 0.027230314174434994264844690073909; W[m][15] = 0.5 * 0.027230314174434994264844690073909; O[m] = 8; // polynomial degree 9 /* 19 inner Gauss points, positive weights */ // Rule t2-9-19 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Appendix II, A. Dunavant, High degree efficient symmetrical Gaussian quadrature rules for the triangle m=19; G[m][0][0] = 0.333333333333333333333333333333333; G[m][0][1] = 0.333333333333333333333333333333333; G[m][1][0] = 0.48968251919873762778370692483619; G[m][1][1] = 0.48968251919873762778370692483619; G[m][2][0] = 0.48968251919873762778370692483619; G[m][2][1] = 0.02063496160252474443258615032762; G[m][3][0] = 0.02063496160252474443258615032762; G[m][3][1] = 0.48968251919873762778370692483619; G[m][4][0] = 0.43708959149293663726993036443535; G[m][4][1] = 0.43708959149293663726993036443535; G[m][5][0] = 0.43708959149293663726993036443535; G[m][5][1] = 0.12582081701412672546013927112929; G[m][6][0] = 0.12582081701412672546013927112929; G[m][6][1] = 0.43708959149293663726993036443535; G[m][7][0] = 0.18820353561903273024096128046733; G[m][7][1] = 0.18820353561903273024096128046733; G[m][8][0] = 0.18820353561903273024096128046733; G[m][8][1] = 0.62359292876193453951807743906533; G[m][9][0] = 0.62359292876193453951807743906533; G[m][9][1] = 0.18820353561903273024096128046733; G[m][10][0] = 0.044729513394452709865106589966276; G[m][10][1] = 0.044729513394452709865106589966276; G[m][11][0] = 0.044729513394452709865106589966276; G[m][11][1] = 0.91054097321109458026978682006745; G[m][12][0] = 0.91054097321109458026978682006745; G[m][12][1] = 0.044729513394452709865106589966276; G[m][13][0] = 0.74119859878449802069007987352342; G[m][13][1] = 0.036838412054736283634817598783385; G[m][14][0] = 0.74119859878449802069007987352342; G[m][14][1] = 0.22196298916076569567510252769319; G[m][15][0] = 0.036838412054736283634817598783385; G[m][15][1] = 0.74119859878449802069007987352342; G[m][16][0] = 0.036838412054736283634817598783385; G[m][16][1] = 0.22196298916076569567510252769319; G[m][17][0] = 0.22196298916076569567510252769319; G[m][17][1] = 0.74119859878449802069007987352342; G[m][18][0] = 0.22196298916076569567510252769319; G[m][18][1] = 0.036838412054736283634817598783385; W[m][0] = 0.5 * 0.097135796282798833819241982507289; W[m][1] = 0.5 * 0.031334700227139070536854831287209; W[m][2] = 0.5 * 0.031334700227139070536854831287209; W[m][3] = 0.5 * 0.031334700227139070536854831287209; W[m][4] = 0.5 * 0.077827541004774279316739356299404; W[m][5] = 0.5 * 0.077827541004774279316739356299404; W[m][6] = 0.5 * 0.077827541004774279316739356299404; W[m][7] = 0.5 * 0.079647738927210253032891774264045; W[m][8] = 0.5 * 0.079647738927210253032891774264045; W[m][9] = 0.5 * 0.079647738927210253032891774264045; W[m][10] = 0.5 * 0.025577675658698031261678798559000; W[m][11] = 0.5 * 0.025577675658698031261678798559000; W[m][12] = 0.5 * 0.025577675658698031261678798559000; W[m][13] = 0.5 * 0.043283539377289377289377289377289; W[m][14] = 0.5 * 0.043283539377289377289377289377289; W[m][15] = 0.5 * 0.043283539377289377289377289377289; W[m][16] = 0.5 * 0.043283539377289377289377289377289; W[m][17] = 0.5 * 0.043283539377289377289377289377289; W[m][18] = 0.5 * 0.043283539377289377289377289377289; O[m] = 9; // polynomial degree 10 /* 25 inner Gauss points, positive weights */ // Rule t2-10-25a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: M.E. Laursen and M. Gellert, Some criteria for numerically integrated matrices and quadrature formulas for triangles m= 25; G[m][0][0] = 0.333333333333333333333333333333333; G[m][0][1] = 0.333333333333333333333333333333333; G[m][1][0] = 0.42508621060209057296952951163804; G[m][1][1] = 0.42508621060209057296952951163804; G[m][2][0] = 0.42508621060209057296952951163804; G[m][2][1] = 0.14982757879581885406094097672391; G[m][3][0] = 0.14982757879581885406094097672391; G[m][3][1] = 0.42508621060209057296952951163804; G[m][4][0] = 0.023308867510000190714466386895980; G[m][4][1] = 0.023308867510000190714466386895980; G[m][5][0] = 0.023308867510000190714466386895980; G[m][5][1] = 0.95338226497999961857106722620804; G[m][6][0] = 0.95338226497999961857106722620804; G[m][6][1] = 0.023308867510000190714466386895980; G[m][7][0] = 0.62830740021349255642083766607883; G[m][7][1] = 0.22376697357697300622568649026820; G[m][8][0] = 0.62830740021349255642083766607883; G[m][8][1] = 0.14792562620953443735347584365296; G[m][9][0] = 0.22376697357697300622568649026820; G[m][9][1] = 0.62830740021349255642083766607883; G[m][10][0] = 0.22376697357697300622568649026820; G[m][10][1] = 0.14792562620953443735347584365296; G[m][11][0] = 0.14792562620953443735347584365296; G[m][11][1] = 0.62830740021349255642083766607883; G[m][12][0] = 0.14792562620953443735347584365296; G[m][12][1] = 0.22376697357697300622568649026820; G[m][13][0] = 0.61131382618139764891875500225390; G[m][13][1] = 0.35874014186443146457815530072385; G[m][14][0] = 0.61131382618139764891875500225390; G[m][14][1] = 0.02994603195417088650308969702225; G[m][15][0] = 0.35874014186443146457815530072385; G[m][15][1] = 0.61131382618139764891875500225390; G[m][16][0] = 0.35874014186443146457815530072385; G[m][16][1] = 0.02994603195417088650308969702225; G[m][17][0] = 0.02994603195417088650308969702225; G[m][17][1] = 0.61131382618139764891875500225390; G[m][18][0] = 0.02994603195417088650308969702225; G[m][18][1] = 0.35874014186443146457815530072385; G[m][19][0] = 0.82107206998562937337354441347218; G[m][19][1] = 0.14329537042686714530585663061732; G[m][20][0] = 0.82107206998562937337354441347218; G[m][20][1] = 0.03563255958750348132059895591050; G[m][21][0] = 0.14329537042686714530585663061732; G[m][21][1] = 0.82107206998562937337354441347218; G[m][22][0] = 0.14329537042686714530585663061732; G[m][22][1] = 0.03563255958750348132059895591050; G[m][23][0] = 0.03563255958750348132059895591050; G[m][23][1] = 0.82107206998562937337354441347218; G[m][24][0] = 0.03563255958750348132059895591050; G[m][24][1] = 0.14329537042686714530585663061732; W[m][0] = 0.5 * 0.079894504741239707831247045213386; W[m][1] = 0.5 * 0.071123802232377334639291287398658; W[m][2] = 0.5 * 0.071123802232377334639291287398658; W[m][3] = 0.5 * 0.071123802232377334639291287398658; W[m][4] = 0.5 * 0.0082238186904641955186466203624719; W[m][5] = 0.5 * 0.0082238186904641955186466203624719; W[m][6] = 0.5 * 0.0082238186904641955186466203624719; W[m][7] = 0.5 * 0.045430592296170018007073629243933; W[m][8] = 0.5 * 0.045430592296170018007073629243933; W[m][9] = 0.5 * 0.045430592296170018007073629243933; W[m][10] = 0.5 * 0.045430592296170018007073629243933; W[m][11] = 0.5 * 0.045430592296170018007073629243933; W[m][12] = 0.5 * 0.045430592296170018007073629243933; W[m][13] = 0.5 * 0.037359856234305276826236499001975; W[m][14] = 0.5 * 0.037359856234305276826236499001975; W[m][15] = 0.5 * 0.037359856234305276826236499001975; W[m][16] = 0.5 * 0.037359856234305276826236499001975; W[m][17] = 0.5 * 0.037359856234305276826236499001975; W[m][18] = 0.5 * 0.037359856234305276826236499001975; W[m][19] = 0.5 * 0.030886656884563988782513077004629; W[m][20] = 0.5 * 0.030886656884563988782513077004629; W[m][21] = 0.5 * 0.030886656884563988782513077004629; W[m][22] = 0.5 * 0.030886656884563988782513077004629; W[m][23] = 0.5 * 0.030886656884563988782513077004629; W[m][24] = 0.5 * 0.030886656884563988782513077004629; O[m] = 10; // polynomial degree 11 /* 28 inner Gauss points, positive weights */ // Rule t2-11-28 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: J.N. Lyness and D. Jespersen, Moderate degree symmetric quadrature rules for the triangle m=28; G[m][0][0] = 0.858870281282636704039173938058347; G[m][0][1] = 0.141129718717363295960826061941652; G[m][1][0] = 0.858870281282636704039173938058347; G[m][1][1] = 0.0; G[m][2][0] = 0.141129718717363295960826061941652; G[m][2][1] = 0.858870281282636704039173938058347; G[m][3][0] = 0.141129718717363295960826061941652; G[m][3][1] = 0.0; G[m][4][0] = 0.0; G[m][4][1] = 0.858870281282636704039173938058347; G[m][5][0] = 0.0; G[m][5][1] = 0.141129718717363295960826061941652; G[m][6][0] = 0.333333333333333333333333333333333; G[m][6][1] = 0.333333333333333333333333333333333; G[m][7][0] = 0.025989140928287395260032485498841; G[m][7][1] = 0.025989140928287395260032485498841; G[m][8][0] = 0.025989140928287395260032485498841; G[m][8][1] = 0.94802171814342520947993502900232; G[m][9][0] = 0.94802171814342520947993502900232; G[m][9][1] = 0.025989140928287395260032485498841; G[m][10][0] = 0.094287502647922495630569776275405; G[m][10][1] = 0.094287502647922495630569776275405; G[m][11][0] = 0.094287502647922495630569776275405; G[m][11][1] = 0.81142499470415500873886044744919; G[m][12][0] = 0.81142499470415500873886044744919; G[m][12][1] = 0.094287502647922495630569776275405; G[m][13][0] = 0.49463677501721381374163260230644; G[m][13][1] = 0.49463677501721381374163260230644; G[m][14][0] = 0.49463677501721381374163260230644; G[m][14][1] = 0.01072644996557237251673479538713; G[m][15][0] = 0.01072644996557237251673479538713; G[m][15][1] = 0.49463677501721381374163260230644; G[m][16][0] = 0.20734338261451133345293402411297; G[m][16][1] = 0.20734338261451133345293402411297; G[m][17][0] = 0.20734338261451133345293402411297; G[m][17][1] = 0.58531323477097733309413195177407; G[m][18][0] = 0.58531323477097733309413195177407; G[m][18][1] = 0.20734338261451133345293402411297; G[m][19][0] = 0.43890780570049209506106538163613; G[m][19][1] = 0.43890780570049209506106538163613; G[m][20][0] = 0.43890780570049209506106538163613; G[m][20][1] = 0.12218438859901580987786923672775; G[m][21][0] = 0.12218438859901580987786923672775; G[m][21][1] = 0.43890780570049209506106538163613; G[m][22][0] = 0.67793765488259040154212614118875; G[m][22][1] = 0.044841677589130443309052391468801; G[m][23][0] = 0.67793765488259040154212614118875; G[m][23][1] = 0.27722066752827915514882146734245; G[m][24][0] = 0.044841677589130443309052391468801; G[m][24][1] = 0.67793765488259040154212614118875; G[m][25][0] = 0.044841677589130443309052391468801; G[m][25][1] = 0.27722066752827915514882146734245; G[m][26][0] = 0.27722066752827915514882146734245; G[m][26][1] = 0.67793765488259040154212614118875; G[m][27][0] = 0.27722066752827915514882146734245; G[m][27][1] = 0.044841677589130443309052391468801; W[m][0] = 0.5 * 0.0073623837833005542642588950473806; W[m][1] = 0.5 * 0.0073623837833005542642588950473806; W[m][2] = 0.5 * 0.0073623837833005542642588950473806; W[m][3] = 0.5 * 0.0073623837833005542642588950473806; W[m][4] = 0.5 * 0.0073623837833005542642588950473806; W[m][5] = 0.5 * 0.0073623837833005542642588950473806; W[m][6] = 0.5 * 0.087977301162232238798093169321456; W[m][7] = 0.5 * 0.0087443115537360230495164287998252; W[m][8] = 0.5 * 0.0087443115537360230495164287998252; W[m][9] = 0.5 * 0.0087443115537360230495164287998252; W[m][10] = 0.5 * 0.038081571993934937515024339435614; W[m][11] = 0.5 * 0.038081571993934937515024339435614; W[m][12] = 0.5 * 0.038081571993934937515024339435614; W[m][13] = 0.5 * 0.018855448056131292058476782591115; W[m][14] = 0.5 * 0.018855448056131292058476782591115; W[m][15] = 0.5 * 0.018855448056131292058476782591115; W[m][16] = 0.5 * 0.072159697544739526124029988586463; W[m][17] = 0.5 * 0.072159697544739526124029988586463; W[m][18] = 0.5 * 0.072159697544739526124029988586463; W[m][19] = 0.5 * 0.069329138705535899841765650903814; W[m][20] = 0.5 * 0.069329138705535899841765650903814; W[m][21] = 0.5 * 0.069329138705535899841765650903814; W[m][22] = 0.5 * 0.041056315429288566641652314907294; W[m][23] = 0.5 * 0.041056315429288566641652314907294; W[m][24] = 0.5 * 0.041056315429288566641652314907294; W[m][25] = 0.5 * 0.041056315429288566641652314907294; W[m][26] = 0.5 * 0.041056315429288566641652314907294; W[m][27] = 0.5 * 0.041056315429288566641652314907294; O[m] = 11; // polynomial degree 12 /* 33 inner Gauss points, positive weights */ // Rule t2-12-33 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Appendix II, A. Dunavant, High degree efficient symmetrical Gaussian quadrature rules for the triangle m=33; G[m][0][0] = 0.02356522045239; G[m][0][1] = 0.488217389773805; G[m][1][0] = 0.488217389773805; G[m][1][1] = 0.02356522045239; G[m][2][0] = 0.488217389773805; G[m][2][1] = 0.488217389773805; G[m][3][0] = 0.43972439229446; G[m][3][1] = 0.43972439229446; G[m][4][0] = 0.43972439229446; G[m][4][1] = 0.120551215411079; G[m][5][0] = 0.120551215411079; G[m][5][1] = 0.43972439229446; G[m][6][0] = 0.271210385012116; G[m][6][1] = 0.271210385012116; G[m][7][0] = 0.271210385012116; G[m][7][1] = 0.457579229975768; G[m][8][0] = 0.457579229975768; G[m][8][1] = 0.271210385012116; G[m][9][0] = 0.127576145541586; G[m][9][1] = 0.127576145541586; G[m][10][0] = 0.127576145541586; G[m][10][1] = 0.7448477089168279; G[m][11][0] = 0.7448477089168279; G[m][11][1] = 0.127576145541586; G[m][12][0] = 0.02131735045321; G[m][12][1] = 0.02131735045321; G[m][13][0] = 0.02131735045321; G[m][13][1] = 0.9573652990935799; G[m][14][0] = 0.9573652990935799; G[m][14][1] = 0.02131735045321; G[m][15][0] = 0.115343494534698; G[m][15][1] = 0.275713269685514; G[m][16][0] = 0.115343494534698; G[m][16][1] = 0.6089432357797879; G[m][17][0] = 0.275713269685514; G[m][17][1] = 0.115343494534698; G[m][18][0] = 0.275713269685514; G[m][18][1] = 0.6089432357797879; G[m][19][0] = 0.6089432357797879; G[m][19][1] = 0.115343494534698; G[m][20][0] = 0.6089432357797879; G[m][20][1] = 0.275713269685514; G[m][21][0] = 0.022838332222257; G[m][21][1] = 0.28132558098994; G[m][22][0] = 0.022838332222257; G[m][22][1] = 0.6958360867878031; G[m][23][0] = 0.28132558098994; G[m][23][1] = 0.022838332222257; G[m][24][0] = 0.28132558098994; G[m][24][1] = 0.6958360867878031; G[m][25][0] = 0.6958360867878031; G[m][25][1] = 0.022838332222257; G[m][26][0] = 0.6958360867878031; G[m][26][1] = 0.28132558098994; G[m][27][0] = 0.02573405054833; G[m][27][1] = 0.116251915907597; G[m][28][0] = 0.02573405054833; G[m][28][1] = 0.858014033544073; G[m][29][0] = 0.116251915907597; G[m][29][1] = 0.02573405054833; G[m][30][0] = 0.116251915907597; G[m][30][1] = 0.858014033544073; G[m][31][0]= 0.858014033544073; G[m][31][1] =0.02573405054833; G[m][32][0] =0.858014033544073; G[m][32][1]= 0.116251915907597; W[m][0] = 0.5 * 0.025731066440455; W[m][1] = 0.5 * 0.025731066440455; W[m][2] = 0.5 * 0.025731066440455; W[m][3] = 0.5 * 0.043692544538038; W[m][4] = 0.5 * 0.043692544538038; W[m][5] = 0.5 * 0.043692544538038; W[m][6] = 0.5 * 0.062858224217885; W[m][7] = 0.5 * 0.062858224217885; W[m][8] = 0.5 * 0.062858224217885; W[m][9] = 0.5 * 0.034796112930709; W[m][10] = 0.5 * 0.034796112930709; W[m][11] = 0.5 * 0.034796112930709; W[m][12] = 0.5 * 0.006166261051559; W[m][13] = 0.5 * 0.006166261051559; W[m][14] = 0.5 * 0.006166261051559; W[m][15] = 0.5 * 0.040371557766381; W[m][16] = 0.5 * 0.040371557766381; W[m][17] = 0.5 * 0.040371557766381; W[m][18] = 0.5 * 0.040371557766381; W[m][19] = 0.5 * 0.040371557766381; W[m][20] = 0.5 * 0.040371557766381; W[m][21] = 0.5 * 0.022356773202303; W[m][22] = 0.5 * 0.022356773202303; W[m][23] = 0.5 * 0.022356773202303; W[m][24] = 0.5 * 0.022356773202303; W[m][25] = 0.5 * 0.022356773202303; W[m][26] = 0.5 * 0.022356773202303; W[m][27] = 0.5 * 0.017316231108659; W[m][28] = 0.5 * 0.017316231108659; W[m][29] = 0.5 * 0.017316231108659; W[m][30] = 0.5 * 0.017316231108659; W[m][31] = 0.5 * 0.017316231108659; W[m][32] = 0.5 * 0.017316231108659; O[m] = 12; } FieldVector point(int m, int i) { return G[m][i]; } double weight (int m, int i) { return W[m][i]; } int order (int m) { return O[m]; } private: FieldVector G[MAXP+1][MAXP]; double W[MAXP+1][MAXP]; // weights associated with points int O[MAXP+1]; // order of the rule }; template SimplexQuadratureRule::SimplexQuadratureRule(int p) : QuadratureRule(GeometryTypes::triangle) { int m; if (p>SimplexQuadraturePoints<2>::highest_order) DUNE_THROW(QuadratureOrderOutOfRange, "QuadratureRule for order " << p << " and GeometryType " << this->type() << " not available"); switch(p) { case 0 : // to be verified m=1; // to be verified break; case 1 : m=1; break; case 2 : m=3; break; case 3 : m=4; break; case 4 : m=6; break; case 5 : m=7; break; case 6 : m=12; break; case 7 : m=12; break; case 8 : m=16; break; case 9 : m=19; break; case 10 : m=25; break; case 11 : m=28; break; case 12 : m=33; break; default : m=33; } this->delivered_order = SimplexQuadraturePointsSingleton<2>::sqp.order(m); for(int i=0; i local = SimplexQuadraturePointsSingleton<2>::sqp.point(m,i); ct weight = SimplexQuadraturePointsSingleton<2>::sqp.weight(m,i); // put in container this->push_back(QuadraturePoint(local,weight)); } } //! template<> class SimplexQuadraturePoints<3> { public: enum { MAXP=15}; enum { highest_order=5 }; //! initialize quadrature points on the interval for all orders SimplexQuadraturePoints() { init(); } void init() { int m = 0; O[m] = 0; // polynom degree 1 // Rule t3-1-1 of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 1-1, P. 307, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 1; G[m][0][0] = 0.25; G[m][0][1] = 0.25; G[m][0][2] = 0.25; W[m][0] = 1.0/6.0; O[m] = 1; // polynom degree 2 // symmetric // Rule t3-2-4a of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 2-1, P. 307, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 4; static const double m_4_a = 0.585410196624968500; static const double m_4_b = 0.138196601125010500; G[m][0] = m_4_b; G[m][1] = m_4_b; G[m][2] = m_4_b; G[m][3] = m_4_b; G[m][0][0] = m_4_a; G[m][1][1] = m_4_a; G[m][2][2] = m_4_a; W[m][0] = 1.0/4.0/6.0; W[m][1] = 1.0/4.0/6.0; W[m][2] = 1.0/4.0/6.0; W[m][3] = 1.0/4.0/6.0; O[m] = 2; // polynom degree 3 // symmetric // Rule t3-3-8b of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 3-7, P. 309, A.H. Stroud, Approximate Calculation of Multiple Integrals m = 8; G[m][0][0] = 0.0; G[m][0][1] = 0.0; G[m][0][2] = 0.0; G[m][1][0] = 1.0; G[m][1][1] = 0.0; G[m][1][2] = 0.0; G[m][2][0] = 0.0; G[m][2][1] = 1.0; G[m][2][2] = 0.0; G[m][3][0] = 0.0; G[m][3][1] = 0.0; G[m][3][2] = 1.0; G[m][4][0] = 1.0/3.0; G[m][4][1] = 1.0/3.0; G[m][4][2] = 0.0; G[m][5][0] = 1.0/3.0; G[m][5][1] = 0.0; G[m][5][2] = 1.0/3.0; G[m][6][0] = 0.0; G[m][6][1] = 1.0/3.0; G[m][6][2] = 1.0/3.0; G[m][7][0] = 1.0/3.0; G[m][7][1] = 1.0/3.0; G[m][7][2] = 1.0/3.0; W[m][0] = 0.025/6.0; W[m][1] = 0.025/6.0; W[m][2] = 0.025/6.0; W[m][3] = 0.025/6.0; W[m][4] = 0.225/6.0; W[m][5] = 0.225/6.0; W[m][6] = 0.225/6.0; W[m][7] = 0.225/6.0; O[m] = 3; // polynomial degree 5 // symmetric points // Rule t3-5-15a (actual values for weights etc. not available here) of the "Encyclopaedia of Cubature Formulas" at // http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html // maintained by Ronald Cools. // For further reference: Rule 5-1, P. 315, A.H. Stroud, Approximate Calculation of Multiple Integrals static const double s_1=0.09197107805272303279; /* (7 - sqrt(15) ) / 34 */ static const double s_2=0.31979362782962990839; /* (7 + sqrt(15) ) / 34 */ static const double t_1=0.72408676584183090164; /* (13 + 3*sqrt(15) ) / 34 */ static const double t_2=0.04061911651111027484; /* (13 - 3*sqrt(15) ) / 34 */ static const double u =0.05635083268962915574; /* (10 - 2*sqrt(15) ) / 40 */ static const double v =0.44364916731037084426; /* (10 + 2*sqrt(15) ) / 40 */ static const double A =0.019753086419753086420; /* 16 / 135 / vol */ static const double B_1=0.011989513963169770001; /* (2665 + 14*sqrt(15) ) / 37800 / vol */ static const double B_2=0.011511367871045397547; /* (2665 - 14*sqrt(15) ) / 37800 / vol */ static const double C =0.0088183421516754850088; /* 20 / 378 / vol */ m=15; G[m][0][0] = 0.25; G[m][0][1] = 0.25; G[m][0][2] = 0.25; G[m][1][0] = s_1; G[m][1][1] = s_1; G[m][1][2] = s_1; G[m][2][0] = t_1; G[m][2][1] = s_1; G[m][2][2] = s_1; G[m][3][0] = s_1; G[m][3][1] = t_1; G[m][3][2] = s_1; G[m][4][0] = s_1; G[m][4][1] = s_1; G[m][4][2] = t_1; G[m][5][0] = s_2; G[m][5][1] = s_2; G[m][5][2] = s_2; G[m][6][0] = t_2; G[m][6][1] = s_2; G[m][6][2] = s_2; G[m][7][0] = s_2; G[m][7][1] = t_2; G[m][7][2] = s_2; G[m][8][0] = s_2; G[m][8][1] = s_2; G[m][8][2] = t_2; G[m][9][0] = v; G[m][9][1] = u; G[m][9][2] = u; G[m][10][0] = u; G[m][10][1] = v; G[m][10][2] = u; G[m][11][0] = u; G[m][11][1] = u; G[m][11][2] = v; G[m][12][0] = v; G[m][12][1] = v; G[m][12][2] = u; G[m][13][0] = v; G[m][13][1] = u; G[m][13][2] = v; G[m][14][0] = u; G[m][14][1] = v; G[m][14][2] = v; W[m][0] = A; W[m][1] = B_1; W[m][2] = B_1; W[m][3] = B_1; W[m][4] = B_1; W[m][5] = B_2; W[m][6] = B_2; W[m][7] = B_2; W[m][8] = B_2; W[m][9] = C; W[m][10] = C; W[m][11] = C; W[m][12] = C; W[m][13] = C; W[m][14] = C; O[m] = 5; } FieldVector point(int m, int i) { return G[m][i]; } double weight (int m, int i) { return W[m][i]; } int order (int m) { return O[m]; } private: FieldVector G[MAXP+1][MAXP]; double W[MAXP+1][MAXP]; // weights associated with points int O[MAXP+1]; // order of the rule }; template SimplexQuadratureRule::SimplexQuadratureRule(int p) : QuadratureRule(GeometryTypes::tetrahedron) { int m; if (p>SimplexQuadraturePoints<3>::highest_order) DUNE_THROW(QuadratureOrderOutOfRange, "QuadratureRule for order " << p << " and GeometryType " << this->type() << " not available"); switch(p) { case 0 : m=1; break; case 1 : m=1; break; case 2 : m=4; break; case 3 : m=8; break; case 4 : case 5 : m=15; break; default : m=15; } this->delivered_order = SimplexQuadraturePointsSingleton<3>::sqp.order(m); for(int i=0; i local = SimplexQuadraturePointsSingleton<3>::sqp.point(m,i); ct weight = SimplexQuadraturePointsSingleton<3>::sqp.weight(m,i); // put in container this->push_back(QuadraturePoint(local,weight)); } } } // end namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_SIMPLEX_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/tensorproductquadrature.hh000066400000000000000000000156721411346603000276660ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_QUADRATURERULES_TENSORPRODUCTQUADRATURE_HH #define DUNE_GEOMETRY_QUADRATURERULES_TENSORPRODUCTQUADRATURE_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif #include #include #include #include namespace Dune { /** * \brief Quadrature rules constructed by tensor and conical multiplication * * \tparam ctype Number type used for quadrature point coordinates and weights * \tparam dim Dimension of the domain of integration */ template< class ctype, int dim > class TensorProductQuadratureRule : public QuadratureRule< ctype, dim > { typedef QuadratureRule Base; typedef QuadraturePoint QPoint; typedef typename QPoint::Vector Vector; typedef QuadratureRule BaseQuadrature; friend class QuadratureRuleFactory; TensorProductQuadratureRule (unsigned int topologyId, unsigned int order, QuadratureType::Enum qt) : Base( GeometryType(topologyId, dim), order ) { enum { bitSize = sizeof(unsigned int)*8 }; std::bitset baseId(topologyId); bool isPrism = baseId[dim-1]; baseId.reset(dim-1); GeometryType baseType(baseId.to_ulong(), dim-1); const BaseQuadrature & baseQuad = QuadratureRules::rule(baseType, order, qt); if (isPrism) tensorProduct(baseQuad, order, qt); else conicalProduct(baseQuad, order, qt); } /** * \brief Creates quadrature rule by tensor multiplication of an arbitrary rule with a rule for a one-dimensional domain * * \param baseQuad Quadrature rule for the base domain * \param order Requested order of the one-dimensional rule * \param qt Type of the one-dimensional rule */ void tensorProduct(const BaseQuadrature & baseQuad, unsigned int order, QuadratureType::Enum qt) { typedef QuadratureRule OneDQuadrature; const OneDQuadrature & onedQuad = QuadratureRules::rule(GeometryTypes::line, order, qt); const unsigned int baseQuadSize = baseQuad.size(); for( unsigned int bqi = 0; bqi < baseQuadSize; ++bqi ) { const typename QuadraturePoint::Vector & basePoint = baseQuad[bqi].position( ); const ctype &baseWeight = baseQuad[bqi].weight( ); Vector point; for( unsigned int i = 0; i < dim-1; ++i ) point[ i ] = basePoint[ i ]; const unsigned int onedQuadSize = onedQuad.size(); for( unsigned int oqi = 0; oqi < onedQuadSize; ++oqi ) { point[ dim-1 ] = onedQuad[oqi].position()[ 0 ]; this->push_back( QPoint(point, baseWeight * onedQuad[oqi].weight()) ); } } } /** \brief Creates quadrature rule by conical multiplication of an arbitrary rule with a rule for a one-dimensional domain * * This quadrature for \f$B^\circ\f$ is generated from a quadrature for * \f$B\f$ and a 1D quadrature by the so-called Duffy-Transformation * \f$y(x,z) = ((1-z)x,z)^T\f$. Hence, we have * \f[ * \int_{B^\circ} f( y )\,\mathrm{d}y * = \int_0^1 \int_B f( (1-z)x, z )\,\mathrm{d}x\,(1-z)^{\dim B}\,\mathrm{d}z. * \f] * Therefore, the 1D quadrature must be at least \f$\dim B\f$ orders higher * than the quadrature for \f$B\f$. * * Question: If the polynomials are created via Duffy Transformation, do we * really need a higher quadrature order? * * Answer (from OS): Not really. The official way is to use a Gauss-Jacobi * rule with \f$ \alpha = \dim B, \beta = 0 \f$ for the 1D rule. * That takes care of the term \f$ (1-z)^{\dim B} \f$ without needing * additional orders. See for example A.H. Stroud, "Approximate Calculation * of Multiple Integrals", Chapters 2.4 and 2.5 for details. * If you want to use plain Gauss-Legendre you do need the additional orders. * * \note Details on how this construction works can be found in the book by A.H. Stroud, * "Approximate Calculation of Multiple Integrals", Chapter 2.5. * * \param baseQuad Quadrature rule for the base domain * \param order Requested order of the one-dimensional rule * \param qt Type of the one-dimensional rule */ void conicalProduct(const BaseQuadrature & baseQuad, unsigned int order, QuadratureType::Enum qt) { typedef QuadratureRule OneDQuadrature; OneDQuadrature onedQuad; bool respectWeightFunction = false; if( qt != QuadratureType::GaussJacobi_n_0) onedQuad = QuadratureRules::rule(GeometryTypes::line, order + dim-1, qt); else { onedQuad = JacobiNQuadratureRule1D(order,dim-1); respectWeightFunction = true; } const unsigned int baseQuadSize = baseQuad.size(); for( unsigned int bqi = 0; bqi < baseQuadSize; ++bqi ) { const typename QuadraturePoint::Vector & basePoint = baseQuad[bqi].position( ); const ctype &baseWeight = baseQuad[bqi].weight( ); const unsigned int onedQuadSize = onedQuad.size(); for( unsigned int oqi = 0; oqi < onedQuadSize; ++oqi ) { Vector point; point[ dim-1 ] = onedQuad[oqi].position( )[ 0 ]; const ctype scale = ctype( 1 ) - point[ dim-1 ]; for( unsigned int i = 0; i < dim-1; ++i ) point[ i ] = scale * basePoint[ i ]; ctype weight = baseWeight * onedQuad[oqi].weight( ); if (!respectWeightFunction) { for ( unsigned int p = 0; ppush_back( QPoint(point, weight) ); } } } static unsigned maxOrder(unsigned int topologyId, QuadratureType::Enum qt) { enum { bitSize = sizeof(unsigned int)*8 }; std::bitset baseId(topologyId); bool isPrism = baseId[dim-1]; baseId.reset(dim-1); GeometryType baseType(baseId.to_ulong(), dim-1); unsigned order = QuadratureRules::maxOrder(baseType, qt); if (isPrism) order = std::min (order, QuadratureRules::maxOrder(GeometryTypes::line, qt)); else if (qt != QuadratureType::GaussJacobi_n_0) order = std::min (order, QuadratureRules::maxOrder(GeometryTypes::line, qt)-(dim-1)); else order = std::min (order, QuadratureRules::maxOrder(GeometryTypes::line, qt)); return order; } }; } // end namspace Dune #endif // DUNE_GEOMETRY_QUADRATURERULES_TENSORPRODUCTQUADRATURE_HH dune-geometry-2.8.0/dune/geometry/quadraturerules/writequad.mac000066400000000000000000000175211411346603000250160ustar00rootroot00000000000000load(to_poly_solve)$ epsilon: 1e-110$ /* write_quad computes the points and weights for quadrature rules. It writes C++ code to a file to initialize the quadrature rules in quadraturerules.hh. The resulting quadrature rules are defined for the reference interval [0,1]. Arguments: file: The file to write to. name: The name of the quadrature rule. This script will define QuadratureInitHelper::init(....). scriptname: The name of the script calling this function. points_generator: This is an expression which takes one argument n and yields a polynomial of order n whose roots are the quadrature points in the interval [-1, 1]. weights_generator: This is an expression which takes two arguments n, xx and yields the weight of point xx in the rule with n points. max_order: Generate all rules up to and including max_order. The quadrature is assumed to be optimal, i.e., the order of accuracy is 2*n-1-e, where n is the total number of points, and e is the number of fixed endpoints. num_endpoints: The number of endpoints that are included in the quadrature rule. Gauss-Legendre type quadratures don't include the endpoints of the interval, thus e = 0, Gauss-Lobatto quadratures include both endpoints, thus, e = 2, and Gauss-Radau quadratures include only one endpoint (either left or right), thus e = 1. */ write_quad(file, name, scriptname, points_generator, weights_generator, max_order, num_endpoints) := block([delivered_order,twice_free_points,free_points,num_points,points,weights,S,i,p,w,fd], fd: openw(file), printf(fd, "// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: // // WARNING // This file is automatically generated by ~a! Don't edit by hand! #ifndef DUNE_GEOMETRY_QUADRATURE_~a_HH #define DUNE_GEOMETRY_QUADRATURE_~a_HH #ifndef DUNE_INCLUDING_IMPLEMENTATION #error This is a private header that should not be included directly. #error Use #include instead. #endif namespace Dune { /************************************************ * Quadraturerule for 1d line *************************************************/ template class ~aQuadratureRule; template using ~aQuadratureRule1D = ~aQuadratureRule; template class ~aQuadratureRule : public QuadratureRule { public: /** \brief The highest quadrature order available */ enum { highest_order=~d }; private: friend class QuadratureRuleFactory; ~aQuadratureRule (int p); ~~~aQuadratureRule(){} }; //! \internal Helper template for the initialization of the quadrature rules template::value> struct ~aQuadratureInitHelper; template struct ~aQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; template struct ~aQuadratureInitHelper { static void init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order); }; // for fundamental types template void ~aQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { ", scriptname, name, name, name, name, name, name, max_order, name, name, name, name, name, name), for delivered_order: 0 thru max_order do block([], twice_free_points: delivered_order - num_endpoints + 1, if mod(twice_free_points, 2) = 0 then block([], printf(fd, " case ~d : ", delivered_order), free_points: twice_free_points / 2, num_points: free_points + num_endpoints, points: makelist(rhs(p), p, bfallroots(points_generator(num_points))), weights: makelist(bfloat(weights_generator(num_points, p)), p, points), if not length(points) = num_points then print("points_generator returned ", length(points), "points, but ", num_points, " were requested!"), printf(fd," delivered_order = ~d; ",delivered_order), printf(fd," _points.resize(~d); ",num_points), printf(fd," _weight.resize(~d); ",num_points), /* sort the list of indices according to the corresponding weights*/ S: sort(makelist(n, n, 1, num_points), lambda([x,y], weights[x] < weights[y])), for i: 1 thru num_points do block([j], /* for numerical stability: write points sorted by their weights in ascending order*/ j: S[i], /* shift points and weights from the interval [-1,1] to [0,1] */ p: (points[j]+1)/2, p: max(p-epsilon,-epsilon)+epsilon, w: weights[j]/2, printf(fd," _points[~d] = ~h; ",i-1, p), printf(fd," _weight[~d] = ~h; ",i-1, w) ), printf(fd," break; ") ) else printf(fd, " // order ~d,~d case ~d : ", delivered_order, delivered_order+1, delivered_order) ), printf(fd," default : DUNE_THROW(QuadratureOrderOutOfRange, \"Quadrature rule \" << p << \" not supported!\"); } } "), printf(fd," // for non-fundamental types: assign numbers as strings template void ~aQuadratureInitHelper::init(int p, std::vector< FieldVector > & _points, std::vector< ct > & _weight, int & delivered_order) { switch(p) { ",name), for delivered_order: 0 thru max_order do block([], twice_free_points: delivered_order - num_endpoints + 1, if mod(twice_free_points, 2) = 0 then block([], printf(fd, " case ~d : ", delivered_order), free_points: twice_free_points / 2, num_points: free_points + num_endpoints, points: makelist(rhs(p), p, bfallroots(points_generator(num_points))), weights: makelist(bfloat(weights_generator(num_points, p)), p, points), if not length(points) = num_points then print("points_generator returned ", length(points), "points, but ", num_points, " were requested!"), printf(fd," delivered_order = ~d; ",delivered_order), printf(fd," _points.resize(~d); ",num_points), printf(fd," _weight.resize(~d); ",num_points), /* sort the list of indices according to the corresponding weights*/ S: sort(makelist(n, n, 1, num_points), lambda([x,y], weights[x] < weights[y])), for i: 1 thru num_points do block([j], /* for numerical stability: write points sorted by their weights in ascending order*/ j: S[i], /* shift points and weights from the interval [-1,1] to [0,1] */ p: (points[j]+1)/2, p: max(p-epsilon,-epsilon)+epsilon, w: weights[j]/2, printf(fd," _points[~d] = ct(\"~h\"); ",i-1, p), printf(fd," _weight[~d] = ct(\"~h\"); ",i-1, w) ), printf(fd," break; ") ) else printf(fd, " // order ~d,~d case ~d : ", delivered_order, delivered_order+1, delivered_order) ), printf(fd," default : DUNE_THROW(QuadratureOrderOutOfRange, \"Quadrature rule \" << p << \" not supported!\"); } } "), printf(fd," template ~aQuadratureRule::~aQuadratureRule (int p) : QuadratureRule(GeometryTypes::line) { //! set up quadrature of given order in d dimensions std::vector< FieldVector > _points; std::vector< ct > _weight; int deliveredOrder_; ~aQuadratureInitHelper::init(p, _points, _weight, deliveredOrder_); this->delivered_order = deliveredOrder_; assert(_points.size() == _weight.size()); for (size_t i = 0; i < _points.size(); i++) this->push_back(QuadraturePoint(_points[i], _weight[i])); } } // namespace Dune #endif // DUNE_GEOMETRY_QUADRATURE_~a_HH ", name, name, name, name), close(fd) )$ dune-geometry-2.8.0/dune/geometry/referenceelement.hh000066400000000000000000000253731411346603000227340ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFERENCEELEMENT_HH #define DUNE_GEOMETRY_REFERENCEELEMENT_HH #include namespace Dune { namespace Geo { namespace Impl { // forward declaration for friend declaration template class ReferenceElementContainer; } // forward declaration for constructing default reference element type template class ReferenceElementImplementation; // forward declaration for backwards compatibility conversion template struct ReferenceElements; // ReferenceElement // ---------------- /** \class ReferenceElement * \ingroup GeometryReferenceElements * \brief This class provides access to geometric and topological * properties of a reference element. * * This includes its type, * the number of subentities, the volume, and a method for checking * if a point is contained in the reference element. * The embedding of each subentity into the reference element is also * provided. * * This class has value semantics, i.e. you can (and should) pass it * around by value and not by reference and store a copy of it. * * Instances of this object for a given geometry type can be retrieved * from the ReferenceElements class. * */ template class ReferenceElement { public: #ifndef DOXYGEN /** \brief Collection of types depending on the codimension */ template using Codim = typename Implementation::template Codim; #else /** \brief Collection of types depending on the codimension */ template< int codim > struct Codim { //! type of geometry embedding a subentity into the reference element using Geometry = implementation-defined; }; #endif // DOXYGEN //! The coordinate field type. using ctype = typename Implementation::ctype; //! The coordinate field type. using CoordinateField = ctype; //! The coordinate type. using Coordinate = typename Implementation::Coordinate; /** \brief Type used for volume */ typedef ctype Volume; //! The dimension of the reference element. static constexpr int dimension = Implementation::dimension; /** \brief number of subentities of codimension c * * \param[in] c codimension whose size is desired */ int size(int c) const { return _impl->size(c); } /** \brief number of subentities of codimension cc of subentity (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns the number of subentities * of codimension cc of the current reference element, that are also * a subentity of E. If ccsize(i,c,cc); } /** \brief obtain number of ii-th subentity with codim cc of (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. And denote by S the ii-th subentity of codimension * (cc-c) of E. Then, S is a also a subentity of codimension cc of the current * reference element. This method returns the number of S with respect * to the current reference element. * * \param[in] i number of subentity E (0 <= i < size( c )) * \param[in] c codimension of subentity E * \param[in] ii number of subentity S (with respect to E) * \param[in] cc codimension of subentity S (c <= cc <= dim) */ int subEntity(int i, int c, int ii, int cc) const { return _impl->subEntity(i,c,ii,cc); } /** \brief Obtain the range of numbers of subentities with codim cc of (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns a range of numbers of * all subentities of E with codimension cc. Notice that the sub-subentity * codimension as well as the numbers in the returned range are * given with respect to the reference element itself and not with * respect to E. For 0<=ccsubEntities(i,c,cc); } /** \brief obtain the type of subentity (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns the GeometryType of E. * * \deprecated After dune-2.6 the return value will no longer be * a reference but a copy. Code storing pointers * or references to the result must be adjusted. * * \param[in] i number of subentity E (0 <= i < size( c )) * \param[in] c codimension of subentity E */ decltype(auto) type(int i, int c) const { return _impl->type(i,c); } /** \brief obtain the type of this reference element * * \deprecated After dune-2.6 the return value will no longer be * a reference but a copy. Code storing pointers * or references to the result must be adjusted. * */ decltype(auto) type() const { return _impl->type(); } /** \brief position of the barycenter of entity (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns the coordinates of * the center of gravity of E within the current reference element. * * \deprecated After dune-2.6 the return value will no longer be * a reference but a copy. Code storing pointers * or references to the result must be adjusted. * * \param[in] i number of subentity E (0 <= i < size( c )) * \param[in] c codimension of subentity E */ decltype(auto) position(int i, int c) const { return _impl->position(i,c); } /** \brief check if a coordinate is in the reference element * * This method returns true if the given local coordinate is within this * reference element. * * \param[in] local coordinates of the point */ bool checkInside(const Coordinate& local) const { return _impl->checkInside(local); } /** \brief obtain the embedding of subentity (i,codim) into the reference * element * * Denote by E the i-th subentity of codimension codim of the current * reference element. This method returns a \ref Dune::AffineGeometry * that maps the reference element of E into the current reference element. * * \tparam codim codimension of subentity E * * \param[in] i number of subentity E (0 <= i < size( codim )) */ template typename Codim::Geometry geometry(int i) const { return _impl->template geometry(i); } /** \brief obtain the volume of the reference element */ CoordinateField volume() const { return _impl->volume(); } /** \brief obtain the integration outer normal of the reference element * * The integration outer normal is the outer normal whose length coincides * with the face's integration element. * * \deprecated After dune-2.6 the return value will no longer be * a reference but a copy. Code storing pointers * or references to the result must be adjusted. * * \param[in] face index of the face, whose normal is desired */ decltype(auto) integrationOuterNormal(int face) const { return _impl->integrationOuterNormal(face); } /** \brief Constructs an empty reference element. * * This constructor creates an empty (invalid) reference element. This element may not be * used in any way except for assigning other reference elements to it. After * assigning a valid reference element (obtained from ReferenceElements), it may * be used without restrictions. */ ReferenceElement() : _impl(nullptr) {} /** \brief Returns a reference to the internal implementation object. * * \warning This method may only be called on valid reference elements. * \warning This method exposes undocumented internals that may change without notice! */ const Implementation& impl() const { return *_impl; } //! Compares for equality with another reference element. bool operator==(const ReferenceElement& r) const { return _impl == r._impl; } //! Compares for inequality with another reference element. bool operator!=(const ReferenceElement& r) const { return not (*this == r); } //! Yields a hash value suitable for storing the reference element a in hash table friend std::size_t hash_value(const ReferenceElement& r) { return reinterpret_cast(r._impl); } private: // The implementation must be a friend to construct a wrapper around itself. friend Implementation; // The reference container is a friend to be able to call setImplementation. friend class Impl::ReferenceElementContainer; // Constructor for wrapping an implementation reference (required internally by the default implementation) ReferenceElement(const Implementation& impl) : _impl(&impl) {} void setImplementation(const Implementation& impl) { _impl = &impl; } const Implementation* _impl; }; } } #endif // DUNE_GEOMETRY_REFERENCEELEMENT_HH dune-geometry-2.8.0/dune/geometry/referenceelementimplementation.cc000066400000000000000000000146451411346603000256700ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #include #include namespace Dune { namespace Geo { namespace Impl { // size // ---- unsigned int size ( unsigned int topologyId, int dim, int codim ) { assert( (dim >= 0) && (topologyId < numTopologies( dim )) ); assert( (0 <= codim) && (codim <= dim) ); if( codim > 0 ) { const unsigned int baseId = baseTopologyId( topologyId, dim ); const unsigned int m = size( baseId, dim-1, codim-1 ); if( isPrism( topologyId, dim ) ) { const unsigned int n = (codim < dim ? size( baseId, dim-1, codim ) : 0); return n + 2*m; } else { assert( isPyramid( topologyId, dim ) ); const unsigned int n = (codim < dim ? size( baseId, dim-1, codim ) : 1); return m+n; } } else return 1; } // subTopologyId // ------------- unsigned int subTopologyId ( unsigned int topologyId, int dim, int codim, unsigned int i ) { assert( i < size( topologyId, dim, codim ) ); const int mydim = dim - codim; if( codim > 0 ) { const unsigned int baseId = baseTopologyId( topologyId, dim ); const unsigned int m = size( baseId, dim-1, codim-1 ); if( isPrism( topologyId, dim ) ) { const unsigned int n = (codim < dim ? size( baseId, dim-1, codim ) : 0); if( i < n ) return subTopologyId( baseId, dim-1, codim, i ) | ((unsigned int)prismConstruction << (mydim - 1)); else return subTopologyId( baseId, dim-1, codim-1, (i < n+m ? i-n : i-(n+m)) ); } else { assert( isPyramid( topologyId, dim ) ); if( i < m ) return subTopologyId( baseId, dim-1, codim-1, i ); else if( codim < dim ) return subTopologyId( baseId, dim-1, codim, i-m ) | ((unsigned int)pyramidConstruction << (mydim - 1)); else return 0u; } } else return topologyId; } // subTopologyNumbering // -------------------- void subTopologyNumbering ( unsigned int topologyId, int dim, int codim, unsigned int i, int subcodim, unsigned int *beginOut, unsigned int *endOut ) { assert( (codim >= 0) && (subcodim >= 0) && (codim + subcodim <= dim) ); assert( i < size( topologyId, dim, codim ) ); assert( (endOut - beginOut) == size( subTopologyId( topologyId, dim, codim, i ), dim-codim, subcodim ) ); if( codim == 0 ) { for( unsigned int j = 0; (beginOut + j) != endOut; ++j ) *(beginOut + j) = j; } else if( subcodim == 0 ) { assert( endOut = beginOut + 1 ); *beginOut = i; } else { const unsigned int baseId = baseTopologyId( topologyId, dim ); const unsigned int m = size( baseId, dim-1, codim-1 ); const unsigned int mb = size( baseId, dim-1, codim+subcodim-1 ); const unsigned int nb = (codim + subcodim < dim ? size( baseId, dim-1, codim+subcodim ) : 0); if( isPrism( topologyId, dim ) ) { const unsigned int n = size( baseId, dim-1, codim ); if( i < n ) { const unsigned int subId = subTopologyId( baseId, dim-1, codim, i ); unsigned int *beginBase = beginOut; if( codim + subcodim < dim ) { beginBase = beginOut + size( subId, dim-codim-1, subcodim ); subTopologyNumbering( baseId, dim-1, codim, i, subcodim, beginOut, beginBase ); } const unsigned int ms = size( subId, dim-codim-1, subcodim-1 ); subTopologyNumbering( baseId, dim-1, codim, i, subcodim-1, beginBase, beginBase+ms ); for( unsigned int j = 0; j < ms; ++j ) { *(beginBase+j) += nb; *(beginBase+j+ms) = *(beginBase+j) + mb; } } else { const unsigned int s = (i < n+m ? 0 : 1); subTopologyNumbering( baseId, dim-1, codim-1, i-(n+s*m), subcodim, beginOut, endOut ); for( unsigned int *it = beginOut; it != endOut; ++it ) *it += nb + s*mb; } } else { assert( isPyramid( topologyId, dim ) ); if( i < m ) subTopologyNumbering( baseId, dim-1, codim-1, i, subcodim, beginOut, endOut ); else { const unsigned int subId = subTopologyId( baseId, dim-1, codim, i-m ); const unsigned int ms = size( subId, dim-codim-1, subcodim-1 ); subTopologyNumbering( baseId, dim-1, codim, i-m, subcodim-1, beginOut, beginOut+ms ); if( codim+subcodim < dim ) { subTopologyNumbering( baseId, dim-1, codim, i-m, subcodim, beginOut+ms, endOut ); for( unsigned int *it = beginOut + ms; it != endOut; ++it ) *it += mb; } else *(beginOut + ms) = mb; } } } } // ReferenceVolumeInverse // ---------------------- unsigned long referenceVolumeInverse ( unsigned int topologyId, int dim ) { assert( (dim >= 0) && (topologyId < numTopologies( dim )) ); if( dim > 0 ) { unsigned int baseValue = referenceVolumeInverse( baseTopologyId( topologyId, dim ), dim-1 ); return (isPrism( topologyId, dim ) ? baseValue : baseValue * (unsigned long)dim); } else return 1; } } // namespace Impl } // namespace Geo } // namespace Dune dune-geometry-2.8.0/dune/geometry/referenceelementimplementation.hh000066400000000000000000000674331411346603000257050ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH #define DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Dune { namespace Geo { #ifndef DOXYGEN // Internal Forward Declarations // ----------------------------- namespace Impl { template< class ctype, int dim > class ReferenceElementContainer; } template< class ctype, int dim > struct ReferenceElements; namespace Impl { using Dune::Impl::isPrism; using Dune::Impl::isPyramid; using Dune::Impl::baseTopologyId; using Dune::Impl::prismConstruction; using Dune::Impl::pyramidConstruction; using Dune::Impl::numTopologies; /** \brief Compute the number of subentities of a given codimension */ unsigned int size ( unsigned int topologyId, int dim, int codim ); /** \brief Compute the topology id of a given subentity * * \param topologyId Topology id of entity * \param dim Dimension of entity * \param codim Codimension of the subentity that we are interested in * \param i Number of the subentity that we are interested in */ unsigned int subTopologyId ( unsigned int topologyId, int dim, int codim, unsigned int i ); // subTopologyNumbering // -------------------- void subTopologyNumbering ( unsigned int topologyId, int dim, int codim, unsigned int i, int subcodim, unsigned int *beginOut, unsigned int *endOut ); // checkInside // ----------- template< class ct, int cdim > inline bool checkInside ( unsigned int topologyId, int dim, const FieldVector< ct, cdim > &x, ct tolerance, ct factor = ct( 1 ) ) { assert( (dim >= 0) && (dim <= cdim) ); assert( topologyId < numTopologies( dim ) ); if( dim > 0 ) { const ct baseFactor = (isPrism( topologyId, dim ) ? factor : factor - x[ dim-1 ]); if( (x[ dim-1 ] > -tolerance) && (factor - x[ dim-1 ] > -tolerance) ) return checkInside< ct, cdim >( baseTopologyId( topologyId, dim ), dim-1, x, tolerance, baseFactor ); else return false; } else return true; } // referenceCorners // ---------------- template< class ct, int cdim > inline unsigned int referenceCorners ( unsigned int topologyId, int dim, FieldVector< ct, cdim > *corners ) { assert( (dim >= 0) && (dim <= cdim) ); assert( topologyId < numTopologies( dim ) ); if( dim > 0 ) { const unsigned int nBaseCorners = referenceCorners( baseTopologyId( topologyId, dim ), dim-1, corners ); assert( nBaseCorners == size( baseTopologyId( topologyId, dim ), dim-1, dim-1 ) ); if( isPrism( topologyId, dim ) ) { std::copy( corners, corners + nBaseCorners, corners + nBaseCorners ); for( unsigned int i = 0; i < nBaseCorners; ++i ) corners[ i+nBaseCorners ][ dim-1 ] = ct( 1 ); return 2*nBaseCorners; } else { corners[ nBaseCorners ] = FieldVector< ct, cdim >( ct( 0 ) ); corners[ nBaseCorners ][ dim-1 ] = ct( 1 ); return nBaseCorners+1; } } else { *corners = FieldVector< ct, cdim >( ct( 0 ) ); return 1; } } // referenceVolume // --------------- unsigned long referenceVolumeInverse ( unsigned int topologyId, int dim ); template< class ct > inline ct referenceVolume ( unsigned int topologyId, int dim ) { return ct( 1 ) / ct( referenceVolumeInverse( topologyId, dim ) ); } // referenceOrigins // ---------------- template< class ct, int cdim > inline unsigned int referenceOrigins ( unsigned int topologyId, int dim, int codim, FieldVector< ct, cdim > *origins ) { assert( (dim >= 0) && (dim <= cdim) ); assert( topologyId < numTopologies( dim ) ); assert( (codim >= 0) && (codim <= dim) ); if( codim > 0 ) { const unsigned int baseId = baseTopologyId( topologyId, dim ); if( isPrism( topologyId, dim ) ) { const unsigned int n = (codim < dim ? referenceOrigins( baseId, dim-1, codim, origins ) : 0); const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins+n ); for( unsigned int i = 0; i < m; ++i ) { origins[ n+m+i ] = origins[ n+i ]; origins[ n+m+i ][ dim-1 ] = ct( 1 ); } return n+2*m; } else { const unsigned int m = referenceOrigins( baseId, dim-1, codim-1, origins ); if( codim == dim ) { origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) ); origins[ m ][ dim-1 ] = ct( 1 ); return m+1; } else return m+referenceOrigins( baseId, dim-1, codim, origins+m ); } } else { origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) ); return 1; } } // referenceEmbeddings // ------------------- template< class ct, int cdim, int mydim > inline unsigned int referenceEmbeddings ( unsigned int topologyId, int dim, int codim, FieldVector< ct, cdim > *origins, FieldMatrix< ct, mydim, cdim > *jacobianTransposeds ) { assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) ); assert( (dim - codim <= mydim) && (mydim <= cdim) ); assert( topologyId < numTopologies( dim ) ); if( codim > 0 ) { const unsigned int baseId = baseTopologyId( topologyId, dim ); if( isPrism( topologyId, dim ) ) { const unsigned int n = (codim < dim ? referenceEmbeddings( baseId, dim-1, codim, origins, jacobianTransposeds ) : 0); for( unsigned int i = 0; i < n; ++i ) jacobianTransposeds[ i ][ dim-codim-1 ][ dim-1 ] = ct( 1 ); const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1, origins+n, jacobianTransposeds+n ); std::copy( origins+n, origins+n+m, origins+n+m ); std::copy( jacobianTransposeds+n, jacobianTransposeds+n+m, jacobianTransposeds+n+m ); for( unsigned int i = 0; i < m; ++i ) origins[ n+m+i ][ dim-1 ] = ct( 1 ); return n+2*m; } else { const unsigned int m = referenceEmbeddings( baseId, dim-1, codim-1, origins, jacobianTransposeds ); if( codim == dim ) { origins[ m ] = FieldVector< ct, cdim >( ct( 0 ) ); origins[ m ][ dim-1 ] = ct( 1 ); jacobianTransposeds[ m ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) ); return m+1; } else { const unsigned int n = referenceEmbeddings( baseId, dim-1, codim, origins+m, jacobianTransposeds+m ); for( unsigned int i = 0; i < n; ++i ) { for( int k = 0; k < dim-1; ++k ) jacobianTransposeds[ m+i ][ dim-codim-1 ][ k ] = -origins[ m+i ][ k ]; jacobianTransposeds[ m+i ][ dim-codim-1 ][ dim-1 ] = ct( 1 ); } return m+n; } } } else { origins[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) ); jacobianTransposeds[ 0 ] = FieldMatrix< ct, mydim, cdim >( ct( 0 ) ); for( int k = 0; k < dim; ++k ) jacobianTransposeds[ 0 ][ k ][ k ] = ct( 1 ); return 1; } } // referenceIntegrationOuterNormals // -------------------------------- template< class ct, int cdim > inline unsigned int referenceIntegrationOuterNormals ( unsigned int topologyId, int dim, const FieldVector< ct, cdim > *origins, FieldVector< ct, cdim > *normals ) { assert( (dim > 0) && (dim <= cdim) ); assert( topologyId < numTopologies( dim ) ); if( dim > 1 ) { const unsigned int baseId = baseTopologyId( topologyId, dim ); if( isPrism( topologyId, dim ) ) { const unsigned int numBaseFaces = referenceIntegrationOuterNormals( baseId, dim-1, origins, normals ); for( unsigned int i = 0; i < 2; ++i ) { normals[ numBaseFaces+i ] = FieldVector< ct, cdim >( ct( 0 ) ); normals[ numBaseFaces+i ][ dim-1 ] = ct( 2*int( i )-1 ); } return numBaseFaces+2; } else { normals[ 0 ] = FieldVector< ct, cdim >( ct( 0 ) ); normals[ 0 ][ dim-1 ] = ct( -1 ); const unsigned int numBaseFaces = referenceIntegrationOuterNormals( baseId, dim-1, origins+1, normals+1 ); for( unsigned int i = 1; i <= numBaseFaces; ++i ) normals[ i ][ dim-1 ] = normals[ i ]*origins[ i ]; return numBaseFaces+1; } } else { for( unsigned int i = 0; i < 2; ++i ) { normals[ i ] = FieldVector< ct, cdim >( ct( 0 ) ); normals[ i ][ 0 ] = ct( 2*int( i )-1 ); } return 2; } } template< class ct, int cdim > inline unsigned int referenceIntegrationOuterNormals ( unsigned int topologyId, int dim, FieldVector< ct, cdim > *normals ) { assert( (dim > 0) && (dim <= cdim) ); FieldVector< ct, cdim > *origins = new FieldVector< ct, cdim >[ size( topologyId, dim, 1 ) ]; referenceOrigins( topologyId, dim, 1, origins ); const unsigned int numFaces = referenceIntegrationOuterNormals( topologyId, dim, origins, normals ); assert( numFaces == size( topologyId, dim, 1 ) ); delete[] origins; return numFaces; } } // namespace Impl // ReferenceElement // ---------------- /** \class ReferenceElementImplementation * \ingroup GeometryReferenceElements * \brief This class provides access to geometric and topological * properties of a reference element. * * This includes its type, * the number of subentities, the volume, and a method for checking * if a point is contained in the reference element. * The embedding of each subentity into the reference element is also * provided. * * A singleton of this class for a given geometry type can be accessed * through the ReferenceElements class. * \tparam ctype field type for coordinates * \tparam dim dimension of the reference element * */ template< class ctype_, int dim > class ReferenceElementImplementation { public: //! The coordinate field type. using ctype = ctype_; //! The coordinate field type. using CoordinateField = ctype; //! The coordinate type. using Coordinate = Dune::FieldVector; //! The dimension of the reference element. static constexpr int dimension = dim; /** \brief Type used for volume */ typedef ctype Volume; private: friend class Impl::ReferenceElementContainer< ctype, dim >; struct SubEntityInfo; template< int codim > struct CreateGeometries; public: /** \brief Collection of types depending on the codimension */ template< int codim > struct Codim { //! type of geometry embedding a subentity into the reference element typedef AffineGeometry< ctype, dim-codim, dim > Geometry; }; // ReferenceElement cannot be copied. ReferenceElementImplementation ( const ReferenceElementImplementation& ) = delete; // ReferenceElementImplementation cannot be copied. ReferenceElementImplementation& operator= ( const ReferenceElementImplementation& ) = delete; // ReferenceElementImplementation is default-constructible (required for storage in std::array) ReferenceElementImplementation () = default; /** \brief number of subentities of codimension c * * \param[in] c codimension whose size is desired */ int size ( int c ) const { assert( (c >= 0) && (c <= dim) ); return info_[ c ].size(); } /** \brief number of subentities of codimension cc of subentity (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns the number of subentities * of codimension cc of the current reference element, that are also * a subentity of E. If cc= 0) && (i < size( c )) ); return info_[ c ][ i ].size( cc ); } /** \brief obtain number of ii-th subentity with codim cc of (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. And denote by S the ii-th subentity of codimension * (cc-c) of E. Then, S is a also a subentity of codimension cc of the current * reference element. This method returns the number of S with respect * to the current reference element. * * \param[in] i number of subentity E (0 <= i < size( c )) * \param[in] c codimension of subentity E * \param[in] ii number of subentity S (with respect to E) * \param[in] cc codimension of subentity S (c <= cc <= dim) */ int subEntity ( int i, int c, int ii, int cc ) const { assert( (i >= 0) && (i < size( c )) ); return info_[ c ][ i ].number( ii, cc ); } /** \brief Obtain the range of numbers of subentities with codim cc of (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns a range of numbers of * all subentities of E with codimension cc. Notice that the sub-subentity * codimension as well as the numbers in the returned range are * given with respect to the reference element itself and not with * respect to E. For 0<=cc= 0) && (i < size( c )) ); return info_[ c ][ i ].numbers( cc ); } /** \brief obtain the type of subentity (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns the GeometryType of E. * * \param[in] i number of subentity E (0 <= i < size( c )) * \param[in] c codimension of subentity E */ const GeometryType &type ( int i, int c ) const { assert( (i >= 0) && (i < size( c )) ); return info_[ c ][ i ].type(); } /** \brief obtain the type of this reference element */ const GeometryType &type () const { return type( 0, 0 ); } /** \brief position of the barycenter of entity (i,c) * * Denote by E the i-th subentity of codimension c of the current * reference element. This method returns the coordinates of * the center of gravity of E within the current reference element. * * \param[in] i number of subentity E (0 <= i < size( c )) * \param[in] c codimension of subentity E */ const Coordinate &position( int i, int c ) const { assert( (c >= 0) && (c <= dim) ); return baryCenters_[ c ][ i ]; } /** \brief check if a coordinate is in the reference element * * This method returns true if the given local coordinate is within this * reference element. * * \param[in] local coordinates of the point */ bool checkInside ( const Coordinate &local ) const { const ctype tolerance = ctype( 64 ) * std::numeric_limits< ctype >::epsilon(); return Impl::template checkInside< ctype, dim >( type().id(), dim, local, tolerance ); } /** \brief obtain the embedding of subentity (i,codim) into the reference * element * * Denote by E the i-th subentity of codimension codim of the current * reference element. This method returns a \ref Dune::AffineGeometry * that maps the reference element of E into the current reference element. * * \tparam codim codimension of subentity E * * \param[in] i number of subentity E (0 <= i < size( codim )) */ template< int codim > typename Codim< codim >::Geometry geometry ( int i ) const { return std::get< codim >( geometries_ )[ i ]; } /** \brief obtain the volume of the reference element */ Volume volume () const { return volume_; } /** \brief obtain the integration outer normal of the reference element * * The integration outer normal is the outer normal whose length coincides * with the face's integration element. * * \param[in] face index of the face, whose normal is desired */ const Coordinate &integrationOuterNormal ( int face ) const { assert( (face >= 0) && (face < int( integrationNormals_.size() )) ); return integrationNormals_[ face ]; } private: void initialize ( unsigned int topologyId ) { assert( topologyId < Impl::numTopologies( dim ) ); // set up subentities for( int codim = 0; codim <= dim; ++codim ) { const unsigned int size = Impl::size( topologyId, dim, codim ); info_[ codim ].resize( size ); for( unsigned int i = 0; i < size; ++i ) info_[ codim ][ i ].initialize( topologyId, codim, i ); } // compute corners const unsigned int numVertices = size( dim ); baryCenters_[ dim ].resize( numVertices ); Impl::referenceCorners( topologyId, dim, &(baryCenters_[ dim ][ 0 ]) ); // compute barycenters for( int codim = 0; codim < dim; ++codim ) { baryCenters_[ codim ].resize( size(codim) ); for( int i = 0; i < size( codim ); ++i ) { baryCenters_[ codim ][ i ] = Coordinate( ctype( 0 ) ); const unsigned int numCorners = size( i, codim, dim ); for( unsigned int j = 0; j < numCorners; ++j ) baryCenters_[ codim ][ i ] += baryCenters_[ dim ][ subEntity( i, codim, j, dim ) ]; baryCenters_[ codim ][ i ] *= ctype( 1 ) / ctype( numCorners ); } } // compute reference element volume volume_ = Impl::template referenceVolume< ctype >( topologyId, dim ); // compute integration outer normals if( dim > 0 ) { integrationNormals_.resize( size( 1 ) ); Impl::referenceIntegrationOuterNormals( topologyId, dim, &(integrationNormals_[ 0 ]) ); } // set up geometries Hybrid::forEach( std::make_index_sequence< dim+1 >{}, [ & ]( auto i ){ CreateGeometries< i >::apply( *this, geometries_ ); } ); } template< int... codim > static std::tuple< std::vector< typename Codim< codim >::Geometry >... > makeGeometryTable ( std::integer_sequence< int, codim... > ); /** \brief Type to store all subentities of all codimensions */ typedef decltype( makeGeometryTable( std::make_integer_sequence< int, dim+1 >() ) ) GeometryTable; /** \brief The reference element volume */ ctype volume_; std::vector< Coordinate > baryCenters_[ dim+1 ]; std::vector< Coordinate > integrationNormals_; /** \brief Stores all subentities of all codimensions */ GeometryTable geometries_; std::vector< SubEntityInfo > info_[ dim+1 ]; }; /** \brief topological information about the subentities of a reference element */ template< class ctype, int dim > struct ReferenceElementImplementation< ctype, dim >::SubEntityInfo { // Compute upper bound for the number of subsentities. // If someone knows an explicit formal feel free to // implement it here. static constexpr std::size_t maxSubEntityCount() { std::size_t maxCount=0; for(std::size_t codim=0; codim<=dim; ++codim) maxCount = std::max(maxCount, binomial(std::size_t(dim),codim)*(1 << codim)); return maxCount; } using SubEntityFlags = std::bitset; class SubEntityRange : public Dune::IteratorRange { using Base = typename Dune::IteratorRange; public: using iterator = Base::iterator; using const_iterator = Base::const_iterator; SubEntityRange(const iterator& begin, const iterator& end, const SubEntityFlags& contains) : Base(begin, end), containsPtr_(&contains), size_(end-begin) {} SubEntityRange() : Base(), containsPtr_(nullptr), size_(0) {} std::size_t size() const { return size_; } bool contains(std::size_t i) const { return (*containsPtr_)[i]; } private: const SubEntityFlags* containsPtr_; std::size_t size_; std::size_t offset_; }; using NumberRange = typename Dune::IteratorRange; SubEntityInfo () : numbering_( nullptr ) { std::fill( offset_.begin(), offset_.end(), 0 ); } SubEntityInfo ( const SubEntityInfo &other ) : offset_( other.offset_ ), type_( other.type_ ), containsSubentity_( other.containsSubentity_ ) { numbering_ = allocate(); std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ ); } ~SubEntityInfo () { deallocate( numbering_ ); } const SubEntityInfo &operator= ( const SubEntityInfo &other ) { type_ = other.type_; offset_ = other.offset_; deallocate( numbering_ ); numbering_ = allocate(); std::copy( other.numbering_, other.numbering_ + capacity(), numbering_ ); containsSubentity_ = other.containsSubentity_; return *this; } int size ( int cc ) const { assert( (cc >= 0) && (cc <= dim) ); return (offset_[ cc+1 ] - offset_[ cc ]); } int number ( int ii, int cc ) const { assert( (ii >= 0) && (ii < size( cc )) ); return numbering_[ offset_[ cc ] + ii ]; } auto numbers ( int cc ) const { return SubEntityRange( numbering_ + offset_[ cc ], numbering_ + offset_[ cc+1 ], containsSubentity_[cc]); } const GeometryType &type () const { return type_; } void initialize ( unsigned int topologyId, int codim, unsigned int i ) { const unsigned int subId = Impl::subTopologyId( topologyId, dim, codim, i ); type_ = GeometryType( subId, dim-codim ); // compute offsets for( int cc = 0; cc <= codim; ++cc ) offset_[ cc ] = 0; for( int cc = codim; cc <= dim; ++cc ) offset_[ cc+1 ] = offset_[ cc ] + Impl::size( subId, dim-codim, cc-codim ); // compute subnumbering deallocate( numbering_ ); numbering_ = allocate(); for( int cc = codim; cc <= dim; ++cc ) Impl::subTopologyNumbering( topologyId, dim, codim, i, cc-codim, numbering_+offset_[ cc ], numbering_+offset_[ cc+1 ] ); // initialize containsSubentity lookup-table for(std::size_t cc=0; cc<= dim; ++cc) { containsSubentity_[cc].reset(); for(std::size_t idx=0; idx offset_; GeometryType type_; std::array< SubEntityFlags, dim+1> containsSubentity_; }; template< class ctype, int dim > template< int codim > struct ReferenceElementImplementation< ctype, dim >::CreateGeometries { template< int cc > static typename ReferenceElements< ctype, dim-cc >::ReferenceElement subRefElement( const ReferenceElementImplementation< ctype, dim > &refElement, int i, std::integral_constant< int, cc > ) { return ReferenceElements< ctype, dim-cc >::general( refElement.type( i, cc ) ); } static typename ReferenceElements< ctype, dim >::ReferenceElement subRefElement(const ReferenceElementImplementation< ctype, dim > &refElement, [[maybe_unused]] int i, std::integral_constant) { return refElement; } static void apply ( const ReferenceElementImplementation< ctype, dim > &refElement, GeometryTable &geometries ) { const int size = refElement.size( codim ); std::vector< FieldVector< ctype, dim > > origins( size ); std::vector< FieldMatrix< ctype, dim - codim, dim > > jacobianTransposeds( size ); Impl::referenceEmbeddings( refElement.type().id(), dim, codim, &(origins[ 0 ]), &(jacobianTransposeds[ 0 ]) ); std::get< codim >( geometries ).reserve( size ); for( int i = 0; i < size; ++i ) { typename Codim< codim >::Geometry geometry( subRefElement( refElement, i, std::integral_constant< int, codim >() ), origins[ i ], jacobianTransposeds[ i ] ); std::get< codim >( geometries ).push_back( geometry ); } } }; #endif // DOXYGEN } // namespace Geo } // namespace Dune #endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTIMPLEMENTATION_HH dune-geometry-2.8.0/dune/geometry/referenceelements.hh000066400000000000000000000374331411346603000231170ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH #define DUNE_GEOMETRY_REFERENCEELEMENTS_HH #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Dune { namespace Geo { #ifndef DOXYGEN template class DeprecatedReferenceElement : public ReferenceElement> { protected: DeprecatedReferenceElement() = default; public: DeprecatedReferenceElement(const DeprecatedReferenceElement&) = delete; DeprecatedReferenceElement& operator=(const DeprecatedReferenceElement&) = delete; DeprecatedReferenceElement(const ReferenceElementImplementation& impl) : ReferenceElement>(impl) {} }; template class ConstructibleDeprecatedReferenceElement : public DeprecatedReferenceElement { public: ConstructibleDeprecatedReferenceElement() = default; }; namespace Impl { // ReferenceElementContainer // ------------------------- template< class ctype, int dim > class ReferenceElementContainer { static const unsigned int numTopologies = dim >= 0 ? (1u << dim) : 0; using Implementation = ReferenceElementImplementation< ctype, dim >; using ConstructibleDeprecatedReferenceElement = Dune::Geo::ConstructibleDeprecatedReferenceElement; public: using DeprecatedReferenceElement = Dune::Geo::DeprecatedReferenceElement; using ReferenceElement = Dune::Geo::ReferenceElement< Implementation >; using value_type = ReferenceElement; using const_iterator = const value_type*; ReferenceElementContainer () { for( unsigned int topologyId = 0; topologyId < numTopologies; ++topologyId ) { implementations_[ topologyId ].initialize( topologyId ); reference_elements_[ topologyId ].setImplementation( implementations_[ topologyId ] ); } } const ReferenceElement& operator() ( const GeometryType &type ) const { assert( type.dim() == dim ); return reference_elements_[ type.id() ]; } const ReferenceElement& simplex () const { return reference_elements_[ Dune::GeometryTypes::simplex(dim).id() ]; } const ReferenceElement& cube () const { return reference_elements_[ Dune::GeometryTypes::cube(dim).id() ]; } const ReferenceElement& pyramid () const { return reference_elements_[ Dune::GeometryTypes::pyramid.id() ]; } const ReferenceElement& prism () const { return reference_elements_[ Dune::GeometryTypes::prism.id() ]; } const_iterator begin () const { return reference_elements_.data(); } const_iterator end () const { return reference_elements_.data() + numTopologies; } // here, we make sure to actually return a const reference to something // that is guaranteed not to become invalid, as otherwise, we might run // straight into debugging hell when a user binds the return value to a // const ref and the temporary goes out of scope. const DeprecatedReferenceElement& deprecated(const ReferenceElement& v) const { return reference_elements_[v.impl().type(0,0).id()]; } private: std::array implementations_; std::array reference_elements_; }; } // namespace Impl #endif // DOXYGEN // ReferenceElements // ------------------------ /** \brief Class providing access to the singletons of the * reference elements * * Special methods are available for * simplex and cube elements of any dimension. * The method general can be used to obtain the reference element * for a given geometry type. * * \ingroup GeometryReferenceElements */ template< class ctype_, int dim > struct ReferenceElements { //! The coordinate field type of the contained reference elements. using ctype = ctype_; //! The coordinate field type of the contained reference elements. using CoordinateField = ctype; //! The dimension of the contained reference elements. static constexpr int dimension = dim; private: using Container = Impl::ReferenceElementContainer< ctype, dim >; public: //! The reference element type. using ReferenceElement = typename Container::ReferenceElement; //! Iterator over available reference elements. using Iterator = typename Container::const_iterator; //! Iterator over available reference elements. using iterator = Iterator; //! get general reference elements static const ReferenceElement& general ( const GeometryType& type ) { return container() ( type ); } //! get simplex reference elements static const ReferenceElement& simplex () { return container().simplex(); } //! get hypercube reference elements static const ReferenceElement& cube () { return container().cube(); } static Iterator begin () { return container().begin(); } static Iterator end () { return container().end(); } #ifndef DOXYGEN static const typename Container::DeprecatedReferenceElement& deprecated(const ReferenceElement& v) { return container().deprecated(v); } #endif // DOXYGEN private: DUNE_EXPORT static const Container& container () { static Container container; return container; } }; } // namespace Geo //! Make the ReferenceElements container available in the old location. using Geo::ReferenceElements; #ifdef DOXYGEN //! Returns a reference element for the objects t.... /** * \ingroup GeometryReferenceElements * The freestanding function referenceElement is a generic entry point * for getting reference elements for arbitrary objects that support the * operation. As it relies on argument-dependent lookup, the function should * be called without any qualifying namespace. Note, however, that the versions * of referenceElement() for a dimension and GeometryType with explicit template * arguments cannot be found by ADL, so you have to explicitly pull them in or * qualify the call using `Dune::`: * \code { // option 1: using using Dune::referenceElement; auto ref_el = referenceElement(geometry_type); } { // option 2: explicitly put in Dune:: auto ref_el = Dune::referenceElement(geometry_type); } { // option 3: use version without explicit template arguments auto ref_el = referenceElement(double(),geometry_type,Dune::Dim()); } \endcode * * The returned object is guaranteed to have value semantics, so you can copy it * around and store it by value. * * The grid geometries in dune-grid support this function, and thus most people * will use this function as * \code for (const auto& cell : elements(grid_view)) { auto geo = cell.geometry(); auto ref_el = referenceElement(geo); // do some work... } \endcode * * This does of course also work for entities of other codimensions. */ template unspecified-value-type referenceElement(T&&... t); #endif //! Returns a reference element of dimension dim for the given geometry type and coordinate field type. /** * This function allows you to obtain a reference element for a given coordinate type, dimension and * GeometryType: * \code auto gt = ...; using Dune::referenceElement; auto ref_el = referenceElement(gt); auto ref_el = referenceElement(gt,Dune::Dim()); \endcode * * \ingroup GeometryReferenceElements */ template auto referenceElement(const Dune::GeometryType& gt, Dune::Dim = {}) { return ReferenceElements::general(gt); } //! Returns a reference element of dimension dim for the given geometry type and coordinate field type. /** * This function allows you to obtain a reference element for a given coordinate type, dimension and * GeometryType: * \code auto gt = ...; using Dune::referenceElement; auto ref_el = referenceElement(ctype(),gt,Dune::Dim()); \endcode * * \ingroup GeometryReferenceElements */ template>::value, int> = 0> auto referenceElement(const T&, const Dune::GeometryType& gt, Dune::Dim) { return ReferenceElements::general(gt); } #ifndef DOXYGEN // helpers for the ReferenceElement<> meta function namespace Impl { // Evaluates to the correct reference element iff matches the pattern > // otherwise, it's ill-formed. Should be used with detected_or and friends. template struct DefaultReferenceElementExtractor; template::value,int>::type dim> struct DefaultReferenceElementExtractor> { using type = typename Dune::Geo::ReferenceElements::ReferenceElement; }; template using DefaultReferenceElement = typename DefaultReferenceElementExtractor::type; } // looks up the type of a reference element by trying to instantiate the correct overload // of referenceElement() for the given arguments. This will fail if there is no valid // overload and should be used with detected_or or some other utility that places the // instantation in SFINAE context. // // this is placed directly in namespace Dune to avoid any weird surprises template using LookupReferenceElement = decltype(referenceElement(std::declval()...)); #endif // DOXYGEN namespace Transitional { #ifndef DOXYGEN // this abomination checks whether the template signature matches the special case // ReferenceElement> and otherwise defers the type lookup // to a decltype on a call to referenceElement(std::declval()) template using ReferenceElement = Std::detected_or_t< Std::detected_t, Impl::DefaultReferenceElement, T... >; #else // DOXYGEN //! Returns the type of reference element for the argument types T... /** * This type alias can be used to get the type of a reference element if you * want to store the element as a class member or need to access nested type * information. Normally, it will return the type of reference element that a * call to `referenceElement(T...)` would return, for example for a geometry: * \code Cell::Geometry geo = cell.geometry(); Dune::ReferenceElement ref_el = referenceElement(geo); \endcode * * There is also a special shorthand signature for the default reference elements: * \code constexpr int dim = ...; auto geometry_type = ...; Dune::ReferenceElement> = referenceElement(geometry_type); \endcode * * \ingroup GeometryReferenceElements * \sa Dune::ReferenceElement */ template using ReferenceElement = unspecified-type; #endif //DOXYGEN } #ifndef DOXYGEN namespace Impl { // helpers for triggering a deprecation warning for occurences of the old // ReferenceElement syntax (Dune::ReferenceElement) // this looks a little weird, encoding the type in the return type of a nested function, // but it was the only reliable way to trigger the warning iff the compiler encounters // an invalid use. Other solutions either miss some (or all) uses or trigger false alarms. template struct ValidReferenceElementTypeSignature { Transitional::ReferenceElement check(); }; template struct DeprecatedReferenceElementTypeSignature { [[deprecated("Dune::ReferenceElement is deprecated, please use Dune::ReferenceElement (if you have a geometry), Dune::ReferenceElements::ReferenceElement or Dune::Transitional::ReferenceElement> instead. After Dune 2.6, you will be able to use Dune::ReferenceElement>.")]] T check(); }; } // namespace Impl // This just makes sure the user doesn't use invalid syntax (by checking against the -1 default for // the dimension, and then either hands back the old-style type along with a deprecation warning or // forwards to the transitional version template using ReferenceElement = decltype( std::declval< typename std::conditional< dim == -1, Impl::ValidReferenceElementTypeSignature, Impl::DeprecatedReferenceElementTypeSignature> >::type >().check()); #else // DOXYGEN //! Returns the type of reference element for the argument type T. /** * This type alias can be used to get the type of a reference element if you * want to store the element as a class member or need to access nested type * information. Normally, it will return the type of reference element that a * call to `referenceElement(T)` would return, for example for a geometry: * \code Cell::Geometry geo = cell.geometry(); Dune::ReferenceElement ref_el = referenceElement(geo); \endcode * * In the long run, we want to support multiple types T here, but for now that * does not work due to backwards compatibility reasons. You can also still obtain * the type of a standard reference element using Dune::ReferenceElement, * but this is deprecated in DUNE 2.6. * If you need support for ReferenceElement with multiple type arguments, you can use * Dune::Transitional::ReferenceElement for now, which supports multiple types, but not * the backwards compatibility mode and will become the default after the release of DUNE 2.6. * There is also a special shorthand signature for the default reference elements: * * \deprecated Using the syntax Dune::ReferenceElement is deprecated in DUNE 2.6. * You have the following alternatives: * - Most of the time, you will want to use Dune::ReferenceElement because * you already have a geometry type available. * - Dune::ReferenceElements::ReferenceElement. * - Dune::Transitional::ReferenceElement>. This will become * available as Dune::ReferenceElement> after the release of * DUNE 2.6. * * \ingroup GeometryReferenceElements * \sa Dune::Transitional::ReferenceElement */ template using ReferenceElement = unspecified-type; #endif // DOXYGEN } // namespace Dune #endif // #ifndef DUNE_GEOMETRY_REFERENCEELEMENTS_HH dune-geometry-2.8.0/dune/geometry/refinement.hh000066400000000000000000000234651411346603000215600ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFINEMENT_HH #define DUNE_GEOMETRY_REFINEMENT_HH /*! * \file * \brief This file simply includes all \ref Refinement implementations * so you don't have to do them separately. */ /*! * \addtogroup Refinement Refinement * \ingroup Grid * * * \section General * * * The %Refinement system allows to temporarily refine a grid or single * entities without changing the grid itself. You may want to do this * because you want to write your data to a file and have to do * subsampling, but want to continue the calculation with the * unmodified grid afterwards. * * \subsection Can_do What Refinement can do for you * * * For a given geometry type and number of refined intervals, %Refinement will * - assign consecutive integer indices starting at 0 to each * subvertex, * - assign consecutive integer indices starting at 0 to each * subelement, * - calculate the coordinates of the subvertices for you, * - calculate subvertex-indices of the corners of the subelements for * you. * * The geometry type of the refined entity and of the subelements may * be different, for example you can refine a quadrilateral but get * subelements which are triangles. * * Currently the following geometry types are supported: * - hypercubes (quadrilaterals, hexahedrons), * - simplices (triangles, tetrahedrons), * - triangulating hypercubes into simplices (quadrilaterals -> * triangles, hexahedrons -> tetrahedrons). * * \subsection Cannot_do What Refinement can't do for you * * * - %Refinement does not actually subsample your data, it only tells * you \em where to subsample your data. * - The geometry types need to be known at compile time. See \link * VirtualRefinement VirtualRefinement\endlink if you need to * calculate the right geometry type at run time. * - No %Refinement implementations for anything besides hypercubes and * simplices have been written yet. * * \section User_interface The user interface * * * \code * template * class StaticRefinement * { * public: * enum { dimension }; * * template * struct codim * { * class SubEntityIterator; * }; * typedef ImplementationDefined VertexIterator; // These are aliases for codim::SubEntityIterator * typedef ImplementationDefined ElementIterator; * * typedef ImplementationDefined IndexVector; // These are FieldVectors * typedef ImplementationDefined CoordVector; * * static int nVertices(Dune::RefinementIntervals intervals); * static VertexIterator vBegin(Dune::RefinementIntervals intervals); * static VertexIterator vEnd(Dune::RefinementIntervals intervals); * * static int nElements(Dune::RefinementIntervals intervals); * static ElementIterator eBegin(Dune::RefinementIntervals intervals); * static ElementIterator eEnd(Dune::RefinementIntervals intervals); * } * \endcode * * The Iterators can do all the usual things that Iterators can do, * except dereferencing. In addition, to do something useful, they * support some additional methods: * * \code * template * class VertexIterator * { * public: * typedef ImplementationDefined Refinement; * * int index() const; * Refinement::CoordVector coords() const; * } * * template * class ElementIterator * { * public: * typedef ImplementationDefined Refinement; * * int index() const; * // Coords of the center of mass of the element * Refinement::CoordVector coords() const; * Refinement::IndexVector vertexIndices() const; * } * \endcode * * \subsection How_to_use_it How to use it * * * Either use VirtualRefinement, or if you don't want to do that, read * on. * * \code * // Include the necessary files * #include * * // If you know that you are only ever going to need one refinement * // backend, you can include the corresponding file directly: * //#include * * // Get yourself the Refinement you need: * typedef StaticRefinement::ctype, * GeometryTypes::cube(2), * 2> MyRefinement; * * int main() * { * const Dune::RefinementIntervals refinementlevel = Dune::refinementLevels(2); // equivalent: Dune::refinementIntervals(4) * cout << "Using refinementlevel = " << refinementlevel.intervals() << endl << endl; * * // get Number of Vertices * cout << "Number of Vertices: " * << MyRefinement::nVertices(refinementlevel) * << endl; * * // Iterate over Vertices * cout << "Index\tx\ty" << endl; * MyRefinement::VertexIterator vEnd = MyRefinement::vEnd(refinementlevel); * for(MyRefinement::VertexIterator i = MyRefinement::vBegin(refinementlevel); i != vEnd; ++i) * cout << i.index() << "\t" << i.coords()[0] << "\t" << i.coords()[1] << endl; * cout << endl; * * // Iterate over Vertices * cout << "Index\tEcke0\tEcke1\tEcke2\tEcke3" << endl; * MyRefinement::ElementIterator eEnd = MyRefinement::eEnd(refinementlevel); * for(MyRefinement::ElementIterator i = MyRefinement::eBegin(refinementlevel); i != eEnd; ++i) * cout << i.index() << "\t" * << i.indexVertices()[0] << "\t" << i.indexVertices()[1] << "\t" * << i.indexVertices()[2] << "\t" << i.indexVertices()[3] << endl; * cout << endl; * } * \endcode * * \subsection Guarantees * * * The %Refinement system gives this guarantee (besides conforming to * the above interface: * - The indices of the subvertices and subelement start at 0 and are * consecutive. * * \section Implementing Implementing a new Refinement type * * * If you want to write a %Refinement implementation for a particular * geometry type, e.g. SquaringTheCircle (or a particular set of * geometry types) here is how: * * - create a file refinement/squaringthecircle.cc and \#include * "base.cc". Your file will be included by others, so don't forget * to protect against double inclusion. * - implement a class (or template class) RefinementImp conforming * exactly to the user interface above. * - put it (and it's helper stuff as appropriate) into it's own * namespace Dune::RefinementImp::SquaringTheCircle. * - define the mapping of topologyId, CoordType and coerceToId to your * implementation by specialising template struct * RefinementImp::Traits. It should look like this: * \code * namespace Dune::RefinementImp { * // we're only implementing this for dim=2 * template * struct Traits * { * typedef SquaringTheCircle::RefinementImp Imp; * }; * } * \endcode * If you implement a template class, you have to specialise struct * RefinementImp::Traits for every possible combination of * topologyId and coerceToId that your implementation supports. * - \#include "refinement/squaringthecircle.cc" from refinement.hh. * * This is enough to integrate your implementation into the %Refinement * system. You probably want to include it into \link * VirtualRefinement VirtualRefinement\endlink also. * * \subsection Namespaces * * * The (non-virtual) %Refinement system is organized in the following * way into namespaces: * - Only template class StaticRefinement lives directly in namespace Dune. * - Use namespace Dune::RefinementImp for all the Implementation. * - Use namespace Dune::RefinementImp::HCube, namespace * Dune::RefinementImp::Simplex, ... for each implementation. * * The complete \link VirtualRefinement VirtualRefinement\endlink stuff * is directly in namespace Dune. * * \subsection Layers Conceptual layers * * * - Layer 0 declares struct * RefinementImp::Traits. * It's member typedef Imp tells which %Refinement implementation to * use for a given topologyId (and CoordType). It is located in * refinementbase.cc. * - Layer 1 defines * RefinementImp::XXX::RefinementImp. It implements the Refinements * for each topologyId, coerceToId (and CoordType). Also in this * layer are the definitions of struct RefinementImp::Traits. This * layer is located in refinementXXX.cc. * - Layer 2 puts it all together. It defines class * StaticRefinement by deriving * from the corresponding RefinementImp. It is located in * refinementbase.cc. * - There is a dummy layer 2.5 which simply includes * all the refinementXXX.cc files. It is located in refinement.cc. * * \link VirtualRefinement VirtualRefinement\endlink adds two more * layers to the ones defined here. */ // The interface (template<...> class StaticRefinement) is not included here // since it derives from parts which I consider implementation. Look // into refinement/base.cc if the documentation is above is not enough. #include "refinement/base.cc" #include "refinement/hcube.cc" #include "refinement/simplex.cc" #include "refinement/hcubetriangulation.cc" #include "refinement/prismtriangulation.cc" #include "refinement/pyramidtriangulation.cc" #endif // DUNE_GEOMETRY_REFINEMENT_HH dune-geometry-2.8.0/dune/geometry/refinement/000077500000000000000000000000001411346603000212255ustar00rootroot00000000000000dune-geometry-2.8.0/dune/geometry/refinement/CMakeLists.txt000066400000000000000000000002761411346603000237720ustar00rootroot00000000000000install(FILES base.cc hcube.cc hcubetriangulation.cc prismtriangulation.cc pyramidtriangulation.cc simplex.cc DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/geometry/refinement) dune-geometry-2.8.0/dune/geometry/refinement/base.cc000066400000000000000000000164531411346603000224570ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFINEMENT_BASE_CC #define DUNE_GEOMETRY_REFINEMENT_BASE_CC /*! * \file * * \brief This file contains the parts independent of a particular * \ref Refinement implementation. */ #include namespace Dune { /*! * \addtogroup Refinement Refinement * \{ */ /*! * \brief This namespace contains the implementation of \ref * Refinement. */ namespace RefinementImp { // ///////////////////////////////// // // Declaration of RefinementImp::Traits // #ifdef DOXYGEN // This is just for Doxygen /*! * \brief Mapping from \a geometryType, \a CoordType and \a coerceTo * to a particular \ref Refinement implementation. * * \tparam topologyId The topology id of the element to refine * \tparam CoordType The C++ type of the coordinates * \tparam coerceToId The topologyId of the subelements * \tparam dimension The dimension of the refinement. * \tparam Dummy Dummy parameter which can be used for SFINAE, should * always be void. * * Each \ref Refinement implementation has to define one or more * specialisations of this struct to declare what it implements. * Template class Refinement uses this struct to know which * implementation it should inherit from. Since non-type template * arguments of specializations may not involve template parameters, it is * often impossible to specify the specialization for all cases directly. * As the workaround, the template parameter \a Dummy can be used for * SFINAE with \a enable_if. * * Each specialisation should contain a single member typedef Imp, * e.g.: * \code * template * struct Traits::id, 2> * { * typedef SquaringTheCircle::Refinement Imp; * }; * \endcode */ template struct Traits { //! The implementation this specialisation maps to typedef SquaringTheCircle::Refinement Imp; }; #else // !DOXYGEN // Doxygen won't see this template struct Traits; #endif // !DOXYGEN } // namespace RefinementImp /*! * \brief Holds the number of refined intervals per axis needed for virtual and static refinement. * * To create an object of this class, call either refinementIntervals() or refinementLevels(). The first on will just * pass its input to the constructor, the latter one will pass 2^{input} to the constructor to be consistent with the * meaning of levels in a grid context. */ class RefinementIntervals{ int intervals_=1; public: explicit RefinementIntervals(int i) : intervals_(i) {} int intervals() const { return intervals_; } }; /*! * \brief Creates a RefinementIntervals object * * \param intervals Number of refined intervals per axis */ inline RefinementIntervals refinementIntervals(int intervals) { return RefinementIntervals{intervals}; } /*! * \brief Creates a RefinementIntervals object * * \param levels Number of refinement levels, translates to \f$2^{levels}\f$ intervals per axis */ inline RefinementIntervals refinementLevels(int levels) { return RefinementIntervals{1< class StaticRefinement : public RefinementImp::Traits::Imp { public: #ifdef DOXYGEN /*! * \brief The Codim struct inherited from the \ref Refinement implementation * * \tparam codimension There is a different struct Codim for each codimension */ template struct Codim { /*! * \brief The SubEntityIterator for each codim * * This is \em some sort of type, not necessarily a typedef */ typedef SubEntityIterator; }; //! The VertexIterator of the Refinement typedef Codim::SubEntityIterator VertexIterator; //! The ElementIterator of the Refinement typedef Codim<0>::SubEntityIterator ElementIterator; /*! * \brief The CoordVector of the Refinement * * This is always a typedef to a FieldVector */ typedef CoordVector; /*! * \brief The IndexVector of the Refinement * * This is always a typedef to a FieldVector */ typedef IndexVector; #endif typedef typename RefinementImp::Traits< topologyId, CoordType, coerceToId, dimension_>::Imp RefinementImp; using RefinementImp::dimension; using RefinementImp::Codim; using typename RefinementImp::VertexIterator; using typename RefinementImp::CoordVector; using typename RefinementImp::ElementIterator; using typename RefinementImp::IndexVector; /*! * \brief Get the number of Vertices * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ static int nVertices(Dune::RefinementIntervals tag) { return RefinementImp::nVertices(tag.intervals()); } /*! * \brief Get a VertexIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ static VertexIterator vBegin(Dune::RefinementIntervals tag) { return RefinementImp::vBegin(tag.intervals()); } /*! * \brief Get a VertexIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ static VertexIterator vEnd(Dune::RefinementIntervals tag) { return RefinementImp::vEnd(tag.intervals()); } /*! * \brief Get the number of Elements * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ static int nElements(Dune::RefinementIntervals tag) { return RefinementImp::nElements(tag.intervals()); } /*! * \brief Get an ElementIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ static ElementIterator eBegin(Dune::RefinementIntervals tag) { return RefinementImp::eBegin(tag.intervals()); } /*! * \brief Get an ElementIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ static ElementIterator eEnd(Dune::RefinementIntervals tag) { return RefinementImp::eEnd(tag.intervals()); } }; /*! \} */ } // namespace Dune #endif // DUNE_GEOMETRY_REFINEMENT_BASE_CC dune-geometry-2.8.0/dune/geometry/refinement/hcube.cc000066400000000000000000000336061411346603000226320ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFINEMENT_HCUBE_CC #define DUNE_GEOMETRY_REFINEMENT_HCUBE_CC /*! * \file * \brief This file contains the \ref Refinement implementation for * hypercubes (quadrilaterals, hexahedrons, etc.). * * See \ref HCubeRefinement. */ /*! * \defgroup HCubeRefinement Refinement implementation for hypercubes * \ingroup Refinement * * \section Iterators The Iterators * * * For the iterators we have to hack around a bit. The problem is as * follows: * \code * template * class outer * { * template * class inner; * }; * \endcode * C++ does not allow specialisation of the inner class when the outer * class is not specialized. * * So I had to create a baseclass for the iterators which is not inside * another class. This base class can then be specialized, and the * real Iterator class inherits from it. I gave it the somewhat clumsy * name RefinementSubEntityIteratorSpecial. */ #include #include #include #include #include #include #include "base.cc" // for RefinementTraits namespace Dune { namespace RefinementImp { /*! * \brief This namespace contains the \ref Refinement implementation * for hypercubes (GeometryType::cube). * * See \ref HCubeRefinement. */ namespace HCube { /*! * \brief \ref Refinement implementation for hypercubes * * \param dimension_ Dimension of the refined hypercube * \param CoordType Coordinate type of the refined hypercube * * The interface is the same as for \ref Dune::StaticRefinement (apart * from the template parameters). */ template class RefinementImp { public: enum { dimension = dimension_ /*!< Know your own dimension \hideinitializer */ }; //- Know yourself typedef RefinementImp Refinement; template struct Codim; typedef typename Codim::SubEntityIterator VertexIterator; typedef FieldVector CoordVector; typedef typename Codim<0>::SubEntityIterator ElementIterator; typedef FieldVector IndexVector; static unsigned nVertices(unsigned nIntervals); static VertexIterator vBegin(unsigned nIntervals); static VertexIterator vEnd(unsigned nIntervals); static unsigned nElements(unsigned nIntervals); static ElementIterator eBegin(unsigned nIntervals); static ElementIterator eEnd(unsigned nIntervals); }; template template struct RefinementImp::Codim { class SubEntityIterator; typedef Dune::AxisAlignedCubeGeometry Geometry; }; template unsigned RefinementImp:: nVertices(unsigned nIntervals) { // return (nIntervals + 1)^dim return Power::eval(nIntervals+1u); } template typename RefinementImp::VertexIterator RefinementImp:: vBegin(unsigned nIntervals) { return VertexIterator(0,nIntervals); } template typename RefinementImp::VertexIterator RefinementImp:: vEnd(unsigned nIntervals) { return VertexIterator(nVertices(nIntervals),nIntervals); } template unsigned RefinementImp:: nElements(unsigned nIntervals) { static_assert(dimension >= 0, "Negative dimension given, what the heck is that supposed to mean?"); // return nIntervals^dim return Power::eval(nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eBegin(unsigned nIntervals) { return ElementIterator(0,nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eEnd(unsigned nIntervals) { return ElementIterator(nElements(nIntervals),nIntervals); } // // The iterators // #ifdef DOXYGEN /*! * \brief SubEntityIterator base class for hypercube refinement * * \tparam dimension Dimension of the refined element * \tparam CoordType Coordinate type of the refined element * \tparam codimension Codimension of the iterator * * This is the base class for SubEntityIterators. We have to use * this construct because RefinementImp<...>::%codim<...> cannot * be specialized without first specializing RefinementImp. */ template class RefinementSubEntityIteratorSpecial {}; #else //!DOXYGEN template class RefinementSubEntityIteratorSpecial; #endif //DOXYGEN // for vertices template class RefinementSubEntityIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::template Codim::SubEntityIterator Common; typedef typename Refinement::CoordVector CoordVector; CoordVector coords() const; private: const Common & asCommon() const { return *static_cast(this); } }; template typename RefinementSubEntityIteratorSpecial::CoordVector RefinementSubEntityIteratorSpecial:: coords() const { std::array v(asCommon().vertexCoord()); CoordVector c; for (int d = 0; d < dimension; d++) { c[d] = v[d]*1.0 / asCommon()._nIntervals; } return c; } // for elements template class RefinementSubEntityIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::template Codim<0>::SubEntityIterator Common; typedef typename Refinement::IndexVector IndexVector; typedef typename Refinement::CoordVector CoordVector; IndexVector vertexIndices() const; CoordVector coords() const; private: const Common & asCommon() const { return *static_cast(this); } }; template typename RefinementSubEntityIteratorSpecial::IndexVector RefinementSubEntityIteratorSpecial:: vertexIndices() const { enum { nIndices = (1 << dimension) }; // cell index tuple std::array e(asCommon().cellCoord()); // vertices IndexVector vec; for(int i = 0; i < nIndices; ++i) { int base = 1; std::array alpha(asCommon().idx2multiidx(i)); for (int d = 0; d < dimension; d++) { vec[i] += (alpha[d] + e[d]) * base; base *= asCommon()._nIntervals+1; } } return vec; } template typename RefinementSubEntityIteratorSpecial::CoordVector RefinementSubEntityIteratorSpecial:: coords() const { std::array v(asCommon().cellCoord()); CoordVector c; for (int d=0; d template class RefinementImp::Codim::SubEntityIterator : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>, public RefinementSubEntityIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::template Codim::SubEntityIterator This; SubEntityIterator(unsigned int index, unsigned int nIntervals); bool equals(const This &other) const; void increment(); int index() const; Geometry geometry () const; private: friend class RefinementSubEntityIteratorSpecial; unsigned int _index; unsigned int _nIntervals; std::array cellCoord(unsigned int idx) const { return idx2coord(idx, _nIntervals); } std::array vertexCoord(unsigned int idx) const { return idx2coord(idx, _nIntervals+1u); } std::array cellCoord() const { return cellCoord(_index); } std::array vertexCoord() const { return vertexCoord(_index); } std::array idx2coord(unsigned int idx, unsigned int w) const { std::array c; for (unsigned int d = 0; d < dimension; d++) { c[d] = idx%w; idx = idx/w; } return c; } unsigned int coord2idx(std::array c, unsigned int w) const { unsigned int i = 0; for (unsigned int d = dimension; d > 0; d--) { i *= w; i += c[d-1]; } return i; } std::array idx2multiidx(unsigned int idx) const { std::array alpha; for (unsigned int i = 0; i < dimension; ++i) alpha[i] = (idx >> i) & 1u; return alpha; } }; #ifndef DOXYGEN template template RefinementImp::Codim::SubEntityIterator:: SubEntityIterator(unsigned int index, unsigned int nIntervals) : _index(index), _nIntervals(nIntervals) {} template template bool RefinementImp::Codim::SubEntityIterator:: equals(const This &other) const { return ((_index == other._index) && (_nIntervals == other._nIntervals)); } template template void RefinementImp::Codim::SubEntityIterator:: increment() { ++_index; } template template int RefinementImp::Codim::SubEntityIterator:: index() const { return _index; } template template typename RefinementImp::template Codim::Geometry RefinementImp::Codim::SubEntityIterator::geometry () const { std::array intCoords = idx2coord(_index,_nIntervals); Dune::FieldVector lower; Dune::FieldVector upper; assert(codimension == 0 or codimension == dimension); if constexpr (codimension == 0) { for (size_t j = 0; j < dimension; j++) { lower[j] = double(intCoords[j]) / double(_nIntervals); upper[j] = double(intCoords[j] + 1) / double(_nIntervals); } return typename RefinementImp::template Codim::Geometry(lower,upper); } else { for (size_t j = 0; j < dimension; j++) lower[j] = upper[j] = double(intCoords[j]) / double(_nIntervals); return typename RefinementImp::template Codim::Geometry(lower,upper,std::bitset(0)); } } #endif // DOXYGEN } // namespace HCube // /////////////////////// // // The refinement traits // #ifndef DOXYGEN template struct Traits< topologyId, CoordType, coerceToId, dim, typename std::enable_if< (dim >= 2 && (GeometryTypes::cube(dim).id() >> 1) == (topologyId >> 1) && (GeometryTypes::cube(dim).id() >> 1) == (coerceToId >> 1) )>::type > { typedef HCube::RefinementImp Imp; }; #endif } // namespace RefinementImp } // namespace Dune #endif // DUNE_GEOMETRY_REFINEMENT_HCUBE_CC dune-geometry-2.8.0/dune/geometry/refinement/hcubetriangulation.cc000066400000000000000000000323451411346603000254320ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC #define DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC /*! * \file * \brief This file contains the \ref Refinement implementation for * triangulating hypercubes (quadrilateral -> triangle, * hexahedron -> tetrahedron) * * See \ref HCubeTriangulation. */ /*! * \defgroup HCubeTriangulation Refinement implementation for triangulating hypercubes * \ingroup Refinement * * Most stuff here is explained in \ref SimplexRefinement. * * We simply triangulate the hypercube into Kuhn simplices, and than * use the \ref SimplexRefinement to do the refinement. * * We explicitly use some of the utilities from the \ref SimplexRefinement. */ #include #include #include "base.cc" #include "simplex.cc" namespace Dune { namespace RefinementImp { /*! * \brief This namespace contains the \ref Refinement * implementation for triangulating hypercubes * (GeometryType::cube -> GeometryType::simplex) * * See \ref HCubeTriangulation. */ namespace HCubeTriangulation { // //////////// // // Utilities // using Simplex::getPermutation; using Simplex::referenceToKuhn; // //////////////////////////////////// // // Refine a hypercube with simplices // // forward declaration of the iterator base template class RefinementIteratorSpecial; template class RefinementImp { public: enum { dimension = dimension_ }; typedef CoordType ctype; template struct Codim; typedef typename Codim::SubEntityIterator VertexIterator; typedef FieldVector CoordVector; typedef typename Codim<0>::SubEntityIterator ElementIterator; typedef FieldVector IndexVector; static int nVertices(int nIntervals); static VertexIterator vBegin(int nIntervals); static VertexIterator vEnd(int nIntervals); static int nElements(int nIntervals); static ElementIterator eBegin(int nIntervals); static ElementIterator eEnd(int nIntervals); private: friend class RefinementIteratorSpecial; friend class RefinementIteratorSpecial; typedef Simplex::RefinementImp BackendRefinement; }; template template struct RefinementImp::Codim { class SubEntityIterator; typedef Dune::MultiLinearGeometry Geometry; }; template int RefinementImp:: nVertices(int nIntervals) { return BackendRefinement::nVertices(nIntervals) * Factorial::factorial; } template typename RefinementImp::VertexIterator RefinementImp:: vBegin(int nIntervals) { return VertexIterator(nIntervals); } template typename RefinementImp::VertexIterator RefinementImp:: vEnd(int nIntervals) { return VertexIterator(nIntervals, true); } template int RefinementImp:: nElements(int nIntervals) { return BackendRefinement::nElements(nIntervals) * Factorial::factorial; } template typename RefinementImp::ElementIterator RefinementImp:: eBegin(int nIntervals) { return ElementIterator(nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eEnd(int nIntervals) { return ElementIterator(nIntervals, true); } // ////////////// // // The iterator // // vertices template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim::Geometry Geometry; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); CoordVector coords() const; Geometry geometry() const; int index() const; protected: typedef typename Refinement::BackendRefinement BackendRefinement; typedef typename BackendRefinement::template Codim::SubEntityIterator BackendIterator; enum { nKuhnSimplices = Factorial::factorial }; int nIntervals_; int kuhnIndex; BackendIterator backend; const BackendIterator backendEnd; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : nIntervals_(nIntervals), kuhnIndex(0), backend(BackendRefinement::vBegin(nIntervals_)), backendEnd(BackendRefinement::vEnd(nIntervals_)) { if (end) kuhnIndex = nKuhnSimplices; } template void RefinementIteratorSpecial:: increment() { ++backend; if (backend == backendEnd) { backend = BackendRefinement::vBegin(nIntervals_); ++kuhnIndex; } } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { return referenceToKuhn(backend.coords(), getPermutation(kuhnIndex)); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { std::vector corners(1); corners[0] = referenceToKuhn(backend.coords(), getPermutation(kuhnIndex)); return Geometry(GeometryTypes::vertex, corners); } template int RefinementIteratorSpecial:: index() const { return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index(); } // elements template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::IndexVector IndexVector; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim<0>::Geometry Geometry; RefinementIteratorSpecial(int nIntervals_, bool end = false); RefinementIteratorSpecial(const RefinementIteratorSpecial &other); void increment(); IndexVector vertexIndices() const; int index() const; CoordVector coords() const; Geometry geometry() const; private: CoordVector global(const CoordVector &local) const; protected: typedef typename Refinement::BackendRefinement BackendRefinement; typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator; enum { nKuhnSimplices = Factorial::factorial }; int nIntervals_; int kuhnIndex; BackendIterator backend; const BackendIterator backendEnd; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : nIntervals_(nIntervals), kuhnIndex(0), backend(BackendRefinement::eBegin(nIntervals_)), backendEnd(BackendRefinement::eEnd(nIntervals_)) { if (end) kuhnIndex = nKuhnSimplices; } template RefinementIteratorSpecial:: RefinementIteratorSpecial(const RefinementIteratorSpecial &other) : nIntervals_(other.nIntervals_), kuhnIndex(other.kuhnIndex), backend(other.backend), backendEnd(other.backendEnd) {} template void RefinementIteratorSpecial:: increment() { ++backend; if (backend == backendEnd) { backend = BackendRefinement::eBegin(nIntervals_); ++kuhnIndex; } } template typename RefinementIteratorSpecial::IndexVector RefinementIteratorSpecial:: vertexIndices() const { IndexVector indices = backend.vertexIndices(); int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_); indices += base; return indices; } template int RefinementIteratorSpecial:: index() const { return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index(); } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { return global(backend.coords()); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { const typename BackendIterator::Geometry &bgeo = backend.geometry(); std::vector corners(dimension+1); for(int i = 0; i <= dimension; ++i) corners[i] = global(bgeo.corner(i)); return Geometry(bgeo.type(), corners); } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: global(const CoordVector &local) const { return referenceToKuhn(local, getPermutation(kuhnIndex)); } // common template template class RefinementImp::Codim::SubEntityIterator : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>, public RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef SubEntityIterator This; SubEntityIterator(int nIntervals, bool end = false); bool equals(const This &other) const; protected: using RefinementIteratorSpecial::kuhnIndex; using RefinementIteratorSpecial::backend; }; #ifndef DOXYGEN template template RefinementImp::Codim::SubEntityIterator:: SubEntityIterator(int nIntervals, bool end) : RefinementIteratorSpecial(nIntervals, end) {} template template bool RefinementImp::Codim::SubEntityIterator:: equals(const This &other) const { return kuhnIndex == other.kuhnIndex && backend == other.backend; } #endif // DOXYGEN } // namespace HCubeTriangulation } // namespace RefinementImp namespace RefinementImp { // /////////////////////// // // The refinement traits // #ifndef DOXYGEN template struct Traits< topologyId, CoordType, coerceToId, dim, typename std::enable_if< (dim >= 2 && (GeometryTypes::cube(dim).id() >> 1) == (topologyId >> 1) && (GeometryTypes::simplex(dim).id() >> 1) == (coerceToId >> 1) )>::type > { typedef HCubeTriangulation::RefinementImp Imp; }; #endif } // namespace RefinementImp } // namespace Dune #endif // DUNE_GEOMETRY_REFINEMENT_HCUBETRIANGULATION_CC dune-geometry-2.8.0/dune/geometry/refinement/prismtriangulation.cc000066400000000000000000000324651411346603000255010ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC #define DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC #include #include #include #include #include "base.cc" #include "simplex.cc" namespace Dune { namespace RefinementImp { /*! * \brief This namespace contains the \ref Refinement * implementation for triangulating prisms * (GeometryType::prism -> GeometryType::simplex) */ namespace PrismTriangulation { // //////////// // // Utilities // using Simplex::getPermutation; using Simplex::referenceToKuhn; // //////////////////////////////////// // // Refine a prism with simplices // // forward declaration of the iterator base template class RefinementIteratorSpecial; /* * The permutations 0,2 and 3 of the Kuhn-decomposition of a cube into simplices form a prism. * The resulting prism is not oriented the same as the reference prism and so the Kuhn-coordinates * have to be transformed using the method below. */ template FieldVector transformCoordinate(FieldVector point) { FieldVector transform; transform[0] = point[1]; transform[1] = 1 - point[0]; transform[2] = point[2]; return transform; } /*! * \brief Implementation of the refinement of a prism into simplices. * * Note that the virtual vertices of two intersecting simplices might have copies, i.e. * by running over all vertices using the VertexIterator you might run over some twice. */ template class RefinementImp { public: enum {dimension = dimension_}; typedef CoordType ctype; template struct Codim; typedef typename Codim::SubEntityIterator VertexIterator; typedef FieldVector CoordVector; typedef typename Codim<0>::SubEntityIterator ElementIterator; typedef FieldVector IndexVector; static int nVertices(int nIntervals); static VertexIterator vBegin(int nIntervals); static VertexIterator vEnd(int nIntervals); static int nElements(int nIntervals); static ElementIterator eBegin(int nIntervals); static ElementIterator eEnd(int nIntervals); private: friend class RefinementIteratorSpecial; friend class RefinementIteratorSpecial; typedef Simplex::RefinementImp BackendRefinement; }; template template struct RefinementImp::Codim { class SubEntityIterator; typedef Dune::MultiLinearGeometry Geometry; }; template int RefinementImp:: nVertices(int nIntervals) { return BackendRefinement::nVertices(nIntervals) * 3; } template typename RefinementImp::VertexIterator RefinementImp:: vBegin(int nIntervals) { return VertexIterator(nIntervals); } template typename RefinementImp::VertexIterator RefinementImp:: vEnd(int nIntervals) { return VertexIterator(nIntervals, true); } template int RefinementImp:: nElements(int nIntervals) { return BackendRefinement::nElements(nIntervals) * 3; } template typename RefinementImp::ElementIterator RefinementImp:: eBegin(int nIntervals) { return ElementIterator(nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eEnd(int nIntervals) { return ElementIterator(nIntervals, true); } // ////////////// // // The iterator // // vertices template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim::Geometry Geometry; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); CoordVector coords() const; Geometry geometry () const; int index() const; protected: typedef typename Refinement::BackendRefinement BackendRefinement; typedef typename BackendRefinement::template Codim::SubEntityIterator BackendIterator; enum { nKuhnSimplices = 3 }; int nIntervals_; int kuhnIndex; BackendIterator backend; const BackendIterator backendEnd; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : nIntervals_(nIntervals), kuhnIndex(0), backend(BackendRefinement::vBegin(nIntervals_)), backendEnd(BackendRefinement::vEnd(nIntervals_)) { if (end) kuhnIndex = nKuhnSimplices; } template void RefinementIteratorSpecial:: increment() { ++backend; if (backend == backendEnd) { backend = BackendRefinement::vBegin(nIntervals_); ++kuhnIndex; } } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { // while the kuhnIndex runs from 0,1,2 the actual permutations we need are 0,2,3 return transformCoordinate(referenceToKuhn(backend.coords(), getPermutation((kuhnIndex + 2) % 4))); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { std::vector corners(1); corners[0] = transformCoordinate(referenceToKuhn(backend.coords(), getPermutation((kuhnIndex + 2) % 4))); return Geometry(GeometryTypes::vertex, corners); } template int RefinementIteratorSpecial:: index() const { return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index(); } // elements template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::IndexVector IndexVector; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim<0>::Geometry Geometry; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); IndexVector vertexIndices() const; int index() const; CoordVector coords() const; Geometry geometry () const; private: CoordVector global(const CoordVector &local) const; protected: typedef typename Refinement::BackendRefinement BackendRefinement; typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator; enum { nKuhnSimplices = 3}; int nIntervals_; int kuhnIndex; BackendIterator backend; const BackendIterator backendEnd; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : nIntervals_(nIntervals), kuhnIndex(0), backend(BackendRefinement::eBegin(nIntervals_)), backendEnd(BackendRefinement::eEnd(nIntervals_)) { if (end) kuhnIndex = nKuhnSimplices; } template void RefinementIteratorSpecial:: increment() { ++backend; if (backend == backendEnd) { backend = BackendRefinement::eBegin(nIntervals_); ++kuhnIndex; } } template typename RefinementIteratorSpecial::IndexVector RefinementIteratorSpecial:: vertexIndices() const { IndexVector indices = backend.vertexIndices(); int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_); indices += base; return indices; } template int RefinementIteratorSpecial:: index() const { return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index(); } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { return global(backend.coords()); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { const typename BackendIterator::Geometry &bgeo = backend.geometry(); std::vector corners(dimension+1); for(int i = 0; i <= dimension; ++i) corners[i] = global(bgeo.corner(i)); return Geometry(bgeo.type(), corners); } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: global(const CoordVector &local) const { // while the kuhnIndex runs from 0,1,2 the actual permutations we need are 0,2,3 return transformCoordinate(referenceToKuhn(local, getPermutation((kuhnIndex+2)%4))); } // common template template class RefinementImp::Codim::SubEntityIterator : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>, public RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef SubEntityIterator This; SubEntityIterator(int nIntervals, bool end = false); bool equals(const This &other) const; protected: using RefinementIteratorSpecial::kuhnIndex; using RefinementIteratorSpecial::backend; }; #ifndef DOXYGEN template template RefinementImp::Codim::SubEntityIterator:: SubEntityIterator(int nIntervals, bool end) : RefinementIteratorSpecial(nIntervals, end) {} template template bool RefinementImp::Codim::SubEntityIterator:: equals(const This &other) const { return ((kuhnIndex == other.kuhnIndex) && (backend == other.backend)); } #endif } // namespace PrismTriangulation } // namespace RefinementImp namespace RefinementImp { // /////////////////////// // // The refinement traits // #ifndef DOXYGEN template struct Traits< topologyId, CoordType, coerceToId, 3, typename std::enable_if< (GeometryTypes::prism.id() >> 1) == (topologyId >> 1) && (GeometryTypes::simplex(3).id() >> 1) == (coerceToId >> 1) >::type> { typedef PrismTriangulation::RefinementImp<3, CoordType> Imp; }; #endif } // namespace RefinementImp } // namespace Dune #endif // DUNE_GEOMETRY_REFINEMENT_PRISMTRIANGULATION_CC dune-geometry-2.8.0/dune/geometry/refinement/pyramidtriangulation.cc000066400000000000000000000322561411346603000260120ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC #define DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC #include #include #include #include #include "base.cc" #include "simplex.cc" namespace Dune { namespace RefinementImp { /*! * \brief This namespace contains the \ref Refinement * implementation for triangulating pyramids * (GeometryType::pyramid -> GeometryType::simplex) */ namespace PyramidTriangulation { // //////////// // // Utilities // using Simplex::getPermutation; using Simplex::referenceToKuhn; // //////////////////////////////////// // // Refine a pyramid with simplices // // forward declaration of the iterator base template class RefinementIteratorSpecial; /* * The permutations 0 and 1 of the Kuhn-decomposition of a cube into simplices form a pyramid. * The resulting pyramid is not oriented the same as the reference pyramid and so the Kuhn-coordinates * have to be transformed using the method below. */ template FieldVector transformCoordinate(/*! Point to transform */ FieldVector point) { FieldVector transform; transform[0]=1-point[0]; transform[1]=1-point[1]; transform[2]=point[2]; return transform; } /*! * \brief Implementation of the refinement of a pyramid into simplices. * * Note that the virtual vertices of two intersecting simplices might have copies, i.e. * by running over all vertices using the VertexIterator you might run over some twice. */ template class RefinementImp { public: enum {dimension = dimension_}; typedef CoordType ctype; template struct Codim; typedef typename Codim::SubEntityIterator VertexIterator; typedef FieldVector CoordVector; typedef typename Codim<0>::SubEntityIterator ElementIterator; typedef FieldVector IndexVector; static int nVertices(int nIntervals); static VertexIterator vBegin(int nIntervals); static VertexIterator vEnd(int nIntervals); static int nElements(int nIntervals); static ElementIterator eBegin(int nIntervals); static ElementIterator eEnd(int nIntervals); private: friend class RefinementIteratorSpecial; friend class RefinementIteratorSpecial; typedef Simplex::RefinementImp BackendRefinement; enum { nKuhnSimplices = 2 }; }; template template struct RefinementImp::Codim { class SubEntityIterator; typedef Dune::MultiLinearGeometry Geometry; }; template int RefinementImp:: nVertices(int nIntervals) { return BackendRefinement::nVertices(nIntervals) * nKuhnSimplices; } template typename RefinementImp::VertexIterator RefinementImp:: vBegin(int nIntervals) { return VertexIterator(nIntervals); } template typename RefinementImp::VertexIterator RefinementImp:: vEnd(int nIntervals) { return VertexIterator(nIntervals, true); } template int RefinementImp:: nElements(int nIntervals) { return BackendRefinement::nElements(nIntervals) * nKuhnSimplices; } template typename RefinementImp::ElementIterator RefinementImp:: eBegin(int nIntervals) { return ElementIterator(nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eEnd(int nIntervals) { return ElementIterator(nIntervals, true); } // ////////////// // // The iterator // // vertices template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim::Geometry Geometry; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); CoordVector coords() const; Geometry geometry() const; int index() const; protected: typedef typename Refinement::BackendRefinement BackendRefinement; typedef typename BackendRefinement::template Codim::SubEntityIterator BackendIterator; enum { nKuhnSimplices = 2 }; int nIntervals_; int kuhnIndex; BackendIterator backend; const BackendIterator backendEnd; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : nIntervals_(nIntervals), kuhnIndex(0), backend(BackendRefinement::vBegin(nIntervals_)), backendEnd(BackendRefinement::vEnd(nIntervals_)) { if (end) kuhnIndex = nKuhnSimplices; } template void RefinementIteratorSpecial:: increment() { ++backend; if(backend == backendEnd) { backend = BackendRefinement::vBegin(nIntervals_); ++kuhnIndex; } } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { return transformCoordinate(referenceToKuhn(backend.coords(), getPermutation(kuhnIndex))); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { std::vector corners(1); corners[0] = referenceToKuhn(backend.coords(), getPermutation(kuhnIndex)); return Geometry(GeometryTypes::vertex, corners); } template int RefinementIteratorSpecial:: index() const { return kuhnIndex*BackendRefinement::nVertices(nIntervals_) + backend.index(); } // elements template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::IndexVector IndexVector; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim<0>::Geometry Geometry; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); IndexVector vertexIndices() const; int index() const; CoordVector coords() const; Geometry geometry() const; private: CoordVector global(const CoordVector &local) const; protected: typedef typename Refinement::BackendRefinement BackendRefinement; typedef typename BackendRefinement::template Codim<0>::SubEntityIterator BackendIterator; enum { nKuhnSimplices = 2}; int nIntervals_; int kuhnIndex; BackendIterator backend; const BackendIterator backendEnd; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : nIntervals_(nIntervals), kuhnIndex(0), backend(BackendRefinement::eBegin(nIntervals_)), backendEnd(BackendRefinement::eEnd(nIntervals_)) { if (end) kuhnIndex = nKuhnSimplices; } template void RefinementIteratorSpecial:: increment() { ++backend; if (backend == backendEnd) { backend = BackendRefinement::eBegin(nIntervals_); ++kuhnIndex; } } template typename RefinementIteratorSpecial::IndexVector RefinementIteratorSpecial:: vertexIndices() const { IndexVector indices = backend.vertexIndices(); int base = kuhnIndex * BackendRefinement::nVertices(nIntervals_); indices += base; return indices; } template int RefinementIteratorSpecial:: index() const { return kuhnIndex*BackendRefinement::nElements(nIntervals_) + backend.index(); } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { return global(backend.coords()); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial:: geometry() const { const typename BackendIterator::Geometry & bgeo = backend.geometry(); std::vector corners(dimension+1); for(int i = 0; i <= dimension; ++i) corners[i] = global(bgeo.corner(i)); return Geometry(bgeo.type(), corners); } template typename RefinementIteratorSpecial:: CoordVector RefinementIteratorSpecial:: global(const CoordVector &local) const { return transformCoordinate(referenceToKuhn(local, getPermutation(kuhnIndex))); } // common template template class RefinementImp::Codim::SubEntityIterator : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>, public RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef SubEntityIterator This; SubEntityIterator(int nIntervals, bool end = false); bool equals(const This &other) const; protected: using RefinementIteratorSpecial::kuhnIndex; using RefinementIteratorSpecial::backend; }; #ifndef DOXYGEN template template RefinementImp::Codim::SubEntityIterator:: SubEntityIterator(int nIntervals, bool end) : RefinementIteratorSpecial(nIntervals, end) {} template template bool RefinementImp::Codim::SubEntityIterator:: equals(const This &other) const { return kuhnIndex == other.kuhnIndex && backend == other.backend; } #endif } // namespace PyramidTriangulation } // namespace RefinementImp namespace RefinementImp { // /////////////////////// // // The refinement traits // #ifndef DOXYGEN template struct Traits< topologyId, CoordType, coerceToId, 3, typename std::enable_if< (GeometryTypes::pyramid.id() >> 1) == (topologyId >> 1) && (GeometryTypes::simplex(3).id() >> 1) == (coerceToId >> 1) >::type> { typedef PyramidTriangulation::RefinementImp<3, CoordType> Imp; }; #endif } // namespace RefinementImp } // namespace Dune #endif // DUNE_GEOMETRY_REFINEMENT_PYRAMIDTRIANGULATION_CC dune-geometry-2.8.0/dune/geometry/refinement/simplex.cc000066400000000000000000000645421411346603000232300ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC #define DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC // This file is part of DUNE, a Distributed and Unified Numerics Environment // This file is copyright (C) 2005 Jorrit Fahlke // This file is licensed under version 2 of the GNU General Public License, // with a special "runtime exception." See COPYING at the top of the source // tree for the full licence. /*! @file @brief This file contains the @ref Refinement implementation for simplices (triangles, tetrahedrons...) See @ref SimplexRefinement. */ /*! @defgroup SimplexRefinement Refinement implementation for simplices @ingroup Refinement This is mainly based on Jürgen Beys dissertation. The relevant part is available from . @section Terminology

Kuhn simplex
To triangulate hypercubes we use the Kuhn triangulation. The members of this triangulation we call Kuhn simplices. The Kuhn simplices are indexed by their corresponding permutation.
Kuhn0 simplex
The Kuhn simplex corresponding to the permutation number 0.
size of a Kuhn simplex
The size of a kuhn simplex is equal to the size of the hypercube that it triangulates.
width of a Kuhn simplex
See size of a Kuhn simplex.
@section KuhnSimplexIndexing Describing Kuhn simplices by their permutation A Kuhn simplex of dimension n can be described by its size s and a permutation of the vector \f$\vec{p}=(0,\ldots,n-1)\f$. To get the coordinates of the corners \f$\vec{x}_0,\ldots,\vec{x}_n\f$ of the simplex, you do as follows: - Start at the origin \f$\vec{x}_0\f$. - For each dimension d from 0 to n-1: - \f$\vec{x}_{d+1}:=\vec{x}_d+s\cdot\vec{e}_{p_d}\f$ (\f$\vec{e}_i\f$ is the unit vector in direction i.) @section Kuhn0VertexCounting Number of vertices in a Kuhn0 simplex Let N(n, x) be the number of gridpoints within an n-dimensional Kuhn0 simplex of x gridunits width. The number of points in a 0-dimensional simplex is 1, independent of its width. N(0, x) = 1 The recursion formula is \f[N(n+1,x)=\sum^x_{i=0}N(n,i)\f] We slice the n+1 dimensional simplex orthogonal to one of the dimensions and sum the number of points in the n dimensional subsimplices. This formula is satisfied by the binomial coefficient \f[N(n,x)=\left({n+x}\atop x\right)\f] See Bronstein, Semendjajew, Musiol, Mühlig "Taschenbuch der Mathematik" (1999), Formula (1.35c) Observations: - N(n, 0) = 1 - N(n, x) = N(x, n) @section Kuhn0VertexIndexing Index of a vertex within a Kuhn0 simplex @image html simplexvertexindex.png "The image shows the Kuhn0 tetrahedron of width 2 (wireframe). It is partitioned into a tetrahedron (green), a triangle (red), a line (blue), and a vertex (black), each of width 1 and each a Kuhn0 simplex." Let us calculate the index of vertex 9, which has the coordinates \f$(x_0,x_1,x_2)=(2,2,2)\f$. - First we count the number of vertices in the green tetrahedron of width \f$x_0-1=1\f$ (4). Then we take the green tetrahedron away. Whats left is a triangle, which extends into the (1,2)-plane. - Now we count the number of vertices in the red triangle of width \f$x_1-1=1\f$ (3). Again we take the counted points away and are left with a line which extends into direction 2. - We take the blue line of width \f$x_2-1=1\f$, count the number of vertices (2), and throw away the counted stuff. The only thing remaining is a point, so we're done. - We add the counted stuff together and get indeed 9. On to a more complicated example: vertex 6 with coordinates \f$(x_0,x_1,x_2)=(2,1,1)\f$. - First count the vertices in the green tetrahedron again (width \f$x_0-1=1\f$). The result is 4. - Count the vertices in the triangle of width \f$x_1-1=0\f$ (vertex 4), which is just a point. The result is 1. - Count the vertices in the line of width \f$x_2-1=0\f$ (vertex 5), which is also just a point. The result is 1. - Add everything together and get 6. The general algorithm for n dimensions and a vertex with coordinates \f$\vec{x}=(x_0,\ldots,x_{n-1})\f$ is as follows: - For each dimension d from 0 to n-1 - Count the vertices in the n-d dimensional simplex of width \f$x_d-1\f$, - Add all counts together to get the index of the vertex In formulas it looks like this: Let \f$I(n,\vec{x})\f$ be the index of point \f$\vec{x}\f$ in the n-dimensional Kuhn0 simplex. The coordinates measure the position of the point in gridunits and thus are integer. \f[I(n,\vec{x})=\sum_{i=0}^{n-1}N(n-i,x_i-1)=\sum_{i=0}^{n-1}\left({n-i+x_i-1}\atop{n-i}\right)\f] Since the coordinates of a vertex within the Kuhn0 obey the relation \f$x_0\geq x_1\geq\ldots\geq x_{n-1}\f$, they cannot simply be swapped so the sum is somewhat ugly. @section Kuhn0SubelementIndexing Index of a subelement within a Kuhn0 simplex We don't know of a way to simply map a subelement of a Kuhn0 simplex to an index number. Luckily, the iterator interface only requires that we be able to calculate the next subelement. Each subelement is a Kuhn (sub)simplex which triangulates a hypercube. We need to remember the vertex which is the origin of that hypercube and the index of the permutation of that identifies the Kuhn subsimplex. Now to get to the next subelement, we simply need to increment the permutation index, and if the overflows we reset it and increment the origin to the next vertex (we already know how to do that). Some subelements generated this way are outside the refined Kuhn0 simplex, so we have to check for that, and skip them. @section PermutationIndexing Index of a permutation [NOTE: There may be some interesting stuff in http://en.wikipedia.org/wiki/Factoradic . I was not aware of it while writing this code, however.] We need to index the n! permutations of the integers from 0 to n-1 and a way to calculate the permutation if given the index. I'll discuss the permutation P, which operates on a vector \f$\vec{x}=(x_0,\ldots,x_{n-1})\f$. P can be made up of n transpositions, \f$P=T_0\cdots T_{n-1}\f$. Each transposition \f$T_i\f$ exchanges some arbitrary element \f$x_{t_i}\f$ with the element \f$x_i\f$, where \f$t_i\leq i\f$. So we can totally describe \f$T_i\f$ by the integer \f$t_i\f$. Thus we can describe P by the integer vector \f$\vec{t}=(t_0,\cdots,t_{n-1})\f$, where \f$0\leq t_i\leq i\f$. Now we need to encode the vector \f$\vec{t}\f$ into a single number. To do that we view \f$t_i\f$ as digit i of a number p written in a base faculty notation: \f[p=\sum_{i=1}^{n-1}i!t_i\f] This number p is unique for each possible permutation P so we could use this as index. There is a problem though: we would like the identity permutation \f$\vec{x}=P\vec{x}\f$ to have index 0. So we define the index I of the permutation slightly differently: \f[I=\sum_{i=1}^{n-1}i!(i-t_i)\f] I can easily calculate the \f$t_i\f$ from I: \f[i-t_i=(I/i!)\%(i+1)\f] ('/' is integer division and '%' calculates the remainder). @section KuhnToReference Mapping between some Kuhn and the reference simplex @image html referencetokuhn0.png "Step 1 moves each point by its x2 value into x1 direction. Step 2 moves each point by its new x1 value into x0 direction." The algorithm to transform a point \f$\vec{x}=(x_0,\ldots,x_{n-1})\f$ from the reference simplex of dimension n to the Kuhn0 simplex (as illustrated in the image) is as follows: - For each dimension d from n-2 down to 0: - \f$x_d:=x_d+x_{d+1}\f$. The reverse (from Kuhn0 to reference) is simple as well: - For each dimension d from 0 up to n-2: - \f$x_d:=x_d-x_{d+1}\f$. @par Arbitrary Kuhn simplices For arbitrary Kuhn simplices we have to take the permutation of that simplex into account. So to map from the reference simplex of n dimensions to the Kuhn simplex with the permutation P (which is described by the vector \f$\vec{p}=P(0,\ldots,n-1)\f$) we do: - For each dimension d from n-2 down to 0: - \f$x_{p_d}:=x_{p_d}+x_{p_{d+1}}\f$. And or the reverse: - For each dimension d from 0 up to n-2: - \f$x_{p_d}:=x_{p_d}-x_{p_{d+1}}\f$. */ #include #include #include #include #include #include #include "base.cc" namespace Dune { namespace RefinementImp { /*! @brief This namespace contains the @ref Refinement implementation for simplices (triangles, tetrahedrons...) See @ref SimplexRefinement. */ namespace Simplex { // ////////////////// // //! @name Utilities // //@{ /*! @brief Calculate n! Runtime is of order O(n). */ inline int factorial(int n) { int prod = 1; for(int i = 1; i <= n; ++i) prod *= i; return prod; } /*! @brief calculate \f$\left({upper}\atop{lower}\right)\f$ Runtime is of order O(min {lower, upper-lower}) */ inline int binomial(int upper, int lower) { lower = std::min( lower, upper - lower ); if(lower < 0) return 0; int prod = 1; for(int i = upper - lower; i < upper; ++i) prod *= (i+1); return prod / factorial(lower); } /*! @brief calculate the index of a given gridpoint within a Kuhn0 simplex Runtime is of order O(dimension^2) (or better for dimension > the coordinates of the point) */ template int pointIndex(const FieldVector &point) { int index = 0; for(int i = 0; i < dimension; ++i) index += binomial(dimension-i + point[i]-1, dimension-i); return index; } /*! @brief Calculate permutation from it's index Runtime is of order O(n). */ template FieldVector getPermutation(int m) { FieldVector perm; for(int i = 0; i < n; ++i) perm[i] = i; int base = 1; for(int i = 1; i <= n; ++i) base *= i; for(int i = n; i > 0; --i) { base /= i; int d = m / base; m %= base; int t = perm[i-1]; perm[i-1] = perm[i-1-d]; perm[i-1-d] = t; } return perm; } #if 0 Has to be checked // calculate the index of a permutation template int getPermIndex(const FieldVector& test) // O(n^2) { int m = 0; FieldVector perm; for(int i = 0; i < n; ++i) perm[i] = i; int base = 1; for(int i = 1; i <= n; ++i) base *= i; for(int i = n; i > 0; --i) { base /= i; int d; for(d = 0; d < i; ++d) if(test[i-1] == perm[i-1-d]) break; m += d * base; int d = m / base; m %= base; perm[i-1-d] = perm[i-1]; } } #endif // map between the reference simplex and some arbitrary kuhn simplex (denoted by it's permutation) /*! @brief Map from the reference simplex to some Kuhn simplex @tparam dimension Dimension of the simplices @tparam CoordType The C++ type of the coordinates Runtime is of order O(dimension) */ template FieldVector referenceToKuhn( //! Point to map FieldVector point, //! Permutation of the Kuhn simplex to map to const FieldVector &kuhn) { for(int i = dimension - 1; i > 0; --i) point[kuhn[i-1]] += point[kuhn[i]]; return point; } /*! @brief Map from some Kuhn simplex to the reference simplex @tparam dimension Dimension of the simplices @tparam CoordType The C++ type of the coordinates Runtime is of order O(dimension) */ template FieldVector kuhnToReference( //! Point to map FieldVector point, //! Permutation of the Kuhn simplex to map from const FieldVector &kuhn) { for(int i = 0; i < dimension - 1; ++i) point[kuhn[i]] -= point[kuhn[i+1]]; return point; } //@} // ///////////////////////////////////////// // // refinement implementation for simplices // template class RefinementImp { public: enum { dimension = dimension_ }; typedef CoordType ctype; template struct Codim; typedef typename Codim::SubEntityIterator VertexIterator; typedef FieldVector CoordVector; typedef typename Codim<0>::SubEntityIterator ElementIterator; typedef FieldVector IndexVector; static int nVertices(int nIntervals); static VertexIterator vBegin(int nIntervals); static VertexIterator vEnd(int nIntervals); static int nElements(int nIntervals); static ElementIterator eBegin(int nIntervals); static ElementIterator eEnd(int nIntervals); }; template template struct RefinementImp::Codim { class SubEntityIterator; // We don't need the caching, but the uncached MultiLinearGeometry has bug FS#1209 typedef Dune::CachedMultiLinearGeometry Geometry; }; template int RefinementImp:: nVertices(int nIntervals) { return binomial(dimension + nIntervals, dimension); } template typename RefinementImp::VertexIterator RefinementImp:: vBegin(int nIntervals) { return VertexIterator(nIntervals); } template typename RefinementImp::VertexIterator RefinementImp:: vEnd(int nIntervals) { return VertexIterator(nIntervals, true); } template int RefinementImp:: nElements(int nIntervals) { return Dune::Power::eval(nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eBegin(int nIntervals) { return ElementIterator(nIntervals); } template typename RefinementImp::ElementIterator RefinementImp:: eEnd(int nIntervals) { return ElementIterator(nIntervals, true); } // ////////////// // // The iterator // template class RefinementIteratorSpecial; // vertices template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim::Geometry Geometry; typedef RefinementIteratorSpecial This; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); bool equals(const This &other) const; CoordVector coords() const; Geometry geometry () const; int index() const; protected: typedef FieldVector Vertex; int size; Vertex vertex; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : size(nIntervals) { vertex[0] = (end) ? size + 1 : 0; for(int i = 1; i < dimension; ++ i) vertex[i] = 0; } template void RefinementIteratorSpecial:: increment() { assert(vertex[0] <= size); for(int i = dimension - 1; i >= 0; --i) { ++vertex[i]; if(i == 0 || vertex[i] <= vertex[i-1]) break; else vertex[i] = 0; } } template bool RefinementIteratorSpecial:: equals(const This &other) const { return size == other.size && vertex == other.vertex; } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { Vertex ref = kuhnToReference(vertex, getPermutation(0)); CoordVector coords; for(int i = 0; i < dimension; ++i) coords[i] = CoordType(ref[i]) / size; return coords; } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { std::vector corners(1); corners[0] = (CoordVector)vertex; return Geometry(GeometryTypes::vertex, corners); } template int RefinementIteratorSpecial:: index() const { return pointIndex(vertex); } // elements template class RefinementIteratorSpecial { public: typedef RefinementImp Refinement; typedef typename Refinement::IndexVector IndexVector; typedef typename Refinement::CoordVector CoordVector; typedef typename Refinement::template Codim<0>::Geometry Geometry; typedef RefinementIteratorSpecial This; RefinementIteratorSpecial(int nIntervals, bool end = false); void increment(); bool equals(const This &other) const; IndexVector vertexIndices() const; int index() const; CoordVector coords() const; Geometry geometry () const; private: CoordVector global(const CoordVector &local) const; protected: typedef FieldVector Vertex; enum { nKuhnIntervals = Factorial::factorial }; Vertex origin; int kuhnIndex; int size; int index_; }; template RefinementIteratorSpecial:: RefinementIteratorSpecial(int nIntervals, bool end) : kuhnIndex(0), size(nIntervals), index_(0) { for(int i = 0; i < dimension; ++i) origin[i] = 0; if(end) { index_ = Refinement::nElements(nIntervals); origin[0] = size; } } template void RefinementIteratorSpecial:: increment() { assert(origin[0] < size); ++index_; while(1) { ++kuhnIndex; if(kuhnIndex == nKuhnIntervals) { kuhnIndex = 0; // increment origin for(int i = dimension - 1; i >= 0; --i) { ++origin[i]; if(i == 0 || origin[i] <= origin[i-1]) break; else origin[i] = 0; } } // test whether the current simplex has any corner outside the kuhn0 simplex FieldVector perm = getPermutation(kuhnIndex); Vertex corner = origin; bool outside = false; for(int i = 0; i < dimension; ++i) { // next corner ++corner[perm[i]]; if(perm[i] > 0) if(corner[perm[i]] > corner[perm[i]-1]) { outside = true; break; } } if(!outside) return; } } template bool RefinementIteratorSpecial:: equals(const This &other) const { return size == other.size && index_ == other.index_; } template typename RefinementIteratorSpecial::IndexVector RefinementIteratorSpecial:: vertexIndices() const { IndexVector indices; FieldVector perm = getPermutation(kuhnIndex); Vertex vertex = origin; indices[0] = pointIndex(vertex); for(int i = 0; i < dimension; ++i) { ++vertex[perm[i]]; indices[i+1] = pointIndex(vertex); } if (kuhnIndex%2 == 1) for(int i = 0; i < (dimension+1)/2; ++i) { int t = indices[i]; indices[i] = indices[dimension-i]; indices[dimension-i] = t; } return indices; } template int RefinementIteratorSpecial:: index() const { return index_; } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: coords() const { return global(ReferenceElements ::simplex().position(0,0)); } template typename RefinementIteratorSpecial::Geometry RefinementIteratorSpecial::geometry () const { std::vector corners(dimension+1); auto refelem = ReferenceElements::simplex(); for(int i = 0; i <= dimension; ++i) corners[i] = global(refelem.position(i, dimension)); return Geometry(refelem.type(), corners); } template typename RefinementIteratorSpecial::CoordVector RefinementIteratorSpecial:: global(const CoordVector &local) const { CoordVector v = referenceToKuhn(local, getPermutation(kuhnIndex)); v += origin; v /= (typename CoordVector::value_type)size; return kuhnToReference(v, getPermutation(0)); } // common template template class RefinementImp::Codim::SubEntityIterator : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>, public RefinementIteratorSpecial { public: typedef RefinementImp Refinement; SubEntityIterator(int nIntervals, bool end = false); }; #ifndef DOXYGEN template template RefinementImp::Codim::SubEntityIterator:: SubEntityIterator(int nIntervals, bool end) : RefinementIteratorSpecial(nIntervals, end) {} #endif } // namespace Simplex } // namespace RefinementImp namespace RefinementImp { // /////////////////////// // // The refinement traits // #ifndef DOXYGEN template struct Traits< topologyId, CoordType, coerceToId, dim, typename std::enable_if< ((GeometryTypes::simplex(dim).id() >> 1) == (topologyId >> 1) && (GeometryTypes::simplex(dim).id() >> 1) == (coerceToId >> 1) )>::type > { typedef Simplex::RefinementImp Imp; }; #endif } // namespace RefinementImp } // namespace Dune #endif //DUNE_GRID_COMMON_REFINEMENT_SIMPLEX_CC dune-geometry-2.8.0/dune/geometry/test/000077500000000000000000000000001411346603000200505ustar00rootroot00000000000000dune-geometry-2.8.0/dune/geometry/test/CMakeLists.txt000066400000000000000000000062751411346603000226220ustar00rootroot00000000000000dune_add_test(SOURCES test-affinegeometry.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-axisalignedcubegeometry.cc LINK_LIBRARIES dunegeometry) # whether the compiler is affected by # https://gitlab.dune-project.org/core/dune-geometry/issues/19, # a.k.a. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87288 set(ISSUE19_UNAFFECTED_GXX ON) set(issue19_affected_configs) function(check_compiler_issue19 config) string(TOUPPER "${config}" CONFIG) separate_arguments(opts UNIX_COMMAND "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${CONFIG}}") execute_process( COMMAND ${CMAKE_CXX_COMPILER} ${opts} -Q --help=optimizers OUTPUT_VARIABLE opt_settings ERROR_VARIABLE ignored # silence cc1 complaint about c++ options... ) if(opt_settings MATCHES "-ftree-loop-vectorize[ \t]+\\[enabled\\]") set(ISSUE19_UNAFFECTED_GXX OFF PARENT_SCOPE) list(APPEND issue19_affected_configs "${config}") set(issue19_affected_configs "${issue19_affected_configs}" PARENT_SCOPE) endif() endfunction(check_compiler_issue19) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.2) AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.3)) if(CMAKE_BUILD_TYPE) check_compiler_issue19("${CMAKE_BUILD_TYPE}") elseif(CMAKE_CONFIGURATION_TYPES) # multi-configuration generator, check each configuration and if any is # bad skip test for all of them. dune_add_test does not really allow to # make the guard configuration-dependent. foreach(conf IN LISTS CMAKE_CONFIGURATION_TYPES) check_compiler_issue19("${conf}") endforeach(conf) else() check_compiler_issue19("") endif() if(NOT ISSUE19_UNAFFECTED_GXX) if(issue19_affected_configs) string(REPLACE ";" ", " issue19_affected_configs "${issue19_affected_configs}") set(issue19_affected_configs " (Affected configurations: ${issue19_affected_configs})") endif() message(WARNING "You are using gcc 8.2 with optimization options " "including -ftree-loop-vectorize (possibly implicated by -O3). This is " "known to miscompile, see " "https://gitlab.dune-project.org/core/dune-geometry/issues/19 and " "https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87288${issue19_affected_configs}") message(WARNING "Skipping test-cornerstoragerefwrap due to known-bad " "compiler/optimization combination") endif() endif() dune_add_test(SOURCES test-cornerstoragerefwrap.cc LINK_LIBRARIES dunegeometry CMAKE_GUARD ISSUE19_UNAFFECTED_GXX) dune_add_test(SOURCES test-fromvertexcount.cc) dune_add_test(SOURCES test-referenceelements.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-quadrature.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-multilineargeometry.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-nonetype.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-refinement.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-constexpr-geometrytype.cc LINK_LIBRARIES dunegeometry) dune_add_test(SOURCES test-geometrytype-id.cc LINK_LIBRARIES dunegeometry) dune-geometry-2.8.0/dune/geometry/test/checkgeometry.hh000066400000000000000000000215731411346603000232320ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_CHECK_GEOMETRY_HH #define DUNE_CHECK_GEOMETRY_HH #include #include #include #include #include #include #include namespace Dune { /** * \brief Static and dynamic checks for all features of a Geometry * * This excludes anything related to being part of a grid. * * \tparam TestGeometry The type of the geometry to be tested * * \param geometry The TestGeometry object to be tested * * \returns true if check passed */ template bool checkGeometry ( const TestGeometry& geometry ) { using std::sqrt; using std::abs; bool pass = true; //////////////////////////////////////////////////////////////// // Extract all static information //////////////////////////////////////////////////////////////// // dimension of the corresponding reference element static const int mydim = TestGeometry::mydimension; // dimension of the world space static const int coorddim = TestGeometry::coorddimension; // type used for coordinate coefficients typedef typename TestGeometry::ctype ctype; // vector type used for points in the domain [[maybe_unused]] typedef typename TestGeometry::LocalCoordinate LocalCoordinate; // vector type used for image points [[maybe_unused]] typedef typename TestGeometry::GlobalCoordinate GlobalCoordinate; // Matrix-like type for the return value of the jacobianTransposed method typedef typename TestGeometry::JacobianTransposed JacobianTransposed; // Matrix-like type for the return value of the jacobianInverseTransposed method typedef typename TestGeometry::JacobianInverseTransposed JacobianInverseTransposed; const ctype tolerance = std::sqrt( std::numeric_limits< ctype >::epsilon() ); //////////////////////////////////////////////////////////////////////// const int corners = geometry.corners(); if( corners == 0 ) DUNE_THROW( Exception, "A geometry must have at least one corner." ); GlobalCoordinate cornerAvg ( 0 ); for( int i = 0; i < corners; ++i ) cornerAvg += geometry.corner( i ); cornerAvg /= ctype( corners ); const GlobalCoordinate center = geometry.center(); if( corners > 1 ) { // if we have more than one corner, no corner may coincide with their average or the center for( int i = 0; i < corners; ++i ) { const GlobalCoordinate corner = geometry.corner( i ); if( (corner - center).two_norm() <= tolerance ) { std::cerr << "Error: Geometry has multiple corners, but one corner coincides with the center." << std::endl; pass = false; } if( (corner - cornerAvg).two_norm() <= tolerance ) { std::cerr << "Error: Geometry has multiple corners, but one corner coincides with their average." << std::endl; pass = false; } } } else { // the single corner must coincide with the center if( (center - cornerAvg).two_norm() > tolerance ) { std::cerr << "Error: Geometry has a single corner (" << cornerAvg << "), but it does not coincide with the center (" << center << ")." << std::endl; pass = false; } } const ctype volume = geometry.volume(); if( volume < tolerance ) { std::cerr << "Error: Geometry has nearly vanishing volume (" << volume << ")" << std::endl; pass = false; } //////////////////////////////////////////////////////////////////////// const GeometryType type = geometry.type(); if( type.isNone() ) return pass; // make sure the reference element type lookup works ReferenceElement< TestGeometry > refElement = referenceElement( geometry ); // Test whether the return value of the method 'center' corresponds to the center of the // reference element. That is the current definition of the method. if( (center - geometry.global( refElement.position( 0, 0 ) )).two_norm() > tolerance ) DUNE_THROW( Exception, "center() is not consistent with global(refElem.position(0,0))." ); //////////////////////////////////////////////////////////////////////// // Test whether the number and placement of the corners is consistent // with the corners of the corresponding reference element. //////////////////////////////////////////////////////////////////////// if( refElement.size( mydim ) == corners ) { for( int i = 0; i < geometry.corners(); ++i ) { if( (geometry.corner( i ) - geometry.global( refElement.position( i, mydim ) )).two_norm() > tolerance ) { std::cerr << "Error: Methods corner and global are inconsistent." << std::endl; pass = false; } } } else { std::cerr << "Error: Incorrect number of corners (" << geometry.corners() << ", should be " << refElement.size( mydim ) << ")." << std::endl; pass = false; } /////////////////////////////////////////////////////////////////////////////// // Use a quadrature rule as a set of test points and loop over them /////////////////////////////////////////////////////////////////////////////// const Dune::QuadratureRule & quadrature = Dune::QuadratureRules::rule(geometry.type(), 2); for (const auto& ip : quadrature) { const typename TestGeometry::LocalCoordinate &x = ip.position(); // Test whether the methods 'local' and 'global' are inverse to each other if ( (x - geometry.local( geometry.global( x ) )).two_norm() > tolerance ) { std::cerr << "Error: global and local are not inverse to each other." << std::endl; pass = false; } // Test whether the methods 'jacobianTransposed' and 'jacobianInverseTransposed' // return matrices that are inverse to each other. const JacobianTransposed &jt = geometry.jacobianTransposed( x ); const JacobianInverseTransposed &jit = geometry.jacobianInverseTransposed( x ); // Transform to FieldMatrix, so we can have coefficent access and other goodies // We need some black magic for the transformation, because there is no // official easy way yet. // The following code does the transformation by multiplying jt and jit from // the right by identity matrices. That way, only the mv method is used. FieldMatrix< ctype, mydim, coorddim > jtAsFieldMatrix; for (int j=0; j idColumn(0); idColumn[j] = 1; FieldVector column; jt.mv(idColumn,column); for (int k=0; k jitAsFieldMatrix; for (int j=0; j idColumn(0); idColumn[j] = 1; FieldVector column; jit.mv(idColumn,column); for (int k=0; k id; FMatrixHelp::multMatrix( jtAsFieldMatrix, jitAsFieldMatrix, id ); bool isId = true; for( int j = 0; j < mydim; ++j ) for( int k = 0; k < mydim; ++k ) isId &= (std::abs( id[ j ][ k ] - (j == k ? 1 : 0) ) < tolerance); if( !isId) { std::cerr << "Error: jacobianTransposed and jacobianInverseTransposed are not inverse to each other." << std::endl; std::cout << " id != [ "; for( int j = 0; j < mydim; ++j ) std::cout << (j > 0 ? " | " : "") << id[ j ]; std::cout << " ]" << std::endl; pass = false; } // Test whether integrationElement returns something nonnegative if( geometry.integrationElement( x ) < 0 ) { std::cerr << "Error: Negative integrationElement found." << std::endl; pass = false; } FieldMatrix< ctype, mydim, mydim > jtj( 0 ); for( int i = 0; i < mydim; ++i ) for( int j = 0; j < mydim; ++j ) for( int k = 0; k < coorddim; ++k ) jtj[ i ][ j ] += jtAsFieldMatrix[ i ][ k ] * jtAsFieldMatrix[ j ][ k ]; if( abs( sqrt( jtj.determinant() ) - geometry.integrationElement( x ) ) > tolerance ) { std::cerr << "Error: integrationElement is not consistent with jacobianTransposed." << std::endl; pass = false; } if (geometry.affine()) if( abs( geometry.volume() - refElement.volume()*geometry.integrationElement( x ) ) > tolerance ) { std::cerr << "Error: volume is not consistent with jacobianTransposed." << std::endl; pass = false; } } return pass; } } #endif // #ifndef DUNE_CHECK_GEOMETRY_HH dune-geometry-2.8.0/dune/geometry/test/test-affinegeometry.cc000066400000000000000000000173041411346603000243450ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #include #include #include #include #include template< class ctype, int mydim, int cdim > static Dune::FieldVector< ctype, cdim > map ( const Dune::FieldMatrix< ctype, mydim, mydim > &A, const Dune::FieldMatrix< ctype, cdim, cdim > &B, const Dune::FieldVector< ctype, mydim > &x ) { // compute Ax Dune::FieldVector< ctype, mydim > Ax; A.mv( x, Ax ); // embed Ax into the larger space (eAx) Dune::FieldVector< ctype, cdim > eAx( 0 ); for( int j = 0; j < mydim; ++j ) eAx[ j ] = Ax[ j ]; // combute y = B eAx Dune::FieldVector< ctype, cdim > y; B.mv( eAx, y ); return y; } template< class ctype, int mydim, int cdim > static bool testAffineGeometry ( Dune::Transitional::ReferenceElement< ctype, Dune::Dim > refElement, const Dune::FieldMatrix< ctype, mydim, mydim > &A, const Dune::FieldMatrix< ctype, cdim, cdim > &B ) { bool pass = true; typedef Dune::AffineGeometry< ctype, mydim, cdim > Geometry; const Dune::FieldVector< ctype, mydim > &localCenter = refElement.position( 0, 0 ); const ctype epsilon = ctype( 1e5 )*std::numeric_limits< ctype >::epsilon(); const ctype detA = A.determinant(); assert( std::abs( std::abs( B.determinant() ) - ctype( 1 ) ) <= epsilon ); const int numCorners = refElement.size( mydim ); std::vector< Dune::FieldVector< ctype, cdim > > corners( numCorners ); for( int i = 0; i < numCorners; ++i ) corners[ i ] = map( A, B, refElement.position( i, mydim ) ); Geometry geometry( refElement, corners ); if( !geometry.affine() ) { std::cerr << "Error: Affine returns false for an affine geometry." << std::endl; pass = false; } const ctype integrationElement = geometry.integrationElement( localCenter ); if( std::abs( integrationElement - std::abs( detA ) ) > epsilon ) { std::cerr << "Error: Wrong integration element (" << integrationElement << ", should be " << std::abs( detA ) << ")." << std::endl; pass = false; } const ctype volume = geometry.volume(); if( std::abs( volume - refElement.volume()*std::abs( detA ) ) > epsilon ) { std::cerr << "Error: Wrong volume (" << volume << ", should be " << (refElement.volume()*std::abs( detA )) << ")." << std::endl; pass = false; } const Dune::FieldVector< ctype, cdim > center = geometry.center(); if( (center - map( A, B, refElement.position( 0, 0 ) )).two_norm() > epsilon ) { std::cerr << "Error: wrong barycenter (" << center << ")." << std::endl; pass = false; } const Dune::FieldMatrix< ctype, mydim, cdim > JT = geometry.jacobianTransposed( localCenter ); for( int i = 0; i < mydim; ++i ) { Dune::FieldVector< ctype, mydim > e( ctype( 0 ) ); e[ i ] = ctype( 1 ); const Dune::FieldVector< ctype, cdim > t = map( A, B, e ); if( (t - JT[ i ]).two_norm() > epsilon ) { std::cerr << "Error: wrong jacobianTransposed[ " << i << " ] (" << JT[ i ] << ", should be " << t << ")." << std::endl; pass = false; } } pass &= checkGeometry( geometry ); return pass; } template< class ctype, int mydim, int cdim > static bool testAffineGeometry ( Dune::GeometryType gt ) { auto refElement = Dune::referenceElement(gt); Dune::FieldMatrix< ctype, mydim, mydim > A; Dune::FieldMatrix< ctype, cdim, cdim > B; std::cout << "Checking geometry (topologyId = " << gt.id() << ", mydim = " << mydim << ", cdim = " << cdim << ")" << std::endl; std::cout << " reference mapping: "; A = ctype( 0 ); for( int i = 0; i < mydim; ++i ) A[ i ][ i ] = ctype( 1 ); B = ctype( 0 ); for( int i = 0; i < cdim; ++i ) B[ i ][ i ] = ctype( 1 ); const bool passId = testAffineGeometry( refElement, A, B ); std::cout << (passId ? "passed" : "failed"); std::cout << ", scaled reference mapping: "; A = ctype( 0 ); for( int i = 0; i < mydim; ++i ) A[ i ][ i ] = ctype( 42 ); B = ctype( 0 ); for( int i = 0; i < cdim; ++i ) B[ i ][ i ] = ctype( 1 ); const bool passScaledId = testAffineGeometry( refElement, A, B ); std::cout << (passScaledId ? "passed" : "failed") << std::endl; return passId && passScaledId; } template< class ctype > static bool testAffineGeometry () { bool pass = true; pass &= testAffineGeometry< ctype, 0, 0 >( Dune::GeometryTypes::simplex(0) ); pass &= testAffineGeometry< ctype, 0, 1 >( Dune::GeometryTypes::simplex(0) ); pass &= testAffineGeometry< ctype, 0, 2 >( Dune::GeometryTypes::simplex(0) ); pass &= testAffineGeometry< ctype, 0, 3 >( Dune::GeometryTypes::simplex(0) ); pass &= testAffineGeometry< ctype, 0, 4 >( Dune::GeometryTypes::simplex(0) ); pass &= testAffineGeometry< ctype, 0, 0 >( Dune::GeometryTypes::cube(0) ); pass &= testAffineGeometry< ctype, 0, 1 >( Dune::GeometryTypes::cube(0) ); pass &= testAffineGeometry< ctype, 0, 2 >( Dune::GeometryTypes::cube(0) ); pass &= testAffineGeometry< ctype, 0, 3 >( Dune::GeometryTypes::cube(0) ); pass &= testAffineGeometry< ctype, 0, 4 >( Dune::GeometryTypes::cube(0) ); pass &= testAffineGeometry< ctype, 1, 1 >( Dune::GeometryTypes::simplex(1) ); pass &= testAffineGeometry< ctype, 1, 2 >( Dune::GeometryTypes::simplex(1) ); pass &= testAffineGeometry< ctype, 1, 3 >( Dune::GeometryTypes::simplex(1) ); pass &= testAffineGeometry< ctype, 1, 4 >( Dune::GeometryTypes::simplex(1) ); pass &= testAffineGeometry< ctype, 1, 3 >( Dune::GeometryTypes::cube(1) ); pass &= testAffineGeometry< ctype, 1, 1 >( Dune::GeometryTypes::cube(1) ); pass &= testAffineGeometry< ctype, 1, 2 >( Dune::GeometryTypes::cube(1) ); pass &= testAffineGeometry< ctype, 1, 4 >( Dune::GeometryTypes::cube(1) ); pass &= testAffineGeometry< ctype, 2, 2 >( Dune::GeometryTypes::simplex(2) ); pass &= testAffineGeometry< ctype, 2, 3 >( Dune::GeometryTypes::simplex(2) ); pass &= testAffineGeometry< ctype, 2, 4 >( Dune::GeometryTypes::simplex(2) ); pass &= testAffineGeometry< ctype, 2, 2 >( Dune::GeometryTypes::cube(2) ); pass &= testAffineGeometry< ctype, 2, 3 >( Dune::GeometryTypes::cube(2) ); pass &= testAffineGeometry< ctype, 2, 4 >( Dune::GeometryTypes::cube(2) ); pass &= testAffineGeometry< ctype, 3, 3 >( Dune::GeometryTypes::simplex(3) ); pass &= testAffineGeometry< ctype, 3, 4 >( Dune::GeometryTypes::simplex(3) ); /** \bug These tests currently fail. */ // pass &= testAffineGeometry< ctype, 3, 3 >( Dune::GeometryTypes::pyramid ); // pass &= testAffineGeometry< ctype, 3, 4 >( Dune::GeometryTypes::pyramid ); pass &= testAffineGeometry< ctype, 3, 3 >( Dune::GeometryTypes::prism ); pass &= testAffineGeometry< ctype, 3, 4 >( Dune::GeometryTypes::prism ); /** \bug These tests currently fail. */ // pass &= testAffineGeometry< ctype, 3, 3 >( Dune::GeometryTypes::cube(3) ); // pass &= testAffineGeometry< ctype, 3, 4 >( Dune::GeometryTypes::cube(3) ); pass &= testAffineGeometry< ctype, 4, 4 >( Dune::GeometryTypes::simplex(4) ); pass &= testAffineGeometry< ctype, 4, 5 >( Dune::GeometryTypes::simplex(4) ); /** \bug These tests currently fail. */ // pass &= testAffineGeometry< ctype, 4, 4 >( Dune::GeometryTypes::cube(4) ); // pass &= testAffineGeometry< ctype, 4, 5 >( Dune::GeometryTypes::cube(4) ); return pass; } int main ( int /* argc */, char ** /* argv */ ) { bool pass = true; std::cout << ">>> Checking ctype = double" << std::endl; pass &= testAffineGeometry< double >(); //std::cout << ">>> Checking ctype = float" << std::endl; //pass &= testAffineGeometry< float >(); return (pass ? 0 : 1); } dune-geometry-2.8.0/dune/geometry/test/test-axisalignedcubegeometry.cc000066400000000000000000000065561411346603000262530ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: /** \file \brief A unit test for the AxisAlignedCubeGeometry class */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include using namespace Dune; void fail(int &result) { result = 1; } void pass(int &result) { if(result == 77) result = 0; } /** \brief Test whether the given BasicGeometry object 'affine' attribute is * set correctly * * \param geometry The Geometry object to test. * \param expectedAffine Whether the geometry should be affine. * \param result Collect pass/fail results. */ template void testBasicGeometryAffine(const TestGeometry& geometry, int &result) { if( not geometry.affine() ) { Dune::ios_base_all_saver saver(std::cerr); std::cerr << std::boolalpha; std::cerr << "Error: Hypercube geometry is not affine!" << std::endl; fail(result); } else pass(result); } template void testCodimZero(int& result) { std::cout << "== coorddimension = " << coorddim << std::endl; std::cout << "=== mydimension = " << dim << std::endl; typedef AxisAlignedCubeGeometry ElementGeometry; FieldVector lower(0); FieldVector upper(1); std::bitset axes(0); for (int i=0; i void testCodimNonZero(int& result) { std::cout << "== coorddimension = " << coorddim << std::endl; std::cout << "=== mydimension = " << dim << std::endl; typedef AxisAlignedCubeGeometry ElementGeometry; FieldVector lower(-1); FieldVector upper(3); for (size_t i=0; i<(1< axes(i); if (axes.count() != dim) continue; ElementGeometry geometry( lower, upper, axes ); if (checkGeometry(geometry)) pass(result); else fail(result); testBasicGeometryAffine(geometry, result); // test assignability ElementGeometry geometry2( lower, upper, axes ); geometry2 = geometry; } } int main (int /* argc */ , char ** /* argv */) try { // 77 means "SKIP" int result = 77; testCodimZero<0,0>(result); testCodimZero<1,1>(result); testCodimZero<2,2>(result); testCodimZero<3,3>(result); testCodimNonZero<0,2>(result); testCodimNonZero<1,2>(result); testCodimNonZero<2,2>(result); testCodimNonZero<0,3>(result); testCodimNonZero<1,3>(result); testCodimNonZero<2,3>(result); testCodimNonZero<3,3>(result); // Test what happens when a zero-dimensional geometry (a point) is // constructed with the codim-zero constructor (taking lower and upper // corners). testCodimZero<0,3>(result); return result; } catch (Dune::Exception& e) { std::cerr << e << std::endl; throw; } catch (...) { std::cerr << "Generic exception!" << std::endl; throw; } dune-geometry-2.8.0/dune/geometry/test/test-constexpr-geometrytype.cc000066400000000000000000000006311411346603000261140ustar00rootroot00000000000000#include #include #include int main ( int /* argc */, char ** /* argv */ ) { constexpr auto gt_none_1 = Dune::GeometryType(); constexpr auto gt_none_2 = Dune::GeometryTypes::none(0); return not std::integral_constant< bool, gt_none_1.isNone() and gt_none_1 == gt_none_2 and Dune::GeometryType(1,1) == Dune::GeometryTypes::line >{}; } dune-geometry-2.8.0/dune/geometry/test/test-cornerstoragerefwrap.cc000066400000000000000000000102671411346603000256060ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: /** @file * * \brief Test std::reference_wrapper as the CornerStorage in * MultiLinearGeometry. */ #include #include #include #include #include #include #include #include template struct TestGeometryTraits : public Dune::MultiLinearGeometryTraits { template< int mydim, int cdim > struct CornerStorage { typedef std::reference_wrapper< const std::vector< Dune::FieldVector< ct, cdim > > > Type; }; }; template using TestGeometry = Dune::MultiLinearGeometry >; //! make a geometry that covers a kite shape /** * \return The returned geometry will reference a static array that hold the * corner information. Because the order of destruction of static * variables is a bit unclear, the returned value becomes invalid when * main ends and shall not be used anymore. */ template TestGeometry kiteGeometry() { static const std::vector > kiteCorners{ { 0, -1.5 }, // bottom { 1, 0 }, // right { -1, 0 }, // left { 0, 0.5 }, // top }; return { Dune::ReferenceElements::cube(), kiteCorners }; } template bool expectCenter(const Dune::FieldVector &actual, const Dune::FieldVector &expected) { bool match = (actual - expected).two_norm2() < std::numeric_limits::epsilon(); std::cout << (match ? "pass: " : "fail: ") << " Got: (" << actual << "), expected: (" << expected << ")" << std::endl; return match; } int main() { bool pass = true; std::cout << "making a geometry of a kite..." << std::endl; auto geo = kiteGeometry(); std::cout << "checking center of kite..." << std::endl; pass &= expectCenter(geo.center(), { 0, -0.25 }); { // the corners of an upward-pointing triangle std::vector > triangleCorners{ { -1, 0 }, // left { 1, 0 }, // right { 0, 1 }, // top }; std::cout << "turn the geometry into an upward-pointing triangle..." << std::endl; geo = { Dune::ReferenceElements::simplex(), triangleCorners, }; std::cout << "checking center of upward-pointing triangle..." << std::endl; pass &= expectCenter(geo.center(), { 0, 1.0/3 }); std::cout << "turning the geometry into a a leftward-pointing triangle " << "by moving the right corner to the bottom..." << std::endl << "(this is to show that the geometry really has a reference " << "to the coordinates, not a copy of them)" << std::endl; triangleCorners[1] = { 0, -1 }; // move right corner to bottom // NOTE: strictly speaking, the above modification invalidates geo. // However, we're using MultiLinearGeometry here, which does cope with // movement of vertices. We don't give any guarantee that it will // continue to cope in the future, though. CachedMultiLinearGeometry // already does not always handle this case, because it has no way of // knowing that it would need to update its caches. std::cout << "checking center of leftward-pointing triangle..." << std::endl; pass &= expectCenter(geo.center(), { -1.0/3, 0 }); std::cout << "invalidating the geometry by letting the currently " << "referenced coordinate storage go out of scope..." << std::endl; } // triangleCorner is out of scope, so geo references freed storage and is // now really invalid. The only remaining operations are assignment and // destruction. std::cout << "revalidating geometry by again assigning the geometry of a " << "kite..." << std::endl; geo = kiteGeometry(); std::cout << "checking center of kite (again)..." << std::endl; pass &= expectCenter(geo.center(), { 0, -0.25 }); return pass ? 0 : 1; } dune-geometry-2.8.0/dune/geometry/test/test-fromvertexcount.cc000066400000000000000000000042121411346603000246050ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include std::string convBase(unsigned long v, long base) { const char* digits = "0123456789abcdef"; std::string result; if((base < 2) || (base > 16)) { result = "Error: base out of range."; } else { do { result = digits[v % base] + result; v /= base; } while(v); } return result; } void guessTopologyId(unsigned int dim, unsigned int vertices, unsigned int v, unsigned int id, unsigned int d, std::vector & ids) { if (d == dim) { if (v == vertices) ids.push_back(id); return; } // try simplex guessTopologyId(dim,vertices,v+1,id,d+1,ids); // try cube guessTopologyId(dim,vertices,v*2,id+(1< ids; if (dim == 0 || dim == 1) return 0; if (vertices < dim+1 || vertices > 1u< 1) DUNE_THROW(Dune::Exception, "Too many options"); return ids[0]; } void testGuess(unsigned int dim, unsigned int vertices) { std::cout << "check dim: " << dim << " vertices: " << vertices << std::endl; unsigned int id = guessTopologyId(dim, vertices); Dune::GeometryType gt = Dune::geometryTypeFromVertexCount(dim, vertices); if (Dune::GeometryType(id,dim) != gt) DUNE_THROW(Dune::Exception, "Failed to guess the geometry type from the number of vertices."); } int main() try { std::vector> configurations = { {1}, {2}, {3,4}, {4,5,6,8} }; for (int d=0; d<=3; d++) for (int v : configurations[d]) testGuess(d,v); } catch (Dune::Exception & e) { std::cout << "Error: " << e.what() << std::endl; return 1; } dune-geometry-2.8.0/dune/geometry/test/test-geometrytype-id.cc000066400000000000000000000021231411346603000244610ustar00rootroot00000000000000#include #include #include template struct Foo { static constexpr Dune::GeometryType gt = gtid; static unsigned int apply() { //return Foo::gt.id(); //does not work for gcc < 10.2 return Foo::gt.id(); } }; int main(int /* argc */, char** /* argv */) { // make sure we can correctly roundtrip between GeometryType // and its Id in constexpr context constexpr Dune::GeometryType gt2a = Dune::GeometryTypes::triangle; Foo foo2; constexpr Dune::GeometryType gt2b = foo2.gt; static_assert(gt2a == gt2b, "The two geometry types have to compare equal"); Foo foo3; constexpr Dune::GeometryType gt3 = foo3.gt; static_assert(gt3 == Dune::GeometryTypes::prism, "The two geometry types have to compare equal"); if (foo2.apply() != foo3.gt.id()) { std::cerr << "The two topologyIds have to compare equal\n"; return 1; } return 0; } dune-geometry-2.8.0/dune/geometry/test/test-multilineargeometry.cc000066400000000000000000000416301411346603000254410ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #include #include #include #include #include #include #include template struct ReferenceWrapperGeometryTraits : public Dune::MultiLinearGeometryTraits { template< int mydim, int cdim > struct CornerStorage { typedef std::reference_wrapper< const std::vector< Dune::FieldVector< ct, cdim > > > Type; }; }; template< class ctype, int mydim, int cdim > static Dune::FieldVector< ctype, cdim > map ( const Dune::FieldMatrix< ctype, mydim, mydim > &A, const Dune::FieldMatrix< ctype, cdim, cdim > &B, const Dune::FieldVector< ctype, mydim > &x ) { // compute Ax Dune::FieldVector< ctype, mydim > Ax; A.mv( x, Ax ); // embed Ax into the larger space (eAx) Dune::FieldVector< ctype, cdim > eAx( 0 ); for( int j = 0; j < mydim; ++j ) eAx[ j ] = Ax[ j ]; // combute y = B eAx Dune::FieldVector< ctype, cdim > y; B.mv( eAx, y ); return y; } template static bool testCheckInside( const RefElement& refElement, const Geometry& geometry, const GlobalCoordinate& global, const bool testResult ) { auto local = geometry.local( global ); std::cout << "Checking geometry " << geometry.type() << std::endl; if( refElement.checkInside( local ) != testResult ) { std::cerr << "Error: Local operation failed!" << std::endl; return false; } else if( testResult ) // for positive result check global and local { // double check that global and local are inverse to each other auto globalCheck = geometry.global( local ); if( (globalCheck - global).two_norm() > 1e-8 ) { std::cerr << " global and local not inverse to each other!" << std::endl; std::cerr << "(" << globalCheck << ") is not (" << global << ")" << std::endl; return false ; } } std::string name = testResult ? " checkInside" : " checkOutside"; std::cout << name << " test: passed" << std::endl; return true; } static bool testLocalMethod () { bool pass = true; static const int cdim = 2; static const int mydim = 2; typedef double ctype; typedef Dune::MultiLinearGeometry< ctype, mydim, cdim, Dune::MultiLinearGeometryTraits< ctype > > Geometry; { Dune::GeometryType type = Dune::GeometryTypes::simplex( cdim ); auto refElement = Dune::referenceElement< ctype, cdim >( type ); const int numCorners = refElement.size( mydim ); std::vector< Dune::FieldVector< ctype, cdim > > corners( numCorners ); corners[ 0 ] = {{ 0.5, 0 }}; corners[ 1 ] = {{ 0.5, 0.5 }}; corners[ 2 ] = {{ 0 , 0.5 }}; Geometry geometry( refElement, corners ); // point inside of geometry Dune::FieldVector< ctype, cdim > inside( 0.4 ); pass &= testCheckInside( refElement, geometry, inside, true ); // point outside of geometry Dune::FieldVector< ctype, cdim > outside( -0.1 ); pass &= testCheckInside( refElement, geometry, outside, false ); // point outside of geometry Dune::FieldVector< ctype, cdim > outside2( 0 ); pass &= testCheckInside( refElement, geometry, outside2, false ); } { Dune::GeometryType type = Dune::GeometryTypes::cube( cdim ); auto refElement = Dune::referenceElement< ctype, cdim >( type ); const int numCorners = refElement.size( mydim ); std::vector< Dune::FieldVector< ctype, cdim > > corners( numCorners ); corners[ 0 ] = {{ 0.0, 0.0 }}; corners[ 1 ] = {{ 0.5, 0.5 }}; corners[ 2 ] = {{ 0.0, 1.0 }}; corners[ 3 ] = {{ 0.5, 1.0 }}; Geometry geometry( refElement, corners ); // point inside Dune::FieldVector< ctype, cdim > inside( {{ 0.25, 0.75 }}); pass &= testCheckInside( refElement, geometry, inside, true ); // point outside of geometry Dune::FieldVector< ctype, cdim > outside( {{ 1, 0}} ); pass &= testCheckInside( refElement, geometry, outside, false ); // another point outside Dune::FieldVector< ctype, cdim > outside2( 4 ); pass &= testCheckInside( refElement, geometry, outside2, false ); } return pass; } template< class ctype, int mydim, int cdim, class Traits > static bool testMultiLinearGeometry ( Dune::Transitional::ReferenceElement< ctype, Dune::Dim > refElement, const Dune::FieldMatrix< ctype, mydim, mydim > &A, const Dune::FieldMatrix< ctype, cdim, cdim > &B, const Traits & /* traits */ ) { bool pass = true; typedef Dune::MultiLinearGeometry< ctype, mydim, cdim, Traits > Geometry; const Dune::FieldVector< ctype, mydim > &localCenter = refElement.position( 0, 0 ); const ctype epsilon = ctype( 1e5 )*std::numeric_limits< ctype >::epsilon(); const ctype detA = A.determinant(); assert( std::abs( std::abs( B.determinant() ) - ctype( 1 ) ) <= epsilon ); const int numCorners = refElement.size( mydim ); std::vector< Dune::FieldVector< ctype, cdim > > corners( numCorners ); for( int i = 0; i < numCorners; ++i ) corners[ i ] = map( A, B, refElement.position( i, mydim ) ); Geometry geometry( refElement, corners ); if( !geometry.affine() ) { std::cerr << "Error: Affine returns false for an affine geometry." << std::endl; pass = false; } const ctype integrationElement = geometry.integrationElement( localCenter ); if( std::abs( integrationElement - std::abs( detA ) ) > epsilon ) { std::cerr << "Error: Wrong integration element (" << integrationElement << ", should be " << std::abs( detA ) << ")." << std::endl; pass = false; } const ctype volume = geometry.volume(); if( std::abs( volume - refElement.volume()*std::abs( detA ) ) > epsilon ) { std::cerr << "Error: Wrong volume (" << volume << ", should be " << (refElement.volume()*std::abs( detA )) << ")." << std::endl; pass = false; } const Dune::FieldVector< ctype, cdim > center = geometry.center(); if( (center - map( A, B, refElement.position( 0, 0 ) )).two_norm() > epsilon ) { std::cerr << "Error: wrong barycenter (" << center << ")." << std::endl; pass = false; } for (int c = 0; c < numCorners; ++c) { Dune::FieldVector local(refElement.position(c, mydim)); Dune::FieldVector global(geometry.global(local)); Dune::FieldVector local2(geometry.local(global)); if (local2 != local2) { std::cerr << "Error: at corner " << c << " local returned NaN: " << local2 << std::endl; pass = false; } if ((local - local2).two_norm() > epsilon) { std::cerr << "Error: at corner " << c << " local returned wrong value: " << local2 << " (expected: " << local << ")" << std::endl; pass = false; } } const Dune::FieldMatrix< ctype, mydim, cdim > JT = geometry.jacobianTransposed( localCenter ); for( int i = 0; i < mydim; ++i ) { Dune::FieldVector< ctype, mydim > e( ctype( 0 ) ); e[ i ] = ctype( 1 ); const Dune::FieldVector< ctype, cdim > t = map( A, B, e ); if (JT[i] != JT[i]) { std::cerr << "Error: jacobianTransposed[" << i << "] (" << JT[i] << ") has NaN entry." << std::endl; pass = false; } if( (t - JT[ i ]).two_norm() > epsilon ) { std::cerr << "Error: wrong jacobianTransposed[ " << i << " ] (" << JT[ i ] << ", should be " << t << ")." << std::endl; pass = false; } } for (int c = 0; c < numCorners; ++c) { const Dune::FieldMatrix< ctype, mydim, cdim > cornerJT = geometry.jacobianTransposed(refElement.position(c, mydim)); for( int i = 0; i < mydim; ++i ) { Dune::FieldVector< ctype, mydim > e( ctype( 0 ) ); e[ i ] = ctype( 1 ); const Dune::FieldVector< ctype, cdim > t = map( A, B, e ); if (cornerJT[i] != cornerJT[i]) { std::cerr << "Error: at corner " << c << ": jacobianTransposed[" << i << "] (" << cornerJT[i] << ") has NaN entry." << std::endl; pass = false; } if( (t - cornerJT[ i ]).two_norm() > epsilon ) { std::cerr << "Error: at corner " << c << ": wrong jacobianTransposed[ " << i << " ] (" << cornerJT[ i ] << ", should be " << t << ")." << std::endl; pass = false; } } } pass &= checkGeometry( geometry ); return pass; } template< class ctype, int mydim, int cdim, class Traits > static bool testMultiLinearGeometry ( Dune::GeometryType gt, const Traits &traits ) { auto refElement = Dune::referenceElement< ctype, mydim >( gt ); Dune::FieldMatrix< ctype, mydim, mydim > A; Dune::FieldMatrix< ctype, cdim, cdim > B; std::cout << "Checking geometry (topologyId = " << gt.id() << ", mydim = " << mydim << ", cdim = " << cdim << ")" << std::endl; std::cout << " reference mapping: "; A = ctype( 0 ); for( int i = 0; i < mydim; ++i ) A[ i ][ i ] = ctype( 1 ); B = ctype( 0 ); for( int i = 0; i < cdim; ++i ) B[ i ][ i ] = ctype( 1 ); const bool passId = testMultiLinearGeometry( refElement, A, B, traits ); std::cout << (passId ? "passed" : "failed"); std::cout << ", scaled reference mapping: "; A = ctype( 0 ); for( int i = 0; i < mydim; ++i ) A[ i ][ i ] = ctype( 42 ); B = ctype( 0 ); for( int i = 0; i < cdim; ++i ) B[ i ][ i ] = ctype( 1 ); const bool passScaledId = testMultiLinearGeometry( refElement, A, B, traits ); std::cout << (passScaledId ? "passed" : "failed") << std::endl; return passId && passScaledId; } template static bool testNonLinearGeometry(const Traits & /* traits */) { const unsigned dim = 2; typedef Dune::FieldVector Vector; typedef Dune::MultiLinearGeometry Geometry; const ctype epsilon(ctype(16) * std::numeric_limits::epsilon()); bool pass(true); std::cout << "Checking geometry (non-linear, quadrilateral): "; auto reference = Dune::referenceElement(Dune::GeometryTypes::quadrilateral); std::vector corners = {{0,0}, {2,0}, {0,1}, {1,1}}; const Geometry geometry(reference, corners); /* Test global() */ for (std::size_t c = 0; c < corners.size(); ++c) { const Vector& local(reference.position(c, dim)); const Vector global(geometry.global(local)); if (global != global) { std::cerr << "global failed at corner " << c << ": returned NaN: " << global << std::endl; pass = false; } if ((global - corners[c]).two_norm() > epsilon) { std::cerr << "global failed at corner " << c << ": got " << global << ", but expected " << corners[c] << std::endl; pass = false; } } /* Test global() outside reference element */ { Vector local = {-1, 0}; Vector global = {-2, 0}; const Vector global2(geometry.global(local)); if (global2 != global2) { std::cerr << "global failed outside reference element: returned NaN: " << global2 << std::endl; pass = false; } if ((global - global2).two_norm() > epsilon) { std::cerr << "global failed outside reference element: got " << global2 << ", but expected " << global << std::endl; pass = false; } } /* Test local() */ for (std::size_t c = 0; c < corners.size(); ++c) { const Vector& local(reference.position(c, dim)); const Vector local2(geometry.local(corners[c])); if (local2 != local2) { std::cerr << "local failed at corner " << c << ": returned NaN: " << local2 << std::endl; pass = false; } if ((local - local2).two_norm() > epsilon) { std::cerr << "local failed at corner " << c << ": got " << local2 << ", but expected " << local << std::endl; pass = false; } } /* Test local() outside reference element */ { Vector global = {-2, 0}; Vector local = {-1, 0}; const Vector local2(geometry.local(global)); if (local2 != local2) { std::cerr << "local failed outside reference element: returned NaN: " << local2 << std::endl; pass = false; } if ((local - local2).two_norm() > epsilon) { std::cerr << "local failed outside reference element: got " << local2 << ", but expected " << local << std::endl; pass = false; } } std::cout << (pass ? "passed" : "failed") << std::endl; return pass; } template< class ctype, class Traits > static bool testMultiLinearGeometry ( const Traits& traits ) { bool pass = true; Dune::GeometryType cube0d = Dune::GeometryTypes::cube(0); Dune::GeometryType cube1d = Dune::GeometryTypes::cube(1); Dune::GeometryType cube2d = Dune::GeometryTypes::cube(2); Dune::GeometryType cube3d = Dune::GeometryTypes::cube(3); Dune::GeometryType cube4d = Dune::GeometryTypes::cube(4); Dune::GeometryType simplex0d = Dune::GeometryTypes::simplex(0); Dune::GeometryType simplex1d = Dune::GeometryTypes::simplex(1); Dune::GeometryType simplex2d = Dune::GeometryTypes::simplex(2); Dune::GeometryType simplex3d = Dune::GeometryTypes::simplex(3); Dune::GeometryType simplex4d = Dune::GeometryTypes::simplex(4); Dune::GeometryType prism3d = Dune::GeometryTypes::prism; Dune::GeometryType pyramid3d = Dune::GeometryTypes::pyramid; pass &= testMultiLinearGeometry< ctype, 0, 0 >( simplex0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 1 >( simplex0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 2 >( simplex0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 3 >( simplex0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 4 >( simplex0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 0 >( cube0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 1 >( cube0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 2 >( cube0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 3 >( cube0d, traits ); pass &= testMultiLinearGeometry< ctype, 0, 4 >( cube0d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 1 >( simplex1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 2 >( simplex1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 3 >( simplex1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 4 >( simplex1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 3 >( cube1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 1 >( cube1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 2 >( cube1d, traits ); pass &= testMultiLinearGeometry< ctype, 1, 4 >( cube1d, traits ); pass &= testMultiLinearGeometry< ctype, 2, 2 >( simplex2d, traits ); pass &= testMultiLinearGeometry< ctype, 2, 3 >( simplex2d, traits ); pass &= testMultiLinearGeometry< ctype, 2, 4 >( simplex2d, traits ); pass &= testMultiLinearGeometry< ctype, 2, 2 >( cube2d, traits ); pass &= testMultiLinearGeometry< ctype, 2, 3 >( cube2d, traits ); pass &= testMultiLinearGeometry< ctype, 2, 4 >( cube2d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 3 >( simplex3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 4 >( simplex3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 3 >( pyramid3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 4 >( pyramid3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 3 >( prism3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 4 >( prism3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 3 >( cube3d, traits ); pass &= testMultiLinearGeometry< ctype, 3, 4 >( cube3d, traits ); pass &= testMultiLinearGeometry< ctype, 4, 4 >( simplex4d, traits ); pass &= testMultiLinearGeometry< ctype, 4, 5 >( simplex4d, traits ); pass &= testMultiLinearGeometry< ctype, 4, 4 >( cube4d, traits ); pass &= testMultiLinearGeometry< ctype, 4, 5 >( cube4d, traits ); pass &= testNonLinearGeometry( traits ); return pass; } int main ( int /* argc */, char ** /* argv */) { bool pass = true; std::cout << ">>> Checking ctype = double" << std::endl; pass &= testMultiLinearGeometry< double > ( Dune::MultiLinearGeometryTraits< double >{} ); std::cout << ">>> Checking ctype = double with reference_wrapped corner " << "storage" << std::endl; pass &= testMultiLinearGeometry< double > ( ReferenceWrapperGeometryTraits< double >{} ); // std::cout << ">>> Checking ctype = float" << std::endl; // pass &= testMultiLinearGeometry< float > // ( Dune::MultiLinearGeometryTraits< float >{} ); // std::cout << ">>> Checking ctype = float with reference_wrapped corner " // << "storage" << std::endl; // pass &= testMultiLinearGeometry< float > // ( ReferenceWrapperGeometryTraits< float >{} ); pass &= testLocalMethod(); return (pass ? 0 : 1); } dune-geometry-2.8.0/dune/geometry/test/test-nonetype.cc000066400000000000000000000006461411346603000232030ustar00rootroot00000000000000#include #include #include int main ( int /* argc */, char ** /* argv */ ) { int fail = 0; for( int dim = 0; dim < 10; ++dim ) { Dune::GeometryType gt = Dune::GeometryTypes::none( dim ); if ( ! gt.isNone() ) { fail = 1; std::cerr << "Geometry types 'none' for dim " << dim << " fails using makeNone " << std::endl; } } return fail; } dune-geometry-2.8.0/dune/geometry/test/test-quadrature.cc000066400000000000000000000223561411346603000235210ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #include #include #include #include #include #include #include #include #include #include bool success = true; template ::is_specialized, int> = 0> ctype eps () { return std::numeric_limits::epsilon(); } template ::is_specialized, int> = 0> ctype eps () { return std::numeric_limits::epsilon(); } /* This is a simple accuracy test on the reference element. It integrates x^p and y^p with the quadrature rule of order p, which should give an exact result. */ /* Exact (analytical) solution on different reference elements. */ template ctype analyticalSolution (Dune::GeometryType t, int p, int direction ) { using Dune::GeometryType; ctype exact=0; if (t.isCube()) { exact = ctype( 1 )/(p+1); return exact; } if (t.isSimplex()) { /* 1/(prod(k=1..dim,(p+k)) */ exact = ctype( 1 ); for( int k = 1; k <= dim; ++k ) exact *= p+k; exact = ctype( 1 ) / exact; return exact; } if (t.isPrism()) { const int pdim = (dim > 0 ? dim-1 : 0); if( direction < dim-1 ) { Dune::GeometryType nt = Dune::GeometryTypes::simplex( dim-1 ); if( dim > 0 ) exact = analyticalSolution< ctype, pdim >( nt, p, direction ); else exact = ctype( 1 ); } else exact = ctype( 1 ) / ctype( Dune::Factorial< pdim >::factorial * (p+1)); return exact; } if (t.isPyramid()) { switch( direction ) { case 0 : case 1 : exact = ctype( 1 )/((p+3)*(p+1)); break; case 2 : exact = ctype( 2 )/((p+1)*(p+2)*(p+3)); break; }; return exact; } DUNE_THROW(Dune::NotImplemented, __func__ << " for " << t); return exact; } template void checkQuadrature(const QuadratureRule &quad) { using std::pow; using std::abs; using namespace Dune; typedef typename QuadratureRule::CoordType ctype; const unsigned int dim = QuadratureRule::d; const unsigned int p = quad.order(); const Dune::GeometryType& t = quad.type(); FieldVector integral(0); for (typename QuadratureRule::iterator qp=quad.begin(); qp!=quad.end(); ++qp) { // pos of integration point const FieldVector< ctype, dim > &x = qp->position(); const ctype weight = qp->weight(); for (unsigned int d=0; d(t,p,d); ctype relativeError = abs(integral[d] - exact) / (abs(integral[d]) + abs(exact)); if (relativeError > maxRelativeError) maxRelativeError = relativeError; } ctype epsilon = pow(2.0,p)*p*eps(); if (p==0) epsilon = 2.0*eps(); if (maxRelativeError > epsilon) { std::cerr << "Error: Quadrature for " << t << " and order=" << p << " failed" << std::endl; for (unsigned int d=0; d(t,p,d); ctype relativeError = abs(integral[d] - exact) / (abs(integral[d]) + abs(exact)); std::cerr << " relative error " << relativeError << " in direction " << d << " (exact = " << exact << " numerical = " << integral[d] << ")" << std::endl; } success = false; } } template void checkWeights(const QuadratureRule &quad) { using std::abs; typedef typename QuadratureRule::CoordType ctype; const unsigned int dim = QuadratureRule::d; const unsigned int p = quad.order(); const Dune::GeometryType& t = quad.type(); typedef typename QuadratureRule::iterator QuadIterator; ctype volume = 0; QuadIterator qp = quad.begin(); QuadIterator qend = quad.end(); for (; qp!=qend; ++qp) { volume += qp->weight(); } if (abs(volume - Dune::ReferenceElements::general(t).volume()) > quad.size()*eps()) { std::cerr << "Error: Quadrature for " << t << " and order=" << p << " does not sum to volume of RefElem" << std::endl; std::cerr << "\tSums to " << volume << "( RefElem.volume() = " << Dune::ReferenceElements::general(t).volume() << ")" << "(difference " << volume - Dune::ReferenceElements::general(t).volume() << ")" << std::endl; success = false; } } template void check(Dune::GeometryType type, unsigned int maxOrder, Dune::QuadratureType::Enum qt = Dune::QuadratureType::GaussLegendre) { typedef Dune::QuadratureRule Quad; std::string qt_str = ""; switch (qt) { case Dune::QuadratureType::GaussLegendre: qt_str = "GaussLegendre"; break; case Dune::QuadratureType::GaussJacobi_1_0: qt_str = "GaussJacobi_1_0"; break; case Dune::QuadratureType::GaussJacobi_2_0: qt_str = "GaussJacobi_2_0"; break; case Dune::QuadratureType::GaussJacobi_n_0: qt_str = "GaussJacobi_n_0"; break; case Dune::QuadratureType::GaussLobatto: qt_str = "GaussLobatto"; break; case Dune::QuadratureType::GaussRadauLeft: qt_str = "GaussRadauLeft"; break; case Dune::QuadratureType::GaussRadauRight: qt_str = "GaussRadauRight"; break; default: qt_str = "unknown"; } std::cout << "check(Quadrature of type " << qt_str << ")" << std::endl; for (unsigned int p=0; p<=maxOrder; ++p) { const Quad & quad = Dune::QuadratureRules::rule(type, p, qt); if (quad.type() != type || unsigned(quad.order()) < p) { std::cerr << "Error: Type mismatch! Requested Quadrature for " << type << " and order=" << p << "." << std::endl << "\tGot Quadrature for " << quad.type() << " and order=" << quad.order() << std::endl; success = false; return; } checkWeights(quad); checkQuadrature(quad); } if (dim>0 && (dim>3 || type.isCube() || type.isSimplex())) { type = type.isCube() ? Dune::GeometryTypes::cube(dim-1) : Dune::GeometryTypes::simplex(dim-1); check(type , maxOrder, qt); } } template void checkCompositeRule(Dune::GeometryType type, unsigned int maxOrder, unsigned int maxRefinement, Dune::QuadratureType::Enum qt = Dune::QuadratureType::GaussLegendre) { typedef Dune::QuadratureRule BaseQuad; typedef Dune::CompositeQuadratureRule Quad; for (unsigned int p=0; p<=maxOrder; ++p) { const BaseQuad& baseQuad = Dune::QuadratureRules::rule(type, p, qt); Quad quad = Quad(baseQuad, Dune::refinementLevels(maxRefinement)); checkWeights(quad); checkQuadrature(quad); } if (dim>0 && (dim>3 || type.isCube() || type.isSimplex())) { type = type.isCube() ? Dune::GeometryTypes::cube(dim-1) : Dune::GeometryTypes::simplex(dim-1); check(type, maxOrder, qt); } } int main (int argc, char** argv) { unsigned int maxOrder = 45; if (argc > 1) { maxOrder = std::atoi(argv[1]); std::cout << "maxOrder = " << maxOrder << std::endl; } try { check(Dune::GeometryTypes::cube(4), maxOrder); check(Dune::GeometryTypes::cube(4), std::min(maxOrder, unsigned(31)), Dune::QuadratureType::GaussLobatto); check(Dune::GeometryTypes::cube(4), std::min(maxOrder, unsigned(30)), Dune::QuadratureType::GaussRadauLeft); check(Dune::GeometryTypes::cube(4), std::min(maxOrder, unsigned(30)), Dune::QuadratureType::GaussRadauRight); check(Dune::GeometryTypes::simplex(4), maxOrder); #if HAVE_LAPACK check(Dune::GeometryTypes::simplex(4), maxOrder, Dune::QuadratureType::GaussJacobi_n_0); #else std::cout << "Skip GaussJacobi_n_0 tests as LAPACK has not been found" << std::endl; #endif check(Dune::GeometryTypes::prism, maxOrder); check(Dune::GeometryTypes::pyramid, maxOrder); unsigned int maxRefinement = 4; checkCompositeRule(Dune::GeometryTypes::triangle, maxOrder, maxRefinement); #if HAVE_QUADMATH check(Dune::GeometryTypes::cube(4), maxOrder); check(Dune::GeometryTypes::cube(4), std::min(maxOrder, unsigned(31)), Dune::QuadratureType::GaussLobatto); check(Dune::GeometryTypes::cube(4), std::min(maxOrder, unsigned(30)), Dune::QuadratureType::GaussRadauLeft); check(Dune::GeometryTypes::cube(4), std::min(maxOrder, unsigned(30)), Dune::QuadratureType::GaussRadauRight); #else std::cout << "Skip Float128 tests as Quadmath is not supported" << std::endl; #endif } catch( const Dune::Exception &e ) { std::cerr << e << std::endl; throw; } catch (...) { std::cerr << "Generic exception!" << std::endl; throw; } return success ? 0 : 1; } dune-geometry-2.8.0/dune/geometry/test/test-referenceelements.cc000066400000000000000000000453221411346603000250350ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: /** \file \brief A unit test for the ReferenceElements \todo For several element types the subEntities() method is not tested yet! */ #include #include #include using namespace Dune; #define test(a) if (! (a) ) { std::cerr << __FILE__ << ":" << __LINE__ << ": Test `" # a "' failed" << std::endl; errors++; } #define testcmp(a,b) if (! (a == b) ) { std::cerr << __FILE__ << ":" << __LINE__ << ": Test `" # a " == " # b "' failed (got " << a << ")" << std::endl; errors++; } template int checkSubEntities(const RE& re) { int errors = 0; for (std::size_t codim = 0; codim <= RE::dimension; ++codim) { for (std::size_t i = 0; i < std::size_t(re.size(codim)); ++i) { for (std::size_t c = 0; c <= RE::dimension; ++c) { auto subEntities = re.subEntities(i, codim, c); auto it = subEntities.begin(); auto end = subEntities.end(); // check size of subEntities range testcmp(re.size(i, codim, c), end-it); testcmp(std::size_t(re.size(i, codim, c)), subEntities.size()); // check if sub-subentity range is empty if // sub-subentity codim c < codim of subentity if (c codim of subentity if (c>codim) test(re.size(i, codim, c) > 1); // check if subEntities() is conforming with subEntity() for(std::size_t j = 0; j < subEntities.size(); ++j) { testcmp(*it, std::size_t(re.subEntity(i, codim, j, c))); ++it; } // check is contains is true for all indices in the range for(auto j : subEntities) test(subEntities.contains(j)); // check if contains is consistent std::vector containedSubEntities(re.size(c), false); for(auto j : subEntities) containedSubEntities[j] = true; for(auto j: range(std::size_t(re.size(c)))) testcmp(containedSubEntities[j],subEntities.contains(j)); // after incrementing size times, the range should be exhausted testcmp(it, end); } } } return errors; } int main () try { int errors = 0; // ////////////////////////////////////////////////////////////////////////// // We test the different elements separately. I will not try to be smart // and write routines that check all types at once. That would just be // illegible. // ////////////////////////////////////////////////////////////////////////// GeometryType type; // ////////////////////////////////////////////////////////////////////////// // Test segment // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::line; { // check default constructibility and comparison operators ReferenceElements::ReferenceElement r1, r2; test(r1 == r2); test(not (r1 != r2)); // check hash value testcmp(hash_value(r1),0); } const Transitional::ReferenceElement> referenceLine = ReferenceElements::general(type); // size(int c) testcmp(referenceLine.size(0),1); testcmp(referenceLine.size(1),2); // size(int i, int c, int cc) testcmp(referenceLine.size(0,0,0),1); testcmp(referenceLine.size(0,0,1),2); testcmp(referenceLine.size(0,1,1),1); testcmp(referenceLine.size(1,1,1),1); // subEntity(int i, int c, int ii, int cc) // type(int i, int c) test(referenceLine.type(0,0).isLine()); test(referenceLine.type(0,1).isVertex()); test(referenceLine.type(1,1).isVertex()); // test the 'volume' method decltype(referenceLine)::Volume lineVolume = referenceLine.volume(); testcmp(lineVolume, 1); // test the 'geometry' method const ReferenceElements::ReferenceElement::Codim<0>::Geometry referenceLineMapping = referenceLine.geometry< 0 >( 0 ); referenceLineMapping.corner(0); errors += checkSubEntities(referenceLine); // ////////////////////////////////////////////////////////////////////////// // Test triangle // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::triangle; const auto referenceTriangle = referenceElement(type); // size(int c) testcmp(referenceTriangle.size(0),1); testcmp(referenceTriangle.size(1),3); testcmp(referenceTriangle.size(2),3); // size(int i, int c, int cc) testcmp(referenceTriangle.size(0,0,0),1); testcmp(referenceTriangle.size(0,0,1),3); testcmp(referenceTriangle.size(0,0,2),3); testcmp(referenceTriangle.size(0,1,1),1); testcmp(referenceTriangle.size(0,1,2),2); testcmp(referenceTriangle.size(1,1,1),1); testcmp(referenceTriangle.size(1,1,2),2); testcmp(referenceTriangle.size(2,1,1),1); testcmp(referenceTriangle.size(2,1,2),2); testcmp(referenceTriangle.size(0,2,2),1); testcmp(referenceTriangle.size(1,2,2),1); testcmp(referenceTriangle.size(2,2,2),1); // subEntity(int i, int c, int ii, int cc) testcmp(referenceTriangle.subEntity(0,0,0,0),0); testcmp(referenceTriangle.subEntity(0,0,0,1),0); testcmp(referenceTriangle.subEntity(0,0,1,1),1); testcmp(referenceTriangle.subEntity(0,0,2,1),2); testcmp(referenceTriangle.subEntity(0,0,0,2),0); testcmp(referenceTriangle.subEntity(0,0,1,2),1); testcmp(referenceTriangle.subEntity(0,0,2,2),2); testcmp(referenceTriangle.subEntity(0,1,0,1),0); testcmp(referenceTriangle.subEntity(1,1,0,1),1); testcmp(referenceTriangle.subEntity(2,1,0,1),2); testcmp(referenceTriangle.subEntity(0,1,0,2),0); testcmp(referenceTriangle.subEntity(0,1,1,2),1); testcmp(referenceTriangle.subEntity(1,1,0,2),0); testcmp(referenceTriangle.subEntity(1,1,1,2),2); testcmp(referenceTriangle.subEntity(2,1,0,2),1); testcmp(referenceTriangle.subEntity(2,1,1,2),2); testcmp(referenceTriangle.subEntity(0,2,0,2),0); testcmp(referenceTriangle.subEntity(1,2,0,2),1); testcmp(referenceTriangle.subEntity(2,2,0,2),2); // type(int i, int c) test(referenceTriangle.type(0,0).isTriangle()); test(referenceTriangle.type(0,1).isLine()); test(referenceTriangle.type(1,1).isLine()); test(referenceTriangle.type(2,1).isLine()); test(referenceTriangle.type(0,2).isVertex()); test(referenceTriangle.type(1,2).isVertex()); test(referenceTriangle.type(2,2).isVertex()); // test the 'volume' method decltype(referenceTriangle)::Volume triangleVolume = referenceTriangle.volume(); testcmp(triangleVolume, 0.5); // test the 'geometry' method const Transitional::ReferenceElement>::Codim<0>::Geometry referenceTriangleMapping = referenceTriangle.geometry< 0 >( 0 ); referenceTriangleMapping.corner(0); // test the checkInside method test(referenceTriangle.checkInside({0.3,0.3})); errors += checkSubEntities(referenceTriangle); // ////////////////////////////////////////////////////////////////////////// // Test quadrilateral // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::quadrilateral; const Transitional::ReferenceElement> referenceQuad = referenceElement(type,Dim<2>()); // size(int c) testcmp(referenceQuad.size(0),1); testcmp(referenceQuad.size(1),4); testcmp(referenceQuad.size(2),4); // size(int i, int c, int cc) testcmp(referenceQuad.size(0,0,0),1); testcmp(referenceQuad.size(0,0,1),4); testcmp(referenceQuad.size(0,0,2),4); testcmp(referenceQuad.size(0,1,1),1); testcmp(referenceQuad.size(0,1,2),2); testcmp(referenceQuad.size(1,1,1),1); testcmp(referenceQuad.size(1,1,2),2); testcmp(referenceQuad.size(2,1,1),1); testcmp(referenceQuad.size(2,1,2),2); testcmp(referenceQuad.size(3,1,1),1); testcmp(referenceQuad.size(3,1,2),2); testcmp(referenceQuad.size(0,2,2),1); testcmp(referenceQuad.size(1,2,2),1); testcmp(referenceQuad.size(2,2,2),1); testcmp(referenceQuad.size(3,2,2),1); // subEntity(int i, int c, int ii, int cc) testcmp(referenceQuad.subEntity(0,0,0,0),0); testcmp(referenceQuad.subEntity(0,0,0,1),0); testcmp(referenceQuad.subEntity(0,0,1,1),1); testcmp(referenceQuad.subEntity(0,0,2,1),2); testcmp(referenceQuad.subEntity(0,0,3,1),3); testcmp(referenceQuad.subEntity(0,0,0,2),0); testcmp(referenceQuad.subEntity(0,0,1,2),1); testcmp(referenceQuad.subEntity(0,0,2,2),2); testcmp(referenceQuad.subEntity(0,0,3,2),3); testcmp(referenceQuad.subEntity(0,1,0,1),0); testcmp(referenceQuad.subEntity(1,1,0,1),1); testcmp(referenceQuad.subEntity(2,1,0,1),2); testcmp(referenceQuad.subEntity(3,1,0,1),3); testcmp(referenceQuad.subEntity(0,1,0,2),0); testcmp(referenceQuad.subEntity(0,1,1,2),2); testcmp(referenceQuad.subEntity(1,1,0,2),1); testcmp(referenceQuad.subEntity(1,1,1,2),3); testcmp(referenceQuad.subEntity(2,1,0,2),0); testcmp(referenceQuad.subEntity(2,1,1,2),1); testcmp(referenceQuad.subEntity(3,1,0,2),2); testcmp(referenceQuad.subEntity(3,1,1,2),3); testcmp(referenceQuad.subEntity(0,2,0,2),0); testcmp(referenceQuad.subEntity(1,2,0,2),1); testcmp(referenceQuad.subEntity(2,2,0,2),2); testcmp(referenceQuad.subEntity(3,2,0,2),3); // type(int i, int c) test(referenceQuad.type(0,0).isQuadrilateral()); test(referenceQuad.type(0,1).isLine()); test(referenceQuad.type(1,1).isLine()); test(referenceQuad.type(2,1).isLine()); test(referenceQuad.type(3,1).isLine()); test(referenceQuad.type(0,2).isVertex()); test(referenceQuad.type(1,2).isVertex()); test(referenceQuad.type(2,2).isVertex()); test(referenceQuad.type(3,2).isVertex()); errors += checkSubEntities(referenceQuad); // test the 'volume' method decltype(referenceQuad)::Volume quadVolume = referenceQuad.volume(); testcmp(quadVolume, 1); // test the 'geometry' method const Transitional::ReferenceElement>::Codim<0>::Geometry referenceQuadMapping = referenceQuad.geometry< 0 >( 0 ); referenceQuadMapping.corner(0); // ////////////////////////////////////////////////////////////////////////// // Test tetrahedron // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::tetrahedron; const Transitional::ReferenceElement> referenceTetra = referenceElement(double(),type,Dim<3>()); // size(int c) testcmp(referenceTetra.size(0),1); testcmp(referenceTetra.size(1),4); testcmp(referenceTetra.size(2),6); testcmp(referenceTetra.size(3),4); // size(int i, int c, int cc) testcmp(referenceTetra.size(0,0,0),1); testcmp(referenceTetra.size(0,0,1),4); testcmp(referenceTetra.size(0,0,2),6); testcmp(referenceTetra.size(0,0,3),4); for (int i=0; i::Geometry referenceTetraMapping = referenceTetra.geometry< 0 >( 0 ); referenceTetraMapping.corner(0); // test the checkInside method test(referenceTetra.checkInside({0.3,0.3,0.3})); errors += checkSubEntities(referenceTetra); // ////////////////////////////////////////////////////////////////////////// // Test pyramid // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::pyramid; const auto referencePyramid = ReferenceElements::general(type); // size(int c) testcmp(referencePyramid.size(0),1); testcmp(referencePyramid.size(1),5); testcmp(referencePyramid.size(2),8); testcmp(referencePyramid.size(3),5); // size(int i, int c, int cc) testcmp(referencePyramid.size(0,0,0),1); testcmp(referencePyramid.size(0,0,1),5); testcmp(referencePyramid.size(0,0,2),8); testcmp(referencePyramid.size(0,0,3),5); testcmp(referencePyramid.size(0,1,1),1); testcmp(referencePyramid.size(0,1,2),4); testcmp(referencePyramid.size(0,1,3),4); testcmp(referencePyramid.size(1,1,1),1); testcmp(referencePyramid.size(1,1,2),3); testcmp(referencePyramid.size(1,1,3),3); testcmp(referencePyramid.size(2,1,1),1); testcmp(referencePyramid.size(2,1,2),3); testcmp(referencePyramid.size(2,1,3),3); testcmp(referencePyramid.size(3,1,1),1); testcmp(referencePyramid.size(3,1,2),3); testcmp(referencePyramid.size(3,1,3),3); testcmp(referencePyramid.size(4,1,1),1); testcmp(referencePyramid.size(4,1,2),3); testcmp(referencePyramid.size(4,1,3),3); for (int i=0; i( 0 ); referencePyramidMapping.corner(0); errors += checkSubEntities(referencePyramid); // ////////////////////////////////////////////////////////////////////////// // Test prism // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::prism; const auto referencePrism = referenceElement(type); // size(int c) testcmp(referencePrism.size(0),1); testcmp(referencePrism.size(1),5); testcmp(referencePrism.size(2),9); testcmp(referencePrism.size(3),6); // size(int i, int c, int cc) testcmp(referencePrism.size(0,0,0),1); testcmp(referencePrism.size(0,0,1),5); testcmp(referencePrism.size(0,0,2),9); testcmp(referencePrism.size(0,0,3),6); testcmp(referencePrism.size(0,1,1),1); testcmp(referencePrism.size(0,1,2),4); testcmp(referencePrism.size(0,1,3),4); testcmp(referencePrism.size(1,1,1),1); testcmp(referencePrism.size(1,1,2),4); testcmp(referencePrism.size(1,1,3),4); testcmp(referencePrism.size(2,1,1),1); testcmp(referencePrism.size(2,1,2),4); testcmp(referencePrism.size(2,1,3),4); testcmp(referencePrism.size(3,1,1),1); testcmp(referencePrism.size(3,1,2),3); testcmp(referencePrism.size(3,1,3),3); testcmp(referencePrism.size(4,1,1),1); testcmp(referencePrism.size(4,1,2),3); testcmp(referencePrism.size(4,1,3),3); for (int i=0; i( 0 ); referencePrismMapping.corner(0); errors += checkSubEntities(referencePrism); // ////////////////////////////////////////////////////////////////////////// // Test hexahedron // ////////////////////////////////////////////////////////////////////////// type = GeometryTypes::hexahedron; const auto referenceHexa = ReferenceElements::general(type); // size(int c) testcmp(referenceHexa.size(0),1); testcmp(referenceHexa.size(1),6); testcmp(referenceHexa.size(2),12); testcmp(referenceHexa.size(3),8); // size(int i, int c, int cc) testcmp(referenceHexa.size(0,0,0),1); testcmp(referenceHexa.size(0,0,1),6); testcmp(referenceHexa.size(0,0,2),12); testcmp(referenceHexa.size(0,0,3),8); for (int i=0; i>::Codim<0>::Geometry referenceHexaMapping = referenceHexa.geometry< 0 >( 0 ); referenceHexaMapping.corner(0); errors += checkSubEntities(referenceHexa); return errors>0 ? 1 : 0; } catch (Exception &e) { std::cerr << e << std::endl; return 1; } catch (...) { std::cerr << "Generic exception!" << std::endl; return 2; } dune-geometry-2.8.0/dune/geometry/test/test-refinement.cc000066400000000000000000000233351411346603000234760ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: /*! * \file * \brief Unit tests for the virtual refinement code */ #include "config.h" #include #include #include #include #include #include #include using namespace Dune; void pass(int &result) { // 77 means 'SKIP' if (result == 77) { result = 0; } } void fail(int &result) { result = 1; } void collect(int &result, bool passed) { if (passed) { pass(result); } else { fail(result); } } /*! * \brief Test virtual refinement for an element with a run-time type */ template void testVirtualRefinement(int &result, const Dune::GeometryType& elementType, const Dune::GeometryType& coerceTo, Dune::RefinementIntervals tag, std::string refType) { std::cout << "Checking virtual refinement " << elementType << " -> " << coerceTo << " intervals " << tag.intervals() << " " << refType << " tag" << std::endl; auto refElem = referenceElement(elementType); typedef Dune::VirtualRefinement Refinement; typedef typename Refinement::ElementIterator eIterator; typedef typename Refinement::VertexIterator vIterator; // Make a virtual refinement of the reference element Refinement & elementRefinement = Dune::buildRefinement(elementType, coerceTo); eIterator eSubEnd = elementRefinement.eEnd(tag); eIterator eSubIt = elementRefinement.eBegin(tag); for (; eSubIt != eSubEnd; ++eSubIt) { if (refElem.checkInside(eSubIt.coords())) { pass(result); } else { std::cerr << "Error: Sub-element position (" << eSubIt.coords() << ") is outside of the reference element" << std::endl; fail(result); } } vIterator vSubEnd = elementRefinement.vEnd(tag); vIterator vSubIt = elementRefinement.vBegin(tag); for (; vSubIt != vSubEnd; ++vSubIt) { if (refElem.checkInside(vSubIt.coords())) { pass(result); } else { std::cerr << "Error: Sub-vertex position (" << vSubIt.coords() << ") is outside of the reference element" << std::endl; fail(result); } } } /*! * \brief Test virtual refinement for an element with a static type */ template void testStaticRefinementGeometry(int &result, Dune::RefinementIntervals tag, std::string refType) { std::cout << "Checking static refinement geometry " << GeometryType(topologyId, dim) << " -> " << GeometryType(coerceToId, dim) << " intervals " << tag.intervals() << " " << refType << " tag" << std::endl; typedef Dune::StaticRefinement Refinement; typedef typename Refinement::ElementIterator eIterator; typedef typename Refinement::VertexIterator vIterator; eIterator eSubEnd = Refinement::eEnd(tag); eIterator eSubIt = Refinement::eBegin(tag); for (; eSubIt != eSubEnd; ++eSubIt) { // Call the standard test for geometries collect(result, checkGeometry(eSubIt.geometry())); } vIterator vSubEnd = Refinement::vEnd(tag); vIterator vSubIt = Refinement::vBegin(tag); for (; vSubIt != vSubEnd; ++vSubIt) { // Call the standard test for geometries collect(result, checkGeometry(vSubIt.geometry())); } } int main(int /* argc */, char** /* argv */) try { // 77 means 'SKIP' int result = 77; GeometryType gt1, gt2; // test segment gt1 = gt2 = GeometryTypes::line; for (unsigned int refinement = 0; refinement < 3; refinement++) { testVirtualRefinement(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1<(result, gt1, gt2, refinementLevels(refinement), "levels"); testVirtualRefinement(result, gt1, gt2, refinementIntervals(1< (result, refinementLevels(refinement), "levels"); testStaticRefinementGeometry (result, refinementIntervals(1< #include #include #include #include #include #include #include namespace Dune { /** * @brief Provide a factory over the generic topologies * * This class can be used to dynamically create objects * statically bound by their generic topologies. * The method create() returns a pointer to an object depending * on the topology id and a key; the dimension corresponding * to the topology id is static and is provided by the * Traits class. A static method (taking the Topology as template * argument) is also provided. * The Traits class must provide the space dimension, * the types for the key (Key), * the objects returned (Object), and the underlying factory * (Factory). This class must have a template method * createObject taking a key and returning a pointer to * the newly create Object - for destruction call the release * method. **/ template struct TopologyFactory { // extract types from Traits class static const unsigned int dimension = Traits::dimension; typedef typename Traits::Key Key; typedef typename Traits::Object Object; typedef typename Traits::Factory Factory; //! dynamically create objects static Object *create ( const Dune::GeometryType >, const Key &key ) { return Impl::toGeometryTypeIdConstant(gt, [&](auto id) { return create(key); }); } //! statically create objects template< GeometryType::Id geometryId > static Object *create ( const Key &key ) { return Factory::template createObject< geometryId >( key ); } //! statically create objects template< class Topology > static Object *create ( const Key &key ) { return Factory::template createObject< Topology >( key ); } //! release the object returned by the create methods static void release( Object *object ) { delete object; } }; /** @brief A wrapper for a TopologyFactory providing * singleton storage. Same usage as TopologyFactory * but with empty release method an internal storage. **/ template struct TopologySingletonFactory { static const unsigned int dimension = Factory::dimension; typedef typename Factory::Key Key; typedef const typename Factory::Object Object; //! @copydoc TopologyFactory::create(const Dune::GeometryType >,const Key &key) static Object *create ( const Dune::GeometryType >, const Key &key ) { assert( gt.id() < numTopologies ); return instance().getObject( gt, key ); } //! @copydoc TopologyFactory::create(const Key &key) template< GeometryType::Id geometryId > static auto create ( const Key &key ) -> std::enable_if_t< static_cast(geometryId).dim() == dimension, Object * > { return instance().template getObject< geometryId >( key ); } //! @copydoc TopologyFactory::create(const Key &key) template< class Topology > static auto create ( const Key &key ) -> std::enable_if_t< Topology::dimension == dimension, Object * > { return instance().template getObject< Topology >( key ); } //! @copydoc TopologyFactory::release static void release ( Object *object ) {} private: struct ObjectDeleter { void operator() ( Object *ptr ) const { Factory::release( ptr ); } }; static TopologySingletonFactory &instance () { static TopologySingletonFactory instance; return instance; } static const unsigned int numTopologies = (1 << dimension); typedef std::array< std::unique_ptr< Object, ObjectDeleter >, numTopologies > Array; typedef std::map< Key, Array > Storage; TopologySingletonFactory () = default; std::unique_ptr< Object, ObjectDeleter > &find ( const unsigned int topologyId, const Key &key ) { return storage_[ key ][ topologyId ]; } Object *getObject ( const Dune::GeometryType >, const Key &key ) { auto &object = find( gt.id(), key ); if( !object ) object.reset( Factory::create( gt, key ) ); return object.get(); } template< GeometryType::Id geometryId > Object *getObject ( const Key &key ) { static constexpr GeometryType geometry = geometryId; auto &object = find( geometry.id(), key ); if( !object ) object.reset( Factory::template create< geometry >( key ) ); return object.get(); } template< class Topology > Object *getObject ( const Key &key ) { auto &object = find( Topology::id, key ); if( !object ) object.reset( Factory::template create< Topology >( key ) ); return object.get(); } Storage storage_; }; } #endif // #ifndef DUNE_GEOMETRY_TOPOLOGYFACTORY_HH dune-geometry-2.8.0/dune/geometry/type.hh000066400000000000000000000465701411346603000204070ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_TYPE_HH #define DUNE_GEOMETRY_TYPE_HH /** \file * \brief A unique label for each type of element that can occur in a grid */ #include #include #include #include #include #include #include namespace Dune { namespace Impl { enum TopologyConstruction { pyramidConstruction = 0, prismConstruction = 1 }; // Dynamic Topology Properties // --------------------------- /** \brief obtain the number of topologies of a given dimension * * \note Valid topology ids are 0,...,numTopologies(dim)-1. * * \param[in] dim dimension * * \returns number of topologies for the dimension */ inline static unsigned int numTopologies ( int dim ) noexcept { return (1u << dim); } /** \brief check whether a pyramid construction was used to create a given * codimension * * \param[in] topologyId id of the topology * \param[in] dim dimension of the topology * \param[in] codim codimension for which the information is desired * (defaults to 0) * * \returns true, if a pyramid construction was used to generate the * codimension the topology. */ inline bool static isPyramid ( unsigned int topologyId, int dim, int codim = 0 ) noexcept { assert( (dim > 0) && (topologyId < numTopologies( dim )) ); assert( (0 <= codim) && (codim < dim) ); return (((topologyId & ~1) & (1u << (dim-codim-1))) == 0); } /** \brief check whether a prism construction was used to create a given * codimension * * \param[in] topologyId id of the topology * \param[in] dim dimension of the topology * \param[in] codim codimension for which the information is desired * (defaults to 0) * * \returns true, if a prism construction was used to generate the * codimension the topology. */ inline static bool isPrism ( unsigned int topologyId, int dim, int codim = 0 ) noexcept { assert( (dim > 0) && (topologyId < numTopologies( dim )) ); assert( (0 <= codim) && (codim < dim) ); return (( (topologyId | 1) & (1u << (dim-codim-1))) != 0); } /** \brief obtain the base topology of a given codimension * * \param[in] topologyId id of the topology * \param[in] dim dimension of the topology * \param[in] codim codimension for which the information is desired * (defaults to 1) */ inline static unsigned int baseTopologyId ( unsigned int topologyId, int dim, int codim = 1 ) noexcept { assert( (dim >= 0) && (topologyId < numTopologies( dim )) ); assert( (0 <= codim) && (codim <= dim) ); return topologyId & ((1u << (dim-codim)) - 1); } } // namespace Impl // the Topology classes are deprecated and will be removed for the 2.8. // Temporarily a header 'deprecated_topology.hh' is provided which will be removed after the 2.9 release. #if __GNUC__ >= 7 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #include #if __GNUC__ >= 7 # pragma GCC diagnostic pop #endif // GeometryType // ------------- /** \brief Unique label for each type of entities that can occur in DUNE grids * * This class has to be extended if a grid implementation with new entity types * is added to DUNE. * * GeometryType is a C++ "literal type" and can be used in `constexpr` context if created * with a `constexpr` constructor. * * If you want to use a GeometryType as a template parameter, see GeometryType::Id. * * \ingroup GeometryType */ class GeometryType { public: /** \brief Each entity can be tagged by one of these basic types * plus its space dimension */ enum BasicType { simplex, //!< Simplicial element in any nonnegative dimension cube, //!< Cube element in any nonnegative dimension pyramid, //!< Four sided pyramid in three dimensions prism, //!< Prism element in three dimensions extended, //!< Other, more general topology, representable as topologyId none //!< Even more general topology, cannot be specified by a topologyId. Two GeometryTypes with 'none' type are equal if and only if they have the same dimension. }; private: /** \brief Dimension of the element */ unsigned char dim_; /** \brief bool if this is none-type */ bool none_; /** \brief Topology Id element */ unsigned int topologyId_; // Internal type used for the Id. The exact nature of this type is kept // as an implementation detail on purpose. We use a scoped enum here because scoped enums // can be used as template parameters, but are not implicitly converted to other integral // types by the compiler. That way, we avoid unfortunate implicit conversion chains, e.g. // people trying to work with GlobalGeometryTypeIndex, but forgetting to actually call // GlobalGeometryTypeIndex::index(gt) and just using gt directly. enum class IdType : std::uint64_t {}; public: /** \brief An integral id representing a GeometryType. */ /** * Id is an unspecified built-in integral type that uniquely represents a GeometryType. * It mostly exists to be able to use a geometry type as a template parameter, as C++ * does not let us use GeometryType directly for this purpose. * * GeometryType and GeometryType::Id are implicitly convertible to each other, while the * Id does not implicitly convert into other integral types. They should be used as follows: * \code // define a template with a GeometryType::Id parameter template class Foo { // reconstruct a full-blown constexpr GeometryType as needed to access // information like the dimension etc. static constexpr GeometryType gt = gtid; }; // Instantiate a Foo template Foo foo; \endcode * * As you can see, the conversion between GeometryType and the id is completely transparent * to the user (apart from the slightly different template parameter type). * * \note The Id really only exists for this template parameter workaround. Do not use it to * store a more compact version of the GeometryType - GeometryType and GeometryType::Id * use the same amount of storage (64 bits). */ using Id = IdType; /** \brief Construct an Id representing this GeometryType. */ /** * This constructor exists mostly to transparently support using a GeometryType as a * template parameter. * * \sa Id */ constexpr operator Id() const { // recreate the exact storage layout that this class is using, making conversion // extremely cheap std::uint64_t id = dim_ | (std::uint64_t(none_) << 8) | (std::uint64_t(topologyId_) << 32); return static_cast(id); } /** \brief Create an Id representation of this GeometryType. */ /** * The returned Id encapsulates the whole information of this * GeometryType into an enum suitable for being used as template * parameter. The GeometryType can be reconstructed from the Id * using GeometryType{id}. * * This function was mainly introduced to support older GCC versions (<10.2). * There the implicit conversion from GeometryType to Id failed if a pure r-value * template argument based on a static class member was used. * (See dune/geometry/test/test-geometrytype-id.cc) */ constexpr Id toId() const { return static_cast(*this); } /** \brief Reconstruct a Geometry type from a GeometryType::Id */ /** * This constructor exists mostly to transparently support using a GeometryType as a * template parameter. * * \sa Id */ constexpr GeometryType(Id id) : dim_(static_cast(id) & 0xFF) , none_(static_cast(id) & 0x100) , topologyId_(static_cast(id) >> 32) {} /** @name Constructors */ /*@{*/ /** \brief Default constructor, not initializing anything */ constexpr GeometryType () : dim_(0), none_(true), topologyId_(0) {} /** \brief Constructor, using the topologyId (integer), the dimension and a flag for type none. * \note With this constructor, you can easily create an invalid GeometryType, * it is mostly here for internal use! * the TypologyType, users are encouraged to use the * GeometryType(TopologyType t) constructor. */ constexpr GeometryType(unsigned int topologyId, unsigned int dim, bool isNone) : dim_(dim), none_(isNone), topologyId_(topologyId) {} /** \brief Constructor, using the topologyId (integer) and the dimension * \note the topologyId is a binary encoded representation of * the TypologyType, users are encouraged to use the * GeometryType(TopologyType t) constructor. */ constexpr GeometryType(unsigned int topologyId, unsigned int dim) : dim_(dim), none_(false), topologyId_(topologyId) {} /** \brief Constructor from static TopologyType class * * Constructs the GeometryType object from a static topology representation. * * \tparam TopologyType A class providing public static unsigned int members * TopologyType::dimension and TopologyType::id. * You can e.g. use the Point, Prism and Pyramid structs * from the Impl namespace. * \param t Any object of type TopologyType. The object t itself is ignored. */ template> explicit GeometryType(TopologyType t) : dim_(TopologyType::dimension), none_(false), topologyId_(TopologyType::id) { DUNE_UNUSED_PARAMETER(t); } /** @} */ /** @name Query Methods */ /*@{*/ /** \brief Return true if entity is a vertex */ constexpr bool isVertex() const { return dim_==0; } /** \brief Return true if entity is a line segment */ constexpr bool isLine() const { return dim_==1; } /** \brief Return true if entity is a triangle */ constexpr bool isTriangle() const { return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0001; } /** \brief Return true if entity is a quadrilateral */ constexpr bool isQuadrilateral() const { return ! none_ && dim_==2 && (topologyId_ | 1) == 0b0011; } /** \brief Return true if entity is a tetrahedron */ constexpr bool isTetrahedron() const { return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0001; } /** \brief Return true if entity is a pyramid */ constexpr bool isPyramid() const { return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0011; } /** \brief Return true if entity is a prism */ constexpr bool isPrism() const { return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0101; } /** \brief Return true if entity is a hexahedron */ constexpr bool isHexahedron() const { return ! none_ && dim_==3 && (topologyId_ | 1) == 0b0111; } /** \brief Return true if entity is a simplex of any dimension */ constexpr bool isSimplex() const { return ! none_ && (topologyId_ | 1) == 1; } /** \brief Return true if entity is a cube of any dimension */ constexpr bool isCube() const { return ! none_ && ((topologyId_ ^ ((1 << dim_)-1)) >> 1 == 0); } /** \brief Return true if entity was constructed with a conical product in the last step */ constexpr bool isConical() const { return ! none_ && (((topologyId_ & ~1) & (1u << (dim_-1))) == 0); } /** \brief Return true if entity was constructed with a conical product in the chosen step * * \param step 0 <= step <= dim-1 */ constexpr bool isConical(const int& step) const { return ! none_ && (((topologyId_ & ~1) & (1u << step)) == 0); } /** \brief Return true if entity was constructed with a prismatic product in the last step */ constexpr bool isPrismatic() const { return ! none_ && (( (topologyId_ | 1) & (1u << (dim_-1))) != 0); } /** \brief Return true if entity was constructed with a prismatic product in the chosen step * * \param step 0 <= step <= dim-1 */ constexpr bool isPrismatic(const int& step) const { return ! none_ && (( (topologyId_ | 1) & (1u << step)) != 0); } /** \brief Return true if entity is a singular of any dimension */ constexpr bool isNone() const { return none_; } /** \brief Return dimension of the type */ constexpr unsigned int dim() const { return dim_; } /** \brief Return the topology id of the type */ constexpr unsigned int id() const { return topologyId_; } /*@}*/ /** @name Comparison operators */ /** \brief Check for equality. This method knows that in dimension 0 and 1 * all BasicTypes are equal. */ constexpr bool operator==(const GeometryType& other) const { return ( ( none_ == other.none_ ) && ( ( none_ == true ) || ( ( dim_ == other.dim_ ) && ( (topologyId_ >> 1) == (other.topologyId_ >> 1) ) ) ) ); } /** \brief Check for inequality */ constexpr bool operator!=(const GeometryType& other) const { return ! ((*this)==other); } /** \brief less-than operation for use with maps */ constexpr bool operator < (const GeometryType& other) const { return ( ( none_ < other.none_ ) || ( !( other.none_ < none_ ) && ( ( dim_ < other.dim_ ) || ( (other.dim_ == dim_) && ((topologyId_ >> 1) < (other.topologyId_ >> 1) ) ) ) ) ); } /*@}*/ }; /** \brief Prints the type to an output stream */ inline std::ostream& operator<< (std::ostream& s, const GeometryType& a) { if (a.isSimplex()) { s << "(simplex, " << a.dim() << ")"; return s; } if (a.isCube()) { s << "(cube, " << a.dim() << ")"; return s; } if (a.isPyramid()) { s << "(pyramid, 3)"; return s; } if (a.isPrism()) { s << "(prism, 3)"; return s; } if (a.isNone()) { s << "(none, " << a.dim() << ")"; return s; } s << "(other [" << a.id() << "], " << a.dim() << ")"; return s; } //! Predefined GeometryTypes for common geometries /** * \ingroup GeometryType * \related GeometryType */ namespace GeometryTypes { //! Returns a GeometryType representing a simplex of dimension `dim`. /** * \ingroup GeometryType */ inline constexpr GeometryType simplex(unsigned int dim) { return GeometryType(0,dim,false); } //! Returns a GeometryType representing a hypercube of dimension `dim`. /** * \ingroup GeometryType */ inline constexpr GeometryType cube(unsigned int dim) { return GeometryType(((dim>1) ? ((1 << dim) - 1) : 0),dim,false); } //! Returns a GeometryType representing a singular of dimension `dim`. /** * \ingroup GeometryType */ inline constexpr GeometryType none(unsigned int dim) { return GeometryType(0,dim,true); } /** \brief Return GeometryType of a conical construction with gt as base */ inline constexpr GeometryType conicalExtension(const GeometryType& gt) { return GeometryType(gt.id(), gt.dim()+1, gt.isNone()); } /** \brief Return GeometryType of a prismatic construction with gt as base */ inline constexpr GeometryType prismaticExtension(const GeometryType& gt) { return GeometryType(gt.id() | ((1 << gt.dim())), gt.dim()+1, gt.isNone()); } #ifndef __cpp_inline_variables namespace { #endif //! GeometryType representing a vertex. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType vertex = GeometryType(0,0,false); //! GeometryType representing a line. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType line = GeometryType(0,1,false); //! GeometryType representing a triangle. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType triangle = simplex(2); //! GeometryType representing a quadrilateral (a square). /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType quadrilateral = cube(2); //! GeometryType representing a tetrahedron. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType tetrahedron = simplex(3); //! GeometryType representing a 3D pyramid. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType pyramid = GeometryType(0b0011,3,false); //! GeometryType representing a 3D prism. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType prism = GeometryType(0b0101,3,false); //! GeometryType representing a hexahedron. /** * \ingroup GeometryType */ DUNE_INLINE_VARIABLE constexpr GeometryType hexahedron = cube(3); #ifndef __cpp_inline_variables } #endif } namespace Impl { /** \brief Removes the bit for the highest dimension and returns the lower-dimensional GeometryType */ inline constexpr GeometryType getBase(const GeometryType& gt) { return GeometryType(gt.id() & ((1 << (gt.dim()-1))-1), gt.dim()-1, gt.isNone()); } // IfGeometryType // ---------- template< template< GeometryType::Id > class Operation, int dim, GeometryType::Id geometryId = GeometryTypes::vertex > struct IfGeometryType { static constexpr GeometryType geometry = geometryId; template< class... Args > static auto apply ( GeometryType gt, Args &&... args ) { GeometryType lowerGeometry(gt.id() >>1 , gt.dim()-1, gt.isNone()); if( gt.id() & 1 ) return IfGeometryType< Operation, dim-1, GeometryTypes::prismaticExtension(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... ); else return IfGeometryType< Operation, dim-1, GeometryTypes::conicalExtension(geometry).toId() >::apply( lowerGeometry, std::forward< Args >( args )... ); } }; template< template< GeometryType::Id > class Operation, GeometryType::Id geometryId > struct IfGeometryType< Operation, 0, geometryId> { template< class... Args > static auto apply ([[maybe_unused]] GeometryType gt, Args &&... args ) { return Operation< geometryId >::apply( std::forward< Args >( args )... ); } }; } // namespace Impl } // namespace Dune #endif // DUNE_GEOMETRY_TYPE_HH dune-geometry-2.8.0/dune/geometry/typeindex.hh000066400000000000000000000125531411346603000214310ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_TYPEINDEX_HH #define DUNE_GEOMETRY_TYPEINDEX_HH /** * \file * \brief Helper classes to provide indices for geometrytypes for use in a * vector */ #include #include #include #include "type.hh" namespace Dune { //! Compute per-dimension indices for geometry types class LocalGeometryTypeIndex { /** * \brief Compute the number of regular geometry types for the given dimension * * Regular geometry type are those which have a topologyId, i.e. "None" is * not a regular geometry type. */ inline static constexpr std::size_t regular_size(std::size_t dim) { // The following expression is derived from the expression for // GlobalGeometryTypeIndex::regular_offset(). Subtracting // regular_offset(dim+1)-regular_offset(dim) we get: // // ((1 << dim+1) >> 1) - ((1 << dim) >> 1) // // We always have // // dim >= 0, // // so // // (1 << dim+1) >= 2 and (1 << dim+2) % 2 == 0. // // So if we apply a single right-shift to that, we will never lose any // set bits, thus // // ((1 << dim+1) >> 1) == (1 << dim) return (1 << dim) - ((1 << dim) >> 1); } public: /** * \brief Compute total number of geometry types for the given dimension * * This includes irregular geometry types such as "None". */ inline static constexpr std::size_t size(std::size_t dim) { // one for "none" return regular_size(dim) + 1; } /** * \brief Compute the index for the given geometry type within its dimension * * Geometry types from different dimensions my get the same index. If that * is not what you want, maybe you should look at GlobalGeometryTypeIndex. */ inline static constexpr std::size_t index(const GeometryType >) { return gt.isNone() ? regular_size(gt.dim()) : (gt.id() >> 1); } //! compute the geometry type for the given local index and dimension inline static constexpr GeometryType type(std::size_t dim, std::size_t index) { return (index == regular_size(dim)) ? GeometryTypes::none(dim) : // the cast to unsigned makes sure this is interpreted as the topology // ID constructor GeometryType(static_cast< unsigned int >(index << 1), dim); } }; //! Compute indices for geometry types, taking the dimension into account class GlobalGeometryTypeIndex { /** * \brief Compute the starting index for a given dimension ignoring * irregular geometry types * * This ignores irregular geometry types so it is not useful in itself. * Have a look at offset() which does include the irregular geometry types. */ inline static constexpr std::size_t regular_offset(std::size_t dim) { // The number of regular geometry types in a given dimension is // 2^(dim-1). For dim==0 this would yield 1/2 geometry types (which is // obviously bogus, dim==0 has one regular geometry type, the point). // The following expression relies on 1 >> 1 == 0 to treat dim==0 // specially. return (1 << dim) >> 1; } public: /** * \brief Compute the starting index for a given dimension including * irregular geometry types */ inline static constexpr std::size_t offset(std::size_t dim) { // dim times "none" return regular_offset(dim) + dim; } /** * \brief Compute total number of geometry types up to and including the * given dimension * * This includes irregular geometry types such as "None". */ inline static constexpr std::size_t size(std::size_t maxdim) { return offset(maxdim+1); } /** * \brief Compute the index for the given geometry type over all dimensions * * Geometry types from different dimensions will get different indices, * and lower dimensions will always have lower indices than higher * dimensions. If that is not what you want, maybe you should look at * LocalGeometryTypeIndex. */ inline static constexpr std::size_t index(const GeometryType >) { return offset(gt.dim()) + LocalGeometryTypeIndex::index(gt); } }; namespace Impl { // Map a dynamic GeometryType to a static integral_constant template static auto toGeometryTypeIdConstant(const GeometryType& gt, F&& f) { // Transform LocalGeometryTypeIndex to GeometryType::Id auto callWithId = [&](auto index) { static constexpr auto id = LocalGeometryTypeIndex::type(dim, decltype(index)::value).toId(); return f(std::integral_constant{}); }; // switchCases needs a fallback to determine the return type. auto fallBack = [&]() { return callWithId(Dune::Indices::_0); }; // Iterate over all _regular_ GeometryType indices for given dimension auto allIndices = std::make_index_sequence{}; return Dune::Hybrid::switchCases(allIndices, LocalGeometryTypeIndex::index(gt), callWithId, fallBack); } } // namespace Impl } // namespace Dune #endif // DUNE_GEOMETRY_TYPEINDEX_HH dune-geometry-2.8.0/dune/geometry/utility/000077500000000000000000000000001411346603000205745ustar00rootroot00000000000000dune-geometry-2.8.0/dune/geometry/utility/CMakeLists.txt000066400000000000000000000001501411346603000233300ustar00rootroot00000000000000install(FILES typefromvertexcount.hh DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/geometry/utility) dune-geometry-2.8.0/dune/geometry/utility/typefromvertexcount.hh000066400000000000000000000032001411346603000252640ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH #define DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH #include namespace Dune { /** \brief Utitlity function to construct the correct geometry type given the dimension and the number of vertices * \note This code only works up to dimension 3. * In higher dimensions the number of vertices does not uniquely identify the type of polyhedron. */ inline GeometryType geometryTypeFromVertexCount(unsigned int dim, unsigned int vertices) { switch (dim) { case 0 : return GeometryTypes::vertex; case 1 : return GeometryTypes::line; case 2 : switch (vertices) { case 3 : return GeometryTypes::triangle; case 4 : return GeometryTypes::quadrilateral; default : DUNE_THROW(NotImplemented, "2d elements with " << vertices << " corners are not supported!"); } case 3 : switch (vertices) { case 4 : return GeometryTypes::tetrahedron; case 5 : return GeometryTypes::pyramid; case 6 : return GeometryTypes::prism; case 8 : return GeometryTypes::hexahedron; default : DUNE_THROW(NotImplemented, "3d elements with " << vertices << " corners are not supported!"); } default : DUNE_THROW(NotImplemented, "geometryTypeFromVertexCount works only up to dim=3"); } } } #endif // DUNE_GEOMETRY_TYPE_FROM_VERTEX_COUNT_HH dune-geometry-2.8.0/dune/geometry/virtualrefinement.cc000066400000000000000000000544051411346603000231530ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_CC #define DUNE_GEOMETRY_VIRTUALREFINEMENT_CC /*! * \file * \brief This file contains the virtual wrapper around refinement. */ #include #include #include #include #include #include "type.hh" #include "refinement.hh" namespace Dune { // ////////////////////////////////////////// // // The virtual base class and its iterators // // // Refinement // template typename VirtualRefinement::VertexIterator VirtualRefinement:: vBegin(Dune::RefinementIntervals tag) const { return VertexIterator(vBeginBack(tag)); } template typename VirtualRefinement::VertexIterator VirtualRefinement:: vEnd(Dune::RefinementIntervals tag) const { return VertexIterator(vEndBack(tag)); } template typename VirtualRefinement::ElementIterator VirtualRefinement:: eBegin(Dune::RefinementIntervals tag) const { return ElementIterator(eBeginBack(tag)); } template typename VirtualRefinement::ElementIterator VirtualRefinement:: eEnd(Dune::RefinementIntervals tag) const { return ElementIterator(eEndBack(tag)); } // // The iterators // template class VirtualRefinementSubEntityIteratorSpecial; // The iterator for vertices template class VirtualRefinementSubEntityIteratorSpecial {}; // The iterator for elements template class VirtualRefinementSubEntityIteratorSpecial { public: typedef VirtualRefinement Refinement; typedef typename Refinement::template Codim<0>::SubEntityIterator Common; typedef typename Refinement::IndexVector IndexVector; IndexVector vertexIndices() const; }; template typename VirtualRefinementSubEntityIteratorSpecial::IndexVector VirtualRefinementSubEntityIteratorSpecial:: vertexIndices() const { return static_cast(this)->backend->vertexIndices(); } // The iterator common stuff template template class VirtualRefinement::Codim::SubEntityIterator : public ForwardIteratorFacade::template Codim::SubEntityIterator, int>, public VirtualRefinementSubEntityIteratorSpecial { public: typedef VirtualRefinement Refinement; typedef typename Refinement::template Codim::SubEntityIterator This; typedef typename Refinement::template SubEntityIteratorBack IteratorBack; typedef typename Refinement::CoordVector CoordVector; SubEntityIterator(IteratorBack *backend); SubEntityIterator(const This &other); ~SubEntityIterator(); This &operator=(const This &other); bool equals(const This &other) const; void increment(); int index() const; // If you simply use an unqualified CoordVector here g++-4.2 chokes typename VirtualRefinement::template Codim::SubEntityIterator:: CoordVector coords() const; private: friend class VirtualRefinementSubEntityIteratorSpecial; IteratorBack *backend; }; #ifndef DOXYGEN template template VirtualRefinement::Codim::SubEntityIterator:: SubEntityIterator(IteratorBack *backend_) : backend(backend_) {} template template VirtualRefinement::Codim::SubEntityIterator:: SubEntityIterator(const This &other) : backend(other.backend->clone()) {} template template VirtualRefinement::Codim::SubEntityIterator:: ~SubEntityIterator() { delete backend; } template template typename VirtualRefinement::template Codim::SubEntityIterator & VirtualRefinement::Codim::SubEntityIterator:: operator=(const This &other) { delete backend; backend = other.backend->clone(); } template template bool VirtualRefinement::Codim::SubEntityIterator:: equals(const This &other) const { return *backend == *(other.backend); } template template void VirtualRefinement::Codim::SubEntityIterator:: increment() { ++*backend; } template template int VirtualRefinement::Codim::SubEntityIterator:: index() const { return backend->index(); } template template typename VirtualRefinement::template Codim::SubEntityIterator::CoordVector VirtualRefinement::Codim::SubEntityIterator:: coords() const { return backend->coords(); } #endif // DOXYGEN // // The iterator backend // template class VirtualRefinementSubEntityIteratorBackSpecial; // The iterator backend for vertices template class VirtualRefinementSubEntityIteratorBackSpecial { public: virtual ~VirtualRefinementSubEntityIteratorBackSpecial() {} }; // The iterator backend for elements template class VirtualRefinementSubEntityIteratorBackSpecial { public: typedef VirtualRefinement Refinement; typedef typename Refinement::IndexVector IndexVector; virtual IndexVector vertexIndices() const = 0; virtual ~VirtualRefinementSubEntityIteratorBackSpecial() {} }; // The iterator backend common stuff template template class VirtualRefinement::SubEntityIteratorBack : public VirtualRefinementSubEntityIteratorBackSpecial { public: typedef VirtualRefinement Refinement; typedef typename Refinement::template SubEntityIteratorBack This; typedef typename Refinement::CoordVector CoordVector; virtual ~SubEntityIteratorBack() {} virtual This *clone() const = 0; virtual bool operator==(const This &other) const = 0; virtual This &operator++() = 0; virtual int index() const = 0; virtual CoordVector coords() const = 0; }; // ///////////////////////////////////////////////// // // The derived classes and their iterator backends // // // The refinement implementation // template class VirtualRefinementImp : public Dune::VirtualRefinement { public: typedef Dune::StaticRefinement StaticRefinement; typedef Dune::VirtualRefinement VirtualRefinement; template class SubEntityIteratorBack; int nVertices(Dune::RefinementIntervals tag) const; int nElements(Dune::RefinementIntervals tag) const; static VirtualRefinementImp &instance(); private: VirtualRefinementImp() {} typename VirtualRefinement::VertexIteratorBack *vBeginBack(Dune::RefinementIntervals tag) const; typename VirtualRefinement::VertexIteratorBack *vEndBack(Dune::RefinementIntervals tag) const; typename VirtualRefinement::ElementIteratorBack *eBeginBack(Dune::RefinementIntervals tag) const; typename VirtualRefinement::ElementIteratorBack *eEndBack(Dune::RefinementIntervals tag) const; }; template VirtualRefinementImp & VirtualRefinementImp::instance() { static VirtualRefinementImp instance_{}; return instance_; } template int VirtualRefinementImp:: nVertices(Dune::RefinementIntervals tag) const { return StaticRefinement::nVertices(tag); } template typename VirtualRefinementImp::VirtualRefinement::VertexIteratorBack * VirtualRefinementImp:: vBeginBack(Dune::RefinementIntervals tag) const { return new SubEntityIteratorBack(StaticRefinement::vBegin(tag)); } template typename VirtualRefinementImp::VirtualRefinement::VertexIteratorBack * VirtualRefinementImp:: vEndBack(Dune::RefinementIntervals tag) const { return new SubEntityIteratorBack(StaticRefinement::vEnd(tag)); } template int VirtualRefinementImp::nElements(Dune::RefinementIntervals tag) const { return StaticRefinement::nElements(tag); } template typename VirtualRefinementImp::VirtualRefinement::ElementIteratorBack * VirtualRefinementImp:: eBeginBack(Dune::RefinementIntervals tag) const { return new SubEntityIteratorBack<0>(StaticRefinement::eBegin(tag)); } template typename VirtualRefinementImp::VirtualRefinement::ElementIteratorBack * VirtualRefinementImp:: eEndBack(Dune::RefinementIntervals tag) const { return new SubEntityIteratorBack<0>(StaticRefinement::eEnd(tag)); } // // The iterator backend implementation // // The iterator backend implementation specialties template class VirtualRefinementImpSubEntityIteratorBackSpecial; // The iterator backend implementation specialties for vertices template class VirtualRefinementImpSubEntityIteratorBackSpecial : public VirtualRefinement::template SubEntityIteratorBack {}; // The iterator backend implementation specialties for elements template class VirtualRefinementImpSubEntityIteratorBackSpecial : public VirtualRefinement::template SubEntityIteratorBack<0> { public: typedef Dune::VirtualRefinementImp VirtualRefinementImp; typedef typename VirtualRefinementImp::template SubEntityIteratorBack<0> Common; typedef typename VirtualRefinementImp::StaticRefinement StaticRefinement; typedef VirtualRefinement RefinementBase; typedef typename RefinementBase::IndexVector IndexVector; IndexVector vertexIndices() const; }; template typename VirtualRefinementImpSubEntityIteratorBackSpecial::IndexVector VirtualRefinementImpSubEntityIteratorBackSpecial:: vertexIndices() const { IndexVector vIndices; vIndices.reserve(StaticRefinement::IndexVector::dimension); typename StaticRefinement::IndexVector sIndices = static_cast(this)->backend.vertexIndices(); for(int i = 0; i < StaticRefinement::IndexVector::dimension; ++i) vIndices.push_back(sIndices[i]); return vIndices; } // The shared iterator backend implementation template template class VirtualRefinementImp::SubEntityIteratorBack : public VirtualRefinementImpSubEntityIteratorBackSpecial { public: typedef typename StaticRefinement::template Codim::SubEntityIterator BackendIterator; typedef typename VirtualRefinementImp::template SubEntityIteratorBack This; typedef typename VirtualRefinement::template SubEntityIteratorBack Base; typedef typename VirtualRefinement::CoordVector CoordVector; SubEntityIteratorBack(const BackendIterator &backend); SubEntityIteratorBack(const This &other); Base *clone() const; bool operator==(const Base &other) const; Base &operator++(); int index() const; CoordVector coords() const; private: friend class VirtualRefinementImpSubEntityIteratorBackSpecial; BackendIterator backend; }; template template VirtualRefinementImp::SubEntityIteratorBack:: SubEntityIteratorBack(const BackendIterator &backend_) : backend(backend_) {} template template VirtualRefinementImp::SubEntityIteratorBack:: SubEntityIteratorBack(const This &other) : VirtualRefinementImpSubEntityIteratorBackSpecial(other), backend(other.backend) {} template template typename VirtualRefinementImp::template SubEntityIteratorBack::Base * VirtualRefinementImp::SubEntityIteratorBack:: clone() const { return new This(*this); } template template bool VirtualRefinementImp::SubEntityIteratorBack:: operator==(const Base &other) const { try { return backend == dynamic_cast(other).backend; } catch(const std::bad_cast&) { return false; } } template template typename VirtualRefinementImp::template SubEntityIteratorBack::Base & VirtualRefinementImp::SubEntityIteratorBack:: operator++() { ++backend; return *this; } template template int VirtualRefinementImp::SubEntityIteratorBack:: index() const { return backend.index(); } template template typename VirtualRefinementImp::template SubEntityIteratorBack::CoordVector VirtualRefinementImp::SubEntityIteratorBack:: coords() const { return backend.coords(); } // //////////////////////// // // The refinement builder // template class RefinementBuilder; /*! * \brief return a reference to the VirtualRefinement according to * the parameters * * \tparam dimension Dimension of the element to refine * \tparam CoordType C++ type of the coordinates * * \throws NotImplemented There is no Refinement implementation for * the specified parameters. */ template VirtualRefinement & buildRefinement( //! geometry type of the refined element GeometryType geometryType, //! geometry type of the subelements GeometryType coerceTo) { // Check that the user used valid geometry types assert(geometryType.dim() == dimension && coerceTo.dim() == dimension); return RefinementBuilder::build( geometryType.id(), coerceTo.id() ); } // In principle the trick with the class is no longer necessary, // but I'm keeping it in here so it will be easier to specialize // buildRefinement when someone implements pyramids and prisms template class RefinementBuilder { public: static VirtualRefinement & build(unsigned topologyId, unsigned coerceToId) { topologyId &= ~1; coerceToId &= ~1; constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1; constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1; switch( topologyId ) { //case GeometryType::simplex: case idSimplex : //switch( coerceTo ) switch( coerceToId ) { //case GeometryType::simplex: case idSimplex : return VirtualRefinementImp< idSimplex, CoordType, idSimplex, dimension>::instance(); default : break; } break; //case GeometryType::cube: case idCube : switch( coerceToId ) { case idSimplex : return VirtualRefinementImp< idCube, CoordType, idSimplex, dimension>::instance(); case idCube : return VirtualRefinementImp< idCube, CoordType, idCube, dimension>::instance(); default : break; } break; default : break; } DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, " << coerceToId << " >."); } }; template class RefinementBuilder<1, CoordType> { static const std::size_t dimension = 1; public: static VirtualRefinement & build(unsigned topologyId, unsigned coerceToId) { topologyId &= ~1; coerceToId &= ~1; constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1; if (topologyId == 0 && coerceToId == 0) return VirtualRefinementImp< idSimplex, CoordType, idSimplex, dimension>::instance(); DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, " << coerceToId << " >."); } }; template class RefinementBuilder<3, CoordType> { static const std::size_t dimension = 3; public: static VirtualRefinement & build(unsigned topologyId, unsigned coerceToId) { topologyId &= ~1; coerceToId &= ~1; constexpr unsigned idSimplex = GeometryTypes::simplex(dimension).id() & ~1; constexpr unsigned idCube = GeometryTypes::cube(dimension).id() & ~1; constexpr unsigned idPrism = GeometryTypes::prism.id() & ~1; constexpr unsigned idPyramid = GeometryTypes::pyramid.id() & ~1; switch( topologyId ) { //case GeometryType::simplex: case idSimplex : //switch( coerceTo ) switch( coerceToId ) { //case GeometryType::simplex: case idSimplex : return VirtualRefinementImp< idSimplex, CoordType, idSimplex, dimension>::instance(); default : break; } break; //case GeometryType::cube: case idCube : switch( coerceToId ) { case idSimplex : return VirtualRefinementImp< idCube, CoordType, idSimplex, dimension>::instance(); case idCube : return VirtualRefinementImp< idCube, CoordType, idCube, dimension>::instance(); default : break; } break; //case GeometryType::prism: case idPrism : switch( coerceToId ) { case idSimplex : return VirtualRefinementImp< idPrism, CoordType, idSimplex, dimension>::instance(); default : break; } break; //case GeometryType::pyramid: case idPyramid : switch( coerceToId ) { case idSimplex : return VirtualRefinementImp< idPyramid, CoordType, idSimplex, dimension>::instance(); default : break; } break; default : break; } DUNE_THROW( NotImplemented, "No Refinement<" << topologyId << ", CoordType, " << coerceToId << " >."); } }; } // namespace Dune #endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_CC dune-geometry-2.8.0/dune/geometry/virtualrefinement.hh000066400000000000000000000343731411346603000231670ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_GEOMETRY_VIRTUALREFINEMENT_HH #define DUNE_GEOMETRY_VIRTUALREFINEMENT_HH /*! * \file * * \brief This file contains the virtual wrapper around refinement. */ /*! * \addtogroup VirtualRefinement Virtual Refinement * \ingroup Refinement * * * Please have a look on the non-virtual \link Refinement * Refinement\endlink documentation. * * \section Virtual_General General * * * \link Refinement Refinement\endlink can only be used when you know * the geometryType of your entities at compile time. You could * circumvent this by using a switch(geometryType), but each case would * look very much the same. If you have many such switch() statements, * or each case contains lots of code, or you simply have many possible * geometryTypes, this can be quiet annoying. * * VirtualRefinement does all of this switch() statements for you. It * defines a common virtual base class per dimension, and derives one * class for each geometryType and coerceTo from that class. The * derived classes simply wrap the non-virtual classes from \link * Refinement Refinement\endlink. This makes it possible to treat each * geometryType (of a given dimension) the same, and thus eleminates * the many repetitions of lots of code. * * But the case statements are not totally gone yet. VirtualRefinement * does these statements once and for all by wrapping them into the * buildRefinement() function. * * \section Virtual_User_interface The user Interface * * * \subsection VirtualRefinement The VirtualRefinement class * * * VirtualRefinement is not a set of unrelated specialisations of the * same template class. VirtualRefinement is a base class with several * virtual methods, which are overloaded by the concrete * VirtualRefinement implementation classes. Each implementation class * wraps one of the non-virtual \link Refinement Refinement\endlink * classes. * * The user interface is modelled closely after the \link * Refinement Refinement\endlink interface. The main differences are: * * - VirtualRefinement is not a static class, but a singleton. Thus * each VirtualRefinement implementation has to be instantiated * before use. This is done with the template function * buildRefinement (see below). * - Since the methods of VirtualRefinement are virtual (or use virtual * methods themself) they have to be called like * \code * refinementInstace.nElements(Dune::refinementIntervals(n)); * \endcode * instead of * \code * RefinementTypedef::nElements(Dune::refinementIntervals(n)); * \endcode * * - IndexVector is a std::vector instead of a FieldVector since the * number of corners of different geometry types may be different at * runtime. The user is responsible to always pass the same coerceTo * parameter to buildRefinement() so he always gets the same number * of corners. * * \code * template * class VirtualRefinement * { * public: * template * struct Codim { * class SubEntityIterator; * }; * typedef VertexIterator; // These are aliases for Codim::SubEntityIterator * typedef ElementIterator; * * typedef IndexVector; // This is a std::vector * typedef CoordVector; // This is a FieldVector * * virtual int nVertices(Dune::RefinementIntervals intervals) const; * VertexIterator vBegin(Dune::RefinementIntervals intervals) const; * VertexIterator vEnd(Dune::RefinementIntervals intervals) const; * virtual int nElements(Dune::RefinementIntervals intervals) const; * ElementIterator eBegin(Dune::RefinementIntervals intervals) const; * ElementIterator eEnd(Dune::RefinementIntervals intervals) const; * }; * \endcode * * The iterators have the same interface as the \link Refinement * Refinement\endlink iterators except that IndexVector is a * std::vector instead of a FieldVector (see above). Also the * restriction that the Iterators are not dereferenceable applies. * * \code * template * class VertexIterator * { * public: * typedef VirtualRefinement Refinement; * * int index() const; * Refinement::CoordVector coords() const; * }; * * template * class ElementIterator * { * public: * typedef VirtualRefinement Refinement; * * int index() const; * // Coords of the center of mass of the element * Refinement::CoordVector coords() const; * Refinement::IndexVector vertexIndices() const; * }; * \endcode * * \subsection User_interface_buildRefinement buildRefinement() * * * The declaration for buildRefinement is * * \code * template * VirtualRefinement &buildRefinement(GeometryType geometryType, GeometryType coerceTo); * \endcode * * It is expected that you know the dimension and the coordinate type * of the elements you want to refine at compile time. * * The simple case is that you want to refine, say, quadrilaterals and * the subentities should look like quadrilaterals as well. In that * case you would call buildRefinement() like * * \code * VirtualRefinement<2, CoordType> &refinement = buildRefinement<2, CoordType>(quadrilateral, quadrilateral); * \endcode * * The more complicated case is that your entity is a quadrilateral, * but the subentities should look like triangles. In this case call * buildRefinement() like * * \code * VirtualRefinement<2, CoordType> &refinement = buildRefinement<2, CoordType>(quadrilateral, triangle); * \endcode * * Summary: geometryType is the geometry type of the entity you want to * refine, while coerceTo is the geometry type of the subentities. * * \section Virtual_Implementing Implementing a new Refinement type * * * When you write a Refinement implementation for a new combination of * geometryType and coerceTo, you have to tell buildRefinement() about * it. * * - First, you have to implement the non-virtual part in \link * Refinement Refinement\endlink, if you have not done so yet. * - Second, visit the end of refinementvirtual.cc, and look for the * specialisations of template class * RefinementBuilder. There is one specialisation for each * dimension, containing the single method build(). * - The build() contains two levels of switch statements, the outer * for geomentryType and the inner for coerceTo. Each case will * either return the correct VirtualRefinement or fall through to * the end of the method and throw an error. Insert the cases for * your refinement. * * Everything else has been done for you automatically. * * \subsection Virtual_Namespaces Namespaces * * * VirtualRefinement does not use a complicated namespace scheme like * \link Refinement Refinement\endlink. The complete VirtualRefinement * stuff simply lives directly in namespace Dune. * * \subsection Virtual_Layers Conceptual layers * * * VirtualRefinement adds to more layers to the ones already defined in * \link Refinement Refinement\endlink: * * - Layer 3 makes it easy to use several Refinement * implementations in the same code, when you only know at run-time, * which Refinement implementation you need. It wraps class * Refinement and its iterators into a Proxy class, retaining its * interface but all deriving from a virtual base class * VirtualRefinement. This is located in * refinementvirtual.cc. * - Layer 4 defines function * buildRefinement(geometryType, coerceTo), which returns the right * refinement for a runtime-determined GeometryType. It is also * located in refinementvirtual.cc * * \section Implementation * * * The interface is defined by the template class VirtualRefinement. * It simply defines the CoordVectors and IndexVectors appropriate for * this dimension and CoordType, defines which iterators to use, and * provides some proxy or pure virtual functions. * * For each class Refinement we * provide a class VirtualRefinementImp, which wraps the matching class * Refinement and derives from * the matching base class VirtualRefinement. * Each VirtualRefinementImp is a singleton and has a static instance() * method which will return this instance as a reference to the base * class VirtualRefinement. All this is done in a single template * class. * * \subsection Virtual_Iterators The iterators * * * We can't do the same thing with the iterators as we do with class * VirtualRefinement. Since they are polymorph we cannot simply pass * them into user code. They are not singletons, so we also cannot * pass references to them. Passing pointers to iterators would work, * but then the programmer has to remember to explecitely delete them. * Also, it is uncommon for iterators to be handled by their pointers. * * What we do instead is having a wrapper class which conforms to the * iterator interface and is the same for all * VirtualRefinementIterators of a given dimension. This class * contains a pointer to a polymorph backend object implementing the * iterator. The various VirtualRefinementImps then derive from the * abstract backend class and pass a pointer to a concrete backend * object when instantiating an iterator. * * \subsection Implementiaion_buildRefinement buildRefinement() * * * The template function buildRefinement() has to be specialized for * each dimension. It makes no sense to test for * geometryType.isPrism() when dimension==2. But this * way we run into a limitation of C++: we can't do partial function * specialisation. * * The workaround is to create a class RefinementBuilder with a lone * static method build() and to call that from buildRefinement(). * Since RefinementBuilder is a class and not a function we can do * partial specialisations. * * It is probably possible to automatically generate the switch * statements with linked lists of template structs, functions * implementing the cases, and a recursive template function that will * iterate over the list, but it is probably not worth the effort, as * long as buildRefinement() is enough for the job. */ #include #include #include "refinement.hh" #include "type.hh" namespace Dune { // ////////////////////////////////////////// // // The virtual base class and its iterators // // // Refinement // /*! * \brief VirtualRefinement base class * * \param dimension The dimension of the element to refine * \param CoordType The C++ type of the coordinates */ template class VirtualRefinement { public: template struct Codim; //! The VertexIterator of the VirtualRefinement. typedef typename Codim::SubEntityIterator VertexIterator; //! The ElementIterator of the VirtualRefinement typedef typename Codim<0>::SubEntityIterator ElementIterator; /*! * \brief The CoordVector of the VirtualRefinement * * This is always a typedef to a FieldVector */ typedef FieldVector CoordVector; /*! * \brief The IndexVector of the VirtualRefinement * * This is always a typedef to a std::vector */ typedef std::vector IndexVector; template class SubEntityIteratorBack; typedef SubEntityIteratorBack VertexIteratorBack; typedef SubEntityIteratorBack<0> ElementIteratorBack; /*! * \brief Get the number of Vertices * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ virtual int nVertices(Dune::RefinementIntervals tag) const = 0; /*! * \brief Get an VertexIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ VertexIterator vBegin(Dune::RefinementIntervals tag) const; /*! * \brief Get an VertexIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ VertexIterator vEnd(Dune::RefinementIntervals tag) const; /*! * \brief Get the number of Elements * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ virtual int nElements(Dune::RefinementIntervals tag) const = 0; /*! * \brief Get an ElementIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ ElementIterator eBegin(Dune::RefinementIntervals tag) const; /*! * \brief Get an ElementIterator * * \param tag RefinementIntervals object returned by either refinementIntervals() or refinementLevels() */ ElementIterator eEnd(Dune::RefinementIntervals tag) const; //! Destructor virtual ~VirtualRefinement() {} protected: virtual VertexIteratorBack *vBeginBack(Dune::RefinementIntervals tag) const = 0; virtual VertexIteratorBack *vEndBack(Dune::RefinementIntervals tag) const = 0; virtual ElementIteratorBack *eBeginBack(Dune::RefinementIntervals tag) const = 0; virtual ElementIteratorBack *eEndBack(Dune::RefinementIntervals tag) const = 0; }; //! codim database of VirtualRefinement template template struct VirtualRefinement::Codim { class SubEntityIterator; }; // //////////////////////// // // The refinement builder // template VirtualRefinement & buildRefinement(GeometryType geometryType, GeometryType coerceTo); } // namespace Dune #include "virtualrefinement.cc" #endif // DUNE_GEOMETRY_VIRTUALREFINEMENT_HH dune-geometry-2.8.0/dune/python/000077500000000000000000000000001411346603000165575ustar00rootroot00000000000000dune-geometry-2.8.0/dune/python/CMakeLists.txt000066400000000000000000000000621411346603000213150ustar00rootroot00000000000000add_subdirectory(geometry) add_subdirectory(test) dune-geometry-2.8.0/dune/python/geometry/000077500000000000000000000000001411346603000204125ustar00rootroot00000000000000dune-geometry-2.8.0/dune/python/geometry/CMakeLists.txt000066400000000000000000000002651411346603000231550ustar00rootroot00000000000000set(HEADERS multilineargeometry.hh quadraturerules.hh referenceelements.hh type.hh ) install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/python/geometry) dune-geometry-2.8.0/dune/python/geometry/multilineargeometry.hh000066400000000000000000000075141411346603000250430ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_PYTHON_GEOMETRY_MULTILINEARGEOMETRY_HH #define DUNE_PYTHON_GEOMETRY_MULTILINEARGEOMETRY_HH #include #include #include #include #include #include namespace Dune { namespace Python { // registerMemberFunctions // ----------------------- template struct RegisterMemberFunctions { RegisterMemberFunctions() {} void operator()(pybind11::class_& cls) { cls.def("toLocal" , &MGeometry::local); cls.def("jacobianInverseTransposed", &MGeometry::jacobianInverseTransposed); } }; // doNothing // --------- template struct DoNothing { DoNothing() {} void operator()(pybind11::class_&) {} }; // registerMultiLinearGeometryType // ------------------------------- template inline auto registerMultiLinearGeometryType(pybind11::module scope) { using pybind11::operator""_a; typedef MultiLinearGeometry MGeometry; auto entry = insertClass< MGeometry >( scope, "MultiLinearGeometry_"+std::to_string(dim)+"_"+std::to_string(coorddim), GenerateTypeName("MultiLinearGeometry",MetaType(),dim,coorddim), IncludeFiles{"dune/geometry/multilineargeometry.hh"} ); auto cls = entry.first; if (!entry.second) { cls.def( pybind11::init( [] ( Dune::GeometryType type, pybind11::list corners ) { const std::size_t numCorners = corners.size(); std::vector< FieldVector< double, coorddim > > copyCorners( numCorners ); for( std::size_t i = 0; i < numCorners; ++i ) copyCorners[ i ] = corners[ i ].template cast< FieldVector< double, coorddim > >(); return new MGeometry( type, copyCorners ); } ), "type"_a, "corners"_a ); // toLocal and jacobianInverseTransposed call // MatrixHelper::template (xT)rightInvA where n has to be >= m (static assert) std::conditional_t<(coorddim >= dim), RegisterMemberFunctions, DoNothing >{}(cls); cls.def_property_readonly("affine" , [](const MGeometry& geom) { return geom.affine(); }); cls.def_property_readonly("type" , &MGeometry::type); cls.def_property_readonly("corners", &MGeometry::corners); cls.def_property_readonly("center" , &MGeometry::center); cls.def_property_readonly("volume" , &MGeometry::volume); cls.def("corner" , &MGeometry::corner); cls.def("integrationElement" , &MGeometry::integrationElement); cls.def("jacobianTransposed", [](const MGeometry& geom, const typename MGeometry::LocalCoordinate& local) { return geom.jacobianTransposed(local); }); cls.def("toGlobal", [](const MGeometry& geom, const typename MGeometry::LocalCoordinate& local) { return geom.global(local); }); } #if 0 else { scope.def( detail::nameMultiLinearGeometry< dim, coorddim >, [] ( Dune::GeometryType gt, pybind11::list corners ) { std::vector> cornerValues(corners.size()); for (unsigned i = 0; i < corners.size(); ++i) cornerValues[i] = corners[i].cast(); return MGeometry(gt, cornerValues); } ); } #endif return cls; } } // namespace Python } // namespace Dune #endif // ifndef DUNE_PYTHON_GEOMETRY_MULTILINEARGEOMETRY_HH dune-geometry-2.8.0/dune/python/geometry/quadraturerules.hh000066400000000000000000000120361411346603000241650ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_PYTHON_GEOMETRY_QUADRATURERULES_HH #define DUNE_PYTHON_GEOMETRY_QUADRATURERULES_HH #include #include #include #include #include #include #include #include namespace Dune { namespace Python { template auto quadratureToNumpy(const Rule &rule) { pybind11::array_t< double > p( { static_cast< ssize_t >( Rule::d ), static_cast< ssize_t >( rule.size() ) }, { static_cast< ssize_t >( reinterpret_cast< const char * >( &rule[ 0 ].position()[ 1 ] ) - reinterpret_cast< const char * >( &rule[ 0 ].position()[ 0 ] ) ), static_cast< ssize_t >( reinterpret_cast< const char * >( &rule[ 1 ].position()[ 0 ] ) - reinterpret_cast< const char * >( &rule[ 0 ].position()[ 0 ] ) ) }, &rule[ 0 ].position()[ 0 ] ); pybind11::array_t< double > w( { static_cast< ssize_t >( rule.size() ) }, { static_cast< std::size_t >( reinterpret_cast< const char * >( &rule[ 1 ].weight() ) - reinterpret_cast< const char * >( &rule[ 0 ].weight() ) ) }, &rule[ 0 ].weight() ); return std::make_pair( p, w ); } template auto quadratureToNumpy(pybind11::object self) { const Rule &rule = pybind11::cast< const Rule & >( self ); pybind11::array_t< double > p( { static_cast< ssize_t >( Rule::d ), static_cast< ssize_t >( rule.size() ) }, { static_cast< ssize_t >( reinterpret_cast< const char * >( &rule[ 0 ].position()[ 1 ] ) - reinterpret_cast< const char * >( &rule[ 0 ].position()[ 0 ] ) ), static_cast< ssize_t >( reinterpret_cast< const char * >( &rule[ 1 ].position()[ 0 ] ) - reinterpret_cast< const char * >( &rule[ 0 ].position()[ 0 ] ) ) }, &rule[ 0 ].position()[ 0 ], self ); pybind11::array_t< double > w( { static_cast< ssize_t >( rule.size() ) }, { static_cast< std::size_t >( reinterpret_cast< const char * >( &rule[ 1 ].weight() ) - reinterpret_cast< const char * >( &rule[ 0 ].weight() ) ) }, &rule[ 0 ].weight(), self ); return std::make_pair( p, w ); } namespace detail { // registerQuadraturePoint // ----------------------- template< class QP > inline void registerQuadraturePoint ( pybind11::object scope, pybind11::class_ cls ) { using pybind11::operator""_a; typedef typename QP::Vector Vector; typedef typename QP::Field Field; cls.def( pybind11::init( [] ( const Vector &x, Field w ) { return new QP( x, w ); } ), "position"_a, "weight"_a ); cls.def_property_readonly( "position", []( const QP &qp ) -> Vector { return qp.position(); } ); cls.def_property_readonly( "weight", &QP::weight ); } // registerQuadratureRule // ---------------------- template< class Rule, class... options > inline void registerQuadratureRule ( pybind11::object scope, pybind11::class_ cls ) { cls.def_property_readonly( "order", &Rule::order ); cls.def_property_readonly( "type", &Rule::type ); cls.def( "get", [] ( pybind11::object self ) { return quadratureToNumpy(self); } ); cls.def( "__iter__", [] ( const Rule &rule ) { return pybind11::make_iterator( rule.begin(), rule.end() ); } ); } } // namespace detail // registerQuadratureRule // ---------------------- template< class ctype, int dim > inline auto registerQuadratureRule ( pybind11::object scope ) { typedef typename Dune::QuadraturePoint< ctype, dim > QP; auto quadPointCls = insertClass< QP >( scope, "QuadraturePoint", GenerateTypeName("Dune::QuadratePoint",MetaType(),dim), IncludeFiles{"dune/python/geometry/quadraturerules.hh"}); if (quadPointCls.second) detail::registerQuadraturePoint( scope, quadPointCls.first ); typedef typename Dune::QuadratureRule< ctype, dim > Rule; auto quadRule = insertClass< Rule >(scope, "QuadratureRule" + std::to_string(dim), GenerateTypeName("Dune::QuadrateRule",MetaType(),dim), IncludeFiles{"dune/python/geometry/quadraturerules.hh"}); if (quadRule.second) detail::registerQuadratureRule( scope, quadRule.first ); return quadRule.first; } template< class ctype, int ... dim > inline auto registerQuadratureRule ( pybind11::object scope, std::integer_sequence< int, dim ... > ) { return std::make_tuple( registerQuadratureRule< ctype >( scope, std::integral_constant< int, dim >() )... ); } } // namespace Python } // namespace Dune #endif // #ifndef DUNE_PYTHON_GEOMETRY_QUADRATURERULES_HH dune-geometry-2.8.0/dune/python/geometry/referenceelements.hh000066400000000000000000000240011411346603000244230ustar00rootroot00000000000000#ifndef DUNE_PYTHON_GEOMETRY_REFERENCEELEMENTS_HH #define DUNE_PYTHON_GEOMETRY_REFERENCEELEMENTS_HH #include #include #include #include #include #include #include #include #include namespace Dune { namespace Python { namespace detail { // referenceElementSize // -------------------- template< class RefElement > inline static int referenceElementSize ( const RefElement &refElement, int c ) { if( (c < 0) || (c > RefElement::dimension) ) throw pybind11::value_error( "Invalid codimension: " + std::to_string( c ) + " (must be in [0, " + std::to_string( RefElement::dimension ) + "])." ); return refElement.size( c ); } template< class RefElement > inline static int referenceElementSize ( const RefElement &refElement, int i, int c, int cc ) { const int size = detail::referenceElementSize( refElement, c ); if( (i < 0) || (i >= size) ) throw pybind11::value_error( "Invalid index: " + std::to_string( i ) + " (must be in [0, " + std::to_string( size ) + "))." ); if( (cc < c) || (cc > RefElement::dimension) ) throw pybind11::value_error( "Invalid codimension: " + std::to_string( cc ) + " (must be in [" + std::to_string( c ) + ", " + std::to_string( RefElement::dimension ) + "])." ); return refElement.size( i, c, cc ); } // referenceElementSubEntity // ------------------------- template< class RefElement > inline static int referenceElementSubEntity ( const RefElement &refElement, int i, int c, int ii, int cc ) { const int size = detail::referenceElementSize( refElement, i, c, cc ); if( (ii < 0) || (ii >= size) ) throw pybind11::value_error( "Invalid index: " + std::to_string( i ) + " (must be in [0, " + std::to_string( size ) + "))." ); return refElement.subEntity( i, c, ii, cc ); } // referenceElementPosition // ------------------------ template< class RefElement > inline static auto referenceElementPosition ( const RefElement &refElement, int i, int c ) { const int size = detail::referenceElementSize( refElement, c ); if( (i < 0) || (i >= size) ) throw pybind11::value_error( "Invalid index: " + std::to_string( i ) + " (must be in [0, " + std::to_string( size ) + "))." ); return refElement.position( i, c ); } // referenceElementType // -------------------- template< class RefElement > inline static GeometryType referenceElementType ( const RefElement &refElement, int i, int c ) { const int size = detail::referenceElementSize( refElement, c ); if( (i < 0) || (i >= size) ) throw pybind11::value_error( "Invalid index: " + std::to_string( i ) + " (must be in [0, " + std::to_string( size ) + "))." ); return refElement.type( i, c ); } } // namespace detail template< class RefElement, class... options > void registerReferenceElements ( pybind11::module module, pybind11::class_< RefElement, options... > cls ) { using pybind11::operator""_a; pybind11::options opts; opts.disable_function_signatures(); static const std::size_t dimension = RefElement::dimension; typedef typename RefElement::ctype ctype; registerFieldVecMat>::apply(); registerFieldVecMat>::apply(); cls.def_property_readonly( "dimension", [] ( pybind11::object ) { return pybind11::int_( RefElement::dimension ); } ); cls.def( "size", [] ( const RefElement &self, int c ) { return detail::referenceElementSize( self, c ); }, "codim"_a ); cls.def( "size", [] ( const RefElement &self, int i, int c, int cc ) { return detail::referenceElementSize( self, i, c, cc ); } ); cls.def( "size", [] ( const RefElement &self, std::tuple< int, int > e, int cc ) { return detail::referenceElementSize( self, std::get< 0 >( e ), std::get< 1 >( e ), cc ); }, "subentity"_a, "codim"_a ); cls.def( "type", [] ( const RefElement &self, int i, int c ) { return detail::referenceElementType( self, i, c ); }, "index"_a, "codim"_a ); cls.def( "type", [] ( const RefElement &self, std::tuple< int, int > e ) { return detail::referenceElementType( self, std::get< 0 >( e ), std::get< 1 >( e ) ); }, "subentity"_a ); cls.def( "types", [] ( const RefElement &self, int c ) { const int size = detail::referenceElementSize( self, c ); pybind11::tuple types( size ); for( int i = 0; i < size; ++i ) types[ i ] = pybind11::cast( self.type( i, c ) ); return types; }, "codim"_a, R"doc( get geometry types of subentities Args: codim: codimension of subentities Returns: tuple containing geometry type for each subentity )doc" ); cls.def( "subEntity", [] ( const RefElement &self, int i, int c, int ii, int cc ) { return detail::referenceElementSubEntity( self, i, c, ii, cc ); } ); cls.def( "subEntity", [] ( const RefElement &self, std::tuple< int, int > e, std::tuple< int, int > ee ) { return detail::referenceElementSubEntity( self, std::get< 0 >( e ), std::get< 1 >( e ), std::get< 0 >( ee ), std::get< 1 >( ee ) ); } ); cls.def( "subEntities", [] ( const RefElement &self, int i, int c, int cc ) { const int size = detail::referenceElementSize( self, i, c, cc ); pybind11::tuple subEntities( size ); for( int ii = 0; ii < size; ++ii ) subEntities[ ii ] = pybind11::int_( self.subEntity( i, c, ii, cc ) ); return subEntities; } ); cls.def( "subEntities", [] ( const RefElement &self, std::tuple< int, int > e, int cc ) { const int size = detail::referenceElementSize( self, std::get< 0 >( e ), std::get< 1 >( e ), cc ); pybind11::tuple subEntities( size ); for( int ii = 0; ii < size; ++ii ) subEntities[ ii ] = pybind11::int_( self.subEntity( std::get< 0 >( e ), std::get< 1 >( e ), ii, cc ) ); return subEntities; }, "subentity"_a, "codim"_a ); cls.def( "position", [] ( const RefElement &self, int i, int c ) { return detail::referenceElementPosition( self, i, c ); }, "index"_a, "codim"_a ); cls.def( "position", [] ( const RefElement &self, std::tuple< int, int > e ) { return detail::referenceElementPosition( self, std::get< 0 >( e ), std::get< 1 >( e ) ); }, "subentity"_a ); cls.def( "positions", [] ( const RefElement &self, int c ) { const int size = detail::referenceElementSize( self, c ); pybind11::tuple positions( size ); for( int i = 0; i < size; ++i ) positions[ i ] = pybind11::cast( self.position( i, c ) ); return positions; }, "codim"_a, R"doc( get barycenters of subentities Args: codim: codimension of subentities Returns: tuple containing barycenter for each subentity )doc" ); #if 0 // Bug: This property overwrite the method "type" cls.def_property_readonly( "type", [] ( const RefElement &self ) { return self.type(); }, R"doc( geometry type of reference element )doc" ); #endif cls.def_property_readonly( "center", [] ( const RefElement &self ) { return self.position( 0, 0 ); }, R"doc( barycenter of reference domain )doc" ); cls.def_property_readonly( "corners", [] ( const RefElement &self ) { const int size = self.size( RefElement::dimension ); pybind11::tuple corners( size ); for( int i = 0; i < size; ++i ) corners[ i ] = pybind11::cast( self.position( i, RefElement::dimension ) ); return corners; }, R"doc( corners of reference domain )doc" ); cls.def_property_readonly( "volume", [] ( const RefElement &self ) { return self.volume(); }, R"doc( volume of reference domain )doc" ); if( RefElement::dimension > 0 ) { cls.def( "integrationOuterNormal", [] ( const RefElement &self, int i ) { if( (i < 0) || (i >= self.size( 1 )) ) throw pybind11::value_error( "Invalid index: " + std::to_string( i ) + " (must be in [0, " + std::to_string( self.size( 1 ) ) + "))." ); return self.integrationOuterNormal( i ); }, "index"_a ); cls.def_property_readonly( "integrationOuterNormals", [] ( const RefElement &self ) { const int size = self.size( 1 ); pybind11::tuple integrationOuterNormals( size ); for( int i = 0; i < size; ++i ) integrationOuterNormals[ i ] = pybind11::cast( self.integrationOuterNormal( i ) ); return integrationOuterNormals; } ); } registerQuadratureRule( module ); module.def( "general", [] ( const GeometryType > ) -> pybind11::object { if( gt.isNone() ) return pybind11::none(); else return pybind11::cast( Dune::ReferenceElements< typename RefElement::ctype, RefElement::dimension >::general( gt ), pybind11::return_value_policy::reference ); } ); module.def( "rule", [] (const GeometryType >, int order) { return Dune::QuadratureRules< typename RefElement::ctype, RefElement::dimension >::rule( gt, order ); }, pybind11::return_value_policy::reference ); } } // namespace Python } // namespace Dune #endif // #ifndef DUNE_PYTHON_GEOMETRY_REFERENCEELEMENTS_HH dune-geometry-2.8.0/dune/python/geometry/type.hh000066400000000000000000000216071411346603000217220ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #ifndef DUNE_PYTHON_GEOMETRY_TYPE_HH #define DUNE_PYTHON_GEOMETRY_TYPE_HH #include #include #include #include #include #include namespace Dune { // to_string for GeometryType // -------------------------- inline static std::string to_string ( const GeometryType &type ) { if( type.isNone() ) return "none(" + std::to_string( type.dim() ) + ")"; switch( type.dim() ) { case 0: return "vertex"; case 1: return "line"; case 2: return (type.isSimplex() ? "triangle" : "quadrilateral"); case 3: if( type.isSimplex() ) return "tetrahedron"; else if( type.isHexahedron() ) return "hexahedron"; else if( type.isPyramid() ) return "pyramid"; else if( type.isPrism() ) return "prism"; default: if( type.isSimplex() ) return "simplex(" + std::to_string( type.dim() ) + ")"; else if( type.isCube() ) return "cube(" + std::to_string( type.dim() ) + ")"; else return "general(" + std::to_string( type.id() ) + ", " + std::to_string( type.dim() ) + ")"; } } // geometryTypeFromString // ---------------------- inline static GeometryType geometryTypeFromString ( const std::string &s ) { typedef GeometryType (*Constructor) ( const std::vector< std::string > & ); static const char *constructorNames[] = { "cube", "general", "hexahedron", "line", "none", "prism", "pyramid", "quadrilateral", "simplex", "tetrahedron", "triangle", "vertex" }; static const Constructor constructors[] = { // cube [] ( const std::vector< std::string > &args ) { if( args.size() != 1 ) DUNE_THROW( Exception, "GeometryType 'cube' requires integer argument for dimension." ); return GeometryTypes::cube( std::stoul( args[ 0 ] ) ); }, // general [] ( const std::vector< std::string > &args ) { if( args.size() != 2 ) DUNE_THROW( Exception, "GeometryType 'general' requires two integer arguments, topologyId and dimension." ); const auto id = std::stoul( args[ 0 ] ); const auto dim = std::stoul( args[ 1 ] ); if( id >= Dune::Impl::numTopologies( dim ) ) DUNE_THROW( Exception, "Topology id " << id << " too large for dimension " << dim << "." ); return GeometryType( id, dim ); }, // hexahedron [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'hexahedron' does not require arguments." ); return GeometryTypes::hexahedron; }, // line [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'line' does not require arguments." ); return GeometryTypes::line; }, // none [] ( const std::vector< std::string > &args ) { if( args.size() != 1 ) DUNE_THROW( Exception, "GeometryType 'none' requires integer argument for dimension." ); return GeometryTypes::none( std::stoul( args[ 0 ] ) ); }, // prism [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'prism' does not require arguments." ); return GeometryTypes::prism; }, // pyramid [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'pyramid' does not require arguments." ); return GeometryTypes::pyramid; }, // quadrilateral [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'quadrilateral' does not require arguments." ); return GeometryTypes::quadrilateral; }, // simplex [] ( const std::vector< std::string > &args ) { if( args.size() != 1 ) DUNE_THROW( Exception, "GeometryType 'simplex' requires integer argument for dimension." ); return GeometryTypes::simplex( std::stoul( args[ 0 ] ) ); }, // tetrahedron [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'tetrahedron' does not require arguments." ); return GeometryTypes::tetrahedron; }, // triangle [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'triangle' does not require arguments." ); return GeometryTypes::triangle; }, // vertex [] ( const std::vector< std::string > &args ) { if( !args.empty() ) DUNE_THROW( Exception, "GeometryType 'vertex' does not require arguments." ); return GeometryTypes::vertex; } }; const std::size_t numConstructors = sizeof( constructorNames ) / sizeof( const char * ); // find constructor index std::size_t n = s.find_first_of( '(' ); const std::string cName = s.substr( 0, n ); const std::size_t cIdx = std::lower_bound( constructorNames, constructorNames + numConstructors, cName ) - constructorNames; if( (cIdx == numConstructors) || (constructorNames[ cIdx ] != cName) ) DUNE_THROW( Exception, "No DUNE geometry type constructor named '" << cName << "'." ); // obtain argument vector std::vector< std::string > args; if( n != std::string::npos ) { while( s[ n ] != ')' ) { // skip leading spaces const std::size_t m = s.find_first_not_of( ' ', n+1 ); if( m == std::string::npos ) DUNE_THROW( Exception, "Invalid argument list." ); // find end of argument n = s.find_first_of( ",)", m ); if( (n == std::string::npos) || (n == m) ) DUNE_THROW( Exception, "Invalid argument list." ); // remove trailing spaces from argument const std::size_t k = s.find_last_not_of( ' ', n-1 ); assert( (k != std::string::npos) && (k >= m) ); args.push_back( s.substr( m, k-m+1 ) ); } } // call constructor return constructors[ cIdx ]( args ); } namespace Python { pybind11::class_< GeometryType > registerGeometryType ( pybind11::module scope ) { pybind11::class_< GeometryType > cls( scope, "GeometryType" ); cls.def( pybind11::init( [] ( const std::string &s ) { return new GeometryType( geometryTypeFromString( s ) ); } ) ); cls.def_property_readonly( "isVertex", [] ( const GeometryType &self ) { return self.isVertex(); } ); cls.def_property_readonly( "isLine", [] ( const GeometryType &self ) { return self.isLine(); } ); cls.def_property_readonly( "isTriangle", [] ( const GeometryType &self ) { return self.isTriangle(); } ); cls.def_property_readonly( "isQuadrilateral", [] ( const GeometryType &self ) { return self.isQuadrilateral(); } ); cls.def_property_readonly( "isTetrahedron",[] ( const GeometryType &self ) { return self.isTetrahedron(); } ); cls.def_property_readonly( "isPyramid",[] ( const GeometryType &self ) { return self.isPyramid(); } ); cls.def_property_readonly( "isPrism", [] ( const GeometryType &self ) { return self.isPrism(); } ); cls.def_property_readonly( "isHexahedron", [] ( const GeometryType &self ) { return self.isHexahedron(); } ); cls.def_property_readonly( "isSimplex", [] ( const GeometryType &self ) { return self.isSimplex(); } ); cls.def_property_readonly( "isCube", [] ( const GeometryType &self ) { return self.isCube(); } ); cls.def_property_readonly( "isNone", [] ( const GeometryType &self ) { return self.isNone(); } ); cls.def( pybind11::self == pybind11::self ); cls.def( pybind11::self != pybind11::self ); cls.def( "__hash__", [] ( const GeometryType &self ) { return GlobalGeometryTypeIndex::index( self ); } ); cls.def( "__str__", [] ( const GeometryType &self ) { return to_string( self ); } ); cls.def_property_readonly( "dim", [] ( const GeometryType &self ) { return self.dim(); } ); cls.def_property_readonly( "dimension", [] ( const GeometryType &self ) { return self.dim(); } ); return cls; } } // namespace Python } // namespace Dune #endif // ifndef DUNE_PYTHON_GEOMETRY_TYPE_HH dune-geometry-2.8.0/dune/python/test/000077500000000000000000000000001411346603000175365ustar00rootroot00000000000000dune-geometry-2.8.0/dune/python/test/CMakeLists.txt000066400000000000000000000010461411346603000222770ustar00rootroot00000000000000dune_python_add_test(NAME pyrefelement SCRIPT refelement.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} LABELS quick) dune_python_add_test(NAME pygeometrytype SCRIPT geometrytype.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} LABELS quick) dune_python_add_test(NAME pytestquad SCRIPT test_quad.py WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} LABELS quick) dune-geometry-2.8.0/dune/python/test/geometrytype.py000066400000000000000000000016201411346603000226440ustar00rootroot00000000000000from dune.geometry import * # make sure t can be reconstructed from str(t) for t in (vertex, line, triangle, quadrilateral, tetrahedron, pyramid, prism, hexahedron): assert GeometryType(str(t)) == t for d in range(10): assert GeometryType(str(simplex(d))) == simplex(d) assert GeometryType(str(cube(d))) == cube(d) assert GeometryType(str(none(d))) == none(d) # make sure simplices with special names can be constructed by general mechanism for d, t in enumerate((vertex, line, triangle, tetrahedron)): assert GeometryType("simplex(" + str(d) + ")") == t assert GeometryType("general( 0, " + str(d) + ")") == t # make sure cube with special names can be constructed by general mechanism for d, t in enumerate((vertex, line, quadrilateral, hexahedron)): assert GeometryType("cube(" + str(d) + ")") == t assert GeometryType("general( " + str(2**d-1) + ", " + str(d) + ")") == t dune-geometry-2.8.0/dune/python/test/refelement.py000066400000000000000000000030621411346603000222370ustar00rootroot00000000000000from dune.geometry import referenceElement from dune.geometry import vertex, line, triangle, quadrilateral, tetrahedron, pyramid, prism, hexahedron, none def test(r): for codim in range(r.dimension+1): types = r.types(codim) if len(types) != r.size(codim): raise Exception("types tuple has wrong size") for i in range(len(types)): if types[i] != r.type(i, codim): raise Exception("types tuple has wrong content") for codim in range(r.dimension+1): positions = r.positions(codim) if len(positions) != r.size(codim): raise Exception("positions tuple has wrong size") for i in range(len(positions)): if positions[i] != r.position(i, codim): raise Exception("positions tuple has wrong content") if r.dimension > 0: normals = r.integrationOuterNormals if len(normals) != r.size(1): raise Exception("integrationOuterNormals has wrong size") for i in range(len(normals)): if normals[i] != r.integrationOuterNormal(i): raise Exception("integrationOuterNormals has wrong content") test(referenceElement(vertex)) test(referenceElement(line)) test(referenceElement(triangle)) test(referenceElement(quadrilateral)) test(referenceElement(tetrahedron)) test(referenceElement(pyramid)) test(referenceElement(prism)) test(referenceElement(hexahedron)) for dim in range(4): if referenceElement(none(dim)) is not None: raise Exception("got reference element for geometry type none") dune-geometry-2.8.0/dune/python/test/test_quad.py000066400000000000000000000024311411346603000221010ustar00rootroot00000000000000import time, math, numpy import dune.geometry as geo def monomial(p): def function(point): return sum( x**p for x in point) return function result = {3: # integral for sum_i x_i^p over reference element {geo.line: 1./4., geo.triangle: 0.1, geo.quadrilateral: 1./2., geo.tetrahedron: 1./40., geo.pyramid: None, geo.prism: None, geo.hexahedron: 3./4., }, 4: {geo.line: 1./5., geo.triangle: 1./15., geo.quadrilateral: 2./5., geo.tetrahedron: 1./70., geo.pyramid: None, geo.prism: None, geo.hexahedron: 3./5., }, } for order in [3,4]: rules = geo.quadratureRules(order) p = monomial(order) for t in (geo.line, geo.triangle, geo.quadrilateral, geo.tetrahedron, geo.pyramid, geo.prism, geo.hexahedron): value1 = 0 for q in rules(t): value1 += p(q.position)*q.weight hatxs, hatws = rules(t).get() value2 = numpy.sum(p(hatxs) * hatws, axis=-1) # print(order,t,value2) assert abs(value1-value2)<1e-14 if result[order][t] is not None: assert abs(result[order][t] - value1)<1e-12 dune-geometry-2.8.0/lib/000077500000000000000000000000001411346603000150515ustar00rootroot00000000000000dune-geometry-2.8.0/lib/CMakeLists.txt000066400000000000000000000001761411346603000176150ustar00rootroot00000000000000dune_add_library(dunegeometry _DUNE_TARGET_OBJECTS:geometry_ _DUNE_TARGET_OBJECTS:quadraturerules_ ADD_LIBS dunecommon) dune-geometry-2.8.0/pyproject.toml000066400000000000000000000002431411346603000172160ustar00rootroot00000000000000[build-system] requires = ['setuptools', 'wheel', 'scikit-build', 'cmake', 'ninja', 'requests', 'dune-common>=2.8.0.dev0'] build-backend = 'setuptools.build_meta' dune-geometry-2.8.0/python/000077500000000000000000000000001411346603000156245ustar00rootroot00000000000000dune-geometry-2.8.0/python/CMakeLists.txt000066400000000000000000000000751411346603000203660ustar00rootroot00000000000000add_subdirectory(dune) configure_file(setup.py.in setup.py) dune-geometry-2.8.0/python/dune/000077500000000000000000000000001411346603000165575ustar00rootroot00000000000000dune-geometry-2.8.0/python/dune/CMakeLists.txt000066400000000000000000000001001411346603000213060ustar00rootroot00000000000000add_subdirectory(geometry) add_python_targets(dune __init__ ) dune-geometry-2.8.0/python/dune/__init__.py000066400000000000000000000000701411346603000206650ustar00rootroot00000000000000__import__('pkg_resources').declare_namespace(__name__) dune-geometry-2.8.0/python/dune/geometry/000077500000000000000000000000001411346603000204125ustar00rootroot00000000000000dune-geometry-2.8.0/python/dune/geometry/CMakeLists.txt000066400000000000000000000004121411346603000231470ustar00rootroot00000000000000add_python_targets(geometry __init__ _referenceelements quadpy ) dune_add_pybind11_module(NAME _geometry) set_property(TARGET _geometry PROPERTY LINK_LIBRARIES dunecommon dunegeometry APPEND) install(TARGETS _geometry LIBRARY DESTINATION python/dune/geometry) dune-geometry-2.8.0/python/dune/geometry/__init__.py000066400000000000000000000016371411346603000225320ustar00rootroot00000000000000from ._geometry import * from ._referenceelements import * import numpy def _duneIntegrate(self,entity,f): points,weights = self.get() try: ie = entity.geometry.integrationElement except AttributeError: ie = geometry.integrationElement return numpy.sum(f(entity,points)*ie(points)*weights,axis=-1) _duneQuadratureRules = {} def quadratureRule(geometryType, order): try: geometryType = geometryType.type except AttributeError: pass try: rule = _duneQuadratureRules[(geometryType,order)] except KeyError: rule = module(geometryType.dim).rule(geometryType,order) setattr(rule.__class__,"apply",_duneIntegrate) _duneQuadratureRules[(geometryType,order)] = rule return rule def quadratureRules(order): return lambda entity: quadratureRule(entity,order) def integrate(rules,entity,f): return rules(entity).apply(entity,f) dune-geometry-2.8.0/python/dune/geometry/_geometry.cc000066400000000000000000000021151411346603000227120ustar00rootroot00000000000000// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- // vi: set et ts=4 sw=2 sts=2: #include #include PYBIND11_MODULE( _geometry, module ) { Dune::Python::registerGeometryType( module ); // register geometry type contuctors module.def( "simplex", [] ( int dim ) { return Dune::GeometryTypes::simplex( dim ); } ); module.def( "cube", [] ( int dim ) { return Dune::GeometryTypes::cube( dim ); } ); module.def( "none", [] ( int dim ) { return Dune::GeometryTypes::none( dim ); } ); // register predefined geometry types module.attr( "vertex" ) = Dune::GeometryTypes::vertex; module.attr( "line" ) = Dune::GeometryTypes::line; module.attr( "triangle" ) = Dune::GeometryTypes::triangle; module.attr( "quadrilateral" ) = Dune::GeometryTypes::quadrilateral; module.attr( "tetrahedron" ) = Dune::GeometryTypes::tetrahedron; module.attr( "pyramid" ) = Dune::GeometryTypes::pyramid; module.attr( "prism" ) = Dune::GeometryTypes::prism; module.attr( "hexahedron" ) = Dune::GeometryTypes::hexahedron; } dune-geometry-2.8.0/python/dune/geometry/_referenceelements.py000066400000000000000000000014621411346603000246210ustar00rootroot00000000000000from ..generator.generator import SimpleGenerator from dune.common.hashit import hashIt def module(dim): typeName = "Dune::Geo::ReferenceElement >" includes = ["dune/python/geometry/referenceelements.hh"] typeHash = "referenceelements_" + hashIt(typeName) generator = SimpleGenerator("ReferenceElements", "Dune::Python") m = generator.load(includes, typeName, typeHash) return m _duneReferenceElements = {} def referenceElement(geometryType): try: geometryType = geometryType.type except: pass try: ref = _duneReferenceElements[geometryType] except KeyError: ref = module(geometryType.dim).general(geometryType) _duneReferenceElements[geometryType] = ref return ref dune-geometry-2.8.0/python/dune/geometry/quadpy.py000066400000000000000000000103721411346603000222720ustar00rootroot00000000000000import logging logger = logging.getLogger(__name__) try: import quadpy as qp import numpy class QPQuadPoint: def __init__(self,p,w): self.p_ = p self.w_ = w @property def position(self): return self.p_ @property def weight(self): return self.w_ _cache = {} class QPQuadPyQuadrature: def __init__(self,quad,order,method,vertices,transform): self.quad_ = quad self.order_ = order self.method_ = method self.vertices_ = numpy.array(vertices) # here an error will occur if the method is invalid - how to catch? self.quadrature_ = getattr(quad,method) try: self.points_ = transform.transform(self.quadrature_.points.T, self.vertices_) except ValueError: self.points_ = transform.transform(self.quadrature_.points.T, self.vertices_.T).T try: self.weights_ = transform.get_detJ(self.quadrature_.points.T, self.vertices_)*self.quadrature_.weights except AttributeError: self.weights_ = transform.get_vol(self.vertices_)*self.quadrature_.weights self.quadPoints_ = [ QPQuadPoint(p,w) for p,w in zip(self.points_,self.weights_) ] self.points_ = self.points_.transpose().copy() def get(self): return self.points_, self.weights_ def apply(self,entity,f): ie = entity.geometry.integrationElement f_e = lambda x: f(entity,x)*ie(x) return self.quad_.integrate(f_e,self.vertices_,self.quadrature_) def __iter__(self): return self.quadPoints_.__iter__() @property def order(self): return self.quadrature_.degree def name(self): return self.method_ def rule(gt,quadDescription): try: gt = gt.type except AttributeError: pass try: quad = _cache[(gt,quadDescription)] return quad except KeyError: pass order, method = quadDescription dim = gt.dim if gt.isLine: vertices = [0,1] quad = qp.line_segment from quadpy.ncube import transform elif gt.isTriangle: vertices = [[0.0, 0.0], [1.0, 0.0], [0.0, 1.0]] quad = qp.triangle from quadpy.nsimplex import transform elif gt.isQuadrilateral: vertices = qp.quadrilateral.rectangle_points([0.0, 1.0], [0.0, 1.0]) quad = qp.quadrilateral from quadpy.ncube import transform elif gt.isTetrahedron: vertices = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] quad = qp.tetrahedron from quadpy.nsimplex import transform elif gt.isHexahedron: vertices = qp.hexahedron.cube_points([0.0, 1.0], [0.0, 1.0], [0.0, 1.0]) quad = qp.hexahedron from quadpy.ncube import transform elif gt.isPyramid: vertices = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], [0.0, 0.0, 1.0]] quad = qp.pyramid raise ValueError("prism quadratures not yet fully supported") elif gt.isPrism: vertices = [ [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 1.0], [0.0, 1.0, 1.0] ] quad = qp.wedge raise ValueError("prism quadratures not yet fully supported") else: raise ValueError("no quadpy quadrature available for the geometryType " + str(gt)) if not method and not order: return quad ret = QPQuadPyQuadrature(quad,order,method,vertices,transform) _cache[(gt,quadDescription)] = ret return ret def rules(methods): def r(entity): try: return rule(entity.type, methods[entity.type]) except AttributeError: return rule(entity, methods[entity]) return r except ImportError as e: logger.warning('Unable to import quadpy: ' + " ".join(str(e).splitlines())) raise ImportError("Unable to import quadpy module") dune-geometry-2.8.0/python/setup.py.in000066400000000000000000000007111411346603000177420ustar00rootroot00000000000000from setuptools import setup, find_packages pkg = [m for m in "${ProjectPythonRequires}".split(' ') if "dune" not in m] setup(name="${ProjectName}", namespace_packages=['dune'], description="${ProjectDescription}", version="${ProjectVersionString}", author="${ProjectAuthor}", author_email="${ProjectMaintainerEmail}", packages = find_packages(), zip_safe = 0, package_data = {'': ['*.so']}, install_requires = pkg ) dune-geometry-2.8.0/setup.py000066400000000000000000000002411411346603000160120ustar00rootroot00000000000000try: from dune.packagemetadata import metaData except ImportError: from packagemetadata import metaData from skbuild import setup setup(**metaData()[1])