aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorallen <allen@0a4070d5-58f5-498f-b6c0-2693e757fa0f>1999-11-01 11:27:16 +0000
committerallen <allen@0a4070d5-58f5-498f-b6c0-2693e757fa0f>1999-11-01 11:27:16 +0000
commitcab79658b8e19947c3b4058f75961f01a055ef2e (patch)
tree0532e9dac09c72f6e1aa2942186ac65dba2b5e66
parentf6ebcf616a79e8a6ed1683187dc8d58e33980c21 (diff)
This commit was generated by cvs2svn to compensate for changes in r2, which
included commits to RCS files with non-trunk default branches. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/IDAxiBrillBH/trunk@3 0a4070d5-58f5-498f-b6c0-2693e757fa0f
-rw-r--r--COPYRIGHT377
-rw-r--r--README8
-rw-r--r--doc/IDAxiBrillBH.tex160
-rw-r--r--interface.ccl9
-rw-r--r--par/axbrillbh_ADM.par55
-rw-r--r--par/axibrill_ADM.par55
-rw-r--r--par/axibrill_BMA.par55
-rw-r--r--par/axibrillbh_BMA.par55
-rw-r--r--par/pablo.par72
-rw-r--r--param.ccl56
-rw-r--r--schedule.ccl10
-rw-r--r--src/AxiBrillBHIVP.F339
-rw-r--r--src/IDAxiBrillBH.F339
-rw-r--r--src/bhbrill.m126
-rw-r--r--src/bhbrill.x60
-rw-r--r--src/gij.x133
-rw-r--r--src/interp2.F213
-rw-r--r--src/make.code.defn9
-rw-r--r--src/mg59p.F896
-rw-r--r--src/psi_1st_deriv.x18
-rw-r--r--src/psi_2nd_deriv.x51
-rw-r--r--src/shmgp.F771455
-rw-r--r--test/test_axibrill.par55
-rw-r--r--test/test_axibrill/grr.dl70
-rw-r--r--test/test_axibrill/grr.xl70
-rw-r--r--test/test_axibrill/grr.yl70
-rw-r--r--test/test_axibrill/grr.zl70
-rw-r--r--test/test_axibrill/gxx.dl70
-rw-r--r--test/test_axibrill/gxx.xl70
-rw-r--r--test/test_axibrill/gxx.yl70
-rw-r--r--test/test_axibrill/gxx.zl70
-rw-r--r--test/test_axibrill/gxy.dl70
-rw-r--r--test/test_axibrill/gxy.xl70
-rw-r--r--test/test_axibrill/gxy.yl70
-rw-r--r--test/test_axibrill/gxy.zl70
-rw-r--r--test/test_axibrill/gxz.dl70
-rw-r--r--test/test_axibrill/gxz.xl70
-rw-r--r--test/test_axibrill/gxz.yl70
-rw-r--r--test/test_axibrill/gxz.zl70
-rw-r--r--test/test_axibrill/gyy.dl70
-rw-r--r--test/test_axibrill/gyy.xl70
-rw-r--r--test/test_axibrill/gyy.yl70
-rw-r--r--test/test_axibrill/gyy.zl70
-rw-r--r--test/test_axibrill/gyz.dl70
-rw-r--r--test/test_axibrill/gyz.xl70
-rw-r--r--test/test_axibrill/gyz.yl70
-rw-r--r--test/test_axibrill/gyz.zl70
-rw-r--r--test/test_axibrill/gzz.dl70
-rw-r--r--test/test_axibrill/gzz.xl70
-rw-r--r--test/test_axibrill/gzz.yl70
-rw-r--r--test/test_axibrill/gzz.zl70
-rw-r--r--test/test_axibrill/ham.dl70
-rw-r--r--test/test_axibrill/ham.xl70
-rw-r--r--test/test_axibrill/ham.yl70
-rw-r--r--test/test_axibrill/ham.zl70
-rw-r--r--test/test_axibrill/kxx.dl70
-rw-r--r--test/test_axibrill/kxx.xl70
-rw-r--r--test/test_axibrill/kxx.yl70
-rw-r--r--test/test_axibrill/kxx.zl70
-rw-r--r--test/test_axibrill/kxy.dl70
-rw-r--r--test/test_axibrill/kxy.xl70
-rw-r--r--test/test_axibrill/kxy.yl70
-rw-r--r--test/test_axibrill/kxy.zl70
-rw-r--r--test/test_axibrill/kxz.dl70
-rw-r--r--test/test_axibrill/kxz.xl70
-rw-r--r--test/test_axibrill/kxz.yl70
-rw-r--r--test/test_axibrill/kxz.zl70
-rw-r--r--test/test_axibrill/kyy.dl70
-rw-r--r--test/test_axibrill/kyy.xl70
-rw-r--r--test/test_axibrill/kyy.yl70
-rw-r--r--test/test_axibrill/kyy.zl70
-rw-r--r--test/test_axibrill/kyz.dl70
-rw-r--r--test/test_axibrill/kyz.xl70
-rw-r--r--test/test_axibrill/kyz.yl70
-rw-r--r--test/test_axibrill/kyz.zl70
-rw-r--r--test/test_axibrill/kzz.dl70
-rw-r--r--test/test_axibrill/kzz.xl70
-rw-r--r--test/test_axibrill/kzz.yl70
-rw-r--r--test/test_axibrill/kzz.zl70
79 files changed, 8526 insertions, 0 deletions
diff --git a/COPYRIGHT b/COPYRIGHT
new file mode 100644
index 0000000..45b8425
--- /dev/null
+++ b/COPYRIGHT
@@ -0,0 +1,377 @@
+ ********************************
+ Welcome to the Cactus Code
+ Version 4.0
+ ********************************
+
+All Cactus source code is (c) Copyright by the Authors listed in the
+respective README and source files that you will find scattered thru
+the directory structure of all the thorns. This is a truly
+collaborative development project that benefits from input of many
+people worldwide and we try our best to give credit to every
+contribution. The cactus code web page at
+ http://www.cactuscode.org
+contains an extensive list of authors to all the thorns that are
+part of the Cactus Code project.
+
+The flesh of the Cactus Code and the design of the project is (c)
+Copyright 1997-99 by Gabrielle Allen, Tom Goodale, Joan Masso and Paul
+Walker from the Numerical Relativity group of the Max-Planck-Institut
+fuer Gravitationphysik / Albert Einstein Institute
+(http://www.aei-potsdam.mpg.de).
+
+The Cactus Code is distributed under the GNU general public license
+version 2 which is available below. All thorns distributed with Cactus
+follow this license unless it is explicitly stated otherwise in the
+corresponding README files.
+
+Please, take a look at the documentation in the main doc directory or
+check the cactus web page for instructions on how to run the code,
+report bugs, give feedback, etc.
+
+Thanks for using cactus. We hope you find it useful. Love it or hate
+it, please let us know what you think.
+- The Cactus Team <cactus@cactuscode.org>
+
+**************************************************************************
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, 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
+
+ Appendix: 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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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., 675 Mass Ave, Cambridge, MA 02139, 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) 19yy 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.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+
diff --git a/README b/README
new file mode 100644
index 0000000..f2c0a9d
--- /dev/null
+++ b/README
@@ -0,0 +1,8 @@
+Cactus Code Thorn IDAxiBrillBH
+Authors : Steve Brandt, Paul Walker, Ryoji Takahashi
+CVS info : $Header$
+--------------------------------------------------------------------------
+
+This thorn does calculates initial data for a black hole distorted
+by a even parity perturbation
+
diff --git a/doc/IDAxiBrillBH.tex b/doc/IDAxiBrillBH.tex
new file mode 100644
index 0000000..0bbff8e
--- /dev/null
+++ b/doc/IDAxiBrillBH.tex
@@ -0,0 +1,160 @@
+% Thorn documentation template
+\documentclass{article}
+\begin{document}
+
+\title{IDAxiBrillBH}
+\author{Paul Walker, Steve Brand}
+\date{1 September 1999}
+\maketitle
+
+\abstract{Thorn IDAixBrillBH provides analytic initial data for vacuum
+ black hole spacetime: a single Schwarzschild black hole in
+ isotropic coordinates plus Brill wave. This initial data is
+ provided for the 3-conformal metric, it's spatial derivatives, and
+ extrinsic curvature.}
+
+\section{Purpose}
+
+The pioneer, Bernstein, studied single black hole which is
+non-rotating and distorted in azimuthal line symmetry of 2 dimensional
+case \cite{Bernstein93a}. In this non-rotating case, one choose the
+condition, $K_{ij} = 0$, and
+\begin{equation}
+\gamma_{ab} = \psi^4 \hat \gamma_{ab},
+\end{equation}
+where $\gamma_{ab}$ is the physical three metric and
+$\hat{\gamma}_{ab}$ is some chosen conformal three metric.
+
+The Hamiltonian constraint reduces to
+\begin{equation}
+\hat \Delta \psi = \frac{1}{8}\psi \hat R,
+\label{eqn:conformal_hamiltonian}
+\end{equation}
+where $\hat \Delta$ is the covariant Laplacian and $\hat R$ is Ricci
+tensor for the conformal three metric. This form allows
+us to choose an arbitrary conformal three metric, and then solve an
+elliptic equation for the conformal factor, therefore, satisfying the
+constraint equations ($K_{ij} = 0$ trivially satisfies the momentum
+constraints in vacuum). This approach was used to create
+``Brill wave'' in spacetime without black holes \cite{Brill59}.
+Bernstein extended to the black hole spacetime. Using
+spherical-polar coordinates, one can write the 3-metric,
+\begin{equation}
+\label{eqn:sph-cood}
+ds^2 = \psi^4 (e^{2q} (dr^2 + r^2 d \theta^2) + r^2 \sin \theta d
+\phi^2),
+\end{equation}
+where $q$ is the Brill ``packet'' which takes some functional form.
+Using this ansatz with (\ref{eqn:conformal_hamiltonian}) leads to
+an elliptic equation for $\psi$ which must be solved
+numerically. Applying the isometry condition on $\psi$ at a finite
+radius, and applying $M/2r$ falloff conditions on $\psi$ at the
+outer boundary (the ``Robin'' condition), along with a packet which
+obeys the appropriate symmetries (including being invariant under the
+isometry operator), will make this solution describe a black hole with
+an incident gravitational wave. The choice of $q=0$ produces
+Schwarzschild solution. The typical $q$ function used in
+axisymmetry, and considered here in the non-rotating case is
+\begin{equation}
+q = Q_0 \sin \theta^n \left [ \exp\left(\frac{\eta -
+ \eta_0^2}{\sigma^2}\right ) + \exp\left(\frac{\eta +
+ \eta_0^2}{\sigma^2}\right ) \right ].
+\end{equation}
+Note regularity along the axis requires that the exponent $n$ must be
+even. Choosing a logarithmic radial coordinate $\eta$, which related
+asymptotic flat coordinate $r$ by $\eta = ln (2r/m)$, where m is a
+scale parameter. One can rewrite (\ref{eqn:sph-cood}) as
+\begin{equation}
+ds^2 = \psi(\eta)^4 [ e^{2 q} (d \eta^2 + d\theta^2) + \sin^2
+\theta d\phi^2].
+\end{equation}
+
+In the previous Breinstein work, the above $r$ are transformed to a
+logarithmic radial coordinate
+
+\begin{equation}
+\label{eta_coord}
+\eta = \mbox{ln} (\frac{2r}{m}).
+\end{equation}
+
+The scale parameter $m$ is equal to the mass of the Schwarzschild
+black hole, if $q=0$. In this coordinate, the 3-metric is
+\begin{equation}
+\label{eqn:metric_brill_eta}
+ds^2 = \tilde{\psi}^4 (e^{2q} (d\eta^2+d\theta^2)+\sin^2 \theta
+d\phi^2),
+\end{equation}
+and the Schwarzschild solution is
+\begin{equation}
+\label{eqn:psi}
+\tilde{\psi} = \sqrt{2M} \cosh (\frac{\eta}{2}).
+\end{equation}
+We also change the notation of $\psi$ for the conformal factor is same
+as $\tilde{\psi}$ \cite{Camarda97a}, for the $\eta$ coordinate has the
+factor $r^{1/2}$ in the conformal factor. Clearly $\psi(\eta)$ and
+$\psi$ differ by a factor of $\sqrt{r}$. The Hamiltonian
+constraint is
+\begin{equation}
+\label{eqn:ham}
+\frac{\partial^2 \tilde{\psi}}{\partial \eta^2} + \frac{\partial^2
+ \tilde{\psi}}{\partial \theta^2} + \cot \theta \frac{\partial
+ \tilde{\psi}}{\partial \theta} = - \frac{1}{4} \tilde{\psi}
+(\frac{\partial^2 q}{\partial \eta^2} + \frac{\partial^2 q}{\partial
+ \theta^2} -1).
+\end{equation}
+
+For solving this Hamiltonian constraint numerically. At first
+we substitute
+\begin{eqnarray}
+\delta \tilde{\psi} & = & \tilde{\psi}+\tilde{\psi}_0 \\
+ & = & \tilde{\psi}-\sqrt{2m} \cosh(\frac{\eta}{2}).
+\end{eqnarray}
+to the equation~(\ref{eqn:ham}), then we can linearize it as
+\begin{equation}
+\frac{\partial^2 \delta\tilde{\psi}}{\partial \eta^2} + \frac{\partial^2
+ \delta\tilde{\psi}}{\partial \theta^2} + \cot \theta \frac{\partial
+ \delta\tilde{\psi}}{\partial \theta} = - \frac{1}{4}
+(\delta\tilde{\psi} + \tilde{\psi}_0) (\frac{\partial^2 q}{\partial
+ \eta^2} + \frac{\partial^2 q}{\partial \theta^2} -1).
+\label{eqn:ham_linear}
+\end{equation}
+For the boundary conditions, we use for inner boundary condition,
+which is isometry condition:
+\begin{equation}
+\frac{\partial \tilde{\psi}}{\partial \eta}|_{\eta = 0} = 0,
+\end{equation}
+and outer boundary condition, which is Robin condition:
+\begin{equation}
+(\frac{\partial \tilde{\psi}}{\partial \eta} + \frac{1}{2}
+\tilde{\psi})|_{\eta=\eta_{max}} = 0.
+\end{equation}
+
+
+This thorn provides
+ \begin{enumerate}
+ \item CactusEinstein
+ \end{enumerate}
+
+\section{Comments}
+
+We calculate equation~(\ref{eqn:ham_linear}) with spherical
+coordinate. However, Cactus needs Cartesian coordinate. Then, we
+interpolate $\psi$ to the Cartesian grid by using interpolator. Note
+interpolator has linear, quadratic, and cubic interpolation.
+
+% Automatically created from the ccl files
+% Do not worry for now.
+\include{interface}
+\include{param}
+\include{schedule}
+\bibliographystyle{prsty}
+\begin{thebibliography}{10}
+\bibitem{Bernstein93a}
+ D. Bernstein, Ph.D thesis University of Illinois Urbana-Champaign,
+ (1993)
+\bibitem{Brill59}
+ D. S. Brill,Ann. Phys.{\bf 7}, 466 (1959)
+\bibitem{Camarda97a}
+ K. Camarda, Ph.D thesis University of Illinois Urbana-Champaign, (1998)
+\end{thebibliography}
+\end{document}
diff --git a/interface.ccl b/interface.ccl
new file mode 100644
index 0000000..7954581
--- /dev/null
+++ b/interface.ccl
@@ -0,0 +1,9 @@
+# Interface definition for thorn AxiBrillBHIVP
+# $Header$
+
+implements: idaxibrillbh
+inherits: einstein
+
+public:
+
+
diff --git a/par/axbrillbh_ADM.par b/par/axbrillbh_ADM.par
new file mode 100644
index 0000000..2d5afff
--- /dev/null
+++ b/par/axbrillbh_ADM.par
@@ -0,0 +1,55 @@
+######################################################################
+# Geodesically sliced black hole + brill wave, ADM, Staggered leapfrog
+######################################################################
+
+#Required thorns
+ActiveThorns = "time ADMconstraints pugh cartgrid3d einstein ADM AxiBrillBHIVP ioascii ioutil"
+
+pugh::enable_all_storage = "yes"
+
+# GENERAL
+
+einstein::evolution_system = "ADM"
+
+driver::global_nx = 32
+driver::global_ny = 32
+driver::global_nz = 32
+
+grid::type = "byspacing"
+grid::dxyz = 0.4
+grid::symmetry = "full"
+
+time::dtfac = 0.25
+
+cactus::cctk_initial_time = 0.
+cactus::cctk_itlast = 10
+
+adm::method = "stagleap"
+adm::bound = "static"
+
+# MODEL
+einstein::initial_data = "axibrillbh"
+axibrillbhivp::axibrillbh_amp = 0.5
+axibrillbhivp::axibrillbh_eta0 i = 0.0
+axibrillbhivp::axibrillbh_sigma = 1.0
+axibrillbhivp::axibrillbh_etamax = 6.0
+axibrillbhivp::axibrillbh_n = 2
+axibrillbhivp::axibrillbh_ne = 302
+axibrillbhivp::axibrillbh_nq = 54
+axibrillbhivp::axibrillbh_intorder = 1
+
+# GAUGE
+adm::slicing = "geodesic"
+
+
+# OUTPUT ########################################################
+
+IO::IO_outdir = "AxiBrillBHIVP"
+
+IO::IO_0Devery = 2
+IO::info_every = 1
+IOASCII::output_info = "einstein"
+IOASCII::output0D = "einstein::gxx einstein::kxx admconstraints::ADMconstraints
+ einstein::grr einstein::alp"
+
+##################################################################
diff --git a/par/axibrill_ADM.par b/par/axibrill_ADM.par
new file mode 100644
index 0000000..74d307e
--- /dev/null
+++ b/par/axibrill_ADM.par
@@ -0,0 +1,55 @@
+######################################################################
+# Geodesically sliced black hole + brill wave, ADM, Staggered leapfrog
+######################################################################
+
+#Required thorns
+ActiveThorns = "time ADMconstraints pugh cartgrid3d einstein ADM AxiBrillBHIVP ioascii ioutil"
+
+pugh::enable_all_storage = "yes"
+
+# GENERAL
+
+einstein::evolution_system = "ADM"
+
+driver::global_nx = 20
+driver::global_ny = 20
+driver::global_nz = 20
+
+grid::type = "byspacing"
+grid::dxyz = 0.2
+grid::symmetry = "octant"
+
+time::dtfac = 0.25
+
+cactus::cctk_initial_time = 0.
+cactus::cctk_itlast = 10
+
+adm::method = "stagleap"
+adm::bound = "flat"
+
+# MODEL
+einstein::initial_data = "axibrillbh"
+axibrillbhivp::axibrillbh_amp = 0.5
+axibrillbhivp::axibrillbh_eta0 = 0.0
+axibrillbhivp::axibrillbh_sigma = 1.0
+axibrillbhivp::axibrillbh_etamax = 6.0
+axibrillbhivp::axibrillbh_n = 2
+axibrillbhivp::axibrillbh_ne = 302
+axibrillbhivp::axibrillbh_nq = 54
+axibrillbhivp::axibrillbh_intorder = 1
+
+# GAUGE
+adm::slicing = "geodesic"
+
+
+# OUTPUT ########################################################
+
+IO::IO_outdir = "AxiBrillBHIVP"
+
+IO::IO_0Devery = 2
+IO::info_every = 1
+IOASCII::output_info = "einstein"
+IOASCII::output0D = "einstein::gxx einstein::kxx admconstraints::ADMconstraints
+ einstein::grr einstein::alp"
+
+##################################################################
diff --git a/par/axibrill_BMA.par b/par/axibrill_BMA.par
new file mode 100644
index 0000000..5d15ecc
--- /dev/null
+++ b/par/axibrill_BMA.par
@@ -0,0 +1,55 @@
+######################################################################
+# Geodesically sliced black hole + brill wave, ADM, Staggered leapfrog
+######################################################################
+
+#Required thorns
+ActiveThorns = "time pugh cartgrid3d einstein BMA AxiBrillBHIVP ioascii ioutil"
+
+pugh::enable_all_storage = "yes"
+
+# GENERAL
+
+einstein::evolution_system = "BMA"
+
+driver::global_nx = 32
+driver::global_ny = 32
+driver::global_nz = 32
+
+grid::type = "byspacing"
+grid::dxyz = 0.4
+grid::symmetry = "octant"
+
+time::dtfac = 0.5
+
+cactus::cctk_initial_time = 0.
+cactus::cctk_itlast = 1
+
+bma::flux_method = "mac"
+bma::bound = "flat"
+
+# MODEL
+einstein::initial_data = "axibrillbh"
+axibrillbhivp::axibrillbh_amp = 0.5
+axibrillbhivp::axibrillbh_eta0 i = 0.0
+axibrillbhivp::axibrillbh_sigma = 1.0
+axibrillbhivp::axibrillbh_etamax = 6.0
+axibrillbhivp::axibrillbh_n = 2
+axibrillbhivp::axibrillbh_ne = 302
+axibrillbhivp::axibrillbh_nq = 54
+axibrillbhivp::axibrillbh_intorder = 1
+
+# GAUGE
+bma::slicing = "geodesic"
+
+
+# OUTPUT ########################################################
+
+IO::IO_outdir = "axibrill_low"
+
+IO::IO_0Devery = 2
+IO::info_every = 1
+IOASCII::output_info = "einstein"
+IOASCII::output1D = "einstein::gxx einstein::kxx admconstraints::ADMconstraints
+ einstein::grr einstein::alp"
+
+##################################################################
diff --git a/par/axibrillbh_BMA.par b/par/axibrillbh_BMA.par
new file mode 100644
index 0000000..899e2d0
--- /dev/null
+++ b/par/axibrillbh_BMA.par
@@ -0,0 +1,55 @@
+######################################################################
+# Geodesically sliced black hole + brill wave, ADM, Staggered leapfrog
+######################################################################
+
+#Required thorns
+ActiveThorns = "time ADMConstraints pugh cartgrid3d einstein BMA AxiBrillBHIVP ioascii ioutil"
+
+pugh::enable_all_storage = "yes"
+
+# GENERAL
+
+einstein::evolution_system = "BMA"
+
+driver::global_nx = 32
+driver::global_ny = 32
+driver::global_nz = 32
+
+grid::type = "byspacing"
+grid::dxyz = 0.4
+grid::symmetry = "octant"
+
+time::dtfac = 0.5
+
+cactus::cctk_initial_time = 0.
+cactus::cctk_itlast = 1
+
+bm::flux_method = "mac"
+bm::bound = "flat"
+
+# MODEL
+einstein::initial_data = "axibrillbh"
+axibrillbhivp::axibrillbh_amp = 0.5
+axibrillbhivp::axibrillbh_eta0 i = 0.0
+axibrillbhivp::axibrillbh_sigma = 1.0
+axibrillbhivp::axibrillbh_etamax = 6.0
+axibrillbhivp::axibrillbh_n = 2
+axibrillbhivp::axibrillbh_ne = 302
+axibrillbhivp::axibrillbh_nq = 54
+axibrillbhivp::axibrillbh_intorder = 1
+
+# GAUGE
+bm::slicing = "geodesic"
+
+
+# OUTPUT ########################################################
+
+IO::IO_outdir = "axibrill_low"
+
+IO::IO_0Devery = 2
+IO::info_every = 1
+IOASCII::output_info = "einstein"
+IOASCII::output1D = "einstein::gxx einstein::kxx admconstraints::ADMconstraints
+ einstein::grr einstein::alp"
+
+##################################################################
diff --git a/par/pablo.par b/par/pablo.par
new file mode 100644
index 0000000..650658d
--- /dev/null
+++ b/par/pablo.par
@@ -0,0 +1,72 @@
+!DESC "Demonstration file for Pablo/AutoPilot"
+
+ActiveThorns = "time psikadelia ADMconstraints pugh interp cartgrid3d einstein ADM IDAxiBrillBH iobasic ioflexio ioascii ioutil"
+
+
+# Parameters which will affect performance
+# ----------------------------------------
+# Each time admconstraints:: is output thorn ADMConstraints is used
+# Each time psikadelia:: is output thorn PsiKadelia is used
+# Output can be done in as groups of variables or single variables
+# Useful groups are
+# einstein::metric - 6 variables
+# einstein::conv - 4 variables
+# admconstraints::admconstraints - 4 variables
+
+
+# GLOBAL GRID SIZE IN EACH DIRECTION
+driver::global_nsize = 32
+
+# OUTPUT TO SCREEN
+iobasic::outInfo_every = 1
+iobasic::outInfo_vars = "einstein::alp PsiKadelia::psi4re admconstraints::ham "
+
+# OUTPUT Scalars reductions
+iobasic::outScalar_every = 1
+iobasic::outScalar_vars = "einstein::alp einstein::metric admconstraints::admcontraints PsiKadelia::psi4re "
+
+# OUTPUT 1D ASCII
+ioascii::out1D_every = 10
+ioascii::out1D_vars = "einstein::alp einstein::metric admconstraints::admcontraints PsiKadelia::psi4re "
+
+# OUTPUT 3D IEEEIO
+#ioflexio::out3D_every = 10
+#ioflexio::out3D_vars = "einstein::alp einstein::metric admconstraints::admcontraints PsiKadelia::psi4re "
+
+# CHECKPOINT
+IOFlexIO::checkpoint = "yes"
+IO::checkpoint_every = 10
+
+# Parameters which need to be tweaked
+# -----------------------------------
+
+# TOTAL NUMBER OF TIMESTEPS TO DO
+cactus::cctk_itlast = 100
+
+# NAME OF OUTPUT DIRECTORY
+IO::outdir = "pablo"
+IO::checkpoint_dir = "pablo"
+
+
+# Parameters which should be OK
+# -----------------------------
+IO::checkpoint_save = 1
+IO::checkpoint_file = "checkpoint"
+einstein::evolution_system = "ADM"
+grid::type = "byspacing"
+grid::dxyz = 0.1
+grid::domain = "octant"
+time::dtfac = 0.25
+cactus::cctk_initial_time = 0.
+adm::method = "stagleap"
+adm::bound = "flat"
+einstein::slicing = "1+log"
+einstein::initial_data = "axibrillbh"
+idaxibrillbh::amp = 0.5
+idaxibrillbh::eta0 = 0.0
+idaxibrillbh::sigma = 1.0
+idaxibrillbh::etamax = 6.0
+idaxibrillbh::n = 2
+idaxibrillbh::ne = 302
+idaxibrillbh::nq = 54
+
diff --git a/param.ccl b/param.ccl
new file mode 100644
index 0000000..5fe240b
--- /dev/null
+++ b/param.ccl
@@ -0,0 +1,56 @@
+# Parameter definitions for thorn AxiBrillBHIVP
+# $Header$
+
+shares:einstein
+
+EXTENDS KEYWORD initial_lapse ""
+{
+ "schwarz" :: "Set lapse to Schwarzschild"
+}
+
+EXTENDS KEYWORD initial_data ""
+{
+ "axibrillbh" :: "Axisymmetry Initial data for Black hole + Brill wave"
+}
+
+private:
+
+REAL amp "Brill wave amplitude"
+{
+ *:* :: "No restriction"
+} 0.1
+
+REAL eta0 "Brill wave center (in eta coords)"
+{
+ *:* :: "No restriction"
+} 0.0
+
+REAL sigma "Brill wave width (in eta)"
+{
+ *:* :: "No restriction"
+} 1.0
+
+REAL etamax "Eta value for outer edge of grid"
+{
+ *:* :: "No restriction"
+} 5.0
+
+
+INT n "sin^n theta in brill wave"
+{
+ *:* :: "No restriction"
+} 2
+
+INT ne "Eta resolution for solve"
+{
+ *:* :: "No restriction"
+} 300
+
+INT nq "Theta resolution for solve"
+{
+ *:* :: "No restriction"
+} 50
+
+
+
+
diff --git a/schedule.ccl b/schedule.ccl
new file mode 100644
index 0000000..ac43b1c
--- /dev/null
+++ b/schedule.ccl
@@ -0,0 +1,10 @@
+# Schedule definitions for thorn AxiBrillBHIVP
+# $Header$
+
+if (CCTK_Equals(initial_data,"axibrillbh"))
+{
+ schedule IDAxiBrillBH at CCTK_INITIAL
+ {
+ LANG: Fortran
+ } "Construct IDAxiBrillBH"
+}
diff --git a/src/AxiBrillBHIVP.F b/src/AxiBrillBHIVP.F
new file mode 100644
index 0000000..35faded
--- /dev/null
+++ b/src/AxiBrillBHIVP.F
@@ -0,0 +1,339 @@
+c/*@@
+c @file AxiBrillBHIVP.F
+c @date
+c @author
+c @desc
+c
+c @enddesc
+c@@*/
+
+#include "cctk.h"
+#include "cctk_parameters.h"
+#include "cctk_arguments.h"
+
+c/*@@
+c @routine AxiBrillBHIVP
+c @date
+c @author
+c @desc
+c
+c @enddesc
+c @calls
+c @calledby
+c @history
+c
+c @endhistory
+c@@*/
+
+c Need include file from Einstein
+#include "CactusEinstein/Einstein/src/Einstein.h"
+
+ subroutine AxiBrillBHIVP(CCTK_FARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_FARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+
+c Perhaps this and others should go into cctk.h
+ integer CCTK_Equals
+
+
+ real*8 axibheps, rmax, dq, deta
+ integer levels,id5,id9,idi,idg,ier
+ real*8, allocatable :: cc(:,:),ce(:,:),cw(:,:),cn(:,:),cs(:,:),
+ $ rhs(:,:),psi2d(:,:),detapsi2d(:,:),dqpsi2d(:,:),
+ $ detaetapsi2d(:,:),detaqpsi2d(:,:),dqqpsi2d(:,:)
+ real*8, allocatable :: etagrd(:),qgrd(:)
+ real*8, allocatable :: eta(:,:,:),abseta(:,:,:),sign_eta(:,:,:),
+ $ q(:,:,:),phi(:,:,:)
+ real*8, allocatable :: psi2dv(:,:,:),detapsi2dv(:,:,:),
+ $ dqpsi2dv(:,:,:),detaetapsi2dv(:,:,:),detaqpsi2dv(:,:,:),
+ $ dqqpsi2dv(:,:,:)
+ parameter(axibheps = 1.0d-12)
+ real*8 ep1,ep2
+ real*8 o1,o2,o3,o4,o5,o6,o7,o8,o9
+ real*8 o10,o11,o12,o13,o14,o15,o16,o17,o18,o19
+ real*8 o20,o21,o22,o23,o24,o25,o26,o27,o28,o29
+ real*8 o30,o31,o32,o33,o34,o35,o36,o37,o38,o39
+ real*8 o40,o41,o42,o43,o44,o45,o46,o47,o48,o49
+ real*8 o50,o51,o52,o53,o54,o55,o56,o57,o58,o59
+ real*8 o60,o61,o62,o63,o64,o65,o66,o67,o68,o69
+ real*8 o70,o71,o72,o73,o74,o75,o76,o77,o78,o79
+ real*8 o80,o81,o82,o83,o84,o85,o86,o87,o88,o89
+ real*8 o90,o91,o92,o93,o94,o95,o96,o97,o98,o99
+ real*8 pi
+ real*8 adm
+ integer :: nx,ny,nz
+ integer i,j,k,nquads
+ integer npoints,handle,ierror
+
+ pi = 4.0d0*atan(1.0d0)
+
+c Set up the grid spacings
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+c Brill wave parameters
+
+ print *,"Brill wave + BH Axisymmetric solve"
+ write (*,123)amp,eta0,sigma,n
+ print *,'etamax=',etamax
+ 123 format(1x,'Pars : Amp',f8.5,' eta0',f8.5,' sigma',f8.5,' n ',i3)
+
+c Solve on this sized cartesian grid
+c 2D grid size NE x NQ
+c Add 2 zones for boundaries...
+ ne = ne+2
+ nq = nq+2
+ ! do I need to call free?
+ allocate(cc(ne,nq),ce(ne,nq),cw(ne,nq),cn(ne,nq),cs(ne,nq),
+ $ rhs(ne,nq),psi2d(ne,nq),detapsi2d(ne,nq),dqpsi2d(ne,nq),
+ $ detaetapsi2d(ne,nq),detaqpsi2d(ne,nq),dqqpsi2d(ne,nq),
+ $ etagrd(ne),qgrd(nq))
+ allocate(eta(nx,ny,nz),abseta(nx,ny,nz),sign_eta(nx,ny,nz),
+ $ q(nx,ny,nz),phi(nx,ny,nz),
+ $ psi2dv(nx,ny,nz),detapsi2dv(nx,ny,nz),dqpsi2dv(nx,ny,nz),
+ $ detaetapsi2dv(nx,ny,nz),detaqpsi2dv(nx,ny,nz),
+ $ dqqpsi2dv(nx,ny,nz))
+c Initialize some arrays
+ psi2d = 1.0d0
+ detapsi2d = 0.0d0
+
+ nquads = 2
+ dq = nquads*0.5*pi/(nq-2)
+ deta = etamax/(ne-3)
+
+ do j=1,nq
+ qgrd(j) = (j-1.5)*dq
+ do i=1,ne
+ etagrd(i) = (i-2)*deta
+#include "Development/IDAxiBrillBH/src/bhbrill.x"
+ enddo
+ enddo
+c Boundary conditions
+ do j=1,nq
+ ce(2,j)=ce(2,j)+cw(2,j)
+ cw(2,j)=0.0
+
+ cw(ne-1,j)=cw(ne-1,j)+ce(ne-1,j)
+ cc(ne-1,j)=cc(ne-1,j)-deta*ce(ne-1,j)
+ ce(ne-1,j)=0.0
+
+ enddo
+ do i=1,ne
+ cc(i,2)=cc(i,2)+cs(i,2)
+ cs(i,2)=0.0
+ cc(i,nq-1)=cc(i,nq-1)+cn(i,nq-1)
+ cn(i,nq-1)=0.0
+ enddo
+
+c Do the solve
+ print *, " Calling axisymmetric solver"
+ call mgparm (levels,5,id5,id9,idi,idg,ne,nq)
+ call mg5 (ne,2,ne-1,nq,2,nq-1,
+ $ cc,cn,cs,cw,ce,psi2d,rhs,
+ $ id5,id9,idi,idg,1,axibheps,rmax,ier)
+ print *, " Solve complete"
+c The solution is now available.
+c Debugging is needed, a stop statement should
+c be called if the IVP solve is not successful
+
+ if(ier .ne. 0) stop 'bad solution to brill wave problem'
+ print *,'rmax = ',rmax
+ print *,'axibheps = ',axibheps
+ print *,'psi2d = ',maxval(psi2d),' ',minval(psi2d)
+
+ ep2 = 0.0
+ do j=2,nq-1
+ do i=2,ne-1
+ ep1 = rhs(i,j)-psi2d(i,j)*cc(i,j)-psi2d(i,j+1)*cn(i,j)-psi2d(i,j-1)*cs(i,j)-
+ & psi2d(i+1,j)*ce(i,j)-psi2d(i-1,j)*cw(i,j)
+ ep2 = max(abs(ep1),ep2)
+ enddo
+ enddo
+ print *,'Resulting eps =',ep2
+
+ ! what a pain all this is....
+ do j=1,nq
+ psi2d(1,j)=psi2d(3,j)
+ psi2d(ne,j)=-deta*psi2d(ne-1,j)+psi2d(ne-2,j)
+ enddo
+ do i=1,ne
+ psi2d(i,1)=psi2d(i,2)
+ psi2d(i,nq)=psi2d(i,nq-1)
+ enddo
+c goto 111
+ do j=2,nq-1
+ do i=2,ne-1
+ dqpsi2d(i,j)=0.5*(psi2d(i,j+1)-psi2d(i,j-1))/dq
+ dqqpsi2d(i,j)=(psi2d(i,j+1)+psi2d(i,j-1)-2.*psi2d(i,j))/dq**2
+ detapsi2d(i,j)=sinh(0.5*etagrd(i))+0.5*(psi2d(i+1,j)-psi2d(i-1,j))/deta
+ detaetapsi2d(i,j)=0.5*cosh(0.5*etagrd(i))+
+ $ (psi2d(i+1,j)+psi2d(i-1,j)-2.*psi2d(i,j))/deta**2
+ enddo
+ enddo
+ do j=1,nq
+ detapsi2d(1,j)=-detapsi2d(3,j)
+ detapsi2d(ne,j)=detapsi2d(ne-2,j) ! simplified
+
+ detaetapsi2d(1,j)=detaetapsi2d(3,j)
+ detaetapsi2d(ne,j)=detaetapsi2d(ne-2,j) ! simplified...
+
+ dqqpsi2d(1,j)=dqqpsi2d(3,j)
+ dqqpsi2d(ne,j)=dqqpsi2d(ne-2,j) ! simplified
+
+ dqpsi2d(1,j)=dqpsi2d(3,j)
+ dqpsi2d(ne,j)=-dq*dqpsi2d(ne-1,j)+dqpsi2d(ne-2,j)
+ enddo
+ do i=1,ne
+ detapsi2d(i,1)=detapsi2d(i,2)
+ detapsi2d(i,nq)=detapsi2d(i,nq-1)
+
+ detaetapsi2d(i,1)=detaetapsi2d(i,2)
+ detaetapsi2d(i,nq)=detaetapsi2d(i,nq-1)
+
+ dqqpsi2d(i,1)=dqqpsi2d(i,2)
+ dqqpsi2d(i,nq)=dqqpsi2d(i,nq-1)
+
+ dqpsi2d(i,1)=-dqpsi2d(i,2)
+ dqpsi2d(i,nq)=-dqpsi2d(i,nq-1)
+ enddo
+ do j=2,nq-1
+ do i=2,ne-1
+ detaqpsi2d(i,j)=0.5*(detapsi2d(i,j+1)-detapsi2d(i,j-1))/dq
+ enddo
+ enddo
+ do j=1,nq
+ detaqpsi2d(1,j)=-detaqpsi2d(3,j)
+ detaqpsi2d(ne,j)=detaqpsi2d(ne-2,j) ! simplified
+ enddo
+ do i=1,ne
+ detaqpsi2d(i,1)=-detaqpsi2d(i,2)
+ detaqpsi2d(i,nq)=-detaqpsi2d(i,nq-1)
+ enddo
+ do j=1,nq
+ psi2d(:,j)=psi2d(:,j)+2.*cosh(0.5*etagrd)
+ enddo
+
+c Now evaluate each of the following at x(i,j,k), y(i,j,k) and
+c z(i,j,k) where i,j,k go from 1 to nx,ny,nz
+
+c Conformal factor
+
+ eta = 0.5d0 * dlog (x**2 + y**2 + z**2)
+ abseta = abs (eta)
+ q = datan2 (sqrt (x**2 + y**2), z)
+ phi = datan2 (y, x)
+
+ do k=1,nz
+ do j=1,ny
+ do i=1,nx
+c eta(i,j,k) = 0.5d0*dlog(x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2)
+c abseta(i,j,k) = abs(eta(i,j,k))
+ if(eta(i,j,k) .lt. 0)then
+ sign_eta(i,j,k) = -1
+ else
+ sign_eta(i,j,k) = 1
+ endif
+c q(i,j,k) = datan2(sqrt(x(i,j,k)**2+y(i,j,k)**2),z(i,j,k))
+c TYPO HERE ???????????
+c |
+c |
+c phi(i,j,k)= datan2(y(i,j,k),x(i,j,k))
+ enddo
+ enddo
+ enddo
+
+ call CCTK_GetInterpHandle (handle, "simple_local")
+
+ npoints = nx*ny*nz
+
+ call CCTK_Interp (ierror,cctkGH,handle,npoints,2,6,6,
+ $ ne,nq,abseta,q,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ etagrd(1),qgrd(1),deta,dq,
+ $ psi2d,detapsi2d,dqpsi2d,detaetapsi2d,detaqpsi2d,dqqpsi2d,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ psi2dv,detapsi2dv,dqpsi2dv,detaetapsi2dv,detaqpsi2dv,
+ $ dqqpsi2dv,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL)
+
+ psi = psi2dv * exp (-0.5 * eta)
+ detapsi2dv = sign_eta * detapsi2dv
+ detaqpsi2dv = sign_eta * detaqpsi2dv
+
+ do k=1,nz
+ do j=1,ny
+ do i=1,nx
+
+c psi(i,j,k) = psi2dv(i,j,k)*exp(-0.5*eta(i,j,k))
+c detapsi2dv(i,j,k) = sign_eta(i,j,k)*detapsi2dv(i,j,k)
+
+c psix = \partial psi / \partial x / psi
+#include "Development/IDAxiBrillBH/src/psi_1st_deriv.x"
+
+c detaqpsi2dv(i,j,k) = sign_eta(i,j,k)*detaqpsi2dv(i,j,k)
+
+c psixx = \partial^2\psi / \partial x^2 / psi
+#include "Development/IDAxiBrillBH/src/psi_2nd_deriv.x"
+ enddo
+ enddo
+ enddo
+
+c Conformal metric
+c gxx = ...
+
+c Derivatives of the metric
+c dxgxx = 1/2 \partial gxx / \partial x
+
+ do k=1,nz
+ do j=1,ny
+ do i=1,nx
+c THESE WERE ALREADY CALCULATED ABOVE !!!
+c eta(i,j,k) = 0.5d0*dlog(x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2)
+c q(i,j,k) = datan2(sqrt(x(i,j,k)**2+y(i,j,k)**2),z(i,j,k))
+c phi(i,j,k) = datan2(y(i,j,k),x(i,j,k))
+#include "Development/IDAxiBrillBH/src/gij.x"
+ enddo
+ enddo
+ enddo
+
+c Curvature
+ kxx = 0.0D0
+ kxy = 0.0D0
+ kxz = 0.0D0
+ kyy = 0.0D0
+ kyz = 0.0D0
+ kzz = 0.0D0
+
+ 111 continue
+c Set ADM mass
+ i = ne-15
+ adm = 0.0
+ do j=2,nq-1
+ adm=adm+(psi2d(i,j)-(psi2d(i+1,j)-psi2d(i-1,j))/deta)*exp(0.5*
+ $ etagrd(i))
+ enddo
+ adm=adm/(nq-2)
+ print *,'ADM mass: ',adm
+ if (CCTK_Equals(initial_lapse,"schwarz")==1) then
+ write (*,*)"Initial with schwarzschild-like lapse"
+ write (*,*)"using alp = (2.*r - adm)/(2.*r+adm)."
+ alp = (2.*r - adm)/(2.*r+adm)
+ endif
+
+ conformal_state = CONFORMAL_METRIC
+
+ deallocate(cc,ce,cw,cn,cs,rhs,psi2d,detapsi2d,dqpsi2d,
+ $ detaetapsi2d,detaqpsi2d,dqqpsi2d,
+ $ etagrd,qgrd,
+ $ eta,abseta,sign_eta,q,phi,psi2dv,detapsi2dv,dqpsi2dv,
+ $ detaetapsi2dv,detaqpsi2dv,dqqpsi2dv)
+
+ return
+ end
+
diff --git a/src/IDAxiBrillBH.F b/src/IDAxiBrillBH.F
new file mode 100644
index 0000000..218e43e
--- /dev/null
+++ b/src/IDAxiBrillBH.F
@@ -0,0 +1,339 @@
+c/*@@
+c @file IDAxiBrillBH.F
+c @date
+c @author
+c @desc
+c
+c @enddesc
+c@@*/
+
+#include "cctk.h"
+#include "cctk_parameters.h"
+#include "cctk_arguments.h"
+
+c/*@@
+c @routine IDAxiBrillBH
+c @date
+c @author
+c @desc
+c
+c @enddesc
+c @calls
+c @calledby
+c @history
+c
+c @endhistory
+c@@*/
+
+c Need include file from Einstein
+#include "CactusEinstein/Einstein/src/Einstein.h"
+
+ subroutine IDAxiBrillBH(CCTK_FARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_FARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+
+c Perhaps this and others should go into cctk.h
+ integer CCTK_Equals
+
+
+ real*8 axibheps, rmax, dq, deta
+ integer levels,id5,id9,idi,idg,ier
+ real*8, allocatable :: cc(:,:),ce(:,:),cw(:,:),cn(:,:),cs(:,:),
+ $ rhs(:,:),psi2d(:,:),detapsi2d(:,:),dqpsi2d(:,:),
+ $ detaetapsi2d(:,:),detaqpsi2d(:,:),dqqpsi2d(:,:)
+ real*8, allocatable :: etagrd(:),qgrd(:)
+ real*8, allocatable :: eta(:,:,:),abseta(:,:,:),sign_eta(:,:,:),
+ $ q(:,:,:),phi(:,:,:)
+ real*8, allocatable :: psi2dv(:,:,:),detapsi2dv(:,:,:),
+ $ dqpsi2dv(:,:,:),detaetapsi2dv(:,:,:),detaqpsi2dv(:,:,:),
+ $ dqqpsi2dv(:,:,:)
+ parameter(axibheps = 1.0d-12)
+ real*8 ep1,ep2
+ real*8 o1,o2,o3,o4,o5,o6,o7,o8,o9
+ real*8 o10,o11,o12,o13,o14,o15,o16,o17,o18,o19
+ real*8 o20,o21,o22,o23,o24,o25,o26,o27,o28,o29
+ real*8 o30,o31,o32,o33,o34,o35,o36,o37,o38,o39
+ real*8 o40,o41,o42,o43,o44,o45,o46,o47,o48,o49
+ real*8 o50,o51,o52,o53,o54,o55,o56,o57,o58,o59
+ real*8 o60,o61,o62,o63,o64,o65,o66,o67,o68,o69
+ real*8 o70,o71,o72,o73,o74,o75,o76,o77,o78,o79
+ real*8 o80,o81,o82,o83,o84,o85,o86,o87,o88,o89
+ real*8 o90,o91,o92,o93,o94,o95,o96,o97,o98,o99
+ real*8 pi
+ real*8 adm
+ integer :: nx,ny,nz
+ integer i,j,k,nquads
+ integer npoints,handle,ierror
+
+ pi = 4.0d0*atan(1.0d0)
+
+c Set up the grid spacings
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+c Brill wave parameters
+
+ print *,"Brill wave + BH Axisymmetric solve"
+ write (*,123)amp,eta0,sigma,n
+ print *,'etamax=',etamax
+ 123 format(1x,'Pars : Amp',f8.5,' eta0',f8.5,' sigma',f8.5,' n ',i3)
+
+c Solve on this sized cartesian grid
+c 2D grid size NE x NQ
+c Add 2 zones for boundaries...
+ ne = ne+2
+ nq = nq+2
+ ! do I need to call free?
+ allocate(cc(ne,nq),ce(ne,nq),cw(ne,nq),cn(ne,nq),cs(ne,nq),
+ $ rhs(ne,nq),psi2d(ne,nq),detapsi2d(ne,nq),dqpsi2d(ne,nq),
+ $ detaetapsi2d(ne,nq),detaqpsi2d(ne,nq),dqqpsi2d(ne,nq),
+ $ etagrd(ne),qgrd(nq))
+ allocate(eta(nx,ny,nz),abseta(nx,ny,nz),sign_eta(nx,ny,nz),
+ $ q(nx,ny,nz),phi(nx,ny,nz),
+ $ psi2dv(nx,ny,nz),detapsi2dv(nx,ny,nz),dqpsi2dv(nx,ny,nz),
+ $ detaetapsi2dv(nx,ny,nz),detaqpsi2dv(nx,ny,nz),
+ $ dqqpsi2dv(nx,ny,nz))
+c Initialize some arrays
+ psi2d = 1.0d0
+ detapsi2d = 0.0d0
+
+ nquads = 2
+ dq = nquads*0.5*pi/(nq-2)
+ deta = etamax/(ne-3)
+
+ do j=1,nq
+ qgrd(j) = (j-1.5)*dq
+ do i=1,ne
+ etagrd(i) = (i-2)*deta
+#include "Development/IDAxiBrillBH/src/bhbrill.x"
+ enddo
+ enddo
+c Boundary conditions
+ do j=1,nq
+ ce(2,j)=ce(2,j)+cw(2,j)
+ cw(2,j)=0.0
+
+ cw(ne-1,j)=cw(ne-1,j)+ce(ne-1,j)
+ cc(ne-1,j)=cc(ne-1,j)-deta*ce(ne-1,j)
+ ce(ne-1,j)=0.0
+
+ enddo
+ do i=1,ne
+ cc(i,2)=cc(i,2)+cs(i,2)
+ cs(i,2)=0.0
+ cc(i,nq-1)=cc(i,nq-1)+cn(i,nq-1)
+ cn(i,nq-1)=0.0
+ enddo
+
+c Do the solve
+ print *, " Calling axisymmetric solver"
+ call mgparm (levels,5,id5,id9,idi,idg,ne,nq)
+ call mg5 (ne,2,ne-1,nq,2,nq-1,
+ $ cc,cn,cs,cw,ce,psi2d,rhs,
+ $ id5,id9,idi,idg,1,axibheps,rmax,ier)
+ print *, " Solve complete"
+c The solution is now available.
+c Debugging is needed, a stop statement should
+c be called if the IVP solve is not successful
+
+ if(ier .ne. 0) stop 'bad solution to brill wave problem'
+ print *,'rmax = ',rmax
+ print *,'axibheps = ',axibheps
+ print *,'psi2d = ',maxval(psi2d),' ',minval(psi2d)
+
+ ep2 = 0.0
+ do j=2,nq-1
+ do i=2,ne-1
+ ep1 = rhs(i,j)-psi2d(i,j)*cc(i,j)-psi2d(i,j+1)*cn(i,j)-psi2d(i,j-1)*cs(i,j)-
+ & psi2d(i+1,j)*ce(i,j)-psi2d(i-1,j)*cw(i,j)
+ ep2 = max(abs(ep1),ep2)
+ enddo
+ enddo
+ print *,'Resulting eps =',ep2
+
+ ! what a pain all this is....
+ do j=1,nq
+ psi2d(1,j)=psi2d(3,j)
+ psi2d(ne,j)=-deta*psi2d(ne-1,j)+psi2d(ne-2,j)
+ enddo
+ do i=1,ne
+ psi2d(i,1)=psi2d(i,2)
+ psi2d(i,nq)=psi2d(i,nq-1)
+ enddo
+c goto 111
+ do j=2,nq-1
+ do i=2,ne-1
+ dqpsi2d(i,j)=0.5*(psi2d(i,j+1)-psi2d(i,j-1))/dq
+ dqqpsi2d(i,j)=(psi2d(i,j+1)+psi2d(i,j-1)-2.*psi2d(i,j))/dq**2
+ detapsi2d(i,j)=sinh(0.5*etagrd(i))+0.5*(psi2d(i+1,j)-psi2d(i-1,j))/deta
+ detaetapsi2d(i,j)=0.5*cosh(0.5*etagrd(i))+
+ $ (psi2d(i+1,j)+psi2d(i-1,j)-2.*psi2d(i,j))/deta**2
+ enddo
+ enddo
+ do j=1,nq
+ detapsi2d(1,j)=-detapsi2d(3,j)
+ detapsi2d(ne,j)=detapsi2d(ne-2,j) ! simplified
+
+ detaetapsi2d(1,j)=detaetapsi2d(3,j)
+ detaetapsi2d(ne,j)=detaetapsi2d(ne-2,j) ! simplified...
+
+ dqqpsi2d(1,j)=dqqpsi2d(3,j)
+ dqqpsi2d(ne,j)=dqqpsi2d(ne-2,j) ! simplified
+
+ dqpsi2d(1,j)=dqpsi2d(3,j)
+ dqpsi2d(ne,j)=-dq*dqpsi2d(ne-1,j)+dqpsi2d(ne-2,j)
+ enddo
+ do i=1,ne
+ detapsi2d(i,1)=detapsi2d(i,2)
+ detapsi2d(i,nq)=detapsi2d(i,nq-1)
+
+ detaetapsi2d(i,1)=detaetapsi2d(i,2)
+ detaetapsi2d(i,nq)=detaetapsi2d(i,nq-1)
+
+ dqqpsi2d(i,1)=dqqpsi2d(i,2)
+ dqqpsi2d(i,nq)=dqqpsi2d(i,nq-1)
+
+ dqpsi2d(i,1)=-dqpsi2d(i,2)
+ dqpsi2d(i,nq)=-dqpsi2d(i,nq-1)
+ enddo
+ do j=2,nq-1
+ do i=2,ne-1
+ detaqpsi2d(i,j)=0.5*(detapsi2d(i,j+1)-detapsi2d(i,j-1))/dq
+ enddo
+ enddo
+ do j=1,nq
+ detaqpsi2d(1,j)=-detaqpsi2d(3,j)
+ detaqpsi2d(ne,j)=detaqpsi2d(ne-2,j) ! simplified
+ enddo
+ do i=1,ne
+ detaqpsi2d(i,1)=-detaqpsi2d(i,2)
+ detaqpsi2d(i,nq)=-detaqpsi2d(i,nq-1)
+ enddo
+ do j=1,nq
+ psi2d(:,j)=psi2d(:,j)+2.*cosh(0.5*etagrd)
+ enddo
+
+c Now evaluate each of the following at x(i,j,k), y(i,j,k) and
+c z(i,j,k) where i,j,k go from 1 to nx,ny,nz
+
+c Conformal factor
+
+ eta = 0.5d0 * dlog (x**2 + y**2 + z**2)
+ abseta = abs (eta)
+ q = datan2 (sqrt (x**2 + y**2), z)
+ phi = datan2 (y, x)
+
+ do k=1,nz
+ do j=1,ny
+ do i=1,nx
+c eta(i,j,k) = 0.5d0*dlog(x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2)
+c abseta(i,j,k) = abs(eta(i,j,k))
+ if(eta(i,j,k) .lt. 0)then
+ sign_eta(i,j,k) = -1
+ else
+ sign_eta(i,j,k) = 1
+ endif
+c q(i,j,k) = datan2(sqrt(x(i,j,k)**2+y(i,j,k)**2),z(i,j,k))
+c TYPO HERE ???????????
+c |
+c |
+c phi(i,j,k)= datan2(y(i,j,k),x(i,j,k))
+ enddo
+ enddo
+ enddo
+
+ call CCTK_GetInterpHandle (handle, "simple_local")
+
+ npoints = nx*ny*nz
+
+ call CCTK_Interp (ierror,cctkGH,handle,npoints,2,6,6,
+ $ ne,nq,abseta,q,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ etagrd(1),qgrd(1),deta,dq,
+ $ psi2d,detapsi2d,dqpsi2d,detaetapsi2d,detaqpsi2d,dqqpsi2d,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ psi2dv,detapsi2dv,dqpsi2dv,detaetapsi2dv,detaqpsi2dv,
+ $ dqqpsi2dv,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,
+ $ CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL,CCTK_VARIABLE_REAL)
+
+ psi = psi2dv * exp (-0.5 * eta)
+ detapsi2dv = sign_eta * detapsi2dv
+ detaqpsi2dv = sign_eta * detaqpsi2dv
+
+ do k=1,nz
+ do j=1,ny
+ do i=1,nx
+
+c psi(i,j,k) = psi2dv(i,j,k)*exp(-0.5*eta(i,j,k))
+c detapsi2dv(i,j,k) = sign_eta(i,j,k)*detapsi2dv(i,j,k)
+
+c psix = \partial psi / \partial x / psi
+#include "Development/IDAxiBrillBH/src/psi_1st_deriv.x"
+
+c detaqpsi2dv(i,j,k) = sign_eta(i,j,k)*detaqpsi2dv(i,j,k)
+
+c psixx = \partial^2\psi / \partial x^2 / psi
+#include "Development/IDAxiBrillBH/src/psi_2nd_deriv.x"
+ enddo
+ enddo
+ enddo
+
+c Conformal metric
+c gxx = ...
+
+c Derivatives of the metric
+c dxgxx = 1/2 \partial gxx / \partial x
+
+ do k=1,nz
+ do j=1,ny
+ do i=1,nx
+c THESE WERE ALREADY CALCULATED ABOVE !!!
+c eta(i,j,k) = 0.5d0*dlog(x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2)
+c q(i,j,k) = datan2(sqrt(x(i,j,k)**2+y(i,j,k)**2),z(i,j,k))
+c phi(i,j,k) = datan2(y(i,j,k),x(i,j,k))
+#include "Development/IDAxiBrillBH/src/gij.x"
+ enddo
+ enddo
+ enddo
+
+c Curvature
+ kxx = 0.0D0
+ kxy = 0.0D0
+ kxz = 0.0D0
+ kyy = 0.0D0
+ kyz = 0.0D0
+ kzz = 0.0D0
+
+ 111 continue
+c Set ADM mass
+ i = ne-15
+ adm = 0.0
+ do j=2,nq-1
+ adm=adm+(psi2d(i,j)-(psi2d(i+1,j)-psi2d(i-1,j))/deta)*exp(0.5*
+ $ etagrd(i))
+ enddo
+ adm=adm/(nq-2)
+ print *,'ADM mass: ',adm
+ if (CCTK_Equals(initial_lapse,"schwarz")==1) then
+ write (*,*)"Initial with schwarzschild-like lapse"
+ write (*,*)"using alp = (2.*r - adm)/(2.*r+adm)."
+ alp = (2.*r - adm)/(2.*r+adm)
+ endif
+
+ conformal_state = CONFORMAL_METRIC
+
+ deallocate(cc,ce,cw,cn,cs,rhs,psi2d,detapsi2d,dqpsi2d,
+ $ detaetapsi2d,detaqpsi2d,dqqpsi2d,
+ $ etagrd,qgrd,
+ $ eta,abseta,sign_eta,q,phi,psi2dv,detapsi2dv,dqpsi2dv,
+ $ detaetapsi2dv,detaqpsi2dv,dqqpsi2dv)
+
+ return
+ end
+
diff --git a/src/bhbrill.m b/src/bhbrill.m
new file mode 100644
index 0000000..6c78a1f
--- /dev/null
+++ b/src/bhbrill.m
@@ -0,0 +1,126 @@
+$Path = Union[$Path,{"~/SetTensor"}];
+Needs["SetTensor`"];
+
+Dimension = 3;
+x[1] = eta; x[2] = q; x[3] = phi;
+qf[eta_,q_] := amp (Exp[-(eta-eta0)^2/sigma^2]+Exp[-(eta+eta0)^2/sigma^2]) Sin[q]^n
+
+md = {
+{Exp[2 qf[eta,q]],0,0},
+{0,Exp[2 qf[eta,q]],0},
+{0,0,Sin[q]^2}} psi2d[eta,q]^4;
+InitializeMetric[md];
+
+Clear[exc];
+DefineTensor[exc];
+SetTensor[exc[la,lb],{{0,0,0},{0,0,0},{0,0,0}}];
+
+tmp = RicciR[la,lb] Metricg[ua,ub]+exc[la,lb] Metricg[ua,ub] exc[lc,ld] Metricg[uc,ud]-
+ exc[la,lb] exc[lc,ld] Metricg[ua,uc] Metricg[ub,ud];
+tmp = RicciToAffine[tmp];
+tmp = EvalMT[tmp];
+tmp = ExpandAll[-Exp[2 qf[eta,q]] psi2d[eta,q]^5/8 tmp]
+sav=tmp
+tmp = SubFun[sav,psi2d[eta,q],2 Cosh[eta/2]+psi2d[eta,q]]
+
+(* Make the stencil... *)
+
+stencil = ExpandAll[tmp /. {
+ D[psi2d[eta,q],eta]->(psi2d[i+1,j]-psi2d[i-1,j])/(2 deta),
+ D[psi2d[eta,q],eta,eta]->(psi2d[i+1,j]+psi2d[i-1,j]-2 psi2d[i,j])/(deta deta),
+ D[psi2d[eta,q],q]->(psi2d[i,j+1]-psi2d[i,j-1])/(2 dq),
+ D[psi2d[eta,q],q,q]->(psi2d[i,j+1]+psi2d[i,j-1]-2 psi2d[i,j])/(dq dq),
+ psi2d[eta,q]->psi2d[i,j]
+ }];
+
+cn = Coefficient[stencil,psi2d[i,j+1]]
+cs = Coefficient[stencil,psi2d[i,j-1]]
+ce = Coefficient[stencil,psi2d[i+1,j]]
+cw = Coefficient[stencil,psi2d[i-1,j]]
+cc = Coefficient[stencil,psi2d[i,j]]
+rhs = -SubFun[tmp,psi2d[eta,q],0]
+
+FortranOutputOfDepList = "(i,j)";
+$FortranReplace = Union[{
+ "UND"->"_",
+ "(eta,q)"->"(i,j)"
+}];
+fd = FortranOpen["bhbrill.x"];
+FortranWrite[fd,Cn[i,j],cn ];
+FortranWrite[fd,Cs[i,j],cs ];
+FortranWrite[fd,Cw[i,j],cw ];
+FortranWrite[fd,Cc[i,j],cc ];
+FortranWrite[fd,Ce[i,j],ce ];
+FortranWrite[fd,Rhs[i,j],rhs ];
+FortranClose[fd];
+
+(* Next part, write out conformal g's and d's *)
+
+
+xv = Exp[eta] Sin[q] Cos[phi];
+yv = Exp[eta] Sin[q] Sin[phi];
+zv = Exp[eta] Cos[q];
+
+mc = Table[ D[ {xv,yv,zv}[[i]], {eta,q,phi}[[j]] ],{i,1,3},{j,1,3}];
+mci = Simplify[Inverse[mc]];
+
+Clear[mct];
+DefineTensor[mct,{{1,2},1}];
+Iter[mct[ua,lb],
+ mct[ua,lb]=mc[[ua,-lb]];
+];
+
+Clear[mcti];
+DefineTensor[mcti,{{1,2},1}];
+Iter[mcti[ua,lb],
+ mcti[ua,lb]=mci[[ua,-lb]];
+];
+
+gijtmp = Exp[2 eta]/psi2d[eta,q]^4 Metricg[lc,ld] mcti[uc,la] mcti[ud,lb]
+
+Clear[i2];
+DefineTensor[i2,{{2,1},1}];
+
+fd = FortranOpen["gij.x"];
+Iter[i2[ua,ub],
+ v1 = {x,y,z}[[ua]];
+ v2 = {x,y,z}[[ub]];
+ metv = ToExpression["g"<>ToString[v1]<>ToString[v2]<>"[i,j,k]"];
+ gg[v1,v2]=Simplify[EvalMT[gijtmp,{la->-ua,lb->-ub}]];
+ FortranWrite[fd,metv,gg[v1,v2]];
+ For[ii=1,ii<=3,ii++,
+ v3 = {x,y,z}[[ii]];
+ dmetv = ToExpression["d"<>ToString[v3]<>ToString[metv]];
+ res = OD[gg[v1,v2],lc] mcti[uc,ld]/2;
+ res = EvalMT[res,ld-> -ii];
+ res = Simplify[res];
+ FortranWrite[fd,dmetv,res];
+ ];
+];
+FortranClose[fd];
+
+$FortranReplace = {
+ "UND"->"_",
+ "(eta,q)"->""
+};
+
+fd = FortranOpen["psi_1st_deriv.x"];
+For[ii=1,ii<=3,ii++,
+ v1 = {x,y,z}[[ii]];
+ psv =ToExpression["psi"<>ToString[v1]<>"[i,j,k]"];
+ rhs = CD[Exp[-eta/2] psi2dv[eta,q],lc] mcti[uc,la];
+ rhs = EvalMT[rhs,{la->-ii}]/(Exp[-eta/2] psi2dv[eta,q]);
+ FortranWrite[fd,psv,rhs];
+];
+FortranClose[fd];
+
+fd = FortranOpen["psi_2nd_deriv.x"];
+Iter[i2[ua,ub],
+ v1 = {x,y,z}[[ua]];
+ v2 = {x,y,z}[[ub]];
+ psv = ToExpression["psi"<>ToString[v1]<>ToString[v2]<>"[i,j,k]"];
+ rhs = OD[OD[Exp[-eta/2] psi2dv[eta,q],lc] mcti[uc,la],ld] mcti[ud,lb];
+ rhs = EvalMT[rhs,{la->-ua,lb->-ub}]/(Exp[-eta/2] psi2dv[eta,q]);
+ FortranWrite[fd,psv,rhs];
+];
+FortranClose[fd];
diff --git a/src/bhbrill.x b/src/bhbrill.x
new file mode 100644
index 0000000..b7721c9
--- /dev/null
+++ b/src/bhbrill.x
@@ -0,0 +1,60 @@
+ o1 = dq**2
+ o2 = 1/o1
+ o3 = 1/dq
+ o4 = tan(qgrd(j))
+ o5 = 1/o4
+ o6 = deta**2
+ o7 = 1/o6
+ o8 = sin(qgrd(j))
+ o9 = o8**2
+ o10 = 1/o9
+ o11 = cos(qgrd(j))
+ o12 = o11**2
+ o13 = etagrd(i)**2
+ o14 = sigma**2
+ o15 = 1/o14
+ o16 = -(o13*o15)
+ o17 = -2.00000000000000d0*etagrd(i)*eta0*o15
+ o18 = eta0**2
+ o19 = -(o15*o18)
+ o20 = o16 + o17 + o19
+ o21 = exp(o20)
+ o22 = -2.00000000000000d0 + n
+ o23 = o8**o22
+ o24 = n**2
+ o25 = 2.00000000000000d0*etagrd(i)*eta0*o15
+ o26 = o16 + o19 + o25
+ o27 = exp(o26)
+ o28 = o8**n
+ o29 = o14**2
+ o30 = 1/o29
+ o31 = o4**2
+ o32 = 1/o31
+ o33 = 5.0000000000000d-1*etagrd(i)
+ o34 = cosh(o33)
+ Cn(i,j) = o2 + 5.0000000000000d-1*o3*o5
+ Cs(i,j) = o2 - 5.0000000000000d-1*o3*o5
+ Cw(i,j) = o7
+ Cc(i,j) = -1.25000000000000d-1 - 1.25000000000000d-1*o10 - 2.000
+ & 00000000000d0*o2 - 2.50000000000000d-1*amp*n*o12*o21*o23 + 2.500
+ & 00000000000d-1*amp*o12*o21*o23*o24 - 2.50000000000000d-1*amp*n*o
+ & 12*o23*o27 + 2.50000000000000d-1*amp*o12*o23*o24*o27 - 2.5000000
+ & 0000000d-1*amp*n*o21*o28 - 5.0000000000000d-1*amp*o15*o21*o28 -
+ & 2.50000000000000d-1*amp*n*o27*o28 - 5.0000000000000d-1*amp*o15*o
+ & 27*o28 + 2.00000000000000d0*amp*etagrd(i)*eta0*o21*o28*o30 + amp*o13*o
+ & 21*o28*o30 + amp*o18*o21*o28*o30 - 2.00000000000000d0*amp*etagrd(i)*et
+ & a0*o27*o28*o30 + amp*o13*o27*o28*o30 + amp*o18*o27*o28*o30 + 1.2
+ & 5000000000000d-1*o32 - 2.00000000000000d0*o7
+ Ce(i,j) = o7
+ Rhs(i,j) = -2.50000000000000d-1*o34 + 2.50000000000000d-1*o10*o3
+ & 4 + 5.0000000000000d-1*amp*n*o12*o21*o23*o34 - 5.0000000000000d-
+ & 1*amp*o12*o21*o23*o24*o34 + 5.0000000000000d-1*amp*n*o12*o23*o27
+ & *o34 - 5.0000000000000d-1*amp*o12*o23*o24*o27*o34 + 5.0000000000
+ & 000d-1*amp*n*o21*o28*o34 + amp*o15*o21*o28*o34 + 5.0000000000000
+ & d-1*amp*n*o27*o28*o34 + amp*o15*o27*o28*o34 - 4.0000000000000d0*
+ & amp*etagrd(i)*eta0*o21*o28*o30*o34 - 2.00000000000000d0*amp*o13*o21*o2
+ & 8*o30*o34 - 2.00000000000000d0*amp*o18*o21*o28*o30*o34 + 4.00000
+ & 00000000d0*amp*etagrd(i)*eta0*o27*o28*o30*o34 - 2.00000000000000d0*amp
+ & *o13*o27*o28*o30*o34 - 2.00000000000000d0*amp*o18*o27*o28*o30*o3
+ & 4 - 2.50000000000000d-1*o32*o34
+
diff --git a/src/gij.x b/src/gij.x
new file mode 100644
index 0000000..8b644f2
--- /dev/null
+++ b/src/gij.x
@@ -0,0 +1,133 @@
+ o1 = 2.00000000000000d0*phi(i,j,k)
+ o2 = cos(o1)
+ o3 = -eta0
+ o4 = eta(i,j,k) + o3
+ o5 = o4**2
+ o6 = sigma**2
+ o7 = 1/o6
+ o8 = -(o5*o7)
+ o9 = exp(o8)
+ o10 = eta(i,j,k) + eta0
+ o11 = o10**2
+ o12 = -(o11*o7)
+ o13 = exp(o12)
+ o14 = o13 + o9
+ o15 = sin(q(i,j,k))
+ o16 = o15**n
+ o17 = 2.00000000000000d0*amp*o14*o16
+ o18 = exp(o17)
+ o19 = -1.00000000000000d0 + o18
+ o20 = eta(i,j,k)**2
+ o21 = 2.00000000000000d0*o20
+ o22 = eta0**2
+ o23 = 2.00000000000000d0*o22
+ o24 = eta(i,j,k)*o6
+ o25 = o21 + o23 + o24
+ o26 = -(o25*o7)
+ o27 = exp(o26)
+ o28 = 1/o15
+ o29 = o20 + o22
+ o30 = 2.00000000000000d0*o29*o7
+ o31 = exp(o30)
+ o32 = sin(phi(i,j,k))
+ o33 = sin(o1)
+ o34 = o11*o7
+ o35 = exp(o34)
+ o36 = cos(phi(i,j,k))
+ o37 = o32**2
+ o38 = cos(q(i,j,k))
+ o39 = o38**2
+ o40 = o5*o7
+ o41 = exp(o40)
+ o42 = o15**2
+ o43 = o36**2
+ o44 = -2.00000000000000d0*o19*o31*o6
+ o45 = -2.00000000000000d0*eta(i,j,k)
+ o46 = -2.00000000000000d0*eta0
+ o47 = n*o6
+ o48 = 4.0000000000000d0*eta(i,j,k)*eta0*o7
+ o49 = exp(o48)
+ o50 = -2.00000000000000d0*eta(i,j,k)*o49
+ o51 = 2.00000000000000d0*eta0*o49
+ o52 = n*o49*o6
+ o53 = 2.00000000000000d0*q(i,j,k)
+ o54 = cos(o53)
+ o55 = 2.00000000000000d0*eta(i,j,k)
+ o56 = 2.00000000000000d0*eta0
+ o57 = 2.00000000000000d0*eta(i,j,k)*o49
+ o58 = -2.00000000000000d0*eta0*o49
+ o59 = o47 + o52 + o55 + o56 + o57 + o58
+ o60 = o54*o59
+ o61 = o45 + o46 + o47 + o50 + o51 + o52 + o60
+ o62 = o17 + o40
+ o63 = exp(o62)
+ o64 = amp*o16*o61*o63
+ o65 = o44 + o64
+ o66 = -1.00000000000000d0 + o49
+ o67 = -2.00000000000000d0*eta0*o66
+ o68 = 1.00000000000000d0 + o49
+ o69 = 2.00000000000000d0*eta(i,j,k)*o68
+ o70 = n*o6*o68
+ o71 = o67 + o69 + o70
+ o72 = o56 + o6
+ o73 = eta(i,j,k)*o72
+ o74 = o20 + o22 + o73
+ o75 = -(o7*o74)
+ o76 = o17 + o75
+ o77 = exp(o76)
+ o78 = -eta(i,j,k)
+ o79 = exp(o78)
+ o80 = -2.00000000000000d0*o29*o7
+ o81 = o17 + o80
+ o82 = exp(o81)
+ o83 = -1.00000000000000d0 + n
+ o84 = o15**o83
+ o85 = o35 + o41
+ o86 = -(n*o39*o6*o85)
+ o87 = eta(i,j,k)*o49
+ o88 = -(eta0*o49)
+ o89 = eta(i,j,k) + eta0 + o87 + o88
+ o90 = 2.00000000000000d0*o41*o42*o89
+ o91 = o86 + o90
+ o92 = o17 + o26
+ o93 = exp(o92)
+ o94 = n*o39*o6*o85
+ o95 = -2.00000000000000d0*o41*o42*o89
+ o96 = o94 + o95
+ gxx(i,j,k) = 5.0000000000000d-1*(1.00000000000000d0 + o18 + o19*
+ & o2)
+c dxgxx(i,j,k) = 5.0000000000000d-1*o27*o28*o7*(o36*(-2.0000000000
+c & 0000d0*o31*o37*o6 - amp*o16*o18*(2.00000000000000d0*eta(i,j,k)*o35*o42
+c & - 3.00000000000000d0*eta0*o35*o42 + 2.00000000000000d0*eta(i,j,k)*o2*o3
+c & 5*o42 + 2.00000000000000d0*eta(i,j,k)*o41*o42 + 2.00000000000000d0*eta0
+c & *o41*o42 + 2.00000000000000d0*eta(i,j,k)*o2*o41*o42 + 2.00000000000000d
+c & 0*eta0*o2*o41*o42 - n*o35*o39*o6 - n*o2*o35*o39*o6 - n*o39*o41*o
+c & 6 - n*o2*o39*o41*o6)) + o18*(o31*o32*o33*o6 + amp*eta0*o15**(2.0
+c & 0000000000000d0 + n)*o35*cos(3.00000000000000d0*phi(i,j,k))))
+c dygxx(i,j,k) = 5.0000000000000d-1*o27*o28*o32*o43*o65*o7
+c dzgxx(i,j,k) = -(amp*o16*o38*o43*o7*o71*o77)
+ gxy(i,j,k) = 5.0000000000000d-1*o19*o33
+c dxgxy(i,j,k) = 5.0000000000000d-1*o7*o79*(-(o19*o2*o28*o32*o6) -
+c & amp*o33*o36*o82*o84*o91)
+c dygxy(i,j,k) = 5.0000000000000d-1*o7*o79*(1.00000000000000d0*o19
+c & *o2*o28*o36*o6 - amp*o32*o33*o82*o84*o91)
+c dzgxy(i,j,k) = -5.0000000000000d-1*amp*o16*o33*o38*o7*o71*o77
+ gxz(i,j,k) = 0
+c dxgxz(i,j,k) = 0
+c dygxz(i,j,k) = 0
+c dzgxz(i,j,k) = 0
+ gyy(i,j,k) = 5.0000000000000d-1*(1.00000000000000d0 + o18 - o19*
+ & o2)
+c dxgyy(i,j,k) = 5.0000000000000d-1*o27*o28*o36*o37*o65*o7
+c dygyy(i,j,k) = 5.0000000000000d-1*o27*o28*o7*(-2.00000000000000d
+c & 0*o31*o32*o43*o6 - 2.00000000000000d0*amp*o16*o18*o32*o37*o91 +
+c & o33*o36*o6*exp(2.00000000000000d0*(amp*o14*o16 + o29*o7)))
+c dzgyy(i,j,k) = -(amp*o16*o37*o38*o7*o71*o77)
+ gyz(i,j,k) = 0
+c dxgyz(i,j,k) = 0
+c dygyz(i,j,k) = 0
+c dzgyz(i,j,k) = 0
+ gzz(i,j,k) = o18
+c dxgzz(i,j,k) = amp*o36*o7*o84*o93*o96
+c dygzz(i,j,k) = amp*o32*o7*o84*o93*o96
+c dzgzz(i,j,k) = -(amp*o16*o38*o7*o71*o77)
diff --git a/src/interp2.F b/src/interp2.F
new file mode 100644
index 0000000..006287f
--- /dev/null
+++ b/src/interp2.F
@@ -0,0 +1,213 @@
+c /*@@
+c@routine interp2d
+c@date Fri Feb 14 08:46:53 1997
+c@author Paul Walker
+c@desc
+c Interpolates from 2D data var with coordinates x and y and
+c sizes nx and ny onto 1D data out with position outx and outy
+c and nout points.
+c <p>
+c This has linear, quadratic and cubic interpolators in it.
+c Or will one day very soon.
+c@enddesc
+c@calls
+c@calledby numerical_axig
+c@@*/
+
+ subroutine interp2d(var,x,y,nx,ny,out,outx,outy,nout,order)
+ implicit none
+ integer nx,ny,nout
+ real*8 var(nx,ny), x(nx), y(ny)
+ real*8 out(nout),outx(nout),outy(nout)
+ integer order
+c Interpolation goes from ibelow to ibelow+[1,2,3] depending on order
+ integer i,j,ibelow,jbelow,pt
+ real*8 xsym,ysym,findx,findy,frac
+ real*8 ydir(order+1)
+ real*8 ft(10), xt(10)
+ real*8 poly2inter, quad_2d, cubic_2d
+ real*8 dx, dy, PI
+ integer twobhjsad
+
+ PI = 3.14159265
+
+c Set up the grid spacings
+ dx = x(2) - x(1)
+ dy = y(2) - y(1)
+
+c Loop over all out points
+ do pt=1,nout
+ ysym = 1.0D0
+ xsym = 1.0D0
+c Check bounds
+ findx = outx(pt)
+ if (findx .lt. x(1)) then
+ write (*,*) "Below inner bound at ",pt,outx(pt)
+ STOP
+ endif
+ if (findx .gt. x(nx)) then
+ write (*,*) "Above x bounds at ",pt,outx(pt),x(nx)
+ STOP
+ endif
+ findy = outy(pt)
+ if (findy .lt. y(1)) then
+ write (*,*) "Below y inner bound at ",pt,outy(pt)
+ STOP
+ endif
+ if (findy .gt. y(ny)) then
+ write (*,*) "Below y inner bound at ",pt,outy(pt)
+ STOP
+ endif
+
+c Locate ourselves in i,j space
+c do i=1,nx
+c if (x(i) .lt. findx) then
+c ibelow = i
+c endif
+c enddo
+c Assume a regular grid
+ ibelow = (findx-x(1))/dx+1
+
+ if (order .eq. 3 .and. ibelow .gt. 1) then
+ ibelow = ibelow - 1
+ endif
+ if (ibelow + order .gt. nx) then
+ ibelow = nx - order
+ endif
+
+c do i=1,ny
+c if (y(i) .lt. findy) then
+c jbelow = i
+c endif
+c enddo
+c Assume a regular grid
+ jbelow = (findy-y(1))/dy+1
+ if (order .eq. 3 .and. jbelow .gt. 1) then
+ jbelow = jbelow - 1
+ endif
+ if (jbelow + order .gt. ny) then
+ jbelow = ny - order
+ endif
+
+c write (*,*) "PT :",findx,findy
+c write (*,*) "SYM:",sym
+c write (*,*) "BOUND X ",ibelow,x(ibelow),x(ibelow+1)
+c write (*,*) "BOUND Y ",jbelow,y(jbelow),y(jbelow+1)
+
+
+c So do the interpolation
+ if (order .eq. 1) then
+c Interp in the x direction
+ frac = (findx-x(ibelow))/(x(ibelow+1)-x(ibelow))
+ ydir(1) = frac * var(ibelow+1,jbelow) +
+ $ (1.0 - frac)*var(ibelow,jbelow)
+ ydir(2) = frac * var(ibelow+1,jbelow+1) +
+ $ (1.0 - frac)*var(ibelow,jbelow+1)
+c And now in the y direction
+ frac = (findy-y(jbelow))/(y(jbelow+1)-y(jbelow))
+ out(pt) = xsym * ysym *
+ $ (frac * ydir(2) + (1.0 - frac) * ydir(1))
+ else if (order .eq. 2) then
+c Load up for calls to poly2inter
+ do j=1,3
+ do i=1,3
+ ft(i) = var(ibelow+i-1,jbelow+j-1)
+ xt(i) = x(ibelow+i-1)
+ enddo
+ ydir(j) = quad_2d(ft,xt(1),dx,findx)
+ enddo
+ do j=1,3
+ xt(j) = y(jbelow+j-1)
+ enddo
+ out(pt) = xsym * ysym*quad_2d(ydir,xt(1),dy,findy)
+ else if (order .eq. 3) then
+c Load up for calls to cubic
+ do j=1,4
+ do i=1,4
+ ft(i) = var(ibelow+i-1,jbelow+j-1)
+ xt(i) = x(ibelow+i-1)
+ enddo
+ ydir(j) = cubic_2d(ft,xt(1),dx,findx)
+ enddo
+ do j=1,4
+ xt(j) = y(jbelow+j-1)
+ enddo
+ out(pt) = xsym * ysym*cubic_2d(ydir,xt(1),dy,findy)
+ else
+ write (*,*) "ORDER set wrong in interp2d",order
+ stop
+ endif
+ enddo
+
+ return
+ end
+
+ real*8 function linear_2d(f, x0, dx, findx)
+ implicit none
+ real*8 f(2),x0,dx,findx
+ real*8 frac
+
+ frac = (findx-x0)/dx
+ linear_2d = (frac)*f(2) + (1.0-frac)*f(1)
+
+ return
+ end
+
+ real*8 function quad_2d(f, x0, dx, findx)
+ implicit none
+ real*8 f(3),x0, dx, findx
+ real*8 f0,f1,f2
+ real*8 a,b,c, dx2, x02, o2dx2
+c Mathematica tells us
+c - List(List(Rule(c,(2*dx**2*f0 + 3*dx*f0*x0 - 4*dx*f1*x0
+c - + dx*f2*x0 + f0*x0**2 - 2*f1*x0**2 + f2*x0**2)
+c - /(2*dx**2)), Rule(b,(-3*dx*f0 + 4*dx*f1 - dx*f2 - 2*f0*x0
+c - + 4*f1*x0 - 2*f2*x0)/(2*dx**2)),Rule(a,(f0 - 2*f1 +
+c - f2)/(2*dx**2))))
+
+ f0 = f(1)
+ f1 = f(2)
+ f2 = f(3)
+ dx2 = dx**2
+ x02 = x0**2
+ o2dx2 = 1.0D0/(2.0D0*dx2)
+
+ c = (2.0D0*dx2*f0 + dx*x0*(3.0D0*f0 - 4.0D0*f1 + f2) +
+ $ x02*(f0 - 2.0D0*f1 + f2))*o2dx2
+ b = (dx * (-3.0D0*f0 + 4.0D0*f1 - f2) + x0 * (- 2.0D0*f0 +
+ $ 4.0D0*f1 - 2.0D0*f2))*o2dx2
+
+ a = (f0 - 2.0D0*f1 + f2)*o2dx2
+
+ quad_2d = a*findx**2 + b*findx + c
+
+ return
+ end
+
+ real*8 function cubic_2d(f, x0, dx, findx)
+ implicit none
+ real*8 a,b,c,d
+ real*8 f(4),x0,dx,findx
+
+ a = -(f(1)-3.0*f(2)+3.0*f(3)-f(4)) / (6.0*(dx**3))
+
+ b = (f(1)-2.0*f(2)+f(3))/(2.0*(dx**2)) +
+ $ (f(1)-3.0*f(2)+3.0*f(3)-f(4))*(dx+x0)/(2.0*(dx**3))
+
+ c = ((dx**2)*(-11.0*f(1) + 18.0*f(2) - 9.0*f(3) + 2.0*f(4)) +
+ $ dx*x0* (-12.0*f(1) + 30.0*f(2) - 24.0*f(3) + 6.0*f(4)) +
+ $ (x0**2)*( -3.0*f(1) + 9.0*f(2) - 9.0*f(3) + 3.0*f(4))) /
+ $ (6.0*(dx**3))
+
+ d = ((dx**3)* ( 6.0*f(1) ) +
+ $ (dx**2)*x0*( 11.0*f(1) - 18.0*f(2) + 9.0*f(3) - 2.0*f(4)) +
+ $ (x0**2)*dx*( 6.0*f(1) - 15.0*f(2) + 12.0*f(3) - 3.0*f(4)) +
+ $ (x0**3)* ( 1.0*f(1) - 3.0*f(2) + 3.0*f(3) - 1.0*f(4)))/
+ $ (6.0*(dx**3))
+
+ cubic_2d = ((a*findx + b)*findx + c)*findx + d
+
+ return
+ end
+
+
diff --git a/src/make.code.defn b/src/make.code.defn
new file mode 100644
index 0000000..7bd9c1e
--- /dev/null
+++ b/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn AxiBrillBHIVP
+# $Header$
+
+# Source files in this directory
+SRCS = IDAxiBrillBH.F mg59p.F shmgp.F77
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/src/mg59p.F b/src/mg59p.F
new file mode 100644
index 0000000..63dcb4a
--- /dev/null
+++ b/src/mg59p.F
@@ -0,0 +1,896 @@
+c----------------------------------------------------------------------
+ subroutine mgparm(m,ifd59,id5,id9,idi,idg,imx,jmx)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+c Given imx, jmx and ifd59 (See comments in mgsu2), mgparm calculates
+c the number of grids that will be needed, and the dimensions
+* needed for the coefficient, right hand side and solution arrays
+* to store values on all grid levels.
+c .....................................................................
+*
+**** Parameters
+*
+* INTEGERS:
+* m :
+* This is the number of grid levels that the multigrid
+* routine will use.
+*
+* ifmg :
+* ifmg = 0 - The full multigrid algorithm is not used to
+* obtain a good initial guess on the fine grid.
+* (use this if you can provide a good initial guess)
+* ifmg = 1 - The full multigrid algorithm is used to obtain a
+* good initial guess on the fine grid.
+*
+* id5 :
+* Dimension of the arrays ac,aw,as,ae,an,q and f. id5 is the
+* total number of grid points on the finest grid and all
+* coarser grids.
+*
+* id9 :
+* Dimension of the arrays asw,ase,ane,anw. If ifd59=5 then
+* id9=idi. If ifd59=9 then id9=id5.
+* (NOTE: This routine specifically written for 9-point)
+*
+* idi :
+* Dimension of the work arrays pu and pd. idi is the total
+* number of grid points on all of the coarser grids.
+*
+* idg :
+* Dimension of the work array gam. It is set to the value im,
+* the number of grid points in the i-direction on the finest
+* grid.
+*
+* imx,jmx :
+* These are the number of points in the i and j directions
+* including the two ficticious points.
+*
+ parameter(n5=1,n9=2,ni=3,jm=4,i9=5,j9=6,ifd=7,jred=8)
+ dimension np2(20,8)
+ iq5=1
+ iq9=1
+ iqi=1
+ m=1
+ np2(m,1)=jmx
+ np2(m,2)=3
+ 10 if(np2(m,1).le.3) go to 20
+ m=m+1
+ np2(m,1)=np2(m-1,1)/2+1
+ if(np2(m-1,2).eq.2.and.mod(np2(m-1,1),2).eq.1)
+ + np2(m,1)=np2(m,1)+1
+ np2(m,2)=2
+ go to 10
+ 20 do 30 k=1,m
+ np2(m-k+1,jm)=np2(k,1)
+ 30 np2(m-k+1,jred)=np2(k,2)
+ do 40 k=m,1,-1
+ ktot=imx*np2(k,jm)
+ np2(k,n5)=iq5
+ iq5=iq5+ktot
+ np2(k,n9)=iq9
+ if(k.lt.m.or.ifd59.eq.9) iq9=iq9+ktot
+ np2(k,ni)=iqi
+ 40 if(k.lt.m) iqi=iqi+ktot
+ do 50 k=1,m
+ np2(k,i9)=imx
+ np2(k,j9)=np2(k,jm)
+ 50 np2(k,ifd)=9
+ if(ifd59.eq.5) then
+ np2(m,i9)=1
+ np2(m,j9)=1
+ np2(m,ifd)=5
+ endif
+ id5=iq5-1
+ id9=iq9-1
+ idi=iqi-1
+ idg=imx
+ return
+ end
+*
+*
+*
+************************************************************************
+*
+ subroutine mg9 (idim,ilower,iupper,jdim,jlower,jupper,
+ & cc,cn,cs,cw,ce,cnw,cne,csw,cse,u,rhs,
+ & id5,id9,idi,idg,ifmg,eps,rmax,ier)
+ implicit real*8 (a-h,o-z)
+*
+************************************************************************
+*
+*
+* This routine is a wrapper for the multigrid solver. The input
+* arrays are the finite difference coefficients on the 2D grid with
+* the boundary conditions absorbed into them.
+*
+**** Parameters
+*
+* INTEGERS:
+* idim,jdim :
+* These define sizes of the coefficient arrays passed to this
+* routine.
+*
+* ilower,iupper,
+* jlower,jupper :
+* These are the indices of the computational grid that
+* correspond to upper and lower index limits for points on
+* which computations are actually done.
+*
+* id5 :
+* Dimension of the arrays ac,aw,as,ae,an,q and f. id5 is the
+* total number of grid points on the finest grid and all
+* coarser grids.
+*
+* id9 :
+* Dimension of the arrays asw,ase,ane,anw. If ifd59=5 then
+* id9=idi. If ifd59=9 then id9=id5.
+* (NOTE: This routine specifically written for 9-point)
+*
+* idi :
+* Dimension of the work arrays pu and pd. idi is the total
+* number of grid points on all of the coarser grids.
+*
+* idg :
+* Dimension of the work array gam. It is set to the value im,
+* the number of grid points in the i-direction on the finest
+* grid.
+*
+* ifmg :
+* ifmg = 0 - The full multigrid algorithm is not used to
+* obtain a good initial guess on the fine grid.
+* (use this if you can provide a good initial guess)
+* ifmg = 1 - The full multigrid algorithm is used to obtain a
+* good initial guess on the fine grid.
+*
+* ier :
+* This is an error flag with the following possible return
+* values:
+* ier = 0 => solver converged without error
+* ier = -1 => solver did not converge
+*
+* REALS:
+* cc(idim,jdim),cn(idim,jdim),
+* cs(idim,jdim),cw(idim,jdim),ce(idim,jdim),
+* cnw(idim,jdim),cne(idim,jdim),
+* csw(idim,jdim),cse(idim,jdim) :
+* These are the finite difference coefficient arrays for a
+* nine-point stencil on the two dimensional grid as follows:
+*
+*
+* cnw cn cne
+* ^
+* | cw cc ce
+* increasing |
+* j values | csw cs cse
+* (theta) |
+* --------> increasing i values (eta)
+*
+* Ie. the coresspondence is : nw : i-1,j+1
+* n : i,j+1
+* ne : i+1,j+1
+* w : i-1,j
+* c : i,j
+* e : i+1,j
+* sw : i-1,j-1
+* s : i,j-1
+* se : i+1,j-1
+*
+* u :
+* Input: this contains the initial guess to the solution of the
+* equation
+* Output: This contains the final approximation to the solution
+* determined by the multigrid solver.
+*
+* rhs :
+* This array contains the values of the right hand side of the
+* equation at every point on the rwo dimensional grid.
+*
+* eps :
+* eps > 0. The maximum norm of the residual is calculated at
+* the end of each multigrid cycle. The algorithm is
+* terminated when this maximum becomes less than eps
+* or when the maximum number of iterations (see ncyc)
+* is exceeded. It is up to the user to provide a
+* meaningfull tolerance criteria for the particular
+* problem being solved.
+*
+* rmax:
+* This is the final value of the residual calcu;ated.
+*
+************************************************************************
+*
+*
+
+ integer idim,ilower,iupper,jdim,jlower,jupper,ifmg
+ integer id5,id9,idi,idg,ier
+ real*8 cc(idim,jdim),cn(idim,jdim),cs(idim,jdim),cw(idim,jdim),
+ & ce(idim,jdim),cnw(idim,jdim),cne(idim,jdim),csw(idim,jdim),
+ & cse(idim,jdim),u(idim,jdim),rhs(idim,jdim)
+ real*8 eps,rmax
+
+*
+************************************************************************
+*
+* Variable definitions:
+*
+* Integers:
+* ifd59 :
+* ifd59 = 5 - means a 5-point finite difference stencil
+* (ac,an,as,aw,ae) is defined on the finest grid.
+* ifd59 = 9 - means a 9-point finite difference stencil
+* (ac,an,as,aw,ae,anw,ane,asw,ase) is defined on
+* the finest grid by the user.
+* (NOTE: This routine specifically written
+* for 9-point)
+*
+* ncyc :
+* The maximum number of multigrid "v"-cycles to be used. If
+* the maximum norm of the residual is not less than tol at the
+* end of ncyc cycles, the algorithm is terminated.
+* (NOTE: ncyc <= 40 )
+*
+* np(20,8) :
+* Input: When the iskip=1,-1 or -2 option is used, np2 is
+* assumed to contain the grid information for umgs2.
+* Output: When the iskip=0 option is used, the grid
+* information for umgs2 is returned in np2.
+* (NOTE: This is only useful for multiple instance problems)
+*
+* iskip :
+* iskip = 0 - The coarse grid information, coarse grid
+* operators and interpolation coefficients are
+* calculated by umgs2. This information is stored
+* in the arrays ac, aw, as, asw, ase, pu, pd, np2
+* and the variable.
+* iskip = 1 - The calculation of the coarse grid information,
+* coarse grid operators and interpolation
+* coefficients is skipped. This option would be
+* used when umgs2 has been called with iskip=0 and
+* is being called again to solve a system of
+* equations with the same matrix. This would be
+* the case in, say, parabolic problems with time
+* independent coefficients.
+* iskip =-1 - The set up of pointers (ugrdfn) is skipped.
+* Coarse grid operators and interpolation
+* coefficients are calculated and the given matrix
+* equation is solved. This option would be used
+* when umgs2 has been called with iskip=0 and is
+* being called again to solve a system of equations
+* with a different matrix of the same dimensions.
+* This would be the case for, say, parabolic
+* problems with time dependent coefficients.
+* iskip =-2 - The set up of pointers (ugrdfn) is skipped.
+* Coarse grid operators and interpolation
+* coefficients are calculated and returned.
+* No matrix solve.
+*
+* ipc :
+* ipc = 0 or 1.
+* ipc is a multigrid parameter which determines the type of
+* interpolation to be used. Usually ipc=1 is best. However,
+* if the boundary condition equations have been absorbed into
+* the interior equations then ipc=0 can be used which results
+* in a slightly more efficient algorithm.
+*
+* nman :
+* nman = 0 usually.
+* nman = 1 signals that the fine grid equations are singulari
+* for the case when homogeneous Neumann boundary conditions are
+* applied along the entire boundary. In this case, the
+* difference equations are singular and the condition that the
+* integral of q over the domain be zero is added to the set of
+* difference equations. This condition is satisfied by adding
+* the appropriate constant vector to q on the fine grid. It is
+* assumed, in this case, that a well-defined problem has been
+* given to mgss2, i.e. the integral of f over the domain is
+* zero.
+*
+* im :
+* The number of grid points in the x-direction (including two
+* ficticious points)
+* jm :
+* The number of grid points in the y-direction (including two
+* ficticious points)
+*
+* linp :
+* This is a dummy argument left over from the authors
+* development of the code
+* Use: common /io/ linp,lout
+*
+* lout :
+* lout = unit number of output file into which the maximum norm
+* of the residual after each multigrid v-cycle" is printed.
+* Use: common /io/ linp,lout
+*
+* iscale :
+* Flag to indicate whether problem can be diagonally scaled to
+* speed convergence of the multigrid solver.
+*
+* REALS:
+*
+* ac(id5),an(id5),as(id5),aw(id5),ae(id5),
+* anw(id9),ane(id9),asw(id9),ase(id9) :
+* Input: ac, an, as, aw, ae, anw, ane, asw and ase contain the
+* stencil coefficients for the difference operator on
+* the finest grid. When the iskip=1 option is used,
+* these arrays also are assumed to contain the coarse
+* grid difference stencil coeficients.
+* Output: when the iskip=0 option is used, the coarse grid
+* stencil coeficients are returned in ac, an, as, aw,
+* ae, anw, ane, asw and ase.
+*
+* ru(idi),rd(idi),rc(idi) :
+* Real work arrays.
+*
+* pu(idi),pd(idi),pc(idi) :
+* Real work arrays.
+* Input: when the iskip=1 option is used, these arrays are
+* assumed to contain the interpolation coefficients used
+* in the semi-coarsening multigrid algorithm.
+* Output: when the iskip=0 option is used, the interpolation
+* coeficients are returned in pu and pd.
+*
+* f(id5) :
+* f contains the right hand side vector of the matrix
+* equation to be solved by umgs2.
+*
+* q(id5) :
+* If ifmg=0, q contains the initial guess on the fine grid.
+* If ifmg=1, the initial guess on the fine grid is determined
+* by the full multigrid process and the value of
+* q on input to umgs2 not used.
+*
+* tol :
+* tol > 0. The maximum norm of the residual is calculated at
+* the end of each multigrid cycle. The algorithm is
+* terminated when this maximum becomes less than tol
+* or when the maximum number of iterations (see ncyc)
+* is exceeded. It is up to the user to provide a
+* meaningfull tolerance criteria for the particular
+* problem being solved.
+* tol = 0. Perform ncyc multigrid cycles. Calculate and print
+* the maximum norm of the residual after each cycle.
+* tol =-1. Perform ncyc multigrid cycles. The maximum norm of
+* the final residual is calculated and returned in
+* the variable rmax in the calling list of umgs2.
+* tol =-2. Perform ncyc multigrid cycles. The maximum norm of
+* the residual is not calculated.
+*
+* rmax :
+* If tol.ge.-1., the final residual norm is returned in rmax.
+*
+************************************************************************
+*
+*
+
+ integer ncyc,ifd59
+ parameter (ncyc=40,ifd59=9)
+
+ integer np2(20,8)
+ integer iskip,ipc,nman
+ parameter (iskip=0,ipc=1,nman=0)
+ integer irc,irurd,im,jm
+ integer linp,lout
+ common /io/ linp,lout
+
+ real*8 ac(id5),an(id5),as(id5),aw(id5),ae(id5),
+ & anw(id9),ane(id9),asw(id9),ase(id9),
+ & q(id5),f(id5),gam(idg)
+
+ real*8 ru(idi),rd(idi),rc(idi),pu(idi),pd(idi),pc(idi)
+
+ real*8 tol
+
+ integer iscale,itry
+
+
+ ier=0
+
+*
+* Set some parameters for multigrid solver
+*
+ lout=6
+c rewind(unit=lout)
+ irc=0
+ irurd=0
+ im=iupper-ilower+3
+ jm=jupper-jlower+3
+ tol=eps
+
+*
+* Set up coefficients into vectors with correct indexing
+*
+ do 110 j=jlower,jupper
+ do 100 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ ac(n)=cc(i,j)
+ an(n)=cn(i,j)
+ as(n)=cs(i,j)
+ aw(n)=cw(i,j)
+ ae(n)=ce(i,j)
+ anw(n)=cnw(i,j)
+ ane(n)=cne(i,j)
+ asw(n)=csw(i,j)
+ ase(n)=cse(i,j)
+ q(n)=u(i,j)
+ f(n)=rhs(i,j)
+ 100 continue
+ 110 continue
+
+
+*
+* Determine whether we can diagonal scale the problem to speed
+* convergence. Can only be done if there are no zeros on the main
+* diagonal (ie. central difference coefficient).
+*
+ iscale=1
+ do 200 j=jlower,jupper
+ do 205 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ if (ac(n) .eq. 0.) then
+ iscale=0
+ endif
+ 205 continue
+ 200 continue
+
+*
+* Do the diagonal scaling if we can.
+*
+ if (iscale.eq.1) then
+
+ do 210 j=jlower,jupper
+ do 215 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ f(n)=f(n)/ac(n)
+ ase(n)=ase(n)/ac(n)
+ asw(n)=asw(n)/ac(n)
+ ane(n)=ane(n)/ac(n)
+ anw(n)=anw(n)/ac(n)
+ ae(n)=ae(n)/ac(n)
+ aw(n)=aw(n)/ac(n)
+ as(n)=as(n)/ac(n)
+ an(n)=an(n)/ac(n)
+ ac(n)=1.
+ 215 continue
+ 210 continue
+
+ endif
+
+c
+c Now call the multigrid routine
+
+ itry=0
+
+ 1122 call umgs2(
+ . ac,aw,as,ae,an,asw,ase,ane,anw,q,f,pu,pd,pc,ru,rd,rc,gam,np2,
+ . ifd59,ifmg,ncyc,tol,nman,im,jm,id5,id9,idi,m,iskip,rmax,
+ . ipc,irc,irurd)
+
+ if ((rmax.gt.tol).and.(itry.le.5)) then
+ itry=itry+1
+ print*,"Retry #",itry
+ goto 1122
+ endif
+
+ if (rmax.gt.tol) then
+ ier = -1
+ print*,"Did not converge"
+ print*," maximum residual = ",rmax
+ print*," tolerance = ",tol
+ endif
+
+*
+* Convert the solution back to the 2D array form
+*
+ do 510 j=jlower,jupper
+ do 500 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ u(i,j)=q(n)
+ 500 continue
+ 510 continue
+
+ return
+ end
+
+
+
+*
+*
+*
+************************************************************************
+*
+ subroutine mg5 (idim,ilower,iupper,jdim,jlower,jupper,
+ & cc,cn,cs,cw,ce,u,rhs,
+ & id5,id9,idi,idg,ifmg,eps,rmax,ier)
+ implicit real*8 (a-h,o-z)
+*
+************************************************************************
+*
+*
+* This routine is a wrapper for the multigrid solver. The input
+* arrays are the finite difference coefficients on the 2D grid with
+* the boundary conditions absorbed into them.
+*
+**** Parameters
+*
+* INTEGERS:
+* idim,jdim :
+* These define sizes of the coefficient arrays passed to this
+* routine.
+*
+* ilower,iupper,
+* jlower,jupper :
+* These are the indices of the computational grid that
+* correspond to upper and lower index limits for points on
+* which computations are actually done.
+*
+* id5 :
+* Dimension of the arrays ac,aw,as,ae,an,q and f. id5 is the
+* total number of grid points on the finest grid and all
+* coarser grids.
+*
+* id9 :
+* Dimension of the arrays asw,ase,ane,anw. If ifd59=5 then
+* id9=idi. If ifd59=9 then id9=id5.
+* (NOTE: This routine specifically written for 5-point)
+*
+* idi :
+* Dimension of the work arrays pu and pd. idi is the total
+* number of grid points on all of the coarser grids.
+*
+* idg :
+* Dimension of the work array gam. It is set to the value im,
+* the number of grid points in the i-direction on the finest
+* grid.
+*
+* ifmg :
+* ifmg = 0 - The full multigrid algorithm is not used to
+* obtain a good initial guess on the fine grid.
+* (use this if you can provide a good initial guess)
+* ifmg = 1 - The full multigrid algorithm is used to obtain a
+* good initial guess on the fine grid.
+*
+* ier :
+* This is an error flag with the following possible return
+* values:
+* ier = 0 => solver converged without error
+* ier = -1 => solver did not converge
+*
+* REALS:
+* cc(idim,jdim),cn(idim,jdim),
+* cs(idim,jdim),cw(idim,jdim),ce(idim,jdim):
+* These are the finite difference coefficient arrays for a
+* five-point stencil on the two dimensional grid as follows:
+*
+*
+* cn
+* ^
+* | cw cc ce
+* increasing |
+* j values | cs
+* (theta) |
+* --------> increasing i values (eta)
+*
+* Ie. the coresspondence is : n : i,j+1
+* ne : i+1,j+1
+* c : i,j
+* e : i+1,j
+* s : i,j-1
+*
+* u :
+* Input: this contains the initial guess to the solution of the
+* equation
+* Output: This contains the final approximation to the solution
+* determined by the multigrid solver.
+*
+* rhs :
+* This array contains the values of the right hand side of the
+* equation at every point on the rwo dimensional grid.
+*
+* eps :
+* eps > 0. The maximum norm of the residual is calculated at
+* the end of each multigrid cycle. The algorithm is
+* terminated when this maximum becomes less than tol
+* or when the maximum number of iterations (see ncyc)
+* is exceeded. It is up to the user to provide a
+* meaningfull tolerance criteria for the particular
+* problem being solved.
+* rmax:
+* This is the final value of the residual calcu;ated.
+*
+************************************************************************
+*
+*
+
+ integer idim,ilower,iupper,jdim,jlower,jupper,ifmg
+ integer id5,id9,idi,idg,ier
+ real*8 cc(idim,jdim),cn(idim,jdim),cs(idim,jdim),cw(idim,jdim),
+ & ce(idim,jdim),u(idim,jdim),rhs(idim,jdim)
+ real*8 eps,rmax
+
+*
+************************************************************************
+*
+* Variable definitions:
+*
+* Integers:
+* ifd59 :
+* ifd59 = 5 - means a 5-point finite difference stencil
+* (ac,an,as,aw,ae) is defined on the finest grid.
+* ifd59 = 9 - means a 9-point finite difference stencil
+* (ac,an,as,aw,ae,anw,ane,asw,ase) is defined on
+* the finest grid by the user.
+* (NOTE: This routine specifically written
+* for 5-point)
+*
+* ncyc :
+* The maximum number of multigrid "v"-cycles to be used. If
+* the maximum norm of the residual is not less than tol at the
+* end of ncyc cycles, the algorithm is terminated.
+* (NOTE: ncyc <= 40 )
+*
+* np(20,8) :
+* Input: When the iskip=1,-1 or -2 option is used, np2 is
+* assumed to contain the grid information for umgs2.
+* Output: When the iskip=0 option is used, the grid
+* information for umgs2 is returned in np2.
+* (NOTE: This is only useful for multiple instance problems)
+*
+* iskip :
+* iskip = 0 - The coarse grid information, coarse grid
+* operators and interpolation coefficients are
+* calculated by umgs2. This information is stored
+* in the arrays ac, aw, as, asw, ase, pu, pd, np2
+* and the variable.
+* iskip = 1 - The calculation of the coarse grid information,
+* coarse grid operators and interpolation
+* coefficients is skipped. This option would be
+* used when umgs2 has been called with iskip=0 and
+* is being called again to solve a system of
+* equations with the same matrix. This would be
+* the case in, say, parabolic problems with time
+* independent coefficients.
+* iskip =-1 - The set up of pointers (ugrdfn) is skipped.
+* Coarse grid operators and interpolation
+* coefficients are calculated and the given matrix
+* equation is solved. This option would be used
+* when umgs2 has been called with iskip=0 and is
+* being called again to solve a system of equations
+* with a different matrix of the same dimensions.
+* This would be the case for, say, parabolic
+* problems with time dependent coefficients.
+* iskip =-2 - The set up of pointers (ugrdfn) is skipped.
+* Coarse grid operators and interpolation
+* coefficients are calculated and returned.
+* No matrix solve.
+*
+* ipc :
+* ipc = 0 or 1.
+* ipc is a multigrid parameter which determines the type of
+* interpolation to be used. Usually ipc=1 is best. However,
+* if the boundary condition equations have been absorbed into
+* the interior equations then ipc=0 can be used which results
+* in a slightly more efficient algorithm.
+*
+* nman :
+* nman = 0 usually.
+* nman =1 signals that the fine grid equations are singular for
+* the case when homogeneous Neumann boundary conditions are
+* applied along the entire boundary. In this case, the
+* difference equations are singular and the condition that the
+* integral of q over the domain be zero is added to the set of
+* difference equations. This condition is satisfied by adding
+* the appropriate constant vector to q on the fine grid. It is
+* assumed, in this case, that a well-defined problem has been
+* given to mgss2, i.e. the integral of f over the domain is
+* zero.
+*
+* im :
+* The number of grid points in the x-direction (including two
+* ficticious points)
+* jm :
+* The number of grid points in the y-direction (including two
+* ficticious points)
+*
+* linp :
+* This is a dummy argument left over from the authors
+* development of the code
+* Use: common /io/ linp,lout
+*
+* lout :
+* lout = unit number of output file into which the maximum norm
+* of the residual after each multigrid v-cycle" is printed.
+* Use: common /io/ linp,lout
+*
+* iscale :
+* Flag to indicate whether problem can be diagonally scaled to
+* speed convergence of the multigrid solver.
+*
+* REALS:
+*
+* ac(id5),an(id5),as(id5),aw(id5),ae(id5),
+* anw(id9),ane(id9),asw(id9),ase(id9) :
+* Input: ac, an, as, aw, ae, anw, ane, asw and ase contain the
+* stencil coefficients for the difference operator on
+* the finest grid. When the iskip=1 option is used,
+* these arrays also are assumed to contain the coarse
+* grid difference stencil coeficients.
+* Output: when the iskip=0 option is used, the coarse grid
+* stencil coeficients are returned in ac, an, as, aw,
+* ae, anw, ane, asw and ase.
+*
+* ru(idi),rd(idi),rc(idi) :
+* Real work arrays.
+*
+* pu(idi),pd(idi),pc(idi) :
+* Real work arrays.
+* Input: when the iskip=1 option is used, these arrays are
+* assumed to contain the interpolation coefficients used
+* in the semi-coarsening multigrid algorithm.
+* Output: when the iskip=0 option is used, the interpolation
+* coeficients are returned in pu and pd.
+*
+* f(id5) :
+* f contains the right hand side vector of the matrix
+* equation to be solved by umgs2.
+*
+* q(id5) :
+* If ifmg=0, q contains the initial guess on the fine grid.
+* If ifmg=1, the initial guess on the fine grid is determined
+* by the full multigrid process and the value of
+* q on input to umgs2 not used.
+*
+* tol :
+* tol > 0. The maximum norm of the residual is calculated at
+* the end of each multigrid cycle. The algorithm is
+* terminated when this maximum becomes less than tol
+* or when the maximum number of iterations (see ncyc)
+* is exceeded. It is up to the user to provide a
+* meaningfull tolerance criteria for the particular
+* problem being solved.
+* tol = 0. Perform ncyc multigrid cycles. Calculate and print
+* the maximum norm of the residual after each cycle.
+* tol =-1. Perform ncyc multigrid cycles. The maximum norm of
+* the final residual is calculated and returned in
+* the variable rmax in the calling list of umgs2.
+* tol =-2. Perform ncyc multigrid cycles. The maximum norm of
+* the residual is not calculated.
+*
+************************************************************************
+*
+*
+
+ integer ncyc,ifd59
+ parameter (ncyc=40,ifd59=5)
+
+* integer id5,id9,idi,idg
+* This is for a 103x28 grid
+* parameter(id5=6695,id9=3811,idi=3811,idg=103)
+* This is for a 203x56 grid
+* parameter(id5=24969,id9=13601,idi=13601,idg=203)
+* This is for a 403x118 grid
+* parameter(id5=100750,id9=52793,idi=52793,idg=403)
+
+ integer np2(20,8)
+ integer iskip,ipc,nman
+ parameter (iskip=0,ipc=1,nman=0)
+ integer irc,irurd,im,jm
+ integer linp,lout
+ common /io/ linp,lout
+
+ real*8 ac(id5),an(id5),as(id5),aw(id5),ae(id5),
+ & anw(id9),ane(id9),asw(id9),ase(id9),
+ & q(id5),f(id5),gam(idg)
+
+ real*8 ru(idi),rd(idi),rc(idi),pu(idi),pd(idi),pc(idi)
+
+ real*8 tol
+
+ integer iscale,itry
+
+
+
+ ier=0
+*
+* Set some parameters for multigrid solver
+*
+ lout=6
+c rewind(unit=lout)
+ irc=0
+ irurd=0
+ im=iupper-ilower+3
+ jm=jupper-jlower+3
+ tol=eps
+
+
+*
+* Set up coefficients into vectors with correct indexing
+*
+ do 110 j=jlower,jupper
+ do 100 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ ac(n)=cc(i,j)
+ an(n)=cn(i,j)
+ as(n)=cs(i,j)
+ aw(n)=cw(i,j)
+ ae(n)=ce(i,j)
+ anw(n)=0.
+ ane(n)=0.
+ asw(n)=0.
+ ase(n)=0.
+ q(n)=u(i,j)
+ f(n)=rhs(i,j)
+ 100 continue
+ 110 continue
+
+
+*
+* Determine whether we can diagonal scale the problem to speed
+* convergence. Can only be done if there are no zeros on the main
+* diagonal (ie. central difference coefficient).
+*
+ iscale=1
+ do 200 j=jlower,jupper
+ do 205 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ if (ac(n) .eq. 0.) then
+ iscale=0
+ endif
+ 205 continue
+ 200 continue
+
+*
+* Do the diagonal scaling if we can.
+*
+ if (iscale.eq.1) then
+
+ do 210 j=jlower,jupper
+ do 215 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ f(n)=f(n)/ac(n)
+ ae(n)=ae(n)/ac(n)
+ aw(n)=aw(n)/ac(n)
+ as(n)=as(n)/ac(n)
+ an(n)=an(n)/ac(n)
+ ac(n)=1.
+ 215 continue
+ 210 continue
+
+ endif
+
+c
+c Now call the multigrid routine
+
+ itry=0
+
+ 1122 call umgs2(
+ + ac,aw,as,ae,an,asw,ase,ane,anw,q,f,pu,pd,pc,ru,rd,rc,gam,np2,
+ + ifd59,ifmg,ncyc,tol,nman,im,jm,id5,id9,idi,m,iskip,rmax,
+ + ipc,irc,irurd)
+
+
+ if ((rmax.gt.tol).and.(itry.le.5)) then
+ itry=itry+1
+ print*,"Retry #",itry
+ goto 1122
+ endif
+
+ if (rmax.gt.tol) then
+ ier = -1
+ print*,"Did not converge"
+ print*," maximum residual = ",rmax
+ print*," tolerance = ",tol
+ endif
+
+*
+* Convert the solution back to the 2D array form
+*
+ do 510 j=jlower,jupper
+ do 500 i=ilower,iupper
+ n=(j+1-jlower)*im + i+1-(ilower-1)
+ u(i,j)=q(n)
+ 500 continue
+ 510 continue
+
+ return
+ end
diff --git a/src/psi_1st_deriv.x b/src/psi_1st_deriv.x
new file mode 100644
index 0000000..3c3335e
--- /dev/null
+++ b/src/psi_1st_deriv.x
@@ -0,0 +1,18 @@
+ o1 = 5.0000000000000d-1*eta(i,j,k)
+ o2 = exp(o1)
+ o3 = psi2dv(i,j,k)
+ o4 = 1/o3
+ o5 = cos(phi(i,j,k))
+ o6 = cos(q(i,j,k))
+ o7 = dqpsi2dv(i,j,k)
+ o8 = -1.50000000000000d0*eta(i,j,k)
+ o9 = exp(o8)
+ o10 = detapsi2dv(i,j,k)
+ o11 = sin(q(i,j,k))
+ o12 = sin(phi(i,j,k))
+ psix(i,j,k) = o2*o4*(o10*o11*o5*o9 - 5.0000000000000d-1*o11*o3*o
+ & 5*o9 + o5*o6*o7*o9)
+ psiy(i,j,k) = o2*o4*(o10*o11*o12*o9 - 5.0000000000000d-1*o11*o12
+ & *o3*o9 + o12*o6*o7*o9)
+ psiz(i,j,k) = o2*o4*(o10*o6*o9 - 5.0000000000000d-1*o3*o6*o9 - o
+ & 11*o7*o9)
diff --git a/src/psi_2nd_deriv.x b/src/psi_2nd_deriv.x
new file mode 100644
index 0000000..0cfc82a
--- /dev/null
+++ b/src/psi_2nd_deriv.x
@@ -0,0 +1,51 @@
+ o1 = 5.0000000000000d-1*eta(i,j,k)
+ o2 = exp(o1)
+ o3 = psi2dv(i,j,k)
+ o4 = 1/o3
+ o5 = cos(phi(i,j,k))
+ o6 = o5**2
+ o7 = cos(q(i,j,k))
+ o8 = o7**2
+ o9 = detapsi2dv(i,j,k)
+ o10 = -2.50000000000000d0*eta(i,j,k)
+ o11 = exp(o10)
+ o12 = dqqpsi2dv(i,j,k)
+ o13 = sin(phi(i,j,k))
+ o14 = o13**2
+ o15 = detaqpsi2dv(i,j,k)
+ o16 = sin(q(i,j,k))
+ o17 = dqpsi2dv(i,j,k)
+ o18 = detaetapsi2dv(i,j,k)
+ o19 = o16**2
+ o20 = tan(q(i,j,k))
+ o21 = 1/o20
+ psixx(i,j,k) = o2*o4*(1.00000000000000d0*o11*o14*o17*o21 - 5.000
+ & 0000000000d-1*o11*o14*o3 + o11*o18*o19*o6 + 7.5000000000000d-1*o
+ & 11*o19*o3*o6 + 2.00000000000000d0*o11*o15*o16*o6*o7 - 3.00000000
+ & 000000d0*o11*o16*o17*o6*o7 + o11*o12*o6*o8 - 5.0000000000000d-1*
+ & o11*o3*o6*o8 + o11*o14*o9 - 2.00000000000000d0*o11*o19*o6*o9 + o
+ & 11*o6*o8*o9)
+ psixy(i,j,k) = o2*o4*(o11*o13*o18*o19*o5 - o11*o13*o17*o21*o5 +
+ & 5.0000000000000d-1*o11*o13*o3*o5 + 7.5000000000000d-1*o11*o13*o1
+ & 9*o3*o5 + 2.00000000000000d0*o11*o13*o15*o16*o5*o7 - 3.000000000
+ & 00000d0*o11*o13*o16*o17*o5*o7 + o11*o12*o13*o5*o8 - 5.0000000000
+ & 000d-1*o11*o13*o3*o5*o8 - o11*o13*o5*o9 - 2.00000000000000d0*o11
+ & *o13*o19*o5*o9 + o11*o13*o5*o8*o9)
+ psixz(i,j,k) = o2*o4*(-(o11*o15*o19*o5) + 1.50000000000000d0*o11
+ & *o17*o19*o5 - o11*o12*o16*o5*o7 + o11*o16*o18*o5*o7 + 1.25000000
+ & 000000d0*o11*o16*o3*o5*o7 + o11*o15*o5*o8 - 1.50000000000000d0*o
+ & 11*o17*o5*o8 - 3.00000000000000d0*o11*o16*o5*o7*o9)
+ psiyy(i,j,k) = o2*o4*(o11*o14*o18*o19 + 7.5000000000000d-1*o11*o
+ & 14*o19*o3 + 1.00000000000000d0*o11*o17*o21*o6 - 5.0000000000000d
+ & -1*o11*o3*o6 + 2.00000000000000d0*o11*o14*o15*o16*o7 - 3.0000000
+ & 0000000d0*o11*o14*o16*o17*o7 + o11*o12*o14*o8 - 5.0000000000000d
+ & -1*o11*o14*o3*o8 - 2.00000000000000d0*o11*o14*o19*o9 + o11*o6*o9
+ & + o11*o14*o8*o9)
+ psiyz(i,j,k) = o2*o4*(-(o11*o13*o15*o19) + 1.50000000000000d0*o1
+ & 1*o13*o17*o19 - o11*o12*o13*o16*o7 + o11*o13*o16*o18*o7 + 1.2500
+ & 0000000000d0*o11*o13*o16*o3*o7 + o11*o13*o15*o8 - 1.500000000000
+ & 00d0*o11*o13*o17*o8 - 3.00000000000000d0*o11*o13*o16*o7*o9)
+ psizz(i,j,k) = o2*o4*(o11*o12*o19 - 5.0000000000000d-1*o11*o19*o
+ & 3 - 2.00000000000000d0*o11*o15*o16*o7 + 3.00000000000000d0*o11*o
+ & 16*o17*o7 + o11*o18*o8 + 7.5000000000000d-1*o11*o3*o8 + o11*o19*
+ & o9 - 2.00000000000000d0*o11*o8*o9)
diff --git a/src/shmgp.F77 b/src/shmgp.F77
new file mode 100644
index 0000000..1982591
--- /dev/null
+++ b/src/shmgp.F77
@@ -0,0 +1,1455 @@
+
+c----------------------------------------------------------------------
+ subroutine umgs2(
+ + ac,aw,as,ae,an,asw,ase,ane,anw,q,f,pu,pd,pc,ru,rd,rc,gam,np2,
+ + ifd59,ifmg,ncyc,tol,nman,im,jm,id5,id9,idi,m,iskip,rmax,
+ + ipc,irc,irurd)
+ implicit real*8(a-h,o-z)
+c----------------------------------------------------------------------
+cdir$ noinline
+c** SUBROUTINE UMGS2
+c
+c** COPYRIGHT: Ecodynamics Research Associates, Inc.
+c
+c** Date written: June, 1990
+c** Author: Steve Schaffer
+c Mathematics Department
+c New Mexico Tech
+c Socorro, NM 87801
+c 505-835-5811
+c
+c** DESCRIPTION:
+c umgs2 is a black box symmetric matrix solver. It is written
+c in unsymmetric storage mode and can be used to solve mildly
+c nonsymmetric problems. The user provides a matrix and right hand
+c side vector corresponding to a 5 or 9 point finite difference/
+c finite volume discretization of a symmetric second order PDE.
+c umgs2 will construct a sequence of coarse grids and coarse
+c grid operators and then solve the matrix equation using a
+c y-direction semi-coarsening multigrid algorithm and return
+c the solution vector. If a sequence of matrix problems are
+c to be solved using the same matrix, computational time can
+c be saved by skipping the construction of the coarse grid
+c information in subsequent calls to umgs2.
+c
+c The matrix on the finest grid is stored in the arrays ac,aw,as,
+c an,asw,ase,ane and anw. The difference stencil at the point
+c (i,j) given by
+c
+c nw n ne anw(i,j) an(i,j) ane(i,j)
+c w c e = aw(i,j) ac(i,j) aw(i,j)
+c sw s se asw(i,j) as(i,j) ase(i,j)
+c
+c If the difference stencil on the fine grid is a 5 point stencil
+c then the arrays asw,ase,ane,anw are not used and the
+c stencil is given by
+c
+c n an(i,j)
+c w c e = aw(i,j) ac(i,j) ae(i,j)
+c s as(i,j)
+c
+c However, asw,ase,ane,anw still need to be dimensioned (by id9)
+c in the calling program as they are used in the coarse grid
+c calculations.
+c
+c** STORAGE
+c It is assumed that a set of ficticious points have been defined
+c along the entire boundary. These points have nothing to do with
+c the solution and are used for programming convenience and
+c vectorization purposes. Storage is allocated for the stencil
+c elements ac,aw,as,asw,ase, the solution vector, q, and the
+c right hand side vector, f, at these ficticious points. The
+c stencils at these ficticious points and all stencil connections
+c to them are set to zero in the subroutine useta which is called
+c by umgs2. The computational grid is depicted by
+c
+c x x x x x x x x
+c
+c x * * * * * * x
+c
+c x * * * * * * x
+c .
+c .
+c .
+c x * * * * * * x
+c
+c x * * * * * * x
+c
+c x x x x x x x x
+c
+c where x depicts the ficticious points and * depicts the interior
+c points. The total storage requirements for the fine grid problem
+c is then 5*im*jm for 5 point stencils and 7*im*jm for 9 point
+c stencils. The total storage requirements for the multigrid
+c solution is approximately 2 to 3 times that of the storage
+c requirements of the fine grid problem. (See DIMENSION PARAMETERS).
+c Note: The first im*jm elements of the arrays ac,aw,as,[asw,ase],
+c q and f correspond to the finest grid.
+c
+c** DIMENSION PARAMETERS
+c The arrays ac,aw,ae,asw,ase,q,f,pu,pd and pc are dimensioned as one
+c dimensional arrays in the calling program. They are dimensioned
+c as two dimensional arrays in the working subroutines. The one
+c dimensional storage of the arrays, say q, follows: n=(j-1)*jm+i,
+c where n is the element location in the one dimensional storage of
+c q corresponding to the (i,j)th element of the two dimensional
+c storage of q and jm is the number of grid points in the j
+c direction (including the two ficticious points).
+c
+c The dimension parameters are id5, id9, idi and idg. They can be
+c determined by running the companion program MSS2DIM.F.
+c id5 - Integer variable.
+c Dimension of the arrays ac,aw,as,ae,an,q and f in the
+c calling program. id5 is the total number of grid points
+c on the finest grid and all coarser grids.
+c id9 - Integer variable.
+c Dimension of the arrays asw,ase,ane,anw in the calling
+c program. If ifd59=5 then id9=idi. If ifd59=9 then
+c id9=id5.
+c idi - Integer variable.
+c Dimension of the work arrays pu and pd in the calling
+c program. idi is the total number of grid points on all
+c of the coarser grids.
+c idg - Integer variable.
+c Dimension of the work array gam in the calling program.
+c It is set to the value im, the number of grid points
+c in the i-direction on the finest grid.
+c
+c** INPUT
+c (Note: all variable types are set implicitly)
+c ac,aw,as
+c ae,an - Real arrays. Dimensioned (id5) in calling program.
+c See comments in DESCRIPTION and DIMENSION PARAMETERS.
+c asw,ase
+c ane,anw - Real arrays. Dimensioned (id9) in calling program.
+c See comments in DESCRIPTION and DIMENSION PARAMETERS.
+c f - Real array. Dimensioned (id5) in calling program.
+c f contains the right hand side vector of the matrix
+c equation to be solved by umgs2.
+c q - Real array. Dimensioned (id5) in calling program.
+c If ifmg=0, q contains the initial guess on the fine
+c grid. If ifmg=1, the initial guess on the fine grid
+c is determined by the full multigrid process and the
+c value of q on input to umgs2 not used.
+c ifd59 - Integer variable.
+c =5 - means a 5-point finite difference stencil (ac,aw and
+c as) is defined on the finest grid by the user.
+c =9 - means a 9-point finite difference stencil (ac,aw,as,
+c asw, ase) is defined on the finest grid by the user.
+c ifmg - Integer variable.
+c =0 - The full multigrid algorithm is not used to obtain a
+c good initial guess on the fine grid.
+c =1 - The full multigrid algorithm is used to obtain a good
+c initial guess on the fine grid.
+c ncyc - Integer variable.
+c The maximum number of multigrid v-cycles to be used.
+c If the maximum norm of the residual is not less than tol
+c at the end of ncyc cycles, the algorithm is terminated.
+c tol - Real variable.
+c >0 - The maximum norm of the residual is calculated at the
+c end of each multigrid cycle. The algorithm is terminated
+c when this maximum becomes less than tol or when the maximum
+c number of iterations (see ncyc) is exceeded. It is up to
+c the user to provide a meaningfull tolerance criteria for
+c the particular problem being solved.
+c =0 - Perform ncyc multigrid cycles. Calculate and print
+c the maximum norm of the residual after each cycle.
+c =-1. - Perform ncyc multigrid cycles. The maximum norm of
+c the final residual is calculated and returned in the
+c variable rmax in the calling list of umgs2.
+c =-2. - Perform ncyc multigrid cycles. The maximum norm of
+c the residual is not calculated.
+c iskip - Integer variable.
+c =0 - The coarse grid information, coarse grid operators
+c and interpolation coefficients are calculated by
+c umgs2. This information is stored in the arrays
+c ac, aw, as, asw, ase, pu, pd, np2 and the variable m
+c and returned to the calling program.
+c =1 - The calculation of the coarse grid information, coarse
+c grid operators and interpolation coefficients is
+c skipped. This option would be used when umgs2 has
+c been called with iskip=0 and is being called again
+c to solve a system of equations with the same matrix.
+c This would be the case in, say, parabolic problems
+c with time independent coefficients.
+c =-1 -The set up of pointers (ugrdfn) is skipped. Coarse grid
+c operators and interpolation coefficients are calculated
+c and the given matrix equation is solved. This option
+c would be used when umgs2 has been called with iskip=0
+c and is being called again to solve a system of
+c equations with a different matrix of the same
+c dimensions. This would be the case for, say,
+c parabolic problems with time dependent coefficients.
+c =-2 -The set up of pointers (ugrdfn) is skipped. Coarse grid
+c operators and interpolation coefficients are calculated
+c and returned to the calling program. No matrix solve.
+c ipc - Integer variable.
+c =0 or 1.
+c ipc is a multigrid parameter which determines the type of
+c interpolation to be used. Usually ipc=1 is best. However, if
+c the boundary contition equations have been absorbed into the
+c interior equations then ipc=0 can be used which results in a
+c slightly more efficient algorithm.
+c nman - Integer variable.
+c =0 usually.
+c =1 signals that the fine grid equations are singular for
+c the case when homogeneous Neumann boundary conditions are
+c applied along the entire boundary. In this case, the
+c difference equations are singular and the condition that
+c the integral of q over the domain be zero is added to the
+c set of difference equations. This condition is satisfied
+c by adding the appropriate constant vector to q on the fine
+c grid. It is assumed, in this case, that a well-defined
+c problem has been given to mgss2, i.e. the integral of f
+c over the domain is zero.
+c im - Integer variable.
+c The number of grid points in the x-direction (including two
+c ficticious points)
+c jm - Integer variable.
+c The number of grid points in the y-direction (including two
+c ficticious points)
+c lout - Integer variable.
+c = unit number of output file into which the maximum norm
+c of the residual after each multigrid v-cycle is printed.
+c Use: common /iout/ lout
+c
+c** INPUT/OUTPUT
+c q - Real array. Dimensioned (id5)
+c On input, if ifmg=0, q contains the initial guess on the
+c finest grid for umgs2. On output, q contains the final
+c solution on the finest grid.
+c ac-anw - Real arrays. See DIMENSION.
+c On input, ac, aw, as, [asw and ase] contain the stencil
+c coefficients for the difference operator on the finest
+c grid. When the iskip=1 option is used, these arrays
+c also are assumed to contain the coarse grid difference
+c stencil coeficients.
+c On output, when the iskip=0 option is used, the coarse
+c grid stencil coeficients are returned in ac - ase.
+c
+c ru,rd,rc - Real work arrays. Dimensioned (idi)
+c
+c pu,pd,pc - Real work arrays. Dimensioned (idi).
+c On input, when the iskip=1 option is used, these arrays
+c are assumed to contain the interpolation coefficients
+c used in the semi-coarsening multigrid algorithm.
+c On output, when the iskip=0 option is used, the
+c interpolation coeficients are returned in pu and pd.
+c np2 - Integer work array. Dimensioned np2(20,8).
+c On input, when the iskip=1,-1 or -2 option is used, np2 is
+c assumed to contain the grid information for umgs2.
+c On output, when the iskip=0 option is used, the grid
+c information for umgs2 is returned in np2.
+c** OUTPUT
+c rmax - If tol.ge.-1., the final residual norm is returned in rmax.
+c
+c** SUBROUTINES CALLED BY UMGS2
+c
+c - ugrdfn, ukey, uintad, urelax, urscal, ursrhs, useta
+c
+c** END OF DESCRIPTION OF UMGS2
+c .....................................................................
+ real*8 ac(id5),aw(id5),as(id5),ae(id5),an(id5),asw(id9),
+ + ase(id9),ane(id9),anw(id9),q(id5),f(id5)
+ real*8 pu(idi),pd(idi),pc(idi),gam(im)
+ integer np2(20,8)
+ real*8 ru(idi),rd(idi),rc(idi)
+ real*8 resid(0:40),confac(0:40)
+ common /io/ linp,lout
+c
+c-time tsu0=second()
+ if(iskip.eq.0) then
+ call ugrdfn(m,ifd59,is5,is9,isi,np2,im,jm)
+ iquit=0
+ if(m.gt.20) then
+ iquit=1
+ write(lout,*) ' m=',m,' > 20 - np2 is dimensioned np2(m=20,8)'
+ endif
+ if(is5.gt.id5) then
+ iquit=1
+ write(lout,*) ' id5=',id5,' too small. Should be set to',is5
+ endif
+ if(is9.gt.id9) then
+ iquit=1
+ write(lout,*) ' id9=',id9,' too small. Should be set to',is9
+ endif
+ if(isi.gt.idi) then
+ iquit=1
+ write(lout,*) ' idi=',idi,' too small. Should be set to',isi
+ endif
+ if(is5.lt.2*im*jm) then
+ iquit=1
+ write(lout,*) ' id5.lt.2*im*jm can cause problems in useta'
+ write(lout,*) ' this can be remedied by setting id5 larger'
+ endif
+ if(iquit.eq.1) return
+ endif
+ if(iskip.le.0) then
+c ---------- interpolation and coarse grid operators -----------
+ do 5 k=m-1,1,-1
+cdir$ inline
+ call ukey(k+1,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+ call ukey(k,np2,n5c,n9c,nic,jmc,i9c,j9c,ifdc,jrc)
+cdir$ noinline
+ if(k.eq.m-1) n5cqf=n5c
+ 5 call useta(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),ac(n5c),aw(n5c),as(n5c),ae(n5c),an(n5c),asw(n9c),
+ + ase(n9c),ane(n9c),anw(n9c),pu(nic),pd(nic),pc(nic),ru(nic),
+ + rd(nic),rc(nic),q(n5cqf),f(n5cqf),gam,
+ + im,jm,jmc,ifd,i9,j9,nman,k+1,m,jr,ipc,irc,irurd)
+ endif
+ if(iskip.eq.-2) return
+c
+ if(ifmg.ge.1) then
+ do 6 k=m-1,1,-1
+cdir$ inline
+ call ukey(k+1,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+ call ukey(k,np2,n5c,n9c,nic,jmc,i9c,j9c,ifdc,jrc)
+cdir$ noinline
+ 6 call ursrhs(f(n5),f(n5c),pu(nic),pd(nic),pc(nic),ru(nic),
+ + rd(nic),rc(nic),im,jm,jmc,m,k+1,jr,irc)
+ endif
+c-time tsu1=second()
+c-time write(lout,*) ' time for setup =',tsu1-tsu0
+ l=1
+ if(ifmg.eq.0) l=m
+ k=l
+ mcyc=0
+ rmaxo=1.
+c ---------- begin multigrid cycling ----------------------------
+c
+ if(l.eq.1) go to 20
+cdir$ inline
+ 10 call ukey(k,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+cdir$ noinline
+ call urelax(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),f(n5),q(n5),gam,
+ + im,jm,i9,j9,ifd,nman,k,m,jr,0,0)
+cdir$ inline
+ call ukey(k-1,np2,n5c,n9c,nic,jmc,i9c,j9c,ifdc,jrc)
+cdir$ noinline
+ call urscal(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),q(n5),f(n5),f(n5c),q(n5c),rc(nic),
+ + im,jm,jmc,ifd,i9,j9,k,m,jr,tol,rmax,ipc,irc)
+ if(k.eq.m.and.rmax.lt.tol) go to 60
+ if(k.eq.m.and.tol.ge.-.5) then
+ if(rmaxo.ne.0.) rate=rmax/rmaxo
+ rmaxo=rmax
+ if(mcyc.eq.0) rmax0=rmax
+ resid(mcyc)=rmax
+ confac(mcyc)=rate
+ endif
+ if(tol.eq.-.5) write(lout,*) ' down ',k,rmax
+ k=k-1
+ if(k.gt.1) go to 10
+c --------- solve coarsest grid ----------------------------------
+c
+cdir$ inline
+ 20 call ukey(1,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+cdir$ noinline
+ call urelax(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),f(n5),q(n5),gam,
+ + im,jm,i9,j9,ifd,nman,k,m,jr,0,0)
+ if(l.eq.1) go to 40
+c ---------- interpolate correction to next finer grid -----------
+c
+ 30 k=k+1
+cdir$ inline
+ call ukey(k,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+ call ukey(k-1,np2,n5c,n9c,nic,jmc,i9c,j9c,ifdc,jrc)
+cdir$ noinline
+ call uintad(
+ + q(n5),q(n5c),pu(nic),pd(nic),im,jm,jmc,1,jr,ipc)
+ call urelax(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),f(n5),q(n5),gam,
+ + im,jm,i9,j9,ifd,nman,k,m,jr,0,0)
+ if(tol.eq.-.5) then
+ call urscal(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),q(n5),f(n5),f(n5c),q(n5c),rc(nic),
+ + im,jm,jmc,ifd,i9,j9,k,m,jr,tol,rmax,ipc,irc)
+ write(lout,*) ' up ',k,rmax
+ endif
+ if(k.lt.l) go to 30
+ if(l.eq.m) go to 50
+c ---------- interpolate solution to new finest grid l+1 in fmg ----
+c
+ 40 l=l+1
+ k=l
+cdir$ inline
+ call ukey(l,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+ call ukey(l-1,np2,n5c,n9c,nic,jmc,i9c,j9c,ifdc,jrc)
+cdir$ noinline
+ call uintad(
+ + q(n5),q(n5c),pu(nic),pd(nic),im,jm,jmc,0,jr,0)
+ go to 10
+c
+ 50 if(nman.eq.1) call uneuman(q(n5),im,jm)
+ mcyc=mcyc+1
+c ---------- Cycle ncyc times on grid m ----------------------------
+ if(mcyc.lt.ncyc) go to 10
+c-time tmg1=second()
+c-time write(lout,*) ' time in ',ncyc,' cycles =',tmg1-tsu1
+c
+c ---------- print out final residual and work units ---------------
+ if(tol.ge.-1.) then
+cdir$ inline
+ call ukey(m,np2,n5,n9,ni,jm,i9,j9,ifd,jr)
+ call ukey(m-1,np2,n5c,n9c,nic,jmc,i9c,j9c,ifdc,jrc)
+cdir$ noinline
+ call urscal(
+ + ac(n5),aw(n5),as(n5),ae(n5),an(n5),asw(n9),ase(n9),
+ + ane(n9),anw(n9),q(n5),f(n5),f(n5c),q(n5c),rc(nic),
+ + im,jm,jmc,ifd,i9,j9,k,m,jr,1.,rmax,ipc,irc)
+ resid(mcyc)=rmax
+ confac(mcyc)=rmax/rmaxo
+ nb=0
+ ne=min0(6,mcyc)
+ 2029 write(lout,2033) (mc,mc=nb,ne)
+ write(lout,2032) (resid(mc),mc=nb,ne)
+ write(lout,2031) (confac(mc),mc=nb,ne)
+ nb=ne+1
+ ne=ne+min0(6,mcyc-ne)
+ if(nb.le.ne) go to 2029
+ fconfac=(rmax/rmax0)**(1./float(mcyc))
+ write(lout,2034) fconfac
+ 2034 format(30x,6(1h*)/,' average convergence factor =',f7.3,/,
+ + 30x,6(1h*))
+ 2033 format(7(4x,i2,4x))
+ 2031 format(7(1x,f9.3))
+ 2032 format(7(1x,e9.3))
+ endif
+ return
+ 60 write(lout,1003) mcyc,resid(mcyc),tol
+ return
+ 1003 format(' cyc=',i2,' max(res)=',1pe8.2/
+ + ' tolerance condition tol=',1pe8.2,' satisfied')
+ end
+c----------------------------------------------------------------------
+ subroutine ugrdfn(m,ifd59,is5,is9,isi,np2,imx,jmx)
+ implicit real*8(a-h,o-z)
+c----------------------------------------------------------------------
+cdir$ noinline
+c Given imx, jmx and ifd59 (See comments in mgss2), ugrdfn calculates
+c the number of grids that will be needed. Pointers into the arrays
+c ac, aw, as, asw, ase, q, f, pu, pd, pc, ru, rd and rc and the size
+c of each grid is calculated and stored in the array np2. The
+c subroutine ukey is called to retrieve the grid information.
+c .....................................................................
+ parameter(n5=1,n9=2,ni=3,jm=4,i9=5,j9=6,ifd=7,jred=8)
+ integer np2(20,8)
+ common /cs/ icorstr,iprint
+ iq5=1
+ iq9=1
+ iqi=1
+ m=1
+ np2(m,1)=jmx
+ np2(m,2)=3
+ 10 if(np2(m,1).le.3) go to 20
+ m=m+1
+ np2(m,1)=np2(m-1,1)/2+1
+ if(np2(m-1,2).eq.2.and.mod(np2(m-1,1),2).eq.1)
+ + np2(m,1)=np2(m,1)+1
+ np2(m,2)=2
+ go to 10
+ 20 do 30 k=1,m
+ np2(m-k+1,jm)=np2(k,1)
+ 30 np2(m-k+1,jred)=np2(k,2)
+ do 40 k=m,1,-1
+ ktot=imx*np2(k,jm)
+ np2(k,n5)=iq5
+ iq5=iq5+ktot
+ np2(k,n9)=iq9
+ if(k.lt.m.or.ifd59.eq.9) iq9=iq9+ktot
+ np2(k,ni)=iqi
+ 40 if(k.lt.m) iqi=iqi+ktot
+ do 50 k=1,m
+ np2(k,i9)=imx
+ np2(k,j9)=np2(k,jm)
+ 50 np2(k,ifd)=9
+ if(ifd59.eq.5) then
+ np2(m,i9)=1
+ np2(m,j9)=1
+ np2(m,ifd)=5
+ endif
+ is5=iq5-1
+ is9=iq9-1
+ isi=iqi-1
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine ukey(k,np2,nn5,nn9,nni,jjm,ii9,jj9,iifd,jjred)
+ implicit real*8(a-h,o-z)
+c----------------------------------------------------------------------
+c Returns the grid pointers and dimension variables for grid k. The
+c information is stored in the array np2.
+c......................................................................
+ parameter(n5=1,n9=2,ni=3,jm=4,i9=5,j9=6,ifd=7,jred=8)
+ integer np2(20,8)
+ nn5=np2(k,n5)
+ nn9=np2(k,n9)
+ nni=np2(k,ni)
+ jjm=np2(k,jm)
+ ii9=np2(k,i9)
+ jj9=np2(k,j9)
+ iifd=np2(k,ifd)
+ jjred=np2(k,jred)
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine uintad(q,qc,pu,pd,im,jm,jmc,iadd,jred,ipc)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+c iadd=1:
+c Interpolates and adds the coarse grid (kf-1) correction, qc, to the
+c fine grid (kf) approximation, q, at the black y-lines.
+c iadd=0:
+c In the full multigrid algorithm, the solution to the coarse grid
+c (kf-1) difference equation is interpolated to the fine grid (kf)
+c to be used as the initial guess vector for kf=2,3,...,m.
+c Interpolation is at black y-lines only.
+c .....................................................................
+ real*8 q(im,jm),qc(im,jmc),pu(im,jmc),pd(im,jmc)
+ im1=im-1
+ jm1=jm-1
+ jblack=5-jred
+c add correction to next finer grid
+ 1000 if(iadd.eq.1) then
+ jc=3-jred
+ do 10 j=jblack,jm1,2
+ jc=jc+1
+ do 10 i=2,im1
+ 10 q(i,j)=q(i,j)+pd(i,jc)*qc(i,jc)+pu(i,jc)*qc(i,jc+1)
+c
+c interpolate solution to next finer grid in fmg
+ 1001 else
+ jc=3-jred
+ do 40 j=jblack,jm1,2
+ jc=jc+1
+ do 40 i=2,im1
+ 40 q(i,j)=pd(i,jc)*qc(i,jc)+pu(i,jc)*qc(i,jc+1)
+ 1002 endif
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine uneuman(q,im,jm)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+c For problems with homogeneous Neumann boundary contitions, the
+c condition that the integral of q over the domain be zero is added
+c to the set of difference equations in order to obtain a unique
+c solution.
+c......................................................................
+ real*8 q(im,jm)
+ im1=im-1
+ jm1=jm-1
+ con=0.
+ do 10 j=2,jm1
+ do 10 i=2,im1
+ 10 con=con+q(i,j)
+ con=con/((im-2)*(jm-2))
+ do 20 j=2,jm1
+ do 20 i=2,im1
+ 20 q(i,j)=q(i,j)-con
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine urelax(ac,aw,as,ae,an,asw,ase,ane,anw,f,q,gam,
+ + im,jm,i9,j9,ifd,nman,k,m,jred,ipc,iprcud)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+c Performs red/black x-line relaxation. The Thomas algorithm is used
+c to solve the tridiagonal matrices.
+c** INPUT -
+c ac-anw= finite difference operator coeficients
+c q= initial approximation
+c f= right hand side vector
+c im,jm= the number of grid points in the x,y-directions
+c i9,j9= the i,j-dimensions of the arrays asw,ase
+c ifd= 5 or 9 - the size of the stencil
+c nman- =0 usually.
+c =1 signals that the fine grid equations are singular
+c for the case when Neumann boundary conditions are
+c applied along the entire boundary. In this case, the
+c equations on the coarsest grid (consisting of a single
+c line of unknowns) is a singular tridiagonal system
+c and the Thomas algorithm is modified on this grid to
+c obtain a solution with an arbitrary constant vector
+c component. This constant vector is removed on the
+c finest grid by the call to subroutine uneuman.
+c** OUTPUT -
+c q= final approximation after a red/black relaxation sweep
+c .....................................................................
+ real*8 ac(im,jm),aw(im,jm),as(im,jm),ae(im,jm),an(im,jm),
+ + asw(i9,j9),ase(i9,j9),ane(i9,j9),anw(i9,j9)
+ real*8 f(im,jm),q(im,jm),gam(im)
+ jm1=jm-1
+ im1=im-1
+ im2=im-2
+ jblack=5-jred
+c usual red/black relaxatio
+ nrel=2
+ jrb=jred
+c ipc ..brbr relaxation swee
+ 1000 if(iprcud.eq.1) then
+ nrel=ipc
+ if(mod(ipc,2).eq.0) jrb=jblack
+c 1 black relax for calc g pu,pd,ru,
+ 1001 elseif(iprcud.eq.2) then
+ nrel=1
+ jrb=jblack
+ 1002 endif
+c
+c
+ do 109 nrr=1,nrel
+ 5000 if(jrb.eq.jblack) then
+c black rela
+ 6000 if(jblack.le.jm1) then
+ 1400 if(iprcud.ne.2) then
+c
+ do 110 j=jblack,jm1,2
+ do 110 i=2,im1
+ 110 q(i,j)=f(i,j)-as(i,j)*q(i,j-1)-an(i,j)*q(i,j+1)
+ 7000 if(ifd.eq.9) then
+ do 120 j=jblack,jm1,2
+ do 120 i=2,im1
+ 120 q(i,j)=q(i,j)-asw(i,j)*q(i-1,j-1)-ase(i,j)*q(i+1,j-1)-
+ + anw(i,j)*q(i-1,j+1)-ane(i,j)*q(i+1,j+1)
+ 7001 endif
+ 1401 endif
+c black tridiagonal solve
+c**
+c** Moved calculation of loop 129 from loop 130 for vectorization
+c** on vector machines (ie. Cray)
+c** By: John Towns 2/6/92
+c**
+ do 129 j=jblack,jm1,2
+ 129 q(2,j)=q(2,j)/ac(2,j)
+
+c**
+c** Changed bet=(quantity) to bet=1./(quantity) to trade two divisions
+c** for one division and two multiplies (more efficient on all
+c** machines)
+c** By: John Towns 2/6/92
+c**
+
+c**
+c** Cray compiler directives to parallelize tridiagonal solve.
+c** By: John Towns 4/13/92
+c**
+
+cmic$ parallel private(bet,gam,i)
+cmic$1shared(ac,ae,aw,q,jblack,jm1,im1,im2)
+cmic$ do parallel
+ do 130 j=jblack,jm1,2
+ bet=1./ac(2,j)
+ do 140 i=3,im1
+ gam(i)=ae(i-1,j)*bet
+ bet=1./(ac(i,j)-aw(i,j)*gam(i))
+ 140 q(i,j)=(q(i,j)-aw(i,j)*q(i-1,j))*bet
+ do 150 i=im2,2,-1
+ 150 q(i,j)=q(i,j)-gam(i+1)*q(i+1,j)
+ 130 continue
+cmic$ end do
+cmic$ end parallel
+ 6001 endif
+c red relax
+ 5001 else
+c
+ do 210 j=jred,jm1,2
+ do 210 i=2,im1
+ 210 q(i,j)=f(i,j)-as(i,j)*q(i,j-1)-an(i,j)*q(i,j+1)
+ 1100 if(ifd.eq.9) then
+ do 220 j=jred,jm1,2
+ do 220 i=2,im1
+ 220 q(i,j)=q(i,j)-asw(i,j)*q(i-1,j-1)-ase(i,j)*q(i+1,j-1)-
+ + anw(i,j)*q(i-1,j+1)-ane(i,j)*q(i+1,j+1)
+ 1101 endif
+c tridiagonal solve
+c nman=1 ==> avoid singularity on coarsest grid
+ imm=im1
+ if(nman.eq.1.and.k.eq.1) then
+ imm=im-2
+ q(im1,2)=0.
+ gam(im1)=0.
+ endif
+c
+c**
+c** Moved calculation of loop 229 from loop 230 for vectorization
+c** on vector machines (ie. Cray)
+c** By: John Towns 2/6/92
+c**
+ do 229 j=jred,jm1,2
+ 229 q(2,j)=q(2,j)/ac(2,j)
+
+c**
+c** Changed bet=(quantity) to bet=1./(quantity) to trade two divisions
+c** for one division and two multiplies (more efficient on all
+c** machines)
+c** By: John Towns 2/6/92
+c**
+
+c**
+c** Cray compiler directives to parallelize tridiagonal solve.
+c** By: John Towns 4/13/92
+c**
+
+cmic$ parallel private(bet,gam,i)
+cmic$1shared(ac,ae,aw,q,jred,jm1,im2,imm)
+cmic$ do parallel
+ do 230 j=jred,jm1,2
+ bet=1./ac(2,j)
+ do 240 i=3,imm
+ gam(i)=ae(i-1,j)*bet
+ bet=1./(ac(i,j)-aw(i,j)*gam(i))
+ 240 q(i,j)=(q(i,j)-aw(i,j)*q(i-1,j))*bet
+ do 250 i=im2,2,-1
+ 250 q(i,j)=q(i,j)-gam(i+1)*q(i+1,j)
+ 230 continue
+cmic$ end do
+cmic$ end parallel
+ 5002 endif
+ jrb=5-jrb
+ 109 continue
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine urscal(
+ + ac,aw,as,ae,an,asw,ase,ane,anw,q,f,fc,qc,rc,
+ + im,jm,jmc,ifd,i9,j9,kf,m,jred,tol,rmax,ipc,irc)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+c Defines the grid kf-1 right hand side, fc, as the restriction of the
+c grid kf residual. The restriction operator is the transpose of the
+c interpolation operator. Note: The grid kf residual is zero at the
+c black lines (j-direction) as a result of red/black relaxation.
+c Thus, the restriction is simple injection. The initial guess, qc,
+c for the coarse grid correction equation is set to zero. The
+c maximum norm of the residual is calculated and returned in rmax.
+c......................................................................
+ real*8 ac(im,jm),aw(im,jm),as(im,jm),ae(im,jm),an(im,jm),
+ + asw(i9,j9),ase(i9,j9),ane(i9,j9),anw(i9,j9)
+ real*8 f(im,jm),q(im,jm),fc(im,jmc),qc(im,jmc)
+ real*8 rc(im,jmc)
+ rmax=0.
+ im1=im-1
+ jm1=jm-1
+ jmc1=jmc-1
+ jc=1
+ do 10 j=jred,jm1,2
+ jc=jc+1
+ do 10 i=2,im1
+ 10 fc(i,jc)=f(i,j)-as(i,j)*q(i,j-1)-an(i,j)*q(i,j+1)-
+ + aw(i,j)*q(i-1,j)-ae(i,j)*q(i+1,j)-ac(i,j)*q(i,j)
+ 1000 if(ifd.eq.9) then
+ jc=1
+ do 20 j=jred,jm1,2
+ jc=jc+1
+ do 20 i=2,im1
+ 20 fc(i,jc)=fc(i,jc)-asw(i,j)*q(i-1,j-1)-ane(i,j)*q(i+1,j+1)-
+ + ase(i,j)*q(i+1,j-1)-anw(i,j)*q(i-1,j+1)
+ 1001 endif
+c zero out qc as initial guess
+ do 25 jc=1,jmc
+ do 25 i=1,im
+ 25 qc(i,jc)=0.
+c if kf=m calculate residual norm
+ 2000 if((kf.eq.m.and.tol.ge.0.).or.tol.eq.-.5) then
+ do 30 jc=2,jmc1
+ do 30 i=2,im1
+ resmax=abs(fc(i,jc))
+ 30 if(resmax.gt.rmax) rmax=resmax
+ 2001 endif
+c weight rhs if irc.ge.1
+ 3000 if(irc.eq.1.and.ipc.ge.1) then
+ do 40 jc=2,jmc1
+ do 40 i=2,im1
+ 40 fc(i,jc)=rc(i,jc)*fc(i,jc)
+ 3001 endif
+c
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine ursrhs(f,fc,ru,rd,rc,im,jm,jmc,m,kf,jred,irc)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+c Restricts the right hand side vector on grid kf onto grid kf-1 when
+c the full multigrid (ifmg>0) option is used. The restriction operator
+c is NOT necessarily the transpose of the interpolation operator.
+c......................................................................
+ real*8 f(im,jm),fc(im,jmc),ru(im,jmc),rd(im,jmc),rc(im,jmc)
+ jm1=jm-1
+ im1=im-1
+ jc=1
+ 1000 if(irc.eq.0) then
+ do 10 j=jred,jm1,2
+ jc=jc+1
+ do 10 i=2,im1
+ 10 fc(i,jc)=ru(i,jc-1)*f(i,j-1)+rd(i,jc)*f(i,j+1)+f(i,j)
+ 1001 else
+ do 20 j=jred,jm1,2
+ jc=jc+1
+ do 20 i=2,im1
+ 20 fc(i,jc)=ru(i,jc-1)*f(i,j-1)+rd(i,jc)*f(i,j+1)+
+ + rc(i,jc)*f(i,j)
+ 1002 endif
+ return
+ end
+c----------------------------------------------------------------------
+ subroutine useta(
+ + ac,aw,as,ae,an,asw,ase,ane,anw,acc,awc,asc,aec,
+ + anc,aswc,asec,anec,anwc,pu,pd,pc,ru,rd,rc,qw,fw,gam,
+ + im,jm,jmc,ifd,i9,j9,nman,kf,m,jred,ipc,irc,irurd)
+ implicit real*8 (a-h,o-z)
+c----------------------------------------------------------------------
+cdir$ noinline
+c Calculates the interpolation coefficients from grid kf-1 to
+c grid kf and the coarse grid operator on grid kf-1.
+c** INPUT -
+c ac - anw = fine grid (kf) array stencil coeficients
+c m= total number of grids
+c kf= grid number of the fine grid
+c ifd= the size of the fine grid stencil (= 5 or 9)
+c i9,j9= the i,j-dimensions of the arrays asw,ase
+c qw,fw= coarse grid portions of q and f used for work arrays here
+c (See comments in MGSS2 for details)
+c** OUTPUT -
+c acc - anwc = coarse grid (kf-1) array stencil coeficients
+c pu,pd= arrays of interpolation coefficients from grid kf-1
+c to grid kf
+c .....................................................................
+ real*8 ac(im,jm),aw(im,jm),as(im,jm),ae(im,jm),an(im,jm),
+ + asw(i9,j9),ase(i9,j9),ane(i9,j9),anw(i9,j9),
+ + ru(im,jmc),rd(im,jmc),rc(im,jmc),
+ + pu(im,jmc),pd(im,jmc),pc(im,jmc),gam(im)
+ real*8 acc(im,jmc),awc(im,jmc),asc(im,jmc),aec(im,jmc),
+ + anc(im,jmc),aswc(im,jmc),asec(im,jmc),anec(im,jmc),anwc(im,jmc)
+ real*8 qw(im,jm),fw(im,jm)
+ common /io/ linp,lout
+ common /prsol/ iprsol
+c
+ pcscale=.001
+c
+ im1=im-1
+ jm1=jm-1
+ jmc1=jmc-1
+ jblack=5-jred
+c zeroing out connections to fictitious points
+ do 1 j=1,jm
+ do 2 i=1,im,im1
+ ac(i,j)=0.
+ aw(i,j)=0.
+ as(i,j)=0.
+ ae(i,j)=0.
+ 2 an(i,j)=0.
+ aw(2,j)=0.
+ 1 ae(im1,j)=0.
+ do 3 i=1,im
+ do 4 j=1,jm,jm1
+ ac(i,j)=0.
+ aw(i,j)=0.
+ as(i,j)=0.
+ ae(i,j)=0.
+ 4 an(i,j)=0.
+ as(i,2)=0.
+ 3 an(i,jm1)=0.
+ 1000 if(ifd.eq.9) then
+ do 5 j=1,jm
+ do 6 i=1,im,im1
+ asw(i,j)=0.
+ ase(i,j)=0.
+ ane(i,j)=0.
+ 6 anw(i,j)=0.
+ asw(2,j)=0.
+ anw(2,j)=0.
+ ase(im1,j)=0.
+ 5 ane(im1,j)=0.
+ do 7 i=1,im
+ do 8 j=1,jm,jm1
+ asw(i,j)=0.
+ ase(i,j)=0.
+ ane(i,j)=0.
+ 8 anw(i,j)=0.
+ ase(i,2)=0.
+ asw(i,2)=0.
+ ane(i,jm1)=0.
+ 7 anw(i,jm1)=0.
+ 1001 endif
+c
+ do 9 jc=1,jmc
+ do 9 i=1,im
+ pc(i,jc)=0.
+ pu(i,jc)=0.
+ pd(i,jc)=0.
+ rc(i,jc)=0.
+ ru(i,jc)=0.
+ 9 rd(i,jc)=0.
+c
+c calculation of interpolation coeficients
+c
+
+c define pc
+ 2000 if(ipc.ge.1) then
+ do 20 j=2,jm1
+ do 20 i=2,im1
+ fw(i,j)=0.
+ 20 qw(i,j)=1.
+c
+ call urelax(ac,aw,as,ae,an,asw,ase,ane,anw,fw,qw,gam,im,jm,
+ + i9,j9,ifd,nman,kf,m,jred,ipc,1)
+c scale pc
+ pcmax=0.
+ jc=1
+ do 40 j=jred,jm1,2
+ jc=jc+1
+ do 40 i=2,im1
+ pc(i,jc)=qw(i,j)
+ 40 pcmax=max(pcmax,abs(qw(i,j)))
+ do 50 jc=2,jmc1
+ do 50 i=2,im1
+ if(pc(i,jc).eq.0.) pc(i,jc)=pcscale
+ 50 pc(i,jc)=pc(i,jc)/pcmax
+c
+ 2001 else
+ do 55 jc=2,jmc1
+ do 55 i=2,im1
+ 55 pc(i,jc)=1.
+ 2002 endif
+c
+c define pu
+ jc=3-jred
+ do 60 j=jblack,jm1,2
+ jc=jc+1
+ 4000 if(ipc.eq.0) then
+ do 70 i=2,im1
+ 70 qw(i,j)=-an(i,j)
+ 5000 if(ifd.eq.9) then
+ do 80 i=2,im1
+ 80 qw(i,j)=qw(i,j)-ane(i,j)-anw(i,j)
+ 5001 endif
+ 4001 else
+ do 90 i=2,im1
+ 90 qw(i,j)=-an(i,j)*pc(i,jc+1)
+ 6000 if(ifd.eq.9) then
+ do 100 i=2,im1
+ 100 qw(i,j)=qw(i,j)-ane(i,j)*pc(i+1,jc+1)-anw(i,j)*pc(i-1,jc+1)
+ 6001 endif
+ 4002 endif
+ 60 continue
+c solve for pu
+ call urelax(ac,aw,as,ae,an,asw,ase,ane,anw,fw,qw,gam,im,jm,
+ + i9,j9,ifd,nman,kf,m,jred,ipc,2)
+c
+
+ jc=3-jred
+ do 102 j=jblack,jm1,2
+ jc=jc+1
+ 3020 if(j.lt.jm1) then
+ do 103 i=2,im1
+ 103 pu(i,jc)=qw(i,j)
+ 3021 endif
+ 102 continue
+c
+c define pd
+ jc=3-jred
+ do 106 j=jblack,jm1,2
+ jc=jc+1
+ 8000 if(ipc.eq.0) then
+ do 130 i=2,im1
+ 130 qw(i,j)=-as(i,j)
+ 9000 if(ifd.eq.9) then
+ do 140 i=2,im1
+ 140 qw(i,j)=qw(i,j)-ase(i,j)-asw(i,j)
+ 9001 endif
+c
+ 8001 else
+c
+ do 150 i=2,im1
+ 150 qw(i,j)=-as(i,j)*pc(i,jc)
+ 1100 if(ifd.eq.9) then
+ do 160 i=2,im1
+ 160 qw(i,j)=qw(i,j)-ase(i,j)*pc(i+1,jc)-asw(i,j)*pc(i-1,jc)
+ 1101 endif
+ 8002 endif
+ 106 continue
+c solve for pd
+ call urelax(ac,aw,as,ae,an,asw,ase,ane,anw,fw,qw,gam,im,jm,
+ + i9,j9,ifd,nman,kf,m,jred,ipc,2)
+c
+ jc=3-jred
+ do 105 j=jblack,jm1,2
+ jc=jc+1
+ 7010 if(j.gt.2) then
+ do 104 i=2,im1
+ 104 pd(i,jc)=qw(i,j)
+ 7011 endif
+ 105 continue
+c
+c define restriction operator
+c
+c define rc
+ 1200 if(irc.eq.1) then
+ do 500 jc=2,jmc1
+ do 500 i=2,im1
+ 500 rc(i,jc)=pc(i,jc)
+ else
+ do 502 jc=2,jmc1
+ do 502 i=2,im1
+ 502 rc(i,jc)=1.
+ 1201 endif
+c
+c compute qw = -Cb(inv) * eb*
+ 1300 if(irurd.ge.1) then
+ jc=3-jred
+ 3300 if(irurd.eq.1) then
+ do 560 j=jblack,jm1,2
+ jc=jc+1
+ do 560 i=2,im1
+ 560 qw(i,j)=1.
+ 3301 elseif(irurd.eq.2) then
+ do 561 j=jblack,jm1,2
+ jc=jc+1
+ do 561 i=2,im1
+ 561 qw(i,j)=(pd(i,jc)*pc(i,jc)+pu(i,jc)*pc(i,jc+1))
+ 3302 endif
+c
+ call urelax(ac,aw,as,ae,an,asw,ase,ane,anw,fw,qw,gam,im,jm,
+ + i9,j9,ifd,nman,kf,m,jred,ipc,2)
+c
+ jc=3-jred
+ do 566 j=jblack,jm1,2
+ jc=jc+1
+c compute ru = -b(j+1) * qw
+ 1400 if(j.lt.jm1) then
+ do 570 i=2,im1
+ 570 ru(i,jc)=-as(i,j+1)*qw(i,j)
+ 1500 if(ifd.eq.9) then
+ do 580 i=2,im1
+ 580 ru(i,jc)=ru(i,jc)-ase(i,j+1)*qw(i+1,j)-asw(i,j+1)*qw(i-1,j)
+ 1501 endif
+ 1401 endif
+c compute rd = -a(j-1) * c(j)(inv) * qw
+ 1600 if(j.gt.2) then
+ do 650 i=2,im1
+ 650 rd(i,jc)=-an(i,j-1)*qw(i,j)
+ 1700 if(ifd.eq.9) then
+ do 660 i=2,im1
+ 660 rd(i,jc)=rd(i,jc)-ane(i,j-1)*qw(i+1,j)-anw(i,j-1)*qw(i-1,j)
+ 1701 endif
+ 1601 endif
+ 566 continue
+c
+ 1301 else
+c else set ru=pu and rd=pd
+ jc=3-jred
+ do 670 j=jblack,jm1,2
+ jc=jc+1
+ do 670 i=2,im1
+ ru(i,jc)=pu(i,jc)
+ 670 rd(i,jc)=pd(i,jc)
+ 1303 endif
+c
+c calculating the coarse grid operator
+c
+ 1800 if(ipc+irc+irurd.eq.0) then
+ j=jred-2
+ do 200 jc=2,jmc1
+ j=j+2
+ do 200 i=2,im1
+ acc(i,jc)=ac(i,j)+an(i,j-1)*pu(i,jc-1)+as(i,j+1)*pd(i,jc)+
+ + pu(i,jc-1)*(as(i,j)+ac(i,j-1)*pu(i,jc-1))+
+ + pd(i,jc)*(an(i,j)+ac(i,j+1)*pd(i,jc))
+ awc(i,jc)=aw(i,j)+pd(i-1,jc)*aw(i,j+1)*pd(i,jc)+pu(i-1,jc-1)*
+ + aw(i,j-1)*pu(i,jc-1)
+ asc(i,jc)=as(i,j)*pd(i,jc-1)+pu(i,jc-1)*(as(i,j-1)+
+ + ac(i,j-1)*pd(i,jc-1))
+ aec(i,jc)=ae(i,j)+pd(i+1,jc)*ae(i,j+1)*pd(i,jc)+pu(i+1,jc-1)*
+ + ae(i,j-1)*pu(i,jc-1)
+ anc(i,jc)=an(i,j)*pu(i,jc)+pd(i,jc)*(an(i,j+1)+
+ + ac(i,j+1)*pu(i,jc))
+ aswc(i,jc)=pd(i-1,jc-1)*aw(i,j-1)*pu(i,jc-1)
+ asec(i,jc)=pd(i+1,jc-1)*ae(i,j-1)*pu(i,jc-1)
+ anec(i,jc)=pu(i+1,jc)*ae(i,j+1)*pd(i,jc)
+ 200 anwc(i,jc)=pu(i-1,jc)*aw(i,j+1)*pd(i,jc)
+ 1900 if(ifd.eq.9) then
+ j=jred-2
+ do 210 jc=2,jmc1
+ j=j+2
+ do 210 i=2,im1
+ awc(i,jc)=awc(i,jc)+asw(i,j+1)*pd(i,jc)+anw(i,j-1)*pu(i,jc-1)+
+ + pd(i-1,jc)*anw(i,j)+pu(i-1,jc-1)*asw(i,j)
+ aec(i,jc)=aec(i,jc)+ase(i,j+1)*pd(i,jc)+ane(i,j-1)*pu(i,jc-1)+
+ + pd(i+1,jc)*ane(i,j)+pu(i+1,jc-1)*ase(i,j)
+ aswc(i,jc)=aswc(i,jc)+asw(i,j-1)*pu(i,jc-1)+pd(i-1,jc-1)*asw(i,j)
+ asec(i,jc)=asec(i,jc)+ase(i,j-1)*pu(i,jc-1)+pd(i+1,jc-1)*ase(i,j)
+ anec(i,jc)=anec(i,jc)+ane(i,j+1)*pd(i,jc)+pu(i+1,jc)*ane(i,j)
+ 210 anwc(i,jc)=anwc(i,jc)+anw(i,j+1)*pd(i,jc)+pu(i-1,jc)*anw(i,j)
+ 1901 endif
+c
+ 1801 else
+c
+ j=jred-2
+ do 300 jc=2,jmc1
+ j=j+2
+ do 300 i=2,im1
+ acc(i,jc)=rc(i,jc)*(ac(i,j)*pc(i,jc)+
+ + as(i,j)*pu(i,jc-1)+
+ + an(i,j)*pd(i,jc))+
+ + ru(i,jc-1)*(ac(i,j-1)*pu(i,jc-1)+
+ + an(i,j-1)*pc(i,jc))+
+ + rd(i,jc)*(ac(i,j+1)*pd(i,jc)+
+ + as(i,j+1)*pc(i,jc))
+ awc(i,jc)=rc(i,jc)*aw(i,j)*pc(i-1,jc)+
+ + rd(i,jc)*aw(i,j+1)*pd(i-1,jc)+
+ + ru(i,jc-1)*aw(i,j-1)*pu(i-1,jc-1)
+ asc(i,jc)=rc(i,jc)*as(i,j)*pd(i,jc-1)+
+ + ru(i,jc-1)*(ac(i,j-1)*pd(i,jc-1)+
+ + as(i,j-1)*pc(i,jc-1))
+ aec(i,jc)=rc(i,jc)*ae(i,j)*pc(i+1,jc)+
+ + rd(i,jc)*ae(i,j+1)*pd(i+1,jc)+
+ + ru(i,jc-1)*ae(i,j-1)*pu(i+1,jc-1)
+ anc(i,jc)=rc(i,jc)*an(i,j)*pu(i,jc)+
+ + rd(i,jc)*(ac(i,j+1)*pu(i,jc)+
+ + an(i,j+1)*pc(i,jc+1))
+ aswc(i,jc)=ru(i,jc-1)*aw(i,j-1)*pd(i-1,jc-1)
+ asec(i,jc)=ru(i,jc-1)*ae(i,j-1)*pd(i+1,jc-1)
+ anec(i,jc)=rd(i,jc)*ae(i,j+1)*pu(i+1,jc)
+ 300 anwc(i,jc)=rd(i,jc)*aw(i,j+1)*pu(i-1,jc)
+ 2100 if(ifd.eq.9) then
+ j=jred-2
+ do 310 jc=2,jmc1
+ j=j+2
+ do 310 i=2,im1
+ awc(i,jc)=awc(i,jc)+(rd(i,jc)*asw(i,j+1)+
+ + ru(i,jc-1)*anw(i,j-1))*pc(i-1,jc)+
+ + rc(i,jc)*(anw(i,j)*pd(i-1,jc)+
+ + asw(i,j)*pu(i-1,jc-1))
+ aec(i,jc)=aec(i,jc)+(rd(i,jc)*ase(i,j+1)+
+ + ru(i,jc-1)*ane(i,j-1))*pc(i+1,jc)+
+ + rc(i,jc)*(ane(i,j)*pd(i+1,jc)+
+ + ase(i,j)*pu(i+1,jc-1))
+ aswc(i,jc)=aswc(i,jc)+ru(i,jc-1)*asw(i,j-1)*pc(i-1,jc-1)+
+ + rc(i,jc)*asw(i,j)*pd(i-1,jc-1)
+ asec(i,jc)=asec(i,jc)+ru(i,jc-1)*ase(i,j-1)*pc(i+1,jc-1)+
+ + rc(i,jc)*ase(i,j)*pd(i+1,jc-1)
+ anec(i,jc)=anec(i,jc)+rd(i,jc)*ane(i,j+1)*pc(i+1,jc+1)+
+ + rc(i,jc)*ane(i,j)*pu(i+1,jc)
+ 310 anwc(i,jc)=anwc(i,jc)+rd(i,jc)*anw(i,j+1)*pc(i-1,jc+1)+
+ + rc(i,jc)*anw(i,j)*pu(i-1,jc)
+ 2101 endif
+ 1802 endif
+cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ if(iprsol.eq.2.and.kf.eq.m.and.ifd.eq.5) then
+ do 111 j=2,jm1
+ do 111 i=2,im1
+ write(lout,1010) im,jm,an(i,j)
+ write(lout,1012) i,j,aw(i,j),ac(i,j),ae(i,j)
+ 111 write(lout,1011) as(i,j)
+ 1010 format(2(1x,i2),14x,f12.5)
+ 1011 format(20x,f12.5)
+ 1012 format(2(1x,i2),3(1x,f12.5))
+ endif
+ if(iprsol.eq.2.and.kf.eq.m.and.ifd.eq.9) then
+ do 115 j=2,jm1
+ do 115 i=2,im1
+ write(lout,1017) im,jm,anw(i,j),an(i,j),ane(i,j)
+ write(lout,1017) i,j,aw(i,j),ac(i,j),ae(i,j)
+ 115 write(lout,1016) asw(i,j),as(i,j),ase(i,j)
+ 1016 format(6x,3(1x,f12.5))
+ 1017 format(2(1x,i2),3(1x,f12.5))
+ endif
+cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ if(iprsol.eq.2.or.iprsol.eq.3) then
+ write(lout,*) ' coarse grid kf-1 ==',kf-1
+ do 211 jc=2,jmc1
+ do 211 i=2,im1
+ write(lout,2015) im,jmc,anwc(i,jc),anc(i,jc),anec(i,jc),pd(i,jc),
+ + rd(i,jc)
+ write(lout,2013) i,jc,awc(i,jc),acc(i,jc),aec(i,jc),pc(i,jc),
+ + rc(i,jc)
+ write(lout,2014) aswc(i,jc),asc(i,jc),asec(i,jc),pu(i,jc-1),
+ + ru(i,jc-1)
+ 211 write(lout,*) ' m, kf-1=',m,kf-1
+ 2014 format(9x,3(1x,f11.5),3x,2(f11.5,1x))
+ 2013 format(3x,2(1x,i2),3(1x,f11.5),3x,2(f11.5,1x))
+ 2015 format(3x,2(1x,i2),3(1x,f11.5),3x,2(f11.5,1x))
+ endif
+cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ return
+ end
+c**********************************************************************
+ subroutine uoutpt(q,im,jm)
+ implicit real*8 (a-h,o-z)
+c**********************************************************************
+c Sample output subroutine. Prints out the values of q at the
+c interior points of the finest grid.
+c**********************************************************************
+ common /io/ linp,lout
+ real*8 q(im,jm)
+ im1=im-1
+ jm1=jm-1
+ ie=1
+ 20 ib=ie+1
+ ie=ib+min0(5,im1-ib)
+ do 10 j=jm1,2,-1
+ 10 write(lout,100) j,(q(i,j),i=ib,ie)
+ if(ie.lt.im1) go to 20
+ 100 format(1x,i2,1x,6(1x,f10.4))
+ return
+ end
+c**********************************************************************
+ subroutine uputf(ac,aw,as,ae,an,f,nx,ny,
+ + lo,nxd,nyd,i32su)
+ implicit real*8 (a-h,o-z)
+c**********************************************************************
+ real*8 ac(lo:nxd,lo:nyd),aw(lo:nxd,lo:nyd),
+ + as(lo:nxd,lo:nyd),ae(lo:nxd,lo:nyd),
+ + an(lo:nxd,lo:nyd),f(lo:nxd,lo:nyd)
+ real*8 a(20),b(20),ab(20)
+ integer il(20),ir(20),jb(20),jt(20)
+ integer ibc(4)
+ common /io/ linp,lout
+c
+c dcell is the value assigned to the diagonal element of a dead
+c cell, i.e. a cell that has 0 conections to all its neighbors.
+c icendif determines the differencing scheme for the first order terms
+c icendif=0 - central differencing, =1 - forward differencing.
+c
+ dcell = 1.
+ do 321 j=lo,nyd
+ do 321 i=lo,nxd
+ ac(i,j)=0.
+ aw(i,j)=0.
+ as(i,j)=0.
+ ae(i,j)=0.
+ 321 an(i,j)=0.
+c
+ nx1=nx+1
+ ny1=ny+1
+ read(linp,*) icendif
+ read(linp,*) ibc(1),ibc(2),ibc(3),ibc(4)
+ read(linp,*) nreg
+ hx=1./nx
+ hy=1./ny
+ hx2=hx*hx
+ hy2=hy*hy
+ hxy2=hx2*hy2
+ dcell=hxy2*dcell
+ write(lout,1011) ibc(1),ibc(2),ibc(3),ibc(4),icendif,dcell,hx,hy
+ 1011 format(' ibc_l ibc_b ibc_r ibc_t icendiff dcell hx hy'/
+ + 4x,i1,5x,i1,5x,i1,5x,i1,7x,i1,6x,e8.2,2x,f6.4,2x,f6.4/)
+c
+ do 10 irg=1,nreg
+ read(linp,*) il(irg),ir(irg),jb(irg),jt(irg)
+ read(linp,*) xk,yk,sreg,freg
+ read(linp,*) a(irg),b(irg),ab(irg)
+ write(lout,1000) il(irg),ir(irg),jb(irg),jt(irg),xk,yk,sreg,freg
+ 1000 format(1x,i3,',',i3,' X ',i3,',',i3,2x,1pe8.2,1x,1pe8.2,2x,
+ + 1pe8.1,1x,1pe8.1)
+ write(lout,1001) a(irg),b(irg),ab(irg)
+ 1001 format(17x,' a=',1pe10.3,' b=',1pe10.3,' ab=',1pe10.3)
+ xk=xk*hy2
+ yk=yk*hx2
+ sreg=sreg*hxy2
+ freg=freg*hxy2
+ a(irg)=a(irg)*hx2*hy
+ b(irg)=b(irg)*hx*hy2
+ ab(irg)=ab(irg)*hx*hy
+ if(icendif.eq.0) then
+ a(irg)=a(irg)/2.
+ b(irg)=b(irg)/2.
+ ab(irg)=ab(irg)/4.
+ endif
+ if(il(irg).eq.1) il(irg)=0
+ if(ir(irg).eq.nx) ir(irg)=nx1
+ if(jb(irg).eq.1) jb(irg)=0
+ if(jt(irg).eq.ny) jt(irg)=ny1
+ do 20 i=il(irg),ir(irg)
+ do 20 j=jb(irg),jt(irg)
+ aw(i,j)=xk
+ as(i,j)=yk
+ ac(i,j)=sreg
+ 20 f(i,j)=freg
+ 10 continue
+ write(lout,*) ' - - - - - - - - - - - - - - - - - - - - - - - - -'
+c defining coeficients by harmonic averaging
+ do 30 i=1,nx
+ asio=as(i,0)
+ do 30 j=1,ny1
+ aa=as(i,j)*asio
+ if(aa.gt.0.) then
+ t=2.*aa/(as(i,j)+asio)
+ asio=as(i,j)
+ as(i,j)=t
+ else
+ asio=as(i,j)
+ as(i,j)=0.
+ endif
+ 30 continue
+ do 40 j=1,ny
+ awoj=aw(0,j)
+ do 40 i=1,nx1
+ aa=aw(i,j)*awoj
+ if(aa.gt.0.) then
+ t=2.*aa/(aw(i,j)+awoj)
+ awoj=aw(i,j)
+ aw(i,j)=t
+ else
+ awoj=aw(i,j)
+ aw(i,j)=0.
+ endif
+ 40 continue
+ do 45 i=0,nx
+ do 45 j=0,ny
+ ae(i,j)=aw(i+1,j)
+ 45 an(i,j)=as(i,j+1)
+ do 50 i=1,nx
+ do 50 j=1,ny
+ ac(i,j)=ac(i,j)-aw(i,j)-as(i,j)-ae(i,j)-
+ + an(i,j)
+ 50 if(ac(i,j).eq.0.) ac(i,j)=dcell
+c adding on the unsymmetric terms
+ do 51 irg=1,nreg
+c icendif=0 ==> central diff g
+ if(icendif.eq.0) then
+ do 52 i=il(irg),ir(irg)
+ do 52 j=jb(irg),jt(irg)
+ aw(i,j)=aw(i,j)-a(irg)
+ ae(i,j)=ae(i,j)+a(irg)
+ an(i,j)=an(i,j)+b(irg)
+ 52 as(i,j)=as(i,j)-b(irg)
+c icendif=1 ==> upstream diff s
+ elseif(icendif.eq.1) then
+ do 54 i=il(irg),ir(irg)
+ do 54 j=jb(irg),jt(irg)
+ ac(i,j)=ac(i,j)-a(irg)
+ ae(i,j)=ae(i,j)+a(irg)
+ an(i,j)=an(i,j)+b(irg)
+ 54 ac(i,j)=ac(i,j)-b(irg)
+ endif
+ 51 continue
+c set boundary conditions for 5 point operator
+ do 60 j=1,ny
+c left boundary
+ ae(0,j)=aw(1,j)
+ if(ibc(1).eq.1) then
+ ac(0,j)=aw(1,j)
+ f(0,j)=2.*aw(1,j)*0.0
+ elseif(ibc(1).eq.2) then
+ ac(0,j)=-aw(1,j)
+ f(0,j)=hx*aw(1,j)*0.0
+ endif
+ if(ac(0,j).eq.0.) then
+ ae(0,j)=0.
+ ac(0,j)=dcell
+ f(0,j)=0.
+ endif
+c right boundary
+ aw(nx1,j)=ae(nx,j)
+ if(ibc(3).eq.1) then
+ ac(nx1,j)=ae(nx,j)
+ f(nx1,j)=2.*ae(nx,j)*0.
+ elseif(ibc(3).eq.2) then
+ ac(nx1,j)=-ae(nx,j)
+ f(nx1,j)=hx*ae(nx,j)*0.
+ endif
+ if(ac(nx1,j).eq.0.) then
+ aw(nx1,j)=0.
+ ac(nx1,j)=dcell
+ f(nx1,j)=0.
+ endif
+ 60 continue
+c
+ do 80 i=1,nx
+c lower boundary
+ an(i,0)=as(i,1)
+ if(ibc(2).eq.1) then
+ ac(i,0)=as(i,1)
+ f(i,0)=2.*as(i,1)*0.
+ elseif(ibc(2).eq.2) then
+ ac(i,0)=-as(i,1)
+ f(i,0)=hy*as(i,1)*0.
+ endif
+ if(ac(i,0).eq.0.) then
+ an(i,0)=0.
+ ac(i,0)=dcell
+ f(i,0)=0.
+ endif
+c upper boundary
+ as(i,ny1)=an(i,ny)
+ if(ibc(4).eq.1) then
+ ac(i,ny1)=an(i,ny)
+ f(i,ny1)=2.*an(i,ny)*0.
+ elseif(ibc(4).eq.2) then
+ ac(i,ny1)=-an(i,ny)
+ f(i,ny1)=2.*an(i,ny)*0.
+ endif
+ if(ac(i,ny1).eq.0.) then
+ as(i,ny1)=0.
+ ac(i,ny1)=dcell
+ f(i,ny1)=0.
+ endif
+ 80 continue
+c connections between ghost boundary points zeroed
+ do 83 j=1,ny1
+ as(0,j)=0.
+ an(0,j-1)=0.
+ as(nx1,j)=0.
+ 83 an(nx1,j-1)=0.
+ do 86 i=1,nx1
+ aw(i,0)=0.
+ ae(i-1,0)=0.
+ aw(i,ny1)=0.
+ 86 ae(i-1,ny1)=0.
+c corner stencils and rhs defined
+ if(i32su.eq.32) then
+ do 90 j=0,ny1,ny1
+ do 90 i=0,nx1,nx1
+ ac(i,j)=dcell
+ aw(i,j)=0.
+ ae(i,j)=0.
+ as(i,j)=0.
+ an(i,j)=0.
+ 90 f(i,j)=0.
+ endif
+c i32su=22 - boundary conditions absorbed
+ if(i32su.eq.22) then
+ do 100 j=1,ny
+ awac=aw(1,j)/ac(0,j)
+ ac(1,j)=ac(1,j)-awac*ae(0,j)
+ aw(1,j)=0.
+ f(1,j)=f(1,j)-awac*f(0,j)
+ ac(0,j)=0.
+ ae(0,j)=0.
+ f(0,j)=0
+ awac=aw(nx1,j)/ac(nx1,j)
+ ac(nx,j)=ac(nx,j)-awac*ae(nx1,j)
+ ae(nx,j)=0.
+ f(nx,j)=f(nx,j)-awac*f(nx1,j)
+ ac(nx1,j)=0.
+ aw(nx1,j)=0.
+ 100 f(nx1,j)=0.
+c
+ do 110 i=1,nx
+ asac=as(i,1)/ac(i,0)
+ ac(i,1)=ac(i,1)-asac*an(i,0)
+ as(i,1)=0.
+ f(i,1)=f(i,1)-asac*f(i,0)
+ ac(i,0)=0.
+ an(i,0)=0.
+ f(i,0)=0.
+ anac=an(i,ny)/ac(i,ny1)
+ ac(i,ny)=ac(i,ny)-anac*as(i,ny1)
+ an(i,ny)=0.
+ f(i,ny)=f(i,ny)-anac*f(i,ny1)
+ ac(i,ny1)=0.
+ as(i,ny1)=0.
+ 110 f(i,ny1)=0.
+ endif
+ return
+ end
diff --git a/test/test_axibrill.par b/test/test_axibrill.par
new file mode 100644
index 0000000..5095ee8
--- /dev/null
+++ b/test/test_axibrill.par
@@ -0,0 +1,55 @@
+######################################################################
+!DESC "Initial data for axisymmetric distored black hole"
+######################################################################
+
+ActiveThorns = "time iobasic ADMconstraints pugh interp cartgrid3d einstein ADM IDAxiBrillBH ioascii ioutil"
+
+#pugh::enable_all_storage = "yes"
+#cactus::cctk_show_banners = 0
+
+# GENERAL
+
+einstein::evolution_system = "ADM"
+
+driver::global_nx = 32
+driver::global_ny = 32
+driver::global_nz = 32
+
+grid::type = "byspacing"
+grid::dxyz = 0.4
+grid::domain = "full"
+
+time::dtfac = 0.25
+
+cactus::cctk_initial_time = 0.
+cactus::cctk_itlast = 1
+
+adm::method = "stagleap"
+adm::bound = "static"
+
+# MODEL
+
+einstein::initial_data = "axibrillbh"
+idaxibrillbh::amp = 0.5
+idaxibrillbh::eta0 = 0.0
+idaxibrillbh::sigma = 1.0
+idaxibrillbh::etamax = 6.0
+idaxibrillbh::n = 2
+idaxibrillbh::ne = 102
+idaxibrillbh::nq = 27
+interp::order = 1
+
+
+# GAUGE
+einstein::slicing = "geodesic"
+
+
+# OUTPUT ########################################################
+IO::outdir = "test_axibrill"
+IOASCII::out1d_every = 1
+IOASCII::out1D_vars = "einstein::curv einstein::metric einstein::grr admconstraints::ham"
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_vars = "einstein::gxx"
+
+##################################################################
+
diff --git a/test/test_axibrill/grr.dl b/test/test_axibrill/grr.dl
new file mode 100644
index 0000000..b61114b
--- /dev/null
+++ b/test/test_axibrill/grr.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 1.0047713470372
+-10.045895 1.0065252883972
+-9.353074 1.0090391279161
+-8.660254 1.0126996946446
+-7.967434 1.0181251948643
+-7.274613 1.0263285292007
+-6.581793 1.0390179868368
+-5.888973 1.0591751694516
+-5.196152 1.0922253501803
+-4.503332 1.1485641657906
+-3.810512 1.2494458459285
+-3.117691 1.4418623483665
+-2.424871 1.8374906850228
+-1.732051 2.6806066878829
+-1.039230 3.7861908480670
+-0.346410 1.5424241733214
+0.346410 1.5424241733214
+1.039230 3.7861908480670
+1.732051 2.6806066878829
+2.424871 1.8374906850228
+3.117691 1.4418623483665
+3.810512 1.2494458459285
+4.503332 1.1485641657906
+5.196152 1.0922253501803
+5.888973 1.0591751694516
+6.581793 1.0390179868368
+7.274613 1.0263285292007
+7.967434 1.0181251948643
+8.660254 1.0126996946446
+9.353074 1.0090391279161
+10.045895 1.0065252883972
+10.738715 1.0047713470372
+
+
+"Time = 0.100000
+-10.738715 1.0047713470372
+-10.045895 1.0065469049184
+-9.353074 1.0090650018457
+-8.660254 1.0127310655224
+-7.967434 1.0181638167535
+-7.274613 1.0263768280130
+-6.581793 1.0390797715467
+-5.888973 1.0592564103933
+-5.196152 1.0923361371144
+-4.503332 1.1487231978359
+-3.810512 1.2496917886648
+-3.117691 1.4422862153388
+-2.424871 1.8383382776826
+-1.732051 2.6823553772885
+-1.039230 3.7870563491639
+-0.346410 1.5429262557666
+0.346410 1.5429262557667
+1.039230 3.7870563491640
+1.732051 2.6823553772885
+2.424871 1.8383382776826
+3.117691 1.4422862153388
+3.810512 1.2496917886648
+4.503332 1.1487231978359
+5.196152 1.0923361371144
+5.888973 1.0592564103933
+6.581793 1.0390797715467
+7.274613 1.0263768280130
+7.967434 1.0181638167535
+8.660254 1.0127310655224
+9.353074 1.0090650018457
+10.045895 1.0065469049184
+10.738715 1.0047713470372
diff --git a/test/test_axibrill/grr.xl b/test/test_axibrill/grr.xl
new file mode 100644
index 0000000..21c1e74
--- /dev/null
+++ b/test/test_axibrill/grr.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0739181071380
+-5.800000 1.0947338290899
+-5.400000 1.1226550387132
+-5.000000 1.1606600295738
+-4.600000 1.2132851657294
+-4.200000 1.2876509835220
+-3.800000 1.3953286042978
+-3.400000 1.5558653732435
+-3.000000 1.8036415991553
+-2.600000 2.2011817205028
+-2.200000 2.8622662625375
+-1.800000 3.9692227838200
+-1.400000 5.6226347181366
+-1.000000 6.8419735491225
+-0.600000 4.6470619376786
+-0.200000 1.5424241733214
+0.200000 1.5424241733214
+0.600000 4.6470619376786
+1.000000 6.8419735491225
+1.400000 5.6226347181366
+1.800000 3.9692227838200
+2.200000 2.8622662625375
+2.600000 2.2011817205028
+3.000000 1.8036415991553
+3.400000 1.5558653732435
+3.800000 1.3953286042978
+4.200000 1.2876509835220
+4.600000 1.2132851657294
+5.000000 1.1606600295738
+5.400000 1.1226550387132
+5.800000 1.0947338290899
+6.200000 1.0739181071380
+
+
+"Time = 0.100000
+-6.200000 1.0739181071380
+-5.800000 1.0948206077590
+-5.400000 1.1227575208668
+-5.000000 1.1607824447183
+-4.600000 1.2134335784690
+-4.200000 1.2878338753800
+-3.800000 1.3955590244350
+-3.400000 1.5561622774693
+-3.000000 1.8040335571003
+-2.600000 2.2017055175379
+-2.200000 2.8629460735248
+-1.800000 3.9698974255919
+-1.400000 5.6221504951282
+-1.000000 6.8390359466190
+-0.600000 4.6476860634314
+-0.200000 1.5429262557667
+0.200000 1.5429262557667
+0.600000 4.6476860634314
+1.000000 6.8390359466190
+1.400000 5.6221504951282
+1.800000 3.9698974255919
+2.200000 2.8629460735248
+2.600000 2.2017055175379
+3.000000 1.8040335571003
+3.400000 1.5561622774693
+3.800000 1.3955590244350
+4.200000 1.2878338753800
+4.600000 1.2134335784690
+5.000000 1.1607824447183
+5.400000 1.1227575208668
+5.800000 1.0948206077590
+6.200000 1.0739181071380
diff --git a/test/test_axibrill/grr.yl b/test/test_axibrill/grr.yl
new file mode 100644
index 0000000..21c1e74
--- /dev/null
+++ b/test/test_axibrill/grr.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0739181071380
+-5.800000 1.0947338290899
+-5.400000 1.1226550387132
+-5.000000 1.1606600295738
+-4.600000 1.2132851657294
+-4.200000 1.2876509835220
+-3.800000 1.3953286042978
+-3.400000 1.5558653732435
+-3.000000 1.8036415991553
+-2.600000 2.2011817205028
+-2.200000 2.8622662625375
+-1.800000 3.9692227838200
+-1.400000 5.6226347181366
+-1.000000 6.8419735491225
+-0.600000 4.6470619376786
+-0.200000 1.5424241733214
+0.200000 1.5424241733214
+0.600000 4.6470619376786
+1.000000 6.8419735491225
+1.400000 5.6226347181366
+1.800000 3.9692227838200
+2.200000 2.8622662625375
+2.600000 2.2011817205028
+3.000000 1.8036415991553
+3.400000 1.5558653732435
+3.800000 1.3953286042978
+4.200000 1.2876509835220
+4.600000 1.2132851657294
+5.000000 1.1606600295738
+5.400000 1.1226550387132
+5.800000 1.0947338290899
+6.200000 1.0739181071380
+
+
+"Time = 0.100000
+-6.200000 1.0739181071380
+-5.800000 1.0948206077590
+-5.400000 1.1227575208668
+-5.000000 1.1607824447183
+-4.600000 1.2134335784690
+-4.200000 1.2878338753800
+-3.800000 1.3955590244350
+-3.400000 1.5561622774693
+-3.000000 1.8040335571003
+-2.600000 2.2017055175379
+-2.200000 2.8629460735248
+-1.800000 3.9698974255919
+-1.400000 5.6221504951282
+-1.000000 6.8390359466190
+-0.600000 4.6476860634314
+-0.200000 1.5429262557667
+0.200000 1.5429262557667
+0.600000 4.6476860634314
+1.000000 6.8390359466190
+1.400000 5.6221504951282
+1.800000 3.9698974255919
+2.200000 2.8629460735248
+2.600000 2.2017055175379
+3.000000 1.8040335571003
+3.400000 1.5561622774693
+3.800000 1.3955590244350
+4.200000 1.2878338753800
+4.600000 1.2134335784690
+5.000000 1.1607824447183
+5.400000 1.1227575208668
+5.800000 1.0948206077590
+6.200000 1.0739181071380
diff --git a/test/test_axibrill/grr.zl b/test/test_axibrill/grr.zl
new file mode 100644
index 0000000..1199449
--- /dev/null
+++ b/test/test_axibrill/grr.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0001482724109
+-5.800000 1.0002150142174
+-5.400000 1.0003170268183
+-5.000000 1.0004761159728
+-4.600000 1.0007298197498
+-4.200000 1.0011446347552
+-3.800000 1.0018421916942
+-3.400000 1.0030531472576
+-3.000000 1.0052331829660
+-2.600000 1.0093255006370
+-2.200000 1.0173890280296
+-1.800000 1.0341953305475
+-1.400000 1.0715133709812
+-1.000000 1.1594305043567
+-0.600000 1.3596768153129
+-0.200000 1.5424241733214
+0.200000 1.5424241733214
+0.600000 1.3596768153129
+1.000000 1.1594305043567
+1.400000 1.0715133709812
+1.800000 1.0341953305475
+2.200000 1.0173890280296
+2.600000 1.0093255006370
+3.000000 1.0052331829660
+3.400000 1.0030531472576
+3.800000 1.0018421916942
+4.200000 1.0011446347552
+4.600000 1.0007298197498
+5.000000 1.0004761159728
+5.400000 1.0003170268183
+5.800000 1.0002150142174
+6.200000 1.0001482724109
+
+
+"Time = 0.100000
+-6.200000 1.0001482724109
+-5.800000 1.0002968840798
+-5.400000 1.0004177293716
+-5.000000 1.0006027856002
+-4.600000 1.0008930712063
+-4.200000 1.0013611226786
+-3.800000 1.0021384458470
+-3.400000 1.0034726854505
+-3.000000 1.0058485563333
+-2.600000 1.0102591902811
+-2.200000 1.0188437960928
+-1.800000 1.0364773716567
+-1.400000 1.0749462488187
+-1.000000 1.1636700494274
+-0.600000 1.3624743812226
+-0.200000 1.5429262557666
+0.200000 1.5429262557667
+0.600000 1.3624743812227
+1.000000 1.1636700494275
+1.400000 1.0749462488188
+1.800000 1.0364773716568
+2.200000 1.0188437960929
+2.600000 1.0102591902812
+3.000000 1.0058485563333
+3.400000 1.0034726854505
+3.800000 1.0021384458470
+4.200000 1.0013611226785
+4.600000 1.0008930712063
+5.000000 1.0006027856002
+5.400000 1.0004177293716
+5.800000 1.0002968840798
+6.200000 1.0001482724109
diff --git a/test/test_axibrill/gxx.dl b/test/test_axibrill/gxx.dl
new file mode 100644
index 0000000..4a1ae85
--- /dev/null
+++ b/test/test_axibrill/gxx.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 1.0023856735186
+-10.045895 1.0032626441986
+-9.353074 1.0045195639580
+-8.660254 1.0063498473223
+-7.967434 1.0090625974322
+-7.274613 1.0131642646003
+-6.581793 1.0195089934184
+-5.888973 1.0295875847258
+-5.196152 1.0461126750901
+-4.503332 1.0742820828953
+-3.810512 1.1247229229642
+-3.117691 1.2209311741832
+-2.424871 1.4187453425114
+-1.732051 1.8403033439414
+-1.039230 2.3930954240335
+-0.346410 1.2712120866607
+0.346410 1.2712120866607
+1.039230 2.3930954240335
+1.732051 1.8403033439414
+2.424871 1.4187453425114
+3.117691 1.2209311741832
+3.810512 1.1247229229642
+4.503332 1.0742820828953
+5.196152 1.0461126750901
+5.888973 1.0295875847258
+6.581793 1.0195089934184
+7.274613 1.0131642646003
+7.967434 1.0090625974322
+8.660254 1.0063498473223
+9.353074 1.0045195639580
+10.045895 1.0032626441986
+10.738715 1.0023856735186
+
+
+"Time = 0.100000
+-10.738715 1.0023856735186
+-10.045895 1.0032621429018
+-9.353074 1.0045189675285
+-8.660254 1.0063491749091
+-7.967434 1.0090619234994
+-7.274613 1.0131637671915
+-6.581793 1.0195091644179
+-5.888973 1.0295895830741
+-5.196152 1.0461193086744
+-4.503332 1.0743001276570
+-3.810512 1.1247690032299
+-3.117691 1.2210453467923
+-2.424871 1.4190126823698
+-1.732051 1.8406890701277
+-1.039230 2.3922409311558
+-0.346410 1.2713456927855
+0.346410 1.2713456927855
+1.039230 2.3922409311558
+1.732051 1.8406890701277
+2.424871 1.4190126823698
+3.117691 1.2210453467923
+3.810512 1.1247690032299
+4.503332 1.0743001276570
+5.196152 1.0461193086744
+5.888973 1.0295895830741
+6.581793 1.0195091644179
+7.274613 1.0131637671915
+7.967434 1.0090619234994
+8.660254 1.0063491749091
+9.353074 1.0045189675285
+10.045895 1.0032621429018
+10.738715 1.0023856735186
diff --git a/test/test_axibrill/gxx.xl b/test/test_axibrill/gxx.xl
new file mode 100644
index 0000000..ec4cbf7
--- /dev/null
+++ b/test/test_axibrill/gxx.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0738412691888
+-5.800000 1.0946213186040
+-5.400000 1.1224870181122
+-5.000000 1.1604033841592
+-4.600000 1.2128827408884
+-4.200000 1.2870001894417
+-3.800000 1.3942365363301
+-3.400000 1.5539485960944
+-3.000000 1.8000856628758
+-2.600000 2.1941159456763
+-2.200000 2.8470017849757
+-1.800000 3.9330127498710
+-1.400000 5.5301820237739
+-1.000000 6.6172822587716
+-0.600000 4.2823557439107
+-0.200000 1.2712120866607
+0.200000 1.2712120866607
+0.600000 4.2823557439107
+1.000000 6.6172822587716
+1.400000 5.5301820237739
+1.800000 3.9330127498710
+2.200000 2.8470017849757
+2.600000 2.1941159456763
+3.000000 1.8000856628758
+3.400000 1.5539485960944
+3.800000 1.3942365363301
+4.200000 1.2870001894417
+4.600000 1.2128827408884
+5.000000 1.1604033841592
+5.400000 1.1224870181122
+5.800000 1.0946213186040
+6.200000 1.0738412691888
+
+
+"Time = 0.100000
+-6.200000 1.0738412691888
+-5.800000 1.0947078550417
+-5.400000 1.1225891930270
+-5.000000 1.1605254080256
+-4.600000 1.2130306543370
+-4.200000 1.2871824416840
+-3.800000 1.3944661289803
+-3.400000 1.5542444015561
+-3.000000 1.8004760666107
+-2.600000 2.1946373273790
+-2.200000 2.8476778158887
+-1.800000 3.9336850269090
+-1.400000 5.5297096977908
+-1.000000 6.6142596559607
+-0.600000 4.2823968571863
+-0.200000 1.2713456927855
+0.200000 1.2713456927855
+0.600000 4.2823968571863
+1.000000 6.6142596559607
+1.400000 5.5297096977908
+1.800000 3.9336850269090
+2.200000 2.8476778158887
+2.600000 2.1946373273790
+3.000000 1.8004760666107
+3.400000 1.5542444015561
+3.800000 1.3944661289803
+4.200000 1.2871824416840
+4.600000 1.2130306543370
+5.000000 1.1605254080256
+5.400000 1.1225891930270
+5.800000 1.0947078550417
+6.200000 1.0738412691888
diff --git a/test/test_axibrill/gxx.yl b/test/test_axibrill/gxx.yl
new file mode 100644
index 0000000..34d7e93
--- /dev/null
+++ b/test/test_axibrill/gxx.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0000768379492
+-5.800000 1.0001125104859
+-5.400000 1.0001680206010
+-5.000000 1.0002566454147
+-4.600000 1.0004024248410
+-4.200000 1.0006507940804
+-3.800000 1.0010920679677
+-3.400000 1.0019167771491
+-3.000000 1.0035559362794
+-2.600000 1.0070657748265
+-2.200000 1.0152644775618
+-1.800000 1.0362100339490
+-1.400000 1.0924526943627
+-1.000000 1.2246912903509
+-0.600000 1.3647061937679
+-0.200000 1.2712120866607
+0.200000 1.2712120866607
+0.600000 1.3647061937679
+1.000000 1.2246912903509
+1.400000 1.0924526943627
+1.800000 1.0362100339490
+2.200000 1.0152644775618
+2.600000 1.0070657748265
+3.000000 1.0035559362794
+3.400000 1.0019167771491
+3.800000 1.0010920679677
+4.200000 1.0006507940804
+4.600000 1.0004024248410
+5.000000 1.0002566454147
+5.400000 1.0001680206010
+5.800000 1.0001125104859
+6.200000 1.0000768379492
+
+
+"Time = 0.100000
+-6.200000 1.0000768379492
+-5.800000 1.0000560137722
+-5.400000 1.0001027616656
+-5.000000 1.0001820245259
+-4.600000 1.0003190053665
+-4.200000 1.0005609513811
+-3.800000 1.0010022620367
+-3.400000 1.0018398289728
+-3.000000 1.0035148664799
+-2.600000 1.0070938843595
+-2.200000 1.0153873720803
+-1.800000 1.0363548978360
+-1.400000 1.0922282884786
+-1.000000 1.2237724608276
+-0.600000 1.3646339472628
+-0.200000 1.2713456927855
+0.200000 1.2713456927855
+0.600000 1.3646339472628
+1.000000 1.2237724608276
+1.400000 1.0922282884786
+1.800000 1.0363548978360
+2.200000 1.0153873720803
+2.600000 1.0070938843595
+3.000000 1.0035148664799
+3.400000 1.0018398289728
+3.800000 1.0010022620367
+4.200000 1.0005609513811
+4.600000 1.0003190053665
+5.000000 1.0001820245259
+5.400000 1.0001027616656
+5.800000 1.0000560137722
+6.200000 1.0000768379492
diff --git a/test/test_axibrill/gxx.zl b/test/test_axibrill/gxx.zl
new file mode 100644
index 0000000..8cc1e50
--- /dev/null
+++ b/test/test_axibrill/gxx.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0000741362054
+-5.800000 1.0001075071087
+-5.400000 1.0001585134092
+-5.000000 1.0002380579864
+-4.600000 1.0003649098749
+-4.200000 1.0005723173776
+-3.800000 1.0009210958471
+-3.400000 1.0015265736288
+-3.000000 1.0026165914830
+-2.600000 1.0046627503185
+-2.200000 1.0086945140148
+-1.800000 1.0170976652738
+-1.400000 1.0357566854906
+-1.000000 1.0797152521783
+-0.600000 1.1798384076565
+-0.200000 1.2712120866607
+0.200000 1.2712120866607
+0.600000 1.1798384076565
+1.000000 1.0797152521783
+1.400000 1.0357566854906
+1.800000 1.0170976652738
+2.200000 1.0086945140148
+2.600000 1.0046627503185
+3.000000 1.0026165914830
+3.400000 1.0015265736288
+3.800000 1.0009210958471
+4.200000 1.0005723173776
+4.600000 1.0003649098749
+5.000000 1.0002380579864
+5.400000 1.0001585134092
+5.800000 1.0001075071087
+6.200000 1.0000741362054
+
+
+"Time = 0.100000
+-6.200000 1.0000741362054
+-5.800000 1.0000666929878
+-5.400000 1.0001083944206
+-5.000000 1.0001752007912
+-4.600000 1.0002840356382
+-4.200000 1.0004654081661
+-3.800000 1.0007754064764
+-3.400000 1.0013217027171
+-3.000000 1.0023191177119
+-2.600000 1.0042180300259
+-2.200000 1.0080161300419
+-1.800000 1.0160650312357
+-1.400000 1.0342916046090
+-1.000000 1.0780518469549
+-0.600000 1.1788635786404
+-0.200000 1.2713456927855
+0.200000 1.2713456927855
+0.600000 1.1788635786405
+1.000000 1.0780518469549
+1.400000 1.0342916046090
+1.800000 1.0160650312358
+2.200000 1.0080161300419
+2.600000 1.0042180300259
+3.000000 1.0023191177119
+3.400000 1.0013217027171
+3.800000 1.0007754064764
+4.200000 1.0004654081661
+4.600000 1.0002840356382
+5.000000 1.0001752007912
+5.400000 1.0001083944206
+5.800000 1.0000666929878
+6.200000 1.0000741362054
diff --git a/test/test_axibrill/gxy.dl b/test/test_axibrill/gxy.dl
new file mode 100644
index 0000000..69f4a5f
--- /dev/null
+++ b/test/test_axibrill/gxy.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0023856735186
+-10.045895 0.0032626441986
+-9.353074 0.0045195639580
+-8.660254 0.0063498473223
+-7.967434 0.0090625974322
+-7.274613 0.0131642646003
+-6.581793 0.0195089934184
+-5.888973 0.0295875847258
+-5.196152 0.0461126750901
+-4.503332 0.0742820828953
+-3.810512 0.1247229229642
+-3.117691 0.2209311741832
+-2.424871 0.4187453425114
+-1.732051 0.8403033439414
+-1.039230 1.3930954240335
+-0.346410 0.2712120866607
+0.346410 0.2712120866607
+1.039230 1.3930954240335
+1.732051 0.8403033439414
+2.424871 0.4187453425114
+3.117691 0.2209311741832
+3.810512 0.1247229229642
+4.503332 0.0742820828953
+5.196152 0.0461126750901
+5.888973 0.0295875847258
+6.581793 0.0195089934184
+7.274613 0.0131642646003
+7.967434 0.0090625974322
+8.660254 0.0063498473223
+9.353074 0.0045195639580
+10.045895 0.0032626441986
+10.738715 0.0023856735186
+
+
+"Time = 0.100000
+-10.738715 0.0023856735186
+-10.045895 0.0032741761092
+-9.353074 0.0045336659915
+-8.660254 0.0063673886959
+-7.967434 0.0090848463395
+-7.274613 0.0131930731082
+-6.581793 0.0195472142109
+-5.888973 0.0296395954602
+-5.196152 0.0461852628933
+-4.503332 0.0743856737748
+-3.810512 0.1248726898949
+-3.117691 0.2211459665310
+-2.424871 0.4190420121163
+-1.732051 0.8406835004398
+-1.039230 1.3931076740829
+-0.346410 0.2712020390211
+0.346410 0.2712020390212
+1.039230 1.3931076740830
+1.732051 0.8406835004398
+2.424871 0.4190420121163
+3.117691 0.2211459665310
+3.810512 0.1248726898949
+4.503332 0.0743856737748
+5.196152 0.0461852628933
+5.888973 0.0296395954602
+6.581793 0.0195472142109
+7.274613 0.0131930731082
+7.967434 0.0090848463395
+8.660254 0.0063673886959
+9.353074 0.0045336659915
+10.045895 0.0032741761092
+10.738715 0.0023856735186
diff --git a/test/test_axibrill/gxy.xl b/test/test_axibrill/gxy.xl
new file mode 100644
index 0000000..6e9518f
--- /dev/null
+++ b/test/test_axibrill/gxy.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 -0.0023819764254
+-5.800000 -0.0032628040898
+-5.400000 -0.0045365562264
+-5.000000 -0.0064161353664
+-4.600000 -0.0092557713430
+-4.200000 -0.0136666756877
+-3.800000 -0.0207492913858
+-3.400000 -0.0325852115350
+-3.000000 -0.0533390441917
+-2.600000 -0.0918550727443
+-2.200000 -0.1679092531796
+-1.800000 -0.3258903055412
+-1.400000 -0.6471688605391
+-1.000000 -1.1234564517543
+-0.600000 -1.0941185813036
+-0.200000 -0.2712120866607
+0.200000 0.2712120866607
+0.600000 1.0941185813036
+1.000000 1.1234564517543
+1.400000 0.6471688605391
+1.800000 0.3258903055412
+2.200000 0.1679092531796
+2.600000 0.0918550727443
+3.000000 0.0533390441917
+3.400000 0.0325852115350
+3.800000 0.0207492913858
+4.200000 0.0136666756877
+4.600000 0.0092557713430
+5.000000 0.0064161353664
+5.400000 0.0045365562264
+5.800000 0.0032628040898
+6.200000 0.0023819764254
+
+
+"Time = 0.100000
+-6.200000 -0.0023819764254
+-5.800000 -0.0032677957033
+-5.400000 -0.0045428566031
+-5.000000 -0.0064241726681
+-4.600000 -0.0092661381137
+-4.200000 -0.0136802127987
+-3.800000 -0.0207672384064
+-3.400000 -0.0326094432880
+-3.000000 -0.0533725390551
+-2.600000 -0.0919022146426
+-2.200000 -0.1679731336938
+-1.800000 -0.3259480248673
+-1.400000 -0.6470783272011
+-1.000000 -1.1230819971828
+-0.600000 -1.0942768657679
+-0.200000 -0.2712020390212
+0.200000 0.2712020390212
+0.600000 1.0942768657679
+1.000000 1.1230819971828
+1.400000 0.6470783272011
+1.800000 0.3259480248673
+2.200000 0.1679731336938
+2.600000 0.0919022146426
+3.000000 0.0533725390551
+3.400000 0.0326094432880
+3.800000 0.0207672384064
+4.200000 0.0136802127987
+4.600000 0.0092661381137
+5.000000 0.0064241726681
+5.400000 0.0045428566031
+5.800000 0.0032677957033
+6.200000 0.0023819764254
diff --git a/test/test_axibrill/gxy.yl b/test/test_axibrill/gxy.yl
new file mode 100644
index 0000000..6e9518f
--- /dev/null
+++ b/test/test_axibrill/gxy.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 -0.0023819764254
+-5.800000 -0.0032628040898
+-5.400000 -0.0045365562264
+-5.000000 -0.0064161353664
+-4.600000 -0.0092557713430
+-4.200000 -0.0136666756877
+-3.800000 -0.0207492913858
+-3.400000 -0.0325852115350
+-3.000000 -0.0533390441917
+-2.600000 -0.0918550727443
+-2.200000 -0.1679092531796
+-1.800000 -0.3258903055412
+-1.400000 -0.6471688605391
+-1.000000 -1.1234564517543
+-0.600000 -1.0941185813036
+-0.200000 -0.2712120866607
+0.200000 0.2712120866607
+0.600000 1.0941185813036
+1.000000 1.1234564517543
+1.400000 0.6471688605391
+1.800000 0.3258903055412
+2.200000 0.1679092531796
+2.600000 0.0918550727443
+3.000000 0.0533390441917
+3.400000 0.0325852115350
+3.800000 0.0207492913858
+4.200000 0.0136666756877
+4.600000 0.0092557713430
+5.000000 0.0064161353664
+5.400000 0.0045365562264
+5.800000 0.0032628040898
+6.200000 0.0023819764254
+
+
+"Time = 0.100000
+-6.200000 -0.0023819764254
+-5.800000 -0.0032677957033
+-5.400000 -0.0045428566031
+-5.000000 -0.0064241726681
+-4.600000 -0.0092661381137
+-4.200000 -0.0136802127987
+-3.800000 -0.0207672384064
+-3.400000 -0.0326094432880
+-3.000000 -0.0533725390551
+-2.600000 -0.0919022146426
+-2.200000 -0.1679731336938
+-1.800000 -0.3259480248673
+-1.400000 -0.6470783272011
+-1.000000 -1.1230819971828
+-0.600000 -1.0942768657679
+-0.200000 -0.2712020390212
+0.200000 0.2712020390212
+0.600000 1.0942768657679
+1.000000 1.1230819971828
+1.400000 0.6470783272011
+1.800000 0.3259480248673
+2.200000 0.1679731336938
+2.600000 0.0919022146426
+3.000000 0.0533725390551
+3.400000 0.0326094432880
+3.800000 0.0207672384064
+4.200000 0.0136802127987
+4.600000 0.0092661381137
+5.000000 0.0064241726681
+5.400000 0.0045428566031
+5.800000 0.0032677957033
+6.200000 0.0023819764254
diff --git a/test/test_axibrill/gxy.zl b/test/test_axibrill/gxy.zl
new file mode 100644
index 0000000..22f96fc
--- /dev/null
+++ b/test/test_axibrill/gxy.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000741362054
+-5.800000 0.0001075071087
+-5.400000 0.0001585134092
+-5.000000 0.0002380579864
+-4.600000 0.0003649098749
+-4.200000 0.0005723173776
+-3.800000 0.0009210958471
+-3.400000 0.0015265736288
+-3.000000 0.0026165914830
+-2.600000 0.0046627503185
+-2.200000 0.0086945140148
+-1.800000 0.0170976652738
+-1.400000 0.0357566854906
+-1.000000 0.0797152521783
+-0.600000 0.1798384076565
+-0.200000 0.2712120866607
+0.200000 0.2712120866607
+0.600000 0.1798384076565
+1.000000 0.0797152521783
+1.400000 0.0357566854906
+1.800000 0.0170976652738
+2.200000 0.0086945140148
+2.600000 0.0046627503185
+3.000000 0.0026165914830
+3.400000 0.0015265736288
+3.800000 0.0009210958471
+4.200000 0.0005723173776
+4.600000 0.0003649098749
+5.000000 0.0002380579864
+5.400000 0.0001585134092
+5.800000 0.0001075071087
+6.200000 0.0000741362054
+
+
+"Time = 0.100000
+-6.200000 0.0000741362054
+-5.800000 0.0001077724777
+-5.400000 0.0001589084897
+-5.000000 0.0002386614906
+-4.600000 0.0003658571380
+-4.200000 0.0005738482401
+-3.800000 0.0009236485895
+-3.400000 0.0015309678038
+-3.000000 0.0026243808106
+-2.600000 0.0046768451146
+-2.200000 0.0087198761390
+-1.800000 0.0171398054861
+-1.400000 0.0358051681469
+-1.000000 0.0796766587561
+-0.600000 0.1795623218381
+-0.200000 0.2712020390211
+0.200000 0.2712020390212
+0.600000 0.1795623218381
+1.000000 0.0796766587561
+1.400000 0.0358051681469
+1.800000 0.0171398054861
+2.200000 0.0087198761390
+2.600000 0.0046768451146
+3.000000 0.0026243808106
+3.400000 0.0015309678038
+3.800000 0.0009236485895
+4.200000 0.0005738482401
+4.600000 0.0003658571380
+5.000000 0.0002386614906
+5.400000 0.0001589084897
+5.800000 0.0001077724777
+6.200000 0.0000741362054
diff --git a/test/test_axibrill/gxz.dl b/test/test_axibrill/gxz.dl
new file mode 100644
index 0000000..ff79b56
--- /dev/null
+++ b/test/test_axibrill/gxz.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 0.0000104304891
+-9.353074 0.0000123282110
+-8.660254 0.0000147062179
+-7.967434 0.0000177350614
+-7.274613 0.0000216227590
+-6.581793 0.0000268250349
+-5.888973 0.0000340839554
+-5.196152 0.0000449653032
+-4.503332 0.0000633301646
+-3.810512 0.0000997908888
+-3.117691 0.0001872750845
+-2.424871 0.0004371167759
+-1.732051 0.0011466109706
+-1.039230 0.0014951805690
+-0.346410 0.0003155871952
+0.346410 0.0003155871952
+1.039230 0.0014951805690
+1.732051 0.0011466109706
+2.424871 0.0004371167759
+3.117691 0.0001872750845
+3.810512 0.0000997908888
+4.503332 0.0000633301646
+5.196152 0.0000449653032
+5.888973 0.0000340839554
+6.581793 0.0000268250349
+7.274613 0.0000216227590
+7.967434 0.0000177350614
+8.660254 0.0000147062179
+9.353074 0.0000123282110
+10.045895 0.0000104304891
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/gxz.xl b/test/test_axibrill/gxz.xl
new file mode 100644
index 0000000..e117ffd
--- /dev/null
+++ b/test/test_axibrill/gxz.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000028212022
+-5.400000 -0.0000032408945
+-5.000000 -0.0000037171906
+-4.600000 -0.0000042597395
+-4.200000 -0.0000049344967
+-3.800000 -0.0000059311633
+-3.400000 -0.0000077983170
+-3.000000 -0.0000120729964
+-2.600000 -0.0000227613290
+-2.200000 -0.0000499025298
+-1.800000 -0.0001150276102
+-1.400000 -0.0002684367238
+-1.000000 -0.0006457552941
+-0.600000 -0.0009064046052
+-0.200000 -0.0003155871952
+0.200000 0.0003155871952
+0.600000 0.0009064046052
+1.000000 0.0006457552941
+1.400000 0.0002684367238
+1.800000 0.0001150276102
+2.200000 0.0000499025298
+2.600000 0.0000227613290
+3.000000 0.0000120729964
+3.400000 0.0000077983170
+3.800000 0.0000059311633
+4.200000 0.0000049344967
+4.600000 0.0000042597395
+5.000000 0.0000037171906
+5.400000 0.0000032408945
+5.800000 0.0000028212022
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/gxz.yl b/test/test_axibrill/gxz.yl
new file mode 100644
index 0000000..8e24688
--- /dev/null
+++ b/test/test_axibrill/gxz.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000000758418
+-5.400000 0.0000000815482
+-5.000000 0.0000000771245
+-4.600000 0.0000000467518
+-4.200000 -0.0000000451969
+-3.800000 -0.0000002835460
+-3.400000 -0.0000008766235
+-3.000000 -0.0000023454148
+-2.600000 -0.0000059600193
+-2.200000 -0.0000141242188
+-1.800000 -0.0000261180416
+-1.400000 -0.0000066835514
+-1.000000 0.0001378219136
+-0.600000 0.0003217221739
+-0.200000 0.0003155871952
+0.200000 0.0003155871952
+0.600000 0.0003217221739
+1.000000 0.0001378219136
+1.400000 -0.0000066835514
+1.800000 -0.0000261180416
+2.200000 -0.0000141242188
+2.600000 -0.0000059600193
+3.000000 -0.0000023454148
+3.400000 -0.0000008766235
+3.800000 -0.0000002835460
+4.200000 -0.0000000451969
+4.600000 0.0000000467518
+5.000000 0.0000000771245
+5.400000 0.0000000815482
+5.800000 0.0000000758418
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/gxz.zl b/test/test_axibrill/gxz.zl
new file mode 100644
index 0000000..bd71f9a
--- /dev/null
+++ b/test/test_axibrill/gxz.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000050582828
+-5.400000 -0.0000069047747
+-5.000000 -0.0000096879902
+-4.600000 -0.0000140038570
+-4.200000 -0.0000208935258
+-3.800000 -0.0000322527345
+-3.400000 -0.0000515953094
+-3.000000 -0.0000856341611
+-2.600000 -0.0001474414753
+-2.200000 -0.0002621660374
+-1.800000 -0.0004749668679
+-1.400000 -0.0008384839165
+-1.000000 -0.0012608128810
+-0.600000 -0.0011306513736
+-0.200000 -0.0003155871952
+0.200000 0.0003155871952
+0.600000 0.0011306513736
+1.000000 0.0012608128810
+1.400000 0.0008384839166
+1.800000 0.0004749668679
+2.200000 0.0002621660374
+2.600000 0.0001474414753
+3.000000 0.0000856341611
+3.400000 0.0000515953094
+3.800000 0.0000322527345
+4.200000 0.0000208935258
+4.600000 0.0000140038570
+5.000000 0.0000096879902
+5.400000 0.0000069047747
+5.800000 0.0000050582828
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/gyy.dl b/test/test_axibrill/gyy.dl
new file mode 100644
index 0000000..4a1ae85
--- /dev/null
+++ b/test/test_axibrill/gyy.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 1.0023856735186
+-10.045895 1.0032626441986
+-9.353074 1.0045195639580
+-8.660254 1.0063498473223
+-7.967434 1.0090625974322
+-7.274613 1.0131642646003
+-6.581793 1.0195089934184
+-5.888973 1.0295875847258
+-5.196152 1.0461126750901
+-4.503332 1.0742820828953
+-3.810512 1.1247229229642
+-3.117691 1.2209311741832
+-2.424871 1.4187453425114
+-1.732051 1.8403033439414
+-1.039230 2.3930954240335
+-0.346410 1.2712120866607
+0.346410 1.2712120866607
+1.039230 2.3930954240335
+1.732051 1.8403033439414
+2.424871 1.4187453425114
+3.117691 1.2209311741832
+3.810512 1.1247229229642
+4.503332 1.0742820828953
+5.196152 1.0461126750901
+5.888973 1.0295875847258
+6.581793 1.0195089934184
+7.274613 1.0131642646003
+7.967434 1.0090625974322
+8.660254 1.0063498473223
+9.353074 1.0045195639580
+10.045895 1.0032626441986
+10.738715 1.0023856735186
+
+
+"Time = 0.100000
+-10.738715 1.0023856735186
+-10.045895 1.0032621429018
+-9.353074 1.0045189675285
+-8.660254 1.0063491749091
+-7.967434 1.0090619234994
+-7.274613 1.0131637671915
+-6.581793 1.0195091644179
+-5.888973 1.0295895830741
+-5.196152 1.0461193086744
+-4.503332 1.0743001276570
+-3.810512 1.1247690032299
+-3.117691 1.2210453467923
+-2.424871 1.4190126823698
+-1.732051 1.8406890701277
+-1.039230 2.3922409311558
+-0.346410 1.2713456927855
+0.346410 1.2713456927855
+1.039230 2.3922409311558
+1.732051 1.8406890701277
+2.424871 1.4190126823698
+3.117691 1.2210453467923
+3.810512 1.1247690032299
+4.503332 1.0743001276570
+5.196152 1.0461193086744
+5.888973 1.0295895830741
+6.581793 1.0195091644179
+7.274613 1.0131637671915
+7.967434 1.0090619234994
+8.660254 1.0063491749091
+9.353074 1.0045189675285
+10.045895 1.0032621429018
+10.738715 1.0023856735186
diff --git a/test/test_axibrill/gyy.xl b/test/test_axibrill/gyy.xl
new file mode 100644
index 0000000..34d7e93
--- /dev/null
+++ b/test/test_axibrill/gyy.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0000768379492
+-5.800000 1.0001125104859
+-5.400000 1.0001680206010
+-5.000000 1.0002566454147
+-4.600000 1.0004024248410
+-4.200000 1.0006507940804
+-3.800000 1.0010920679677
+-3.400000 1.0019167771491
+-3.000000 1.0035559362794
+-2.600000 1.0070657748265
+-2.200000 1.0152644775618
+-1.800000 1.0362100339490
+-1.400000 1.0924526943627
+-1.000000 1.2246912903509
+-0.600000 1.3647061937679
+-0.200000 1.2712120866607
+0.200000 1.2712120866607
+0.600000 1.3647061937679
+1.000000 1.2246912903509
+1.400000 1.0924526943627
+1.800000 1.0362100339490
+2.200000 1.0152644775618
+2.600000 1.0070657748265
+3.000000 1.0035559362794
+3.400000 1.0019167771491
+3.800000 1.0010920679677
+4.200000 1.0006507940804
+4.600000 1.0004024248410
+5.000000 1.0002566454147
+5.400000 1.0001680206010
+5.800000 1.0001125104859
+6.200000 1.0000768379492
+
+
+"Time = 0.100000
+-6.200000 1.0000768379492
+-5.800000 1.0000560137722
+-5.400000 1.0001027616656
+-5.000000 1.0001820245259
+-4.600000 1.0003190053665
+-4.200000 1.0005609513811
+-3.800000 1.0010022620367
+-3.400000 1.0018398289728
+-3.000000 1.0035148664799
+-2.600000 1.0070938843595
+-2.200000 1.0153873720803
+-1.800000 1.0363548978360
+-1.400000 1.0922282884786
+-1.000000 1.2237724608276
+-0.600000 1.3646339472628
+-0.200000 1.2713456927855
+0.200000 1.2713456927855
+0.600000 1.3646339472628
+1.000000 1.2237724608276
+1.400000 1.0922282884786
+1.800000 1.0363548978360
+2.200000 1.0153873720803
+2.600000 1.0070938843595
+3.000000 1.0035148664799
+3.400000 1.0018398289728
+3.800000 1.0010022620367
+4.200000 1.0005609513811
+4.600000 1.0003190053665
+5.000000 1.0001820245259
+5.400000 1.0001027616656
+5.800000 1.0000560137722
+6.200000 1.0000768379492
diff --git a/test/test_axibrill/gyy.yl b/test/test_axibrill/gyy.yl
new file mode 100644
index 0000000..ec4cbf7
--- /dev/null
+++ b/test/test_axibrill/gyy.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0738412691888
+-5.800000 1.0946213186040
+-5.400000 1.1224870181122
+-5.000000 1.1604033841592
+-4.600000 1.2128827408884
+-4.200000 1.2870001894417
+-3.800000 1.3942365363301
+-3.400000 1.5539485960944
+-3.000000 1.8000856628758
+-2.600000 2.1941159456763
+-2.200000 2.8470017849757
+-1.800000 3.9330127498710
+-1.400000 5.5301820237739
+-1.000000 6.6172822587716
+-0.600000 4.2823557439107
+-0.200000 1.2712120866607
+0.200000 1.2712120866607
+0.600000 4.2823557439107
+1.000000 6.6172822587716
+1.400000 5.5301820237739
+1.800000 3.9330127498710
+2.200000 2.8470017849757
+2.600000 2.1941159456763
+3.000000 1.8000856628758
+3.400000 1.5539485960944
+3.800000 1.3942365363301
+4.200000 1.2870001894417
+4.600000 1.2128827408884
+5.000000 1.1604033841592
+5.400000 1.1224870181122
+5.800000 1.0946213186040
+6.200000 1.0738412691888
+
+
+"Time = 0.100000
+-6.200000 1.0738412691888
+-5.800000 1.0947078550417
+-5.400000 1.1225891930270
+-5.000000 1.1605254080256
+-4.600000 1.2130306543370
+-4.200000 1.2871824416840
+-3.800000 1.3944661289803
+-3.400000 1.5542444015561
+-3.000000 1.8004760666107
+-2.600000 2.1946373273790
+-2.200000 2.8476778158887
+-1.800000 3.9336850269090
+-1.400000 5.5297096977908
+-1.000000 6.6142596559607
+-0.600000 4.2823968571863
+-0.200000 1.2713456927855
+0.200000 1.2713456927855
+0.600000 4.2823968571863
+1.000000 6.6142596559607
+1.400000 5.5297096977908
+1.800000 3.9336850269090
+2.200000 2.8476778158887
+2.600000 2.1946373273790
+3.000000 1.8004760666107
+3.400000 1.5542444015561
+3.800000 1.3944661289803
+4.200000 1.2871824416840
+4.600000 1.2130306543370
+5.000000 1.1605254080256
+5.400000 1.1225891930270
+5.800000 1.0947078550417
+6.200000 1.0738412691888
diff --git a/test/test_axibrill/gyy.zl b/test/test_axibrill/gyy.zl
new file mode 100644
index 0000000..8cc1e50
--- /dev/null
+++ b/test/test_axibrill/gyy.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0000741362054
+-5.800000 1.0001075071087
+-5.400000 1.0001585134092
+-5.000000 1.0002380579864
+-4.600000 1.0003649098749
+-4.200000 1.0005723173776
+-3.800000 1.0009210958471
+-3.400000 1.0015265736288
+-3.000000 1.0026165914830
+-2.600000 1.0046627503185
+-2.200000 1.0086945140148
+-1.800000 1.0170976652738
+-1.400000 1.0357566854906
+-1.000000 1.0797152521783
+-0.600000 1.1798384076565
+-0.200000 1.2712120866607
+0.200000 1.2712120866607
+0.600000 1.1798384076565
+1.000000 1.0797152521783
+1.400000 1.0357566854906
+1.800000 1.0170976652738
+2.200000 1.0086945140148
+2.600000 1.0046627503185
+3.000000 1.0026165914830
+3.400000 1.0015265736288
+3.800000 1.0009210958471
+4.200000 1.0005723173776
+4.600000 1.0003649098749
+5.000000 1.0002380579864
+5.400000 1.0001585134092
+5.800000 1.0001075071087
+6.200000 1.0000741362054
+
+
+"Time = 0.100000
+-6.200000 1.0000741362054
+-5.800000 1.0000666929878
+-5.400000 1.0001083944206
+-5.000000 1.0001752007912
+-4.600000 1.0002840356382
+-4.200000 1.0004654081661
+-3.800000 1.0007754064764
+-3.400000 1.0013217027171
+-3.000000 1.0023191177119
+-2.600000 1.0042180300259
+-2.200000 1.0080161300419
+-1.800000 1.0160650312357
+-1.400000 1.0342916046090
+-1.000000 1.0780518469549
+-0.600000 1.1788635786404
+-0.200000 1.2713456927855
+0.200000 1.2713456927855
+0.600000 1.1788635786405
+1.000000 1.0780518469549
+1.400000 1.0342916046090
+1.800000 1.0160650312358
+2.200000 1.0080161300419
+2.600000 1.0042180300259
+3.000000 1.0023191177119
+3.400000 1.0013217027171
+3.800000 1.0007754064764
+4.200000 1.0004654081661
+4.600000 1.0002840356382
+5.000000 1.0001752007912
+5.400000 1.0001083944206
+5.800000 1.0000666929878
+6.200000 1.0000741362054
diff --git a/test/test_axibrill/gyz.dl b/test/test_axibrill/gyz.dl
new file mode 100644
index 0000000..ff79b56
--- /dev/null
+++ b/test/test_axibrill/gyz.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 0.0000104304891
+-9.353074 0.0000123282110
+-8.660254 0.0000147062179
+-7.967434 0.0000177350614
+-7.274613 0.0000216227590
+-6.581793 0.0000268250349
+-5.888973 0.0000340839554
+-5.196152 0.0000449653032
+-4.503332 0.0000633301646
+-3.810512 0.0000997908888
+-3.117691 0.0001872750845
+-2.424871 0.0004371167759
+-1.732051 0.0011466109706
+-1.039230 0.0014951805690
+-0.346410 0.0003155871952
+0.346410 0.0003155871952
+1.039230 0.0014951805690
+1.732051 0.0011466109706
+2.424871 0.0004371167759
+3.117691 0.0001872750845
+3.810512 0.0000997908888
+4.503332 0.0000633301646
+5.196152 0.0000449653032
+5.888973 0.0000340839554
+6.581793 0.0000268250349
+7.274613 0.0000216227590
+7.967434 0.0000177350614
+8.660254 0.0000147062179
+9.353074 0.0000123282110
+10.045895 0.0000104304891
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/gyz.xl b/test/test_axibrill/gyz.xl
new file mode 100644
index 0000000..8e24688
--- /dev/null
+++ b/test/test_axibrill/gyz.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000000758418
+-5.400000 0.0000000815482
+-5.000000 0.0000000771245
+-4.600000 0.0000000467518
+-4.200000 -0.0000000451969
+-3.800000 -0.0000002835460
+-3.400000 -0.0000008766235
+-3.000000 -0.0000023454148
+-2.600000 -0.0000059600193
+-2.200000 -0.0000141242188
+-1.800000 -0.0000261180416
+-1.400000 -0.0000066835514
+-1.000000 0.0001378219136
+-0.600000 0.0003217221739
+-0.200000 0.0003155871952
+0.200000 0.0003155871952
+0.600000 0.0003217221739
+1.000000 0.0001378219136
+1.400000 -0.0000066835514
+1.800000 -0.0000261180416
+2.200000 -0.0000141242188
+2.600000 -0.0000059600193
+3.000000 -0.0000023454148
+3.400000 -0.0000008766235
+3.800000 -0.0000002835460
+4.200000 -0.0000000451969
+4.600000 0.0000000467518
+5.000000 0.0000000771245
+5.400000 0.0000000815482
+5.800000 0.0000000758418
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/gyz.yl b/test/test_axibrill/gyz.yl
new file mode 100644
index 0000000..e117ffd
--- /dev/null
+++ b/test/test_axibrill/gyz.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000028212022
+-5.400000 -0.0000032408945
+-5.000000 -0.0000037171906
+-4.600000 -0.0000042597395
+-4.200000 -0.0000049344967
+-3.800000 -0.0000059311633
+-3.400000 -0.0000077983170
+-3.000000 -0.0000120729964
+-2.600000 -0.0000227613290
+-2.200000 -0.0000499025298
+-1.800000 -0.0001150276102
+-1.400000 -0.0002684367238
+-1.000000 -0.0006457552941
+-0.600000 -0.0009064046052
+-0.200000 -0.0003155871952
+0.200000 0.0003155871952
+0.600000 0.0009064046052
+1.000000 0.0006457552941
+1.400000 0.0002684367238
+1.800000 0.0001150276102
+2.200000 0.0000499025298
+2.600000 0.0000227613290
+3.000000 0.0000120729964
+3.400000 0.0000077983170
+3.800000 0.0000059311633
+4.200000 0.0000049344967
+4.600000 0.0000042597395
+5.000000 0.0000037171906
+5.400000 0.0000032408945
+5.800000 0.0000028212022
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/gyz.zl b/test/test_axibrill/gyz.zl
new file mode 100644
index 0000000..bd71f9a
--- /dev/null
+++ b/test/test_axibrill/gyz.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000050582828
+-5.400000 -0.0000069047747
+-5.000000 -0.0000096879902
+-4.600000 -0.0000140038570
+-4.200000 -0.0000208935258
+-3.800000 -0.0000322527345
+-3.400000 -0.0000515953094
+-3.000000 -0.0000856341611
+-2.600000 -0.0001474414753
+-2.200000 -0.0002621660374
+-1.800000 -0.0004749668679
+-1.400000 -0.0008384839165
+-1.000000 -0.0012608128810
+-0.600000 -0.0011306513736
+-0.200000 -0.0003155871952
+0.200000 0.0003155871952
+0.600000 0.0011306513736
+1.000000 0.0012608128810
+1.400000 0.0008384839166
+1.800000 0.0004749668679
+2.200000 0.0002621660374
+2.600000 0.0001474414753
+3.000000 0.0000856341611
+3.400000 0.0000515953094
+3.800000 0.0000322527345
+4.200000 0.0000208935258
+4.600000 0.0000140038570
+5.000000 0.0000096879902
+5.400000 0.0000069047747
+5.800000 0.0000050582828
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/gzz.dl b/test/test_axibrill/gzz.dl
new file mode 100644
index 0000000..1bc84ed
--- /dev/null
+++ b/test/test_axibrill/gzz.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 1.0047713470372
+-10.045895 1.0065252883972
+-9.353074 1.0090391279161
+-8.660254 1.0126996946446
+-7.967434 1.0181251948643
+-7.274613 1.0263285292007
+-6.581793 1.0390179868368
+-5.888973 1.0591751694516
+-5.196152 1.0922253501803
+-4.503332 1.1485641657906
+-3.810512 1.2494458459285
+-3.117691 1.4418623483665
+-2.424871 1.8374906850228
+-1.732051 2.6806066878829
+-1.039230 3.7861908480670
+-0.346410 1.5424241733214
+0.346410 1.5424241733214
+1.039230 3.7861908480670
+1.732051 2.6806066878829
+2.424871 1.8374906850228
+3.117691 1.4418623483665
+3.810512 1.2494458459285
+4.503332 1.1485641657906
+5.196152 1.0922253501803
+5.888973 1.0591751694516
+6.581793 1.0390179868368
+7.274613 1.0263285292007
+7.967434 1.0181251948643
+8.660254 1.0126996946446
+9.353074 1.0090391279161
+10.045895 1.0065252883972
+10.738715 1.0047713470372
+
+
+"Time = 0.100000
+-10.738715 1.0047713470372
+-10.045895 1.0065263547771
+-9.353074 1.0090404256532
+-8.660254 1.0127012444856
+-7.967434 1.0181269703370
+-7.274613 1.0263303124036
+-6.581793 1.0390192572428
+-5.888973 1.0591745382898
+-5.196152 1.0922194069951
+-4.503332 1.1485446699858
+-3.810512 1.2493928161895
+-3.117691 1.4417269190318
+-2.424871 1.8371569769718
+-1.732051 2.6797345468483
+-1.039230 3.7844911147382
+-0.346410 1.5424209549057
+0.346410 1.5424209549057
+1.039230 3.7844911147383
+1.732051 2.6797345468483
+2.424871 1.8371569769718
+3.117691 1.4417269190318
+3.810512 1.2493928161895
+4.503332 1.1485446699858
+5.196152 1.0922194069951
+5.888973 1.0591745382898
+6.581793 1.0390192572428
+7.274613 1.0263303124036
+7.967434 1.0181269703370
+8.660254 1.0127012444856
+9.353074 1.0090404256532
+10.045895 1.0065263547771
+10.738715 1.0047713470372
diff --git a/test/test_axibrill/gzz.xl b/test/test_axibrill/gzz.xl
new file mode 100644
index 0000000..27114bc
--- /dev/null
+++ b/test/test_axibrill/gzz.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0739181071380
+-5.800000 1.0947338290899
+-5.400000 1.1226550387132
+-5.000000 1.1606600295738
+-4.600000 1.2132851657294
+-4.200000 1.2876509835220
+-3.800000 1.3953286042978
+-3.400000 1.5558653732435
+-3.000000 1.8036415991553
+-2.600000 2.2011817205028
+-2.200000 2.8622662625375
+-1.800000 3.9692227838200
+-1.400000 5.6226347181366
+-1.000000 6.8419735491225
+-0.600000 4.6470619376786
+-0.200000 1.5424241733214
+0.200000 1.5424241733214
+0.600000 4.6470619376786
+1.000000 6.8419735491225
+1.400000 5.6226347181366
+1.800000 3.9692227838200
+2.200000 2.8622662625375
+2.600000 2.2011817205028
+3.000000 1.8036415991553
+3.400000 1.5558653732435
+3.800000 1.3953286042978
+4.200000 1.2876509835220
+4.600000 1.2132851657294
+5.000000 1.1606600295738
+5.400000 1.1226550387132
+5.800000 1.0947338290899
+6.200000 1.0739181071380
+
+
+"Time = 0.100000
+-6.200000 1.0739181071380
+-5.800000 1.0947143047788
+-5.400000 1.1226338472751
+-5.000000 1.1606361506609
+-4.600000 1.2132566226526
+-4.200000 1.2876129632774
+-3.800000 1.3952711694185
+-3.400000 1.5557664035536
+-3.000000 1.8034539371645
+-2.600000 2.2008038323422
+-2.200000 2.8614854004588
+-1.800000 3.9675615381438
+-1.400000 5.6188304434618
+-1.000000 6.8361535302706
+-0.600000 4.6465979692199
+-0.200000 1.5424209549057
+0.200000 1.5424209549057
+0.600000 4.6465979692199
+1.000000 6.8361535302706
+1.400000 5.6188304434618
+1.800000 3.9675615381438
+2.200000 2.8614854004588
+2.600000 2.2008038323422
+3.000000 1.8034539371645
+3.400000 1.5557664035536
+3.800000 1.3952711694185
+4.200000 1.2876129632774
+4.600000 1.2132566226526
+5.000000 1.1606361506609
+5.400000 1.1226338472751
+5.800000 1.0947143047788
+6.200000 1.0739181071380
diff --git a/test/test_axibrill/gzz.yl b/test/test_axibrill/gzz.yl
new file mode 100644
index 0000000..27114bc
--- /dev/null
+++ b/test/test_axibrill/gzz.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0739181071380
+-5.800000 1.0947338290899
+-5.400000 1.1226550387132
+-5.000000 1.1606600295738
+-4.600000 1.2132851657294
+-4.200000 1.2876509835220
+-3.800000 1.3953286042978
+-3.400000 1.5558653732435
+-3.000000 1.8036415991553
+-2.600000 2.2011817205028
+-2.200000 2.8622662625375
+-1.800000 3.9692227838200
+-1.400000 5.6226347181366
+-1.000000 6.8419735491225
+-0.600000 4.6470619376786
+-0.200000 1.5424241733214
+0.200000 1.5424241733214
+0.600000 4.6470619376786
+1.000000 6.8419735491225
+1.400000 5.6226347181366
+1.800000 3.9692227838200
+2.200000 2.8622662625375
+2.600000 2.2011817205028
+3.000000 1.8036415991553
+3.400000 1.5558653732435
+3.800000 1.3953286042978
+4.200000 1.2876509835220
+4.600000 1.2132851657294
+5.000000 1.1606600295738
+5.400000 1.1226550387132
+5.800000 1.0947338290899
+6.200000 1.0739181071380
+
+
+"Time = 0.100000
+-6.200000 1.0739181071380
+-5.800000 1.0947143047788
+-5.400000 1.1226338472751
+-5.000000 1.1606361506609
+-4.600000 1.2132566226526
+-4.200000 1.2876129632774
+-3.800000 1.3952711694185
+-3.400000 1.5557664035536
+-3.000000 1.8034539371645
+-2.600000 2.2008038323422
+-2.200000 2.8614854004588
+-1.800000 3.9675615381438
+-1.400000 5.6188304434618
+-1.000000 6.8361535302706
+-0.600000 4.6465979692199
+-0.200000 1.5424209549057
+0.200000 1.5424209549057
+0.600000 4.6465979692199
+1.000000 6.8361535302706
+1.400000 5.6188304434618
+1.800000 3.9675615381438
+2.200000 2.8614854004588
+2.600000 2.2008038323422
+3.000000 1.8034539371645
+3.400000 1.5557664035536
+3.800000 1.3952711694185
+4.200000 1.2876129632774
+4.600000 1.2132566226526
+5.000000 1.1606361506609
+5.400000 1.1226338472751
+5.800000 1.0947143047788
+6.200000 1.0739181071380
diff --git a/test/test_axibrill/gzz.zl b/test/test_axibrill/gzz.zl
new file mode 100644
index 0000000..5bc21ee
--- /dev/null
+++ b/test/test_axibrill/gzz.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 1.0001482724109
+-5.800000 1.0002150142174
+-5.400000 1.0003170268183
+-5.000000 1.0004761159728
+-4.600000 1.0007298197498
+-4.200000 1.0011446347552
+-3.800000 1.0018421916942
+-3.400000 1.0030531472576
+-3.000000 1.0052331829660
+-2.600000 1.0093255006370
+-2.200000 1.0173890280296
+-1.800000 1.0341953305475
+-1.400000 1.0715133709812
+-1.000000 1.1594305043567
+-0.600000 1.3596768153129
+-0.200000 1.5424241733214
+0.200000 1.5424241733214
+0.600000 1.3596768153129
+1.000000 1.1594305043567
+1.400000 1.0715133709812
+1.800000 1.0341953305475
+2.200000 1.0173890280296
+2.600000 1.0093255006370
+3.000000 1.0052331829660
+3.400000 1.0030531472576
+3.800000 1.0018421916942
+4.200000 1.0011446347552
+4.600000 1.0007298197498
+5.000000 1.0004761159728
+5.400000 1.0003170268183
+5.800000 1.0002150142174
+6.200000 1.0001482724109
+
+
+"Time = 0.100000
+-6.200000 1.0001482724109
+-5.800000 1.0002964775119
+-5.400000 1.0004171191347
+-5.000000 1.0006018400763
+-4.600000 1.0008915551420
+-4.200000 1.0013586026703
+-3.800000 1.0021340900956
+-3.400000 1.0034648361384
+-3.000000 1.0058337655154
+-2.600000 1.0102299694147
+-2.200000 1.0187833024910
+-1.800000 1.0363470786027
+-1.400000 1.0746650529506
+-1.000000 1.1631367226199
+-0.600000 1.3618665084454
+-0.200000 1.5424209549057
+0.200000 1.5424209549057
+0.600000 1.3618665084455
+1.000000 1.1631367226199
+1.400000 1.0746650529507
+1.800000 1.0363470786027
+2.200000 1.0187833024911
+2.600000 1.0102299694147
+3.000000 1.0058337655154
+3.400000 1.0034648361384
+3.800000 1.0021340900956
+4.200000 1.0013586026703
+4.600000 1.0008915551420
+5.000000 1.0006018400763
+5.400000 1.0004171191347
+5.800000 1.0002964775119
+6.200000 1.0001482724109
diff --git a/test/test_axibrill/ham.dl b/test/test_axibrill/ham.dl
new file mode 100644
index 0000000..79394b7
--- /dev/null
+++ b/test/test_axibrill/ham.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000014638458
+-10.045895 0.0000014638458
+-9.353074 0.0000027732580
+-8.660254 0.0000025965139
+-7.967434 -0.0000011910462
+-7.274613 -0.0000016372592
+-6.581793 -0.0000122980250
+-5.888973 -0.0000383358252
+-5.196152 -0.0001136516764
+-4.503332 -0.0003382162841
+-3.810512 -0.0010617974835
+-3.117691 -0.0033606404519
+-2.424871 -0.0096004990825
+-1.732051 0.0034069976715
+-1.039230 0.1538123810766
+-0.346410 -0.0221673852299
+0.346410 -0.0221673852309
+1.039230 0.1538123810761
+1.732051 0.0034069976697
+2.424871 -0.0096004990838
+3.117691 -0.0033606404525
+3.810512 -0.0010617974838
+4.503332 -0.0003382162842
+5.196152 -0.0001136516764
+5.888973 -0.0000383358251
+6.581793 -0.0000122980250
+7.274613 -0.0000016372591
+7.967434 -0.0000011910461
+8.660254 0.0000025965140
+9.353074 0.0000027732580
+10.045895 0.0000014638459
+10.738715 0.0000014638459
+
+
+"Time = 0.100000
+-10.738715 0.0000657593891
+-10.045895 0.0000657593891
+-9.353074 0.0000025219341
+-8.660254 0.0000023355660
+-7.967434 -0.0000007710912
+-7.274613 -0.0000021420661
+-6.581793 -0.0000124931663
+-5.888973 -0.0000388749656
+-5.196152 -0.0001137204525
+-4.503332 -0.0003397398652
+-3.810512 -0.0010635039815
+-3.117691 -0.0033524660406
+-2.424871 -0.0095207194483
+-1.732051 0.0035981784656
+-1.039230 0.1525897284426
+-0.346410 -0.0221919291661
+0.346410 -0.0221919291671
+1.039230 0.1525897284420
+1.732051 0.0035981784637
+2.424871 -0.0095207194496
+3.117691 -0.0033524660413
+3.810512 -0.0010635039818
+4.503332 -0.0003397398652
+5.196152 -0.0001137204525
+5.888973 -0.0000388749655
+6.581793 -0.0000124931663
+7.274613 -0.0000021420660
+7.967434 -0.0000007710911
+8.660254 0.0000023355661
+9.353074 0.0000025219342
+10.045895 0.0000657593892
+10.738715 0.0000657593892
diff --git a/test/test_axibrill/ham.xl b/test/test_axibrill/ham.xl
new file mode 100644
index 0000000..ec1b160
--- /dev/null
+++ b/test/test_axibrill/ham.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 -0.0004701400616
+-5.800000 -0.0004701400616
+-5.400000 -0.0006850877676
+-5.000000 -0.0009893337733
+-4.600000 -0.0014885165236
+-4.200000 -0.0022019181612
+-3.800000 -0.0033291810551
+-3.400000 -0.0049008135377
+-3.000000 -0.0070206669498
+-2.600000 -0.0090947801163
+-2.200000 -0.0081724314365
+-1.800000 0.0108961958208
+-1.400000 0.0968245922535
+-1.000000 0.2157354391563
+-0.600000 0.0228877969333
+-0.200000 -0.0221673852309
+0.200000 -0.0221673852309
+0.600000 0.0228877969333
+1.000000 0.2157354391563
+1.400000 0.0968245922535
+1.800000 0.0108961958208
+2.200000 -0.0081724314365
+2.600000 -0.0090947801163
+3.000000 -0.0070206669498
+3.400000 -0.0049008135377
+3.800000 -0.0033291810551
+4.200000 -0.0022019181612
+4.600000 -0.0014885165236
+5.000000 -0.0009893337733
+5.400000 -0.0006850877676
+5.800000 -0.0004701400616
+6.200000 -0.0004701400616
+
+
+"Time = 0.100000
+-6.200000 -0.0007173815468
+-5.800000 -0.0007173815468
+-5.400000 -0.0006845652019
+-5.000000 -0.0009901663786
+-4.600000 -0.0014872816184
+-4.200000 -0.0022033172533
+-3.800000 -0.0033266691541
+-3.400000 -0.0048941424669
+-3.000000 -0.0070044028964
+-2.600000 -0.0090615783225
+-2.200000 -0.0081048753384
+-1.800000 0.0107201891040
+-1.400000 0.0952387529008
+-1.000000 0.2141614200826
+-0.600000 0.0236059453050
+-0.200000 -0.0221919291671
+0.200000 -0.0221919291671
+0.600000 0.0236059453050
+1.000000 0.2141614200826
+1.400000 0.0952387529007
+1.800000 0.0107201891040
+2.200000 -0.0081048753384
+2.600000 -0.0090615783225
+3.000000 -0.0070044028964
+3.400000 -0.0048941424669
+3.800000 -0.0033266691541
+4.200000 -0.0022033172533
+4.600000 -0.0014872816184
+5.000000 -0.0009901663786
+5.400000 -0.0006845652019
+5.800000 -0.0007173815468
+6.200000 -0.0007173815468
diff --git a/test/test_axibrill/ham.yl b/test/test_axibrill/ham.yl
new file mode 100644
index 0000000..ec1b160
--- /dev/null
+++ b/test/test_axibrill/ham.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 -0.0004701400616
+-5.800000 -0.0004701400616
+-5.400000 -0.0006850877676
+-5.000000 -0.0009893337733
+-4.600000 -0.0014885165236
+-4.200000 -0.0022019181612
+-3.800000 -0.0033291810551
+-3.400000 -0.0049008135377
+-3.000000 -0.0070206669498
+-2.600000 -0.0090947801163
+-2.200000 -0.0081724314365
+-1.800000 0.0108961958208
+-1.400000 0.0968245922535
+-1.000000 0.2157354391563
+-0.600000 0.0228877969333
+-0.200000 -0.0221673852309
+0.200000 -0.0221673852309
+0.600000 0.0228877969333
+1.000000 0.2157354391563
+1.400000 0.0968245922535
+1.800000 0.0108961958208
+2.200000 -0.0081724314365
+2.600000 -0.0090947801163
+3.000000 -0.0070206669498
+3.400000 -0.0049008135377
+3.800000 -0.0033291810551
+4.200000 -0.0022019181612
+4.600000 -0.0014885165236
+5.000000 -0.0009893337733
+5.400000 -0.0006850877676
+5.800000 -0.0004701400616
+6.200000 -0.0004701400616
+
+
+"Time = 0.100000
+-6.200000 -0.0007173815468
+-5.800000 -0.0007173815468
+-5.400000 -0.0006845652019
+-5.000000 -0.0009901663786
+-4.600000 -0.0014872816184
+-4.200000 -0.0022033172533
+-3.800000 -0.0033266691541
+-3.400000 -0.0048941424669
+-3.000000 -0.0070044028964
+-2.600000 -0.0090615783225
+-2.200000 -0.0081048753384
+-1.800000 0.0107201891040
+-1.400000 0.0952387529008
+-1.000000 0.2141614200826
+-0.600000 0.0236059453050
+-0.200000 -0.0221919291671
+0.200000 -0.0221919291671
+0.600000 0.0236059453050
+1.000000 0.2141614200826
+1.400000 0.0952387529007
+1.800000 0.0107201891040
+2.200000 -0.0081048753384
+2.600000 -0.0090615783225
+3.000000 -0.0070044028964
+3.400000 -0.0048941424669
+3.800000 -0.0033266691541
+4.200000 -0.0022033172533
+4.600000 -0.0014872816184
+5.000000 -0.0009901663786
+5.400000 -0.0006845652019
+5.800000 -0.0007173815468
+6.200000 -0.0007173815468
diff --git a/test/test_axibrill/ham.zl b/test/test_axibrill/ham.zl
new file mode 100644
index 0000000..617a8b1
--- /dev/null
+++ b/test/test_axibrill/ham.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000173742585
+-5.800000 0.0000173742585
+-5.400000 0.0000161623847
+-5.000000 0.0000020491782
+-4.600000 0.0000072742932
+-4.200000 -0.0000025338727
+-3.800000 -0.0000246116104
+-3.400000 -0.0001304158449
+-3.000000 -0.0004016490484
+-2.600000 -0.0010650193679
+-2.200000 -0.0024837160856
+-1.800000 -0.0048083487612
+-1.400000 -0.0105719796391
+-1.000000 -0.0103812389671
+-0.600000 0.0008300963546
+-0.200000 -0.0221673852299
+0.200000 -0.0221673852309
+0.600000 0.0008300963449
+1.000000 -0.0103812389699
+1.400000 -0.0105719796526
+1.800000 -0.0048083487722
+2.200000 -0.0024837160913
+2.600000 -0.0010650193708
+3.000000 -0.0004016490499
+3.400000 -0.0001304158455
+3.800000 -0.0000246116107
+4.200000 -0.0000025338728
+4.600000 0.0000072742932
+5.000000 0.0000020491782
+5.400000 0.0000161623847
+5.800000 0.0000173742585
+6.200000 0.0000173742585
+
+
+"Time = 0.100000
+-6.200000 -0.0002727532280
+-5.800000 -0.0002727532280
+-5.400000 0.0000163121128
+-5.000000 0.0000026075888
+-4.600000 0.0000049959260
+-4.200000 -0.0000074430803
+-3.800000 -0.0000358051660
+-3.400000 -0.0001470636651
+-3.000000 -0.0004257977552
+-2.600000 -0.0010930786067
+-2.200000 -0.0024587148782
+-1.800000 -0.0046600555456
+-1.400000 -0.0097776796970
+-1.000000 -0.0090358360400
+-0.600000 0.0012574988237
+-0.200000 -0.0221919291661
+0.200000 -0.0221919291671
+0.600000 0.0012574988142
+1.000000 -0.0090358360427
+1.400000 -0.0097776797103
+1.800000 -0.0046600555563
+2.200000 -0.0024587148839
+2.600000 -0.0010930786096
+3.000000 -0.0004257977566
+3.400000 -0.0001470636658
+3.800000 -0.0000358051664
+4.200000 -0.0000074430804
+4.600000 0.0000049959259
+5.000000 0.0000026075888
+5.400000 0.0000163121128
+5.800000 -0.0002727532280
+6.200000 -0.0002727532280
diff --git a/test/test_axibrill/kxx.dl b/test/test_axibrill/kxx.dl
new file mode 100644
index 0000000..36cf301
--- /dev/null
+++ b/test/test_axibrill/kxx.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 0.0000085705736
+-9.353074 0.0000086277422
+-8.660254 0.0000099847810
+-7.967434 0.0000103198532
+-7.274613 0.0000078479308
+-6.581793 -0.0000028871091
+-5.888973 -0.0000346640697
+-5.196152 -0.0001211110753
+-4.503332 -0.0003500907689
+-3.810512 -0.0009587573051
+-3.117691 -0.0025750272658
+-2.424871 -0.0066670406042
+-1.732051 -0.0115173567012
+-1.039230 0.0474704656402
+-0.346410 -0.2159908706856
+0.346410 -0.2159908706949
+1.039230 0.0474704656391
+1.732051 -0.0115173567015
+2.424871 -0.0066670406043
+3.117691 -0.0025750272658
+3.810512 -0.0009587573051
+4.503332 -0.0003500907689
+5.196152 -0.0001211110753
+5.888973 -0.0000346640697
+6.581793 -0.0000028871091
+7.274613 0.0000078479308
+7.967434 0.0000103198532
+8.660254 0.0000099847810
+9.353074 0.0000086277422
+10.045895 0.0000085705736
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/kxx.xl b/test/test_axibrill/kxx.xl
new file mode 100644
index 0000000..3174e3f
--- /dev/null
+++ b/test/test_axibrill/kxx.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0015197947238
+-5.400000 -0.0018322768222
+-5.000000 -0.0022559661066
+-4.600000 -0.0028244181236
+-4.200000 -0.0035991059530
+-3.800000 -0.0046927179501
+-3.400000 -0.0062576525416
+-3.000000 -0.0085423304523
+-2.600000 -0.0117947275939
+-2.200000 -0.0158838676806
+-1.800000 -0.0168268845659
+-1.400000 0.0134236805909
+-1.000000 0.1363708129324
+-0.600000 -0.0055454807000
+-0.200000 -0.2159908706949
+0.200000 -0.2159908706949
+0.600000 -0.0055454807000
+1.000000 0.1363708129324
+1.400000 0.0134236805909
+1.800000 -0.0168268845659
+2.200000 -0.0158838676806
+2.600000 -0.0117947275939
+3.000000 -0.0085423304523
+3.400000 -0.0062576525416
+3.800000 -0.0046927179501
+4.200000 -0.0035991059530
+4.600000 -0.0028244181236
+5.000000 -0.0022559661066
+5.400000 -0.0018322768222
+5.800000 -0.0015197947238
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxx.yl b/test/test_axibrill/kxx.yl
new file mode 100644
index 0000000..5016752
--- /dev/null
+++ b/test/test_axibrill/kxx.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0009763104407
+-5.400000 0.0011698404956
+-5.000000 0.0013788092879
+-4.600000 0.0015918427986
+-4.200000 0.0017724560880
+-3.800000 0.0018333521556
+-3.400000 0.0016251531446
+-3.000000 0.0008961293712
+-2.600000 -0.0006375099145
+-2.200000 -0.0028897206129
+-1.800000 -0.0036405719054
+-1.400000 0.0064347647757
+-1.000000 0.0414853926180
+-0.600000 0.0111941003027
+-0.200000 -0.2159908706949
+0.200000 -0.2159908706949
+0.600000 0.0111941003027
+1.000000 0.0414853926180
+1.400000 0.0064347647757
+1.800000 -0.0036405719054
+2.200000 -0.0028897206129
+2.600000 -0.0006375099145
+3.000000 0.0008961293712
+3.400000 0.0016251531446
+3.800000 0.0018333521556
+4.200000 0.0017724560880
+4.600000 0.0015918427986
+5.000000 0.0013788092879
+5.400000 0.0011698404956
+5.800000 0.0009763104407
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxx.zl b/test/test_axibrill/kxx.zl
new file mode 100644
index 0000000..c2b5d8c
--- /dev/null
+++ b/test/test_axibrill/kxx.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0007006734549
+-5.400000 0.0008972695723
+-5.000000 0.0011678088980
+-4.600000 0.0015677084497
+-4.200000 0.0021755439579
+-3.800000 0.0031378726152
+-3.400000 0.0047188392430
+-3.000000 0.0074338163184
+-2.600000 0.0123080307489
+-2.200000 0.0214841667872
+-1.800000 0.0395115266094
+-1.400000 0.0749484466294
+-1.000000 0.1407518820991
+-0.600000 0.2212209361939
+-0.200000 -0.2159908706856
+0.200000 -0.2159908706949
+0.600000 0.2212209361848
+1.000000 0.1407518820987
+1.400000 0.0749484466270
+1.800000 0.0395115266079
+2.200000 0.0214841667865
+2.600000 0.0123080307485
+3.000000 0.0074338163183
+3.400000 0.0047188392429
+3.800000 0.0031378726151
+4.200000 0.0021755439578
+4.600000 0.0015677084496
+5.000000 0.0011678088980
+5.400000 0.0008972695722
+5.800000 0.0007006734549
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxy.dl b/test/test_axibrill/kxy.dl
new file mode 100644
index 0000000..e42e46b
--- /dev/null
+++ b/test/test_axibrill/kxy.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 -0.0001607656272
+-9.353074 -0.0002043062003
+-8.660254 -0.0002609410203
+-7.967434 -0.0003409997084
+-7.274613 -0.0004571708596
+-6.581793 -0.0006310589271
+-5.888973 -0.0008989323378
+-5.196152 -0.0013229452361
+-4.503332 -0.0020071146078
+-3.810512 -0.0031133563523
+-3.117691 -0.0048431623453
+-2.424871 -0.0074056261850
+-1.732051 -0.0113972068263
+-1.039230 -0.0009622358586
+-0.346410 0.0162143152080
+0.346410 0.0162143152054
+1.039230 -0.0009622358593
+1.732051 -0.0113972068263
+2.424871 -0.0074056261850
+3.117691 -0.0048431623453
+3.810512 -0.0031133563523
+4.503332 -0.0020071146078
+5.196152 -0.0013229452361
+5.888973 -0.0008989323378
+6.581793 -0.0006310589271
+7.274613 -0.0004571708596
+7.967434 -0.0003409997084
+8.660254 -0.0002609410203
+9.353074 -0.0002043062003
+10.045895 -0.0001607656272
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/kxy.xl b/test/test_axibrill/kxy.xl
new file mode 100644
index 0000000..d1b8523
--- /dev/null
+++ b/test/test_axibrill/kxy.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000870027403
+-5.400000 0.0001129589476
+-5.000000 0.0001485498545
+-4.600000 0.0001978771376
+-4.200000 0.0002671814956
+-3.800000 0.0003665725087
+-3.400000 0.0005121156065
+-3.000000 0.0007318733645
+-2.600000 0.0010642072393
+-2.200000 0.0014947638977
+-1.800000 0.0014271696868
+-1.400000 -0.0026102624695
+-1.000000 -0.0168340778645
+-0.600000 0.0237414107936
+-0.200000 -0.0162143152054
+0.200000 0.0162143152054
+0.600000 -0.0237414107936
+1.000000 0.0168340778645
+1.400000 0.0026102624695
+1.800000 -0.0014271696868
+2.200000 -0.0014947638977
+2.600000 -0.0010642072393
+3.000000 -0.0007318733645
+3.400000 -0.0005121156065
+3.800000 -0.0003665725087
+4.200000 -0.0002671814956
+4.600000 -0.0001978771376
+5.000000 -0.0001485498545
+5.400000 -0.0001129589476
+5.800000 -0.0000870027403
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxy.yl b/test/test_axibrill/kxy.yl
new file mode 100644
index 0000000..d1b8523
--- /dev/null
+++ b/test/test_axibrill/kxy.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000870027403
+-5.400000 0.0001129589476
+-5.000000 0.0001485498545
+-4.600000 0.0001978771376
+-4.200000 0.0002671814956
+-3.800000 0.0003665725087
+-3.400000 0.0005121156065
+-3.000000 0.0007318733645
+-2.600000 0.0010642072393
+-2.200000 0.0014947638977
+-1.800000 0.0014271696868
+-1.400000 -0.0026102624695
+-1.000000 -0.0168340778645
+-0.600000 0.0237414107936
+-0.200000 -0.0162143152054
+0.200000 0.0162143152054
+0.600000 -0.0237414107936
+1.000000 0.0168340778645
+1.400000 0.0026102624695
+1.800000 -0.0014271696868
+2.200000 -0.0014947638977
+2.600000 -0.0010642072393
+3.000000 -0.0007318733645
+3.400000 -0.0005121156065
+3.800000 -0.0003665725087
+4.200000 -0.0002671814956
+4.600000 -0.0001978771376
+5.000000 -0.0001485498545
+5.400000 -0.0001129589476
+5.800000 -0.0000870027403
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxy.zl b/test/test_axibrill/kxy.zl
new file mode 100644
index 0000000..b1fbade
--- /dev/null
+++ b/test/test_axibrill/kxy.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000045665970
+-5.400000 -0.0000070830040
+-5.000000 -0.0000112281819
+-4.600000 -0.0000183778308
+-4.200000 -0.0000311545132
+-3.800000 -0.0000549552408
+-3.400000 -0.0001011428415
+-3.000000 -0.0001944945494
+-2.600000 -0.0003896886732
+-2.200000 -0.0008022042095
+-1.800000 -0.0016104565632
+-1.400000 -0.0024913224279
+-1.000000 0.0031222815469
+-0.600000 0.0622456281486
+-0.200000 0.0162143152080
+0.200000 0.0162143152054
+0.600000 0.0622456281462
+1.000000 0.0031222815476
+1.400000 -0.0024913224283
+1.800000 -0.0016104565634
+2.200000 -0.0008022042096
+2.600000 -0.0003896886732
+3.000000 -0.0001944945494
+3.400000 -0.0001011428415
+3.800000 -0.0000549552408
+4.200000 -0.0000311545132
+4.600000 -0.0000183778308
+5.000000 -0.0000112281819
+5.400000 -0.0000070830040
+5.800000 -0.0000045665970
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxz.dl b/test/test_axibrill/kxz.dl
new file mode 100644
index 0000000..c0ababb
--- /dev/null
+++ b/test/test_axibrill/kxz.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 -0.0001451697127
+-9.353074 -0.0001785994722
+-8.660254 -0.0002187556839
+-7.967434 -0.0002718043767
+-7.274613 -0.0003431328848
+-6.581793 -0.0004429176778
+-5.888973 -0.0005891645479
+-5.196152 -0.0008197569962
+-4.503332 -0.0012277415407
+-3.810512 -0.0020763136843
+-3.117691 -0.0042272636040
+-2.424871 -0.0109164787198
+-1.732051 -0.0342037883380
+-1.039230 -0.0838783710283
+-0.346410 -0.5098301979927
+0.346410 -0.5098301979908
+1.039230 -0.0838783710287
+1.732051 -0.0342037883381
+2.424871 -0.0109164787198
+3.117691 -0.0042272636040
+3.810512 -0.0020763136843
+4.503332 -0.0012277415407
+5.196152 -0.0008197569962
+5.888973 -0.0005891645479
+6.581793 -0.0004429176778
+7.274613 -0.0003431328848
+7.967434 -0.0002718043767
+8.660254 -0.0002187556839
+9.353074 -0.0001785994722
+10.045895 -0.0001451697127
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/kxz.xl b/test/test_axibrill/kxz.xl
new file mode 100644
index 0000000..dab385e
--- /dev/null
+++ b/test/test_axibrill/kxz.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000491550568
+-5.400000 0.0000581292210
+-5.000000 0.0000687507059
+-4.600000 0.0000814000721
+-4.200000 0.0000975753642
+-3.800000 0.0001215203941
+-3.400000 0.0001655679742
+-3.000000 0.0002654274560
+-2.600000 0.0005178712368
+-2.200000 0.0011802408142
+-1.800000 0.0028957627860
+-1.400000 0.0078811502875
+-1.000000 0.0293884693404
+-0.600000 0.1365262666164
+-0.200000 0.5098301979908
+0.200000 -0.5098301979908
+0.600000 -0.1365262666164
+1.000000 -0.0293884693404
+1.400000 -0.0078811502875
+1.800000 -0.0028957627860
+2.200000 -0.0011802408142
+2.600000 -0.0005178712368
+3.000000 -0.0002654274560
+3.400000 -0.0001655679742
+3.800000 -0.0001215203941
+4.200000 -0.0000975753642
+4.600000 -0.0000814000721
+5.000000 -0.0000687507059
+5.400000 -0.0000581292210
+5.800000 -0.0000491550568
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxz.yl b/test/test_axibrill/kxz.yl
new file mode 100644
index 0000000..8040149
--- /dev/null
+++ b/test/test_axibrill/kxz.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000013084786
+-5.400000 -0.0000014616840
+-5.000000 -0.0000014244660
+-4.600000 -0.0000008905245
+-4.200000 0.0000008970585
+-3.800000 0.0000058023876
+-3.400000 0.0000185286609
+-3.000000 0.0000512435980
+-2.600000 0.0001345171776
+-2.200000 0.0003303990952
+-1.800000 0.0006482629046
+-1.400000 0.0001873331152
+-1.000000 -0.0062622014369
+-0.600000 -0.0484421382535
+-0.200000 -0.5098301979908
+0.200000 -0.5098301979908
+0.600000 -0.0484421382535
+1.000000 -0.0062622014369
+1.400000 0.0001873331152
+1.800000 0.0006482629046
+2.200000 0.0003303990952
+2.600000 0.0001345171776
+3.000000 0.0000512435980
+3.400000 0.0000185286609
+3.800000 0.0000058023876
+4.200000 0.0000008970585
+4.600000 -0.0000008905245
+5.000000 -0.0000014244660
+5.400000 -0.0000014616840
+5.800000 -0.0000013084786
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kxz.zl b/test/test_axibrill/kxz.zl
new file mode 100644
index 0000000..259f6e3
--- /dev/null
+++ b/test/test_axibrill/kxz.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000876451202
+-5.400000 0.0001236316832
+-5.000000 0.0001800116729
+-4.600000 0.0002715082599
+-4.200000 0.0004252744511
+-3.800000 0.0006948887984
+-3.400000 0.0011888574292
+-3.000000 0.0021410060426
+-2.600000 0.0040833867205
+-2.200000 0.0083105238803
+-1.800000 0.0182031061767
+-1.400000 0.0429939633109
+-1.000000 0.1069777567559
+-0.600000 0.2569884409012
+-0.200000 0.5098301979927
+0.200000 -0.5098301979908
+0.600000 -0.2569884409010
+1.000000 -0.1069777567563
+1.400000 -0.0429939633107
+1.800000 -0.0182031061766
+2.200000 -0.0083105238803
+2.600000 -0.0040833867205
+3.000000 -0.0021410060426
+3.400000 -0.0011888574291
+3.800000 -0.0006948887984
+4.200000 -0.0004252744511
+4.600000 -0.0002715082598
+5.000000 -0.0001800116729
+5.400000 -0.0001236316832
+5.800000 -0.0000876451202
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kyy.dl b/test/test_axibrill/kyy.dl
new file mode 100644
index 0000000..36cf301
--- /dev/null
+++ b/test/test_axibrill/kyy.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 0.0000085705736
+-9.353074 0.0000086277422
+-8.660254 0.0000099847810
+-7.967434 0.0000103198532
+-7.274613 0.0000078479308
+-6.581793 -0.0000028871091
+-5.888973 -0.0000346640697
+-5.196152 -0.0001211110753
+-4.503332 -0.0003500907689
+-3.810512 -0.0009587573051
+-3.117691 -0.0025750272658
+-2.424871 -0.0066670406042
+-1.732051 -0.0115173567012
+-1.039230 0.0474704656402
+-0.346410 -0.2159908706856
+0.346410 -0.2159908706949
+1.039230 0.0474704656391
+1.732051 -0.0115173567015
+2.424871 -0.0066670406043
+3.117691 -0.0025750272658
+3.810512 -0.0009587573051
+4.503332 -0.0003500907689
+5.196152 -0.0001211110753
+5.888973 -0.0000346640697
+6.581793 -0.0000028871091
+7.274613 0.0000078479308
+7.967434 0.0000103198532
+8.660254 0.0000099847810
+9.353074 0.0000086277422
+10.045895 0.0000085705736
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/kyy.xl b/test/test_axibrill/kyy.xl
new file mode 100644
index 0000000..5016752
--- /dev/null
+++ b/test/test_axibrill/kyy.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0009763104407
+-5.400000 0.0011698404956
+-5.000000 0.0013788092879
+-4.600000 0.0015918427986
+-4.200000 0.0017724560880
+-3.800000 0.0018333521556
+-3.400000 0.0016251531446
+-3.000000 0.0008961293712
+-2.600000 -0.0006375099145
+-2.200000 -0.0028897206129
+-1.800000 -0.0036405719054
+-1.400000 0.0064347647757
+-1.000000 0.0414853926180
+-0.600000 0.0111941003027
+-0.200000 -0.2159908706949
+0.200000 -0.2159908706949
+0.600000 0.0111941003027
+1.000000 0.0414853926180
+1.400000 0.0064347647757
+1.800000 -0.0036405719054
+2.200000 -0.0028897206129
+2.600000 -0.0006375099145
+3.000000 0.0008961293712
+3.400000 0.0016251531446
+3.800000 0.0018333521556
+4.200000 0.0017724560880
+4.600000 0.0015918427986
+5.000000 0.0013788092879
+5.400000 0.0011698404956
+5.800000 0.0009763104407
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kyy.yl b/test/test_axibrill/kyy.yl
new file mode 100644
index 0000000..3174e3f
--- /dev/null
+++ b/test/test_axibrill/kyy.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0015197947238
+-5.400000 -0.0018322768222
+-5.000000 -0.0022559661066
+-4.600000 -0.0028244181236
+-4.200000 -0.0035991059530
+-3.800000 -0.0046927179501
+-3.400000 -0.0062576525416
+-3.000000 -0.0085423304523
+-2.600000 -0.0117947275939
+-2.200000 -0.0158838676806
+-1.800000 -0.0168268845659
+-1.400000 0.0134236805909
+-1.000000 0.1363708129324
+-0.600000 -0.0055454807000
+-0.200000 -0.2159908706949
+0.200000 -0.2159908706949
+0.600000 -0.0055454807000
+1.000000 0.1363708129324
+1.400000 0.0134236805909
+1.800000 -0.0168268845659
+2.200000 -0.0158838676806
+2.600000 -0.0117947275939
+3.000000 -0.0085423304523
+3.400000 -0.0062576525416
+3.800000 -0.0046927179501
+4.200000 -0.0035991059530
+4.600000 -0.0028244181236
+5.000000 -0.0022559661066
+5.400000 -0.0018322768222
+5.800000 -0.0015197947238
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kyy.zl b/test/test_axibrill/kyy.zl
new file mode 100644
index 0000000..c2b5d8c
--- /dev/null
+++ b/test/test_axibrill/kyy.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0007006734549
+-5.400000 0.0008972695723
+-5.000000 0.0011678088980
+-4.600000 0.0015677084497
+-4.200000 0.0021755439579
+-3.800000 0.0031378726152
+-3.400000 0.0047188392430
+-3.000000 0.0074338163184
+-2.600000 0.0123080307489
+-2.200000 0.0214841667872
+-1.800000 0.0395115266094
+-1.400000 0.0749484466294
+-1.000000 0.1407518820991
+-0.600000 0.2212209361939
+-0.200000 -0.2159908706856
+0.200000 -0.2159908706949
+0.600000 0.2212209361848
+1.000000 0.1407518820987
+1.400000 0.0749484466270
+1.800000 0.0395115266079
+2.200000 0.0214841667865
+2.600000 0.0123080307485
+3.000000 0.0074338163183
+3.400000 0.0047188392429
+3.800000 0.0031378726151
+4.200000 0.0021755439578
+4.600000 0.0015677084496
+5.000000 0.0011678088980
+5.400000 0.0008972695722
+5.800000 0.0007006734549
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kyz.dl b/test/test_axibrill/kyz.dl
new file mode 100644
index 0000000..c0ababb
--- /dev/null
+++ b/test/test_axibrill/kyz.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 -0.0001451697127
+-9.353074 -0.0001785994722
+-8.660254 -0.0002187556839
+-7.967434 -0.0002718043767
+-7.274613 -0.0003431328848
+-6.581793 -0.0004429176778
+-5.888973 -0.0005891645479
+-5.196152 -0.0008197569962
+-4.503332 -0.0012277415407
+-3.810512 -0.0020763136843
+-3.117691 -0.0042272636040
+-2.424871 -0.0109164787198
+-1.732051 -0.0342037883380
+-1.039230 -0.0838783710283
+-0.346410 -0.5098301979927
+0.346410 -0.5098301979908
+1.039230 -0.0838783710287
+1.732051 -0.0342037883381
+2.424871 -0.0109164787198
+3.117691 -0.0042272636040
+3.810512 -0.0020763136843
+4.503332 -0.0012277415407
+5.196152 -0.0008197569962
+5.888973 -0.0005891645479
+6.581793 -0.0004429176778
+7.274613 -0.0003431328848
+7.967434 -0.0002718043767
+8.660254 -0.0002187556839
+9.353074 -0.0001785994722
+10.045895 -0.0001451697127
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/kyz.xl b/test/test_axibrill/kyz.xl
new file mode 100644
index 0000000..8040149
--- /dev/null
+++ b/test/test_axibrill/kyz.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0000013084786
+-5.400000 -0.0000014616840
+-5.000000 -0.0000014244660
+-4.600000 -0.0000008905245
+-4.200000 0.0000008970585
+-3.800000 0.0000058023876
+-3.400000 0.0000185286609
+-3.000000 0.0000512435980
+-2.600000 0.0001345171776
+-2.200000 0.0003303990952
+-1.800000 0.0006482629046
+-1.400000 0.0001873331152
+-1.000000 -0.0062622014369
+-0.600000 -0.0484421382535
+-0.200000 -0.5098301979908
+0.200000 -0.5098301979908
+0.600000 -0.0484421382535
+1.000000 -0.0062622014369
+1.400000 0.0001873331152
+1.800000 0.0006482629046
+2.200000 0.0003303990952
+2.600000 0.0001345171776
+3.000000 0.0000512435980
+3.400000 0.0000185286609
+3.800000 0.0000058023876
+4.200000 0.0000008970585
+4.600000 -0.0000008905245
+5.000000 -0.0000014244660
+5.400000 -0.0000014616840
+5.800000 -0.0000013084786
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kyz.yl b/test/test_axibrill/kyz.yl
new file mode 100644
index 0000000..dab385e
--- /dev/null
+++ b/test/test_axibrill/kyz.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000491550568
+-5.400000 0.0000581292210
+-5.000000 0.0000687507059
+-4.600000 0.0000814000721
+-4.200000 0.0000975753642
+-3.800000 0.0001215203941
+-3.400000 0.0001655679742
+-3.000000 0.0002654274560
+-2.600000 0.0005178712368
+-2.200000 0.0011802408142
+-1.800000 0.0028957627860
+-1.400000 0.0078811502875
+-1.000000 0.0293884693404
+-0.600000 0.1365262666164
+-0.200000 0.5098301979908
+0.200000 -0.5098301979908
+0.600000 -0.1365262666164
+1.000000 -0.0293884693404
+1.400000 -0.0078811502875
+1.800000 -0.0028957627860
+2.200000 -0.0011802408142
+2.600000 -0.0005178712368
+3.000000 -0.0002654274560
+3.400000 -0.0001655679742
+3.800000 -0.0001215203941
+4.200000 -0.0000975753642
+4.600000 -0.0000814000721
+5.000000 -0.0000687507059
+5.400000 -0.0000581292210
+5.800000 -0.0000491550568
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kyz.zl b/test/test_axibrill/kyz.zl
new file mode 100644
index 0000000..259f6e3
--- /dev/null
+++ b/test/test_axibrill/kyz.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0000876451202
+-5.400000 0.0001236316832
+-5.000000 0.0001800116729
+-4.600000 0.0002715082599
+-4.200000 0.0004252744511
+-3.800000 0.0006948887984
+-3.400000 0.0011888574292
+-3.000000 0.0021410060426
+-2.600000 0.0040833867205
+-2.200000 0.0083105238803
+-1.800000 0.0182031061767
+-1.400000 0.0429939633109
+-1.000000 0.1069777567559
+-0.600000 0.2569884409012
+-0.200000 0.5098301979927
+0.200000 -0.5098301979908
+0.600000 -0.2569884409010
+1.000000 -0.1069777567563
+1.400000 -0.0429939633107
+1.800000 -0.0182031061766
+2.200000 -0.0083105238803
+2.600000 -0.0040833867205
+3.000000 -0.0021410060426
+3.400000 -0.0011888574291
+3.800000 -0.0006948887984
+4.200000 -0.0004252744511
+4.600000 -0.0002715082598
+5.000000 -0.0001800116729
+5.400000 -0.0001236316832
+5.800000 -0.0000876451202
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kzz.dl b/test/test_axibrill/kzz.dl
new file mode 100644
index 0000000..5d97eae
--- /dev/null
+++ b/test/test_axibrill/kzz.dl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-10.738715 0.0000000000000
+-10.045895 0.0000000000000
+-9.353074 0.0000000000000
+-8.660254 0.0000000000000
+-7.967434 0.0000000000000
+-7.274613 0.0000000000000
+-6.581793 0.0000000000000
+-5.888973 0.0000000000000
+-5.196152 0.0000000000000
+-4.503332 0.0000000000000
+-3.810512 0.0000000000000
+-3.117691 0.0000000000000
+-2.424871 0.0000000000000
+-1.732051 0.0000000000000
+-1.039230 0.0000000000000
+-0.346410 0.0000000000000
+0.346410 0.0000000000000
+1.039230 0.0000000000000
+1.732051 0.0000000000000
+2.424871 0.0000000000000
+3.117691 0.0000000000000
+3.810512 0.0000000000000
+4.503332 0.0000000000000
+5.196152 0.0000000000000
+5.888973 0.0000000000000
+6.581793 0.0000000000000
+7.274613 0.0000000000000
+7.967434 0.0000000000000
+8.660254 0.0000000000000
+9.353074 0.0000000000000
+10.045895 0.0000000000000
+10.738715 0.0000000000000
+
+
+"Time = 0.100000
+-10.738715 0.0000000000000
+-10.045895 -0.0000134687561
+-9.353074 -0.0000188077303
+-8.660254 -0.0000230606786
+-7.967434 -0.0000271947147
+-7.274613 -0.0000283022170
+-6.581793 -0.0000209561913
+-5.888973 0.0000109484695
+-5.196152 0.0001084234450
+-4.503332 0.0003778679160
+-3.810512 0.0011023322365
+-3.117691 0.0030515398680
+-2.424871 0.0083117378901
+-1.732051 0.0259702722503
+-1.039230 0.0949319903994
+-0.346410 0.0048085674989
+0.346410 0.0048085675004
+1.039230 0.0949319903980
+1.732051 0.0259702722497
+2.424871 0.0083117378898
+3.117691 0.0030515398679
+3.810512 0.0011023322365
+4.503332 0.0003778679159
+5.196152 0.0001084234450
+5.888973 0.0000109484695
+6.581793 -0.0000209561913
+7.274613 -0.0000283022170
+7.967434 -0.0000271947147
+8.660254 -0.0000230606786
+9.353074 -0.0000188077303
+10.045895 -0.0000134687561
+10.738715 0.0000000000000
diff --git a/test/test_axibrill/kzz.xl b/test/test_axibrill/kzz.xl
new file mode 100644
index 0000000..68e97b0
--- /dev/null
+++ b/test/test_axibrill/kzz.xl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0003372646570
+-5.400000 0.0003803045835
+-5.000000 0.0004419339083
+-4.600000 0.0005459621639
+-4.200000 0.0007522233968
+-3.800000 0.0011763947589
+-3.400000 0.0020974080741
+-3.000000 0.0041112685595
+-2.600000 0.0085544096320
+-2.200000 0.0183614282244
+-1.800000 0.0415439803084
+-1.400000 0.1107716887945
+-1.000000 0.2636317369049
+-0.600000 0.0702985513572
+-0.200000 0.0048085675004
+0.200000 0.0048085675004
+0.600000 0.0702985513572
+1.000000 0.2636317369049
+1.400000 0.1107716887945
+1.800000 0.0415439803084
+2.200000 0.0183614282244
+2.600000 0.0085544096320
+3.000000 0.0041112685595
+3.400000 0.0020974080741
+3.800000 0.0011763947589
+4.200000 0.0007522233968
+4.600000 0.0005459621639
+5.000000 0.0004419339083
+5.400000 0.0003803045835
+5.800000 0.0003372646570
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kzz.yl b/test/test_axibrill/kzz.yl
new file mode 100644
index 0000000..68e97b0
--- /dev/null
+++ b/test/test_axibrill/kzz.yl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 0.0003372646570
+-5.400000 0.0003803045835
+-5.000000 0.0004419339083
+-4.600000 0.0005459621639
+-4.200000 0.0007522233968
+-3.800000 0.0011763947589
+-3.400000 0.0020974080741
+-3.000000 0.0041112685595
+-2.600000 0.0085544096320
+-2.200000 0.0183614282244
+-1.800000 0.0415439803084
+-1.400000 0.1107716887945
+-1.000000 0.2636317369049
+-0.600000 0.0702985513572
+-0.200000 0.0048085675004
+0.200000 0.0048085675004
+0.600000 0.0702985513572
+1.000000 0.2636317369049
+1.400000 0.1107716887945
+1.800000 0.0415439803084
+2.200000 0.0183614282244
+2.600000 0.0085544096320
+3.000000 0.0041112685595
+3.400000 0.0020974080741
+3.800000 0.0011763947589
+4.200000 0.0007522233968
+4.600000 0.0005459621639
+5.000000 0.0004419339083
+5.400000 0.0003803045835
+5.800000 0.0003372646570
+6.200000 0.0000000000000
diff --git a/test/test_axibrill/kzz.zl b/test/test_axibrill/kzz.zl
new file mode 100644
index 0000000..d5c33ef
--- /dev/null
+++ b/test/test_axibrill/kzz.zl
@@ -0,0 +1,70 @@
+
+
+"Time = 0.000000
+-6.200000 0.0000000000000
+-5.800000 0.0000000000000
+-5.400000 0.0000000000000
+-5.000000 0.0000000000000
+-4.600000 0.0000000000000
+-4.200000 0.0000000000000
+-3.800000 0.0000000000000
+-3.400000 0.0000000000000
+-3.000000 0.0000000000000
+-2.600000 0.0000000000000
+-2.200000 0.0000000000000
+-1.800000 0.0000000000000
+-1.400000 0.0000000000000
+-1.000000 0.0000000000000
+-0.600000 0.0000000000000
+-0.200000 0.0000000000000
+0.200000 0.0000000000000
+0.600000 0.0000000000000
+1.000000 0.0000000000000
+1.400000 0.0000000000000
+1.800000 0.0000000000000
+2.200000 0.0000000000000
+2.600000 0.0000000000000
+3.000000 0.0000000000000
+3.400000 0.0000000000000
+3.800000 0.0000000000000
+4.200000 0.0000000000000
+4.600000 0.0000000000000
+5.000000 0.0000000000000
+5.400000 0.0000000000000
+5.800000 0.0000000000000
+6.200000 0.0000000000000
+
+
+"Time = 0.100000
+-6.200000 0.0000000000000
+-5.800000 -0.0014237912519
+-5.400000 -0.0017921910026
+-5.000000 -0.0023361936423
+-4.600000 -0.0031361597781
+-4.200000 -0.0043560610296
+-3.800000 -0.0062909806168
+-3.400000 -0.0094905203435
+-3.000000 -0.0150256214714
+-2.600000 -0.0250717712537
+-2.200000 -0.0442507664950
+-1.800000 -0.0825906790244
+-1.400000 -0.1618456693892
+-1.000000 -0.3149117473914
+-0.600000 -0.4984627671646
+-0.200000 0.0048085674989
+0.200000 0.0048085675004
+0.600000 -0.4984627671737
+1.000000 -0.3149117473929
+1.400000 -0.1618456693915
+1.800000 -0.0825906790257
+2.200000 -0.0442507664955
+2.600000 -0.0250717712539
+3.000000 -0.0150256214714
+3.400000 -0.0094905203435
+3.800000 -0.0062909806168
+4.200000 -0.0043560610295
+4.600000 -0.0031361597780
+5.000000 -0.0023361936423
+5.400000 -0.0017921910026
+5.800000 -0.0014237912519
+6.200000 0.0000000000000