Cactus Code Thorn AHFinderDirect Authors : Jonathan Thornburg Maintainer : Jonathan Thornburg CVS info : $Header$ -------------------------------------------------------------------------- Purpose of This Thorn ===================== This thorn finds an apparent horizon given the 3D xyz-grid metric and extrinsic curvature (and optionally the StaticConformal conformal factor). It uses a direct method, writing the apparent horizon equation as an elliptic PDE on angular-coordinate space. This is fast, but does require an intitial guess for the apparent horizon position. Documentation ============= The doc/ directory contains detailed documentation for this thorn. There are also a lot of comments in the param.ccl file on how to set the (many) parameters. The par/ directory contains some sample par files. src/CODESTYLE documents the general programming conventions used in this thorn. See below in this file for notes on compiling this thorn. Copyright ========= This thorn is copyright (C) 2001-2003 by Jonathan Thornburg . This thorn 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 thorn is distributed in the hope that 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 thorn (see the file COPYING in this directory); if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Other Software Required ======================= This thorn inherits from ADMBase, StaticConformal, and SpaceMask (all in the CactusEinstein arrangement), since it uses various Cactus grid functions which are defined in those thorns. By default this thorn uses various Cactus APIs which are supplied by other thorns: * This thorn uses CCTK_InterpGridArrays() for interpolating grid arrays. This is supplied by a driver-specific thorn; at present PUGHInterp it this for the PUGH driver. * This thorn uses CCTK_ReduceLocArrayToArray1D() for interprocessor communication in the multiprocessor Newton solver. [see src/driver/README.parallel for details] This is supplied by a driver-specific thorn; at present PUGHReduce it this for the PUGH driver. * This thorn uses CCTK_InterpLocalUniform() for interpatch and surface interpolation. At present LocalInterp supplies this. This thorn is written in C++, so you'll need a C++ compiler -- in fact a fairly modern one -- to compile this thorn. See the "Compilation Notes" section below for details. Most of this thorn's relativity code is machine-generated using Maple (version 7), but you don't need Maple unless you want to modify the relativity code. By default, this thorn doesn't use any external libraries. However, if HAVE_DENSE_JACOBIAN__LAPACK is defined in src/include/config.h, then this thorn uses the LAPACK library (which in turn uses the BLAS library), so you will need to configure your Cactus to use LAPACK. Instructions on doing this are in the file README.library in this directory. Code Notes ========== This thorn is written in C++, and requires a fairly modern C++ compiler. In particular: * Templates are used, but only rather simple ones for containers or other low-level stuff templated on the floating-point or integer datatype. These templates are always instantiated explicitly. * bool, mutable, typename are used. * The new-style casts static_cast<...> and const_cast<...> are used. reinterpret_cast<...> and dynamic_cast<...> are *not* used. * The code will compile ok under either the archaic or the modern for-loop declaration scope rules. * C header files are used in the pre-namespaces form (eg ). (In ISO-standard C++ this is deprecated (but still supported), but alas none of the more modern forms ( and namespace std::) seem to be supported on as wide a range of systems as the pre-namespaces form.) * is used fairly heavily for sanity checks. * To avoid various portability problems, none of the C++ standard template library (STL) is used. Compiler Notes ============== This thorn should be fully portable across architectures and operating systems, but C++ compilers may be a problem: This thorn has been compiled and run successfully using x86 === * gcc version 2.95.3 20010125 (prerelease) * g++ (GCC) 3.2 for x86 * g++ (GCC) 3.2.2 for x86 * Intel(R) C++ Compiler for 32-bit applications, Version 5.0.1 Build 010730D0 * Intel C++ Compiler for Linux, version 6.0 * Intel(R) C++ Compiler for 32-bit applications, Version 7.0 Build 20021021Z On platinum.ncsa.uiuc.edu, Denis Pollney reports success configuring Cactus with LIBS="crypt F90 CEPCF90 intrins mkl mkl_lapack guide" LIBDIRS=/usr/local/intel/mkl/lib/32 * Portland Group pgCC 3.3-2 On platinum.ncsa.uiuc.edu, Denis Pollney reports success configuring Cactus with LAPACK=yes LAPACK_DIR=/usr/local/pgi/linux86 ia64, a.k.a. Itanium ==================== * Intel(R) C++ Itanium(R) Compiler for Itanium(R)-based applications Version 7.0 Beta, Build 20020911 On titan.ncsa.uiuc.edu, Denis Pollney reports success configuring Cactus with LIBS="crypt F90 CEPCF90 intrins mkl_lapack mkl_itp guide" LIBDIRS=/usr/local/intel/mkl/lib/64 Alpha ===== * g++ (GCC) 3.0 On lemieux.psc.edu, Denis Pollney reports success configuring Cactus with LIBS="m c_r dxml for" IBM Power4 (AIX) ================ * C for AIX Compiler, Version 6 On psi19.rzg.mpg.de, Denis Pollney reports success configuring Cactus with LIBS="f m lapack-essl essl" LIBDIRS="/afs/rzg/@sys/lib" Please let me (Jonathan) know of any other compilers which are ok. This thorn compiles, but doesn't work, using the folloing systems/compilers; the cure is to switch to a newer compiler version: x86 === * gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98) (This is the system gcc on Red Hat GNU/Linux 7.2 systems) The code will almost certainly *not* compile using * any "egcs" version of gcc, or more generally, any version of gcc earlier than 2.95 * any version of Microsoft Visual C++ up to and including mid-2002