Initial import of GridRipperApp to GIT from old SVN repo.
authorAndras Laszlo <laszlo.andras@wigner.mta.hu>
Wed, 6 Mar 2013 16:01:15 +0000 (17:01 +0100)
committerAndras Laszlo <laszlo.andras@wigner.mta.hu>
Wed, 6 Mar 2013 16:01:15 +0000 (17:01 +0100)
318 files changed:
Makefile [new file with mode: 0644]
bin/Makefile [new file with mode: 0644]
changelog [new file with mode: 0644]
config.mk.in [new file with mode: 0644]
configure.ac [new file with mode: 0644]
doc/Doxyfile [new file with mode: 0644]
doc/INSTALL [new file with mode: 0644]
doc/Makefile [new file with mode: 0644]
doc/README [new file with mode: 0644]
doc/TODO [new file with mode: 0644]
doc/index.html [new file with mode: 0644]
doc/parameters.html [new file with mode: 0644]
gridripperapp.pc.in [new file with mode: 0644]
include/Makefile [new file with mode: 0644]
include/gridripper/mainpage.dox [new file with mode: 0644]
include/gridripper/package.dox [new file with mode: 0644]
include/gridripper/phys/Hunch.h [new file with mode: 0644]
include/gridripper/phys/gr/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/dynss/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/dynss/ekg/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/dynss/ekg/kodama/CompactKScODE.h [new file with mode: 0644]
include/gridripper/phys/gr/dynss/ekg/package.html [new file with mode: 0644]
include/gridripper/phys/gr/dynss/package.html [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/higgsmp/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/higgsmp/HiggsEq.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/higgsmp/Hunch.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/higgsmp/packages.dox [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/Disk.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/Hunch.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/KerrHiggs.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewman.mpl [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewman.mws [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewmanHelper.mws [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/eval_jphi.sh [new file with mode: 0755]
include/gridripper/phys/gr/fixmp/kerrhiggs/nexttoorigin.mws [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/origo.tex [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggs/packages.dox [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggshyp/Disk.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggshyp/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggshyp/Hunch.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrHiggsHyp.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrNewmanHyp.mpl [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrNewmanHyp.mws [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrkgaxhyp/Disk.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrkgaxhyp/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/kerrkgaxhyp/Hunch.h [new file with mode: 0755]
include/gridripper/phys/gr/fixmp/kerrkgaxhyp/KerrKGaxHyp.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/package.dox [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/package.html [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/phi3/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/phi3/Hunch.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/phi3/Phi3.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/phi3/packages.dox [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/schkghyp/Disk.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/schkghyp/Factory.h [new file with mode: 0644]
include/gridripper/phys/gr/fixmp/schkghyp/Hunch.h [new file with mode: 0755]
include/gridripper/phys/gr/fixmp/schkghyp/SchKGHyp.h [new file with mode: 0644]
include/gridripper/phys/gr/package.dox [new file with mode: 0644]
include/gridripper/phys/gr/package.html [new file with mode: 0644]
include/gridripper/phys/minkowski/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/moncrief/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/moncrief/Hunch.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/moncrief/KGEq.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rt/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rt/Hunch.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rt/KGEq.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rt/KG_rt.mw [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rtlh/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rtlh/Hunch.h [new file with mode: 0644]
include/gridripper/phys/minkowski/kg/rtlh/KGEq.h [new file with mode: 0644]
include/gridripper/phys/minkowski/ymh/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/ymh/moncrief/BPSHunch.h [new file with mode: 0644]
include/gridripper/phys/minkowski/ymh/moncrief/Factory.h [new file with mode: 0644]
include/gridripper/phys/minkowski/ymh/moncrief/TwoFields.h [new file with mode: 0644]
include/gridripper/phys/minkowski/ymh/moncrief/TwoFieldsODE.h [new file with mode: 0644]
include/gridripper/phys/minkowski/ymh/moncrief/wHunch.h [new file with mode: 0644]
include/gridripper/phys/package.dox [new file with mode: 0644]
include/gridripper/phys/scalar/Massive.h [new file with mode: 0644]
include/gridripper/phys/scalar/Quartic.h [new file with mode: 0644]
include/gridripper/phys/scalar/QuarticSymmBreaking.h [new file with mode: 0644]
include/gridripper/phys/scalar/ScalarPotential.h [new file with mode: 0644]
include/gridripper/phys/scalar/ScalarPotentialFactory.h [new file with mode: 0644]
include/gridripper/phys/scalar/SineGordon.h [new file with mode: 0644]
include/gridripper/phys/scalar/package.dox [new file with mode: 0644]
inputs/Makefile [new file with mode: 0644]
inputs/gr/VacuumZ.in [new file with mode: 0644]
inputs/gr/dynss/ekg/B2C2massless.in [new file with mode: 0644]
inputs/gr/dynss/ekg/DustSphereCollapse_fix_g00.in [new file with mode: 0644]
inputs/gr/dynss/ekg/R3.in [new file with mode: 0644]
inputs/gr/dynss/ekg/R3b2.in [new file with mode: 0644]
inputs/gr/dynss/ekg/R3ub.in [new file with mode: 0644]
inputs/gr/dynss/ekg/S1xS2.in [new file with mode: 0644]
inputs/gr/dynss/ekg/S3.in [new file with mode: 0644]
inputs/gr/dynss/ekg/S3collapse.in [new file with mode: 0644]
inputs/gr/dynss/ekg/closed.in [new file with mode: 0644]
inputs/gr/dynss/ekg/closed.pl [new file with mode: 0755]
inputs/gr/dynss/ekg/closed_vacuum.pl [new file with mode: 0755]
inputs/gr/dynss/ekg/closed_vacuum_gamma1.in [new file with mode: 0644]
inputs/gr/dynss/ekg/closed_vacuum_radiation.in [new file with mode: 0644]
inputs/gr/dynss/ekg/energy_comp.plt [new file with mode: 0644]
inputs/gr/dynss/ekg/gaussstep-RK4.pl [new file with mode: 0755]
inputs/gr/dynss/ekg/kodama/centered-shoot.odin [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/centered.in [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/gaussian.in [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/kodama2.mw [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/massless.in [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/massless2.in [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/massless3.in [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/shell-shoot.odin [new file with mode: 0644]
inputs/gr/dynss/ekg/kodama/shell.in [new file with mode: 0644]
inputs/gr/dynss/ekg/massless.in [new file with mode: 0644]
inputs/gr/dynss/ekg/oscillon.in [new file with mode: 0644]
inputs/gr/dynss/ekg/schw.in [new file with mode: 0644]
inputs/gr/dynss/ekg/tanhstep.in [new file with mode: 0644]
inputs/gr/dynss/ekg/thermal.in [new file with mode: 0644]
inputs/gr/fixmp/higgsmp/higgsmp.C [new file with mode: 0644]
inputs/gr/fixmp/higgsmp/higgsmp.in [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/Makefile [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/animation.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/anisotropy.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/bin/arg.list [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/bin/go.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/boundary.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/conservation.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/display.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/doc/README [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/energyextraction.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/gaunts.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/gnuplot.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/inc/config.h [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/inc/kerrhiggs_defs.h [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/inp/intq.conf [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/inp/lconv.conf [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/inp/spectrum.conf [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/inp/visualizepolar.conf [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/lconv.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/lib/config.cc [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/reflection.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/spectrum.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/src/intq.cc [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/src/lconv.cc [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/src/omega.cc [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/src/spectrum.cc [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/src/visualizepolar.cc [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/go_intq.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/go_lconv.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/go_visualizepolar.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/intq.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/lconv.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/list_intq [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/list_lconv [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/list_visualizepolar [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_genagrid/visualizepolar.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/arc.sh [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/arg.list [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/intq.wjdl [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/intq_chain [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/intq_postexec [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/intq_preexec [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/lconv.wjdl [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/lconv_chain [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/lconv_postexec [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/lconv_preexec [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/visualizepolar.wjdl [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/visualizepolar_chain [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/visualizepolar_postexec [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/submit_grid/visualizepolar_preexec [new file with mode: 0755]
inputs/gr/fixmp/kerrhiggs/analysis/visualizepolar.C [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/calculate.gp [new file with mode: 0644]
inputs/gr/fixmp/kerrhiggs/kerrhiggs.in [new file with mode: 0644]
inputs/gr/fixmp/kerrkgaxhyp/kerrkgaxhyp1.in [new file with mode: 0644]
inputs/gr/fixmp/phi3/phi3.in [new file with mode: 0644]
inputs/gr/fixmp/schkghyp/schwarzschild1.in [new file with mode: 0644]
inputs/minkowski/kg/energy.pl [new file with mode: 0755]
inputs/minkowski/kg/kgm-fixed.in [new file with mode: 0644]
inputs/minkowski/kg/kgm-lw2-fixed.in [new file with mode: 0644]
inputs/minkowski/kg/kgm-lw2.in [new file with mode: 0644]
inputs/minkowski/kg/kgm-rk2-fixed.in [new file with mode: 0644]
inputs/minkowski/kg/kgm-rk2.in [new file with mode: 0644]
inputs/minkowski/kg/kgm.in [new file with mode: 0644]
inputs/minkowski/kg/kgm2.in [new file with mode: 0644]
inputs/minkowski/kg/kgmbin2txt.pl [new file with mode: 0755]
inputs/minkowski/kg/methods/icn-0528-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/icn-1056-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/icn-2112-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/icnsigma1-1056-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/lw2-0528-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/lw2-1056-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/lw2-2112-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk2-0528-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk2-1056-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk2-2112-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk4-0462-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk4-0528-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk4-0924-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk4-1056-0.in [new file with mode: 0644]
inputs/minkowski/kg/methods/rk4-2112-0.in [new file with mode: 0644]
inputs/minkowski/kg/rt/compare.sh [new file with mode: 0755]
inputs/minkowski/kg/rt/conv-RK4-O4.pl [new file with mode: 0755]
inputs/minkowski/kg/rt/kgeq.in [new file with mode: 0644]
inputs/minkowski/kg/rtlh/kgeq.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/energy.pl [new file with mode: 0755]
inputs/minkowski/ymh-lambda0/five.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/relax.odin [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/two-fixed-lw2.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/two-fixed.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/two-o2-fixed.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/two.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda0/two2.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/debug-fixed.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/debug.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/energy.pl [new file with mode: 0755]
inputs/minkowski/ymh-lambda1/five-fixed.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/five.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/lambda0.1/relax.odin [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/lambda0.5/relax.odin [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/lambda1.0/five-relax.in [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/lambda1.0/relax.odin [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/lambda2.0/relax.odin [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/lambda5.0/relax.odin [new file with mode: 0644]
inputs/minkowski/ymh-lambda1/two.in [new file with mode: 0644]
inputs/ode/KruskalSzekeres.odin [new file with mode: 0644]
inputs/ode/Schwarzschild_t.odin [new file with mode: 0644]
inputs/ode/Schwarzschild_tau.odin [new file with mode: 0644]
inputs/ode/constforce-o1-032.dat.bz2 [new file with mode: 0644]
inputs/ode/constforce-o1-512.dat.bz2 [new file with mode: 0644]
inputs/ode/constforce-rk4-032.dat.bz2 [new file with mode: 0644]
inputs/ode/constforce.odin [new file with mode: 0644]
inputs/ode/constforce.plt [new file with mode: 0644]
inputs/ode/constforce.ps.gz [new file with mode: 0644]
inputs/ode/simple_exp_relax.debug.txt [new file with mode: 0644]
inputs/ode/simple_exp_relax.odin [new file with mode: 0644]
inputs/ode/simple_exp_relax_debug.mw [new file with mode: 0644]
inputs/scalar/periodic_KG.in [new file with mode: 0644]
inputs/scalar/periodic_SineGordon.in [new file with mode: 0644]
inputs/scalar/periodic_nonlin_KG.in [new file with mode: 0644]
inputs/scalar/periodic_wave_eq.in [new file with mode: 0644]
lib/Makefile [new file with mode: 0644]
man/Makefile [new file with mode: 0644]
man/gridripperapp.man [new file with mode: 0644]
src/Makefile [new file with mode: 0644]
src/phys/BuildInfo.cxx [new file with mode: 0644]
src/phys/Hunch.cxx [new file with mode: 0644]
src/phys/PhysFactory.cxx [new file with mode: 0644]
src/phys/gr/Factory.cxx [new file with mode: 0644]
src/phys/gr/dynss/Factory.cxx [new file with mode: 0644]
src/phys/gr/dynss/ekg/Factory.cxx [new file with mode: 0644]
src/phys/gr/dynss/ekg/kodama/CompactKScODE.cxx [new file with mode: 0644]
src/phys/gr/fixmp/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/higgsmp/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/higgsmp/HiggsEq.cxx [new file with mode: 0644]
src/phys/gr/fixmp/higgsmp/Hunch.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggs/Disk.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggs/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggs/Hunch.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggs/KerrHiggs.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggshyp/Disk.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggshyp/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggshyp/Hunch.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrhiggshyp/KerrHiggsHyp.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrkgaxhyp/Disk.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrkgaxhyp/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/kerrkgaxhyp/Hunch.cxx [new file with mode: 0755]
src/phys/gr/fixmp/kerrkgaxhyp/KerrKGaxHyp.cxx [new file with mode: 0644]
src/phys/gr/fixmp/phi3/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/phi3/Hunch.cxx [new file with mode: 0644]
src/phys/gr/fixmp/phi3/Phi3.cxx [new file with mode: 0644]
src/phys/gr/fixmp/schkghyp/Disk.cxx [new file with mode: 0644]
src/phys/gr/fixmp/schkghyp/Factory.cxx [new file with mode: 0644]
src/phys/gr/fixmp/schkghyp/Hunch.cxx [new file with mode: 0755]
src/phys/gr/fixmp/schkghyp/SchKGHyp.cxx [new file with mode: 0644]
src/phys/minkowski/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/kg/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/kg/moncrief/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/kg/moncrief/Hunch.cxx [new file with mode: 0644]
src/phys/minkowski/kg/moncrief/KGEq.cxx [new file with mode: 0644]
src/phys/minkowski/kg/rt/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/kg/rt/Hunch.cxx [new file with mode: 0644]
src/phys/minkowski/kg/rt/KGEq.cxx [new file with mode: 0644]
src/phys/minkowski/kg/rtlh/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/kg/rtlh/Hunch.cxx [new file with mode: 0644]
src/phys/minkowski/kg/rtlh/KGEq.cxx [new file with mode: 0644]
src/phys/minkowski/ymh/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/ymh/moncrief/BPSHunch.cxx [new file with mode: 0644]
src/phys/minkowski/ymh/moncrief/Factory.cxx [new file with mode: 0644]
src/phys/minkowski/ymh/moncrief/TwoFields.cxx [new file with mode: 0644]
src/phys/minkowski/ymh/moncrief/TwoFieldsODE.cxx [new file with mode: 0644]
src/phys/minkowski/ymh/moncrief/wHunch.cxx [new file with mode: 0644]
src/phys/scalar/Massive.cxx [new file with mode: 0644]
src/phys/scalar/Quartic.cxx [new file with mode: 0644]
src/phys/scalar/QuarticSymmBreaking.cxx [new file with mode: 0644]
src/phys/scalar/ScalarPotentialFactory.cxx [new file with mode: 0644]
src/phys/scalar/SineGordon.cxx [new file with mode: 0644]
util/gettslice/Makefile [new file with mode: 0644]
util/gettslice/bin/go.sh [new file with mode: 0755]
util/gettslice/doc/README [new file with mode: 0644]
util/gettslice/src/gettslice.cc [new file with mode: 0644]
util/submit_genagrid/go.sh [new file with mode: 0755]
util/submit_genagrid/gridripper.sh [new file with mode: 0755]
util/submit_grid/arc.sh [new file with mode: 0755]
util/submit_grid/arg.list [new file with mode: 0644]
util/submit_grid/gridripper.wjdl [new file with mode: 0644]
util/submit_grid/gridripper_chain [new file with mode: 0755]
util/submit_grid/gridripper_defs [new file with mode: 0755]
util/submit_grid/gridripper_postexec [new file with mode: 0755]
util/submit_grid/gridripper_preexec [new file with mode: 0755]
util/submit_grid/listhalted.sh [new file with mode: 0755]
util/submit_grid/listterminated.sh [new file with mode: 0755]
util/submit_grid/replacein.sh [new file with mode: 0755]
util/submit_grid/restore.sh [new file with mode: 0755]
util/test/Makefile [new file with mode: 0644]
util/test/difftest.cxx [new file with mode: 0644]
util/test/math/expr/EvaluatorTest.cxx [new file with mode: 0644]
util/test/math/expr/Makefile [new file with mode: 0644]
util/test/spmtest.cxx [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..b7b4deb
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,82 @@
+# This is the main Makefile. For compilation, say make all. 
+# For document building say make doc. For cleaning up source, 
+# say make clean. For complete cleaning up of source, say 
+# make distclean. For cleaning up of generated documents, say 
+# make docclean. For installing say make install. For 
+# uninstalling, say make uninstall. For preparing a tarball for 
+# release, say make archive. For help say make help.
+
+.PHONY : all clean distclean doc docclean install uninstall help
+
+TRUNK             := $(PWD)
+
+PKGCONFFILE       := $(word 1,$(wildcard *.pc))
+
+include $(TRUNK)/config.mk
+
+BUILD_DATE        := $(shell date +%Y%m%d)
+BUILD_REVISION    := $(shell svn info 2>/dev/null | grep "^Revision:" | cut -f 2 -d ':' | tr -d ' \t')
+BUILD_ISMODIFIED  := $(shell svn status 2>/dev/null | grep -v "^?" | head -n 1 | cut -c 1 | tr '[:alnum:]' 'm')
+BUILD_VERSION     := $(shell grep -m 1 -E '^\[[0123456789]+\.[0123456789]+(\.[0123456789]+)?\]' changelog | tr -d '[]')
+BUILD_INFO        := -DBUILD_INFO=\\\"ver$(BUILD_VERSION)-rev$(BUILD_REVISION)$(BUILD_ISMODIFIED)-arch$(ARCH)-opsys$(PLATFORM)-build$(BUILD_DATE)\\\"
+
+all               :
+       cd src;     TRUNK=$(TRUNK) BUILD_INFO=$(BUILD_INFO) STATIC=$(STATIC) INCLUDEDEPS=true $(MAKE) all
+
+clean             :
+       cd src;     TRUNK=$(TRUNK) $(MAKE) clean
+
+distclean         : docclean clean
+       rm -f $(PKGCONFFILE)
+       rm -f config.mk
+       rm -f configure
+       rm -f config.log
+       rm -f config.status
+       rm -rf autom4te.cache
+
+doc               :
+       cd doc;     TRUNK=$(TRUNK) $(MAKE) doc
+
+docclean          :
+       cd doc;     TRUNK=$(TRUNK) $(MAKE) docclean
+
+install           : all doc
+       cd bin;     TRUNK=$(TRUNK) $(MAKE) install
+       cd lib;     TRUNK=$(TRUNK) $(MAKE) install
+       cd include; TRUNK=$(TRUNK) $(MAKE) install
+       cd doc;     TRUNK=$(TRUNK) $(MAKE) install
+       cd man;     TRUNK=$(TRUNK) $(MAKE) install
+       cd inputs;  TRUNK=$(TRUNK) $(MAKE) install
+       mkdir -p $(LIBDIR)/pkgconfig
+       cp $(PKGCONFFILE) $(LIBDIR)/pkgconfig/
+
+uninstall         : all doc
+       cd bin;     TRUNK=$(TRUNK) $(MAKE) uninstall
+       cd lib;     TRUNK=$(TRUNK) $(MAKE) uninstall
+       cd include; TRUNK=$(TRUNK) $(MAKE) uninstall
+       cd doc;     TRUNK=$(TRUNK) $(MAKE) uninstall
+       cd man;     TRUNK=$(TRUNK) $(MAKE) uninstall
+       cd inputs;  TRUNK=$(TRUNK) $(MAKE) uninstall
+       rm -f $(LIBDIR)/pkgconfig/$(PKGCONFFILE)
+
+help              :
+       @$(ECHO) "Possible make options are:"
+       @$(ECHO) "make           - This defaults to 'make all'."
+       @$(ECHO) "make all       - Compilation of source."
+       @$(ECHO) "make doc       - Compilation of documentation."
+       @$(ECHO) "make clean     - Clean up source code."
+       @$(ECHO) "make distclean - Thorough cleanup of source code."
+       @$(ECHO) "make docclean  - Clean up generated documentation."
+       @$(ECHO) "make install   - Install the package."
+       @$(ECHO) "make uninstall - Uninstall the package."
+       @$(ECHO) "make archive   - Create a tarball release."
+       @$(ECHO) "make help      - Display this help."
+       @$(ECHO) "For static linking of the binaries during compilation, "
+       @$(ECHO) "STATIC=true make all"
+       @$(ECHO) "is the adequate command."
+
+AUXFILES=$(shell svn status 2>/dev/null | grep "^?" | tr '\t' ' ' | tr -s ' ' | cut -f 2- -d ' ')
+EXCLUDEFLAGS=$(patsubst %,--exclude=%,$(AUXFILES))
+
+archive           : distclean
+       NAME=`basename ${PWD}` ; cd .. ; tar --exclude=.svn $(EXCLUDEFLAGS) -czf /tmp/$${NAME}.tar.gz $${NAME} ; mv /tmp/$${NAME}.tar.gz $${NAME}/ ; cd $${NAME}
diff --git a/bin/Makefile b/bin/Makefile
new file mode 100644 (file)
index 0000000..311befe
--- /dev/null
@@ -0,0 +1,16 @@
+# Do NOT run this Makefile from this directory. Run the
+# top-level Makefile! This is the Makefile of bin directory.
+
+.PHONY : install uninstall
+
+include $(TRUNK)/config.mk
+
+EXECS             := $(filter-out Makefile,$(wildcard *))
+TARGEXECS         := $(patsubst %,$(BINDIR)/%,$(EXECS))
+
+install           :
+       mkdir -p $(BINDIR)
+       cp $(EXECS) $(BINDIR)/
+
+uninstall         :
+       rm -f $(TARGEXECS)
diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..9a35bb6
--- /dev/null
+++ b/changelog
@@ -0,0 +1,24 @@
+File format:
+
+[VERSION]
+(REVISION)
+       Here comes the description. Where VERSION is the release 
+       version, and REVISION is the corresponding SVN revision.
+
+
+
+
+[1.1.0]
+(1961)
+       This is the first published version.
+
+
+[1.0.0]
+(1894)
+       This is the initial gridripperapp version after splitting it 
+       to core library + applications.
+
+[0.5.0]
+(1884)
+       This was the original version, without splitting applications 
+       and core library.
diff --git a/config.mk.in b/config.mk.in
new file mode 100644 (file)
index 0000000..33a3aa8
--- /dev/null
@@ -0,0 +1,40 @@
+PKGNAME        = @PKGNAME@
+LIBNAME        = @LIBNAME@
+CONFDATE       = @CONFDATE@
+VERSION        = @VERSION@
+REVISION       = @REVISION@
+PKGDESCRIPTION = @PKGDESCRIPTION@
+PLATFORM       = @PLATFORM@
+ARCH           = @ARCH@
+CONFIG_OPTIONS = @CONFIG_OPTIONS@
+
+GRRLIBS_DIR    = @GRRLIBS_DIR@
+GRRLIBS_MAIN   = @GRRLIBS_MAIN@
+
+prefix         = @prefix@
+exec_prefix    = @exec_prefix@
+datarootdir    = @datarootdir@
+BINDIR         = @bindir@
+INCDIR         = @includedir@
+LIBDIR         = @libdir@
+MANDIR         = @mandir@
+DATADIR        = @datadir@/$(LIBNAME)
+DOCDIR         = $(DATADIR)/doc
+INPUTSDIR      = $(DATADIR)/inputs
+PERL           = @PERL@
+ECHO           = @ECHO@
+FIND           = @FIND@
+GREP           = @GREP@
+AR             = @AR@
+CC             = @CC@
+CXX            = @CXX@
+CXXFLAGS       = -I$(TRUNK)/include @CXXFLAGS@
+MAKEDEPEND     = $(CXX) -M $(CXXFLAGS)
+ifeq ($(CXX),g++)
+  CXXFLAGS    += -Wall -Wno-long-long -ansi -O3
+endif
+X_CFLAGS       = @X_CFLAGS@
+LD             = @CXX@
+X_LIBS         = @X_LIBS@ -lX11
+LIBS           = @LIBS@
+DOXYGEN        = @DOXYGEN@
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..00e9a7e
--- /dev/null
@@ -0,0 +1,183 @@
+# CXXFLAGS variable should contain the flags for the actual compilation tests,
+# since this variable is used by configure. For some reason, CXXFLAGS
+# can not contain `gsl-config --cflags` type things, so we always have to
+# expand this.
+# However, the final cxxflags output by configure should contain the non-expanded
+# versions (i.e. `gsl-config --cflags` and similar, instead of the expanded value)
+# so this will be accumulated in CXXFLAGS_FINAL, and after all the compilation
+# checks have been done, it will be copied to CXXFLAGS
+
+AC_INIT
+[ CWD=`pwd` ]
+
+PKGNAME='GridRipperApp'
+AC_SUBST([PKGNAME])
+LIBNAME='gridripperapp'
+AC_SUBST([LIBNAME])
+PKGDESCRIPTION='PDE implementations for the GridRipper AMR + spectral PDE solver.'
+AC_SUBST([PKGDESCRIPTION])
+REQUIRES=gridripper
+AC_SUBST([REQUIRES])
+CONFIG_OPTIONS=$ac_configure_args
+AC_SUBST([CONFIG_OPTIONS])
+
+CXXFLAGS=''
+CXXFLAGS_FINAL=''
+LIBS=''
+
+# ------------------- check for debug options --------------------------------
+
+AC_ARG_ENABLE(debug,[[
+  --enable-debug[=arg]    Compile with debugging enabled [disabled]
+                          The extra arg can be for example 'gdb'
+                          to produce debugging info for gdb. See
+                          'man gcc' to find other possibilities.]],
+[[
+  if [ "$enable_debug" != "no" ] ; then
+    if [ "$enable_debug" = "yes" ] ; then
+      enable_debug=""
+    fi
+    CXXFLAGS="$CXXFLAGS -DDEBUG -g$enable_debug"
+    CXXFLAGS_FINAL="$CXXFLAGS_FINAL -DDEBUG -g$enable_debug"
+  fi
+]])
+
+# ------------------- check for operating system -----------------------------
+
+AC_MSG_CHECKING([[platform]])
+[PLATFORM=`uname -s | tr '[a-z]' '[A-Z]'`]
+AC_SUBST([PLATFORM])
+AC_MSG_RESULT([$PLATFORM])
+
+# ------------------- check for architecture ---------------------------------
+
+AC_MSG_CHECKING([[architecture]])
+[ARCH=`uname -m | tr '[a-z]' '[A-Z]'`]
+AC_SUBST([ARCH])
+AC_MSG_RESULT([$ARCH])
+
+# ------------------- check for standard header files ------------------------
+
+AC_PROG_CC
+AC_PROG_CXX
+AN_MAKEVAR([AR], [AC_PROG_AR])
+AN_PROGRAM([ar], [AC_PROG_AR])
+AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
+AC_PROG_AR
+AN_MAKEVAR([FIND], [AC_PROG_FIND])
+AN_PROGRAM([find], [AC_PROG_FIND])
+AC_DEFUN([AC_PROG_FIND], [AC_CHECK_TOOL(FIND, find, :)])
+AC_PROG_FIND
+AN_MAKEVAR([GREP], [AC_PROG_GREP])
+AN_PROGRAM([grep], [AC_PROG_GREP])
+AC_DEFUN([AC_PROG_GREP], [AC_CHECK_TOOL(GREP, grep, :)])
+AC_PROG_GREP
+AC_LANG([C++])
+[ STDCPPHEADERS="ok" ]
+AC_CHECK_HEADERS([iostream],[],[STDCPPHEADERS="error"])
+AC_CHECK_HEADERS([streambuf],[],[STDCPPHEADERS="error"])
+AC_CHECK_HEADERS([fstream],[],[STDCPPHEADERS="error"])
+AC_CHECK_HEADERS([cmath],[],[STDCPPHEADERS="error"])
+AC_CHECK_HEADERS([cstdlib],[],[STDCPPHEADERS="error"])
+AC_CHECK_HEADERS([cstdio],[],[STDCPPHEADERS="error"])
+AS_IF([test "$STDCPPHEADERS" = "ok"],[],
+   AC_MSG_ERROR([
+ **   Some of the standard c++ header files do not exist
+ **   on your system. Your compiler is probably too old
+]))
+
+# -----------------  get current date ----------------------------------------
+
+AC_MSG_CHECKING([[date]])
+[CONFDATE=`date +%Y%m%d`]
+AC_SUBST([CONFDATE])
+AC_MSG_RESULT([$CONFDATE])
+
+# -----------------  get current version from changelog ----------------------
+
+AC_MSG_CHECKING([[version from changelog]])
+[VERSION=`grep -m 1 -E '^\[[0123456789]+\.[0123456789]+(\.[0123456789]+)?\]' changelog | tr -d '[]'`]
+AC_SUBST([VERSION])
+AC_MSG_RESULT([$VERSION])
+
+# -----------------  get current revision from SVN ---------------------------
+
+AC_MSG_CHECKING([[current SVN revision]])
+[REVISION=`svn info 2>/dev/null | grep "^Revision:" | cut -f 2 -d ':' | tr -d ' \t'`]
+AC_SUBST([REVISION])
+AC_MSG_RESULT([$REVISION])
+
+# ----------------- check programs -------------------------------------------
+
+[MISSING_SW=""]
+
+AS_IF([test -x /bin/echo],[ECHO=/bin/echo],
+[
+ AC_CHECK_PROG(ECHO, echo, `which echo`, [])
+ AS_IF([test "$ECHO" != ""], [], AC_MSG_ERROR([[echo does not exist]]))
+])
+AC_SUBST([ECHO])
+
+AC_CHECK_PROG(PERL, perl, `which perl`, [])
+AS_IF([test "$PERL" != ""], [], 
+      [MISSING_SW="$MISSING_SW\nperl            - some helper scripts will fail\n"]
+)
+#AC_SUBST([PERL])
+
+AC_CHECK_PROG(DOXYGEN, doxygen, `which doxygen`, [])
+AS_IF([test "$DOXYGEN" != ""], [],
+      [MISSING_SW="$MISSING_SW\ndoxygen         - document generation will fail\n"]
+)
+AC_SUBST([DOXYGEN])
+
+# --------  check GridRipper presence ----------------------------------------
+
+AC_MSG_CHECKING([[GridRipper]])
+[GRIDRIPPER_CONFIG=`pkg-config gridripper --cflags 2>/dev/null`]
+AS_IF([test "$GRIDRIPPER_CONFIG" != ""], 
+[
+  AC_MSG_RESULT([found])
+  CXXFLAGS='-DHAVE_GRIDRIPPER '`pkg-config gridripper --cflags`
+  CXXFLAGS_FINAL="$CXXFLAGS_FINAL "'-DHAVE_GRIDRIPPER `pkg-config gridripper --cflags`'
+  LIBS="$LIBS "'`pkg-config gridripper --libs`'
+  GRRLIBS_DIR=`pkg-config gridripper --libs-only-L`
+  GRRLIBS_MAIN=`pkg-config gridripper --variable=GRRLIBS_MAIN`
+  AC_SUBST([GRRLIBS_DIR])
+  AC_SUBST([GRRLIBS_MAIN])
+], 
+[
+  AC_MSG_ERROR([GridRipper is not found, which is necessary. Please install.])
+])
+
+# finally copy the CXXFLAGS_FINAL into CXXFLAGS (no compilation checks will be done
+# any more here, so it's ok
+CXXFLAGS=$CXXFLAGS_FINAL
+AC_SUBST([LIBS])
+
+# ------------------ checking X11 headers/libraries locations ----------------
+
+AC_PATH_XTRA
+
+# ------------------ summarize things ----------------------------------------
+
+[echo]
+
+AC_CONFIG_FILES([config.mk:config.mk.in])
+AC_CONFIG_FILES([$LIBNAME.pc:$LIBNAME.pc.in])
+AC_OUTPUT
+
+AS_IF([test "$MISSING_SW" != ""],
+
+
+  echo "####################  MISSING FEATURES  ##########################"
+  echo "##### (this may very severy limit functionality)          ########"
+  echo "##################################################################"
+  echo
+  echo -e "$MISSING_SW"
+  echo
+  echo "##################################################################"
+  echo "### We very strongly recommend to install these packages!  #######"
+  echo "##################################################################"
+
+
+)
diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644 (file)
index 0000000..3f5abfc
--- /dev/null
@@ -0,0 +1,1356 @@
+# Doxyfile 1.5.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = GridRipper
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doxydir
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
+# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, 
+# and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = CXX
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../include
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          = *.dox *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = .
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = NO
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is enabled by default, which results in a transparent 
+# background. Warning: Depending on the platform used, enabling this option 
+# may lead to badly anti-aliased labels on the edges of a graph (i.e. they 
+# become hard to read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/doc/INSTALL b/doc/INSTALL
new file mode 100644 (file)
index 0000000..bfaa64b
--- /dev/null
@@ -0,0 +1,55 @@
+***************************** BUILDING THE CODE AND INSTALLATION *************
+
+Required packages:
+- Standard UNIX command line tools.
+- GNU autoconf 2.61 or newer.
+- GNU make 3.81 or newer.
+- GNU libtool 1.5.22 or newer.
+- C++ compiler, preferably GNU g++ 4.1 or newer.
+- GNU Scientific Library (GSL) 1.9 or newer.
+- The GridRipper package -- AMR + spectral PDE solver core library 
+  (can be found at http://www.rmki.kfki.hu/~gridripper/gridripper.tar.gz).
+Optional packages:
+- The AGM library for multidimensional adaptive Genz-Malik cubature
+  (can be found within the source tree gridripper.tar.gz).
+- The GSTREAM library for fstream-like I/O manipulations for files
+  stored on LHC Computing Grid Storage Element infrastructure
+  (http://www.grid.kfki.hu/twiki/pub/RmkiGrid/MassSe/gstream.tar.gz).
+
+To build and install, first download and install the GridRipper core 
+library. After that, run the following commands:
+       autoconf
+       ./configure [options]
+       make
+       make doc
+       make install
+
+After build and installation, do the following modifications to the 
+environmental variables:
+- Add the location of the runnable binaries to the PATH variable
+  (typically say 'export PATH=/usr/local/bin:$PATH' under bash type shells).
+- Add the location of libraries to the LD_LIBRARY_PATH variable
+  (typically say 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' under bash type shells).
+- Add the location of library descriptors to the PKG_CONFIG_PATH variable
+  (typically say 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' under bash type shells).
+- Add the location of manual pages to the MANPATH variable
+  (typically say 'export MANPATH=/usr/local/share/man:$MANPATH' under bash type shells).
+
+For further configuration and build options, see the commands:
+       ./configure --help
+       make help
+
+
+***************************** DOCUMENTATION **********************************
+
+To build documentation, run the following command:
+       make doc
+
+All documentation can be found under the 'doc' directory.
+
+
+***************************** UNINSTALLATION *********************************
+
+To uninstall, run the following command:
+       make uninstall
+
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644 (file)
index 0000000..158927b
--- /dev/null
@@ -0,0 +1,37 @@
+# Do NOT run this Makefile from this directory. Run the
+# top-level Makefile! This is the Makefile of doc directory.
+
+.PHONY : doc docclean install uninstall
+
+include $(TRUNK)/config.mk
+
+DOXYDIR           := doxydir
+HEADERS           := $(shell $(FIND) $(TRUNK)/include -type f -name '*.h' -print)
+DOCS              := $(filter-out $(DOXYDIR),$(filter-out Doxyfile,$(filter-out Makefile,$(wildcard *))))
+
+ifneq ("$(DOXYGEN)","")
+
+doc               : $(DOXYDIR)
+
+$(DOXYDIR)        : Doxyfile $(HEADERS)
+       $(DOXYGEN) Doxyfile
+
+docclean          :
+       rm -rf $(DOXYDIR)
+
+else
+
+DOXYDIR           := 
+
+doc               :
+
+docclean          :
+
+endif
+
+install           : doc $(DOCS)
+       mkdir -p $(DOCDIR)
+       cp -r $(DOCS) $(DOXYDIR) $(DOCDIR)/
+
+uninstall         :
+       rm -rf $(DOCDIR)
diff --git a/doc/README b/doc/README
new file mode 100644 (file)
index 0000000..64c5f3a
--- /dev/null
@@ -0,0 +1,22 @@
+
+This is the README file for the package GridRipperApp.
+
+GridRipperApp is an application for the GridRipper core library, which is an 
+1+1 dimensional finite difference Adaptive Mesh Refinement (AMR) solver for 
+hyperbolic partial differential equations. It is extended to 1+d dimensions 
+by using spectral expansion on the polar directions.
+
+To use the package, first follow the instructions in the INSTALL file.
+
+After installation, application programs can be linked against the 
+GridRipperApp library using the following compilation and linking 
+commands:
+ # For compilation:
+ `pkg-config gridripperapp --cflags`
+ # For linking:
+ `pkg-config gridripperapp --libs` `pkg-config gridripperapp --libs`
+You should include the header files under the install directory 
+of gridripperapp header files.
+
+For further documentation see the index.html description file.
+
diff --git a/doc/TODO b/doc/TODO
new file mode 100644 (file)
index 0000000..d6b9c8e
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,8 @@
+
+Known tasks:
+============
+
+
+Solved tasks:
+=============
+
diff --git a/doc/index.html b/doc/index.html
new file mode 100644 (file)
index 0000000..397b09b
--- /dev/null
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>GridRipperApp</title>
+<style type="text/css">
+    body {font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;
+         text-align: justify; width: 720px; margin-left: 56px;}
+    h1 {text-align: center;}
+    h2 {font-size: 12pt; text-align: left;}
+    th {font-size: 10pt; text-align: center; vertical-align: top;}
+    td {font-size: 10pt; text-align: left; vertical-align: top;}
+    div.abstractAndAuthor {margin-top: 9pt; margin-left: 9pt; font-size: 9pt; text-align: center;}
+    img {border: 0;}
+</style>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+
+<h1>GridRipperApp</h1>
+
+<p align="LEFT">
+This an application package of a fourth order precision Adaptive Mesh 
+Refinement (AMR) library for solving hyperbolic systems of partial 
+differential equations (PDE-s) numerically. The main package is the 
+<a href=http://www.rmki.kfki.hu/~gridripper>GridRipper</a>, the 
+core library of numerical methods. 
+Concrete implementation of PDE-s are be done in this application package, 
+the <b>GridRipperApp</b>.
+</p>
+
+<p>
+A physical model consists of a partial differential equation (PDE) and an
+initial condition, both implemented as C++ classes in the GridRipperApp 
+package. This application library is linked against the GridRipper core 
+library, forming a PDE solver program after the build phase. 
+Parameters for the PDE 
+solver program can be specified in an input file. Valid input files for 
+already implemented PDE-s are found within the GridRipperApp package. 
+The input file can also contain certain function formulae, interpreted by a 
+formula parser, hence it is possible to specify simple initial conditions 
+without writing program code.
+<p>
+<a href="parameters.html">Simulation parameters specified in an input file</a>:
+<ul>
+<li><a href="parameters.html#physics">Physics</a>: model and parameters
+    </li>
+<li><a href="parameters.html#basic">Basic</a> simulation parameters:
+    <ul>
+    <li>Base grid resolution and maximum number of refinement levels.</li>
+    <li>The Courant factor. It can be constant or a function of time.</li>
+    <li>Integration method: RK2, RK4, Iterated Crank-Nicholson
+       or Lax-Wendroff.</li>
+    <li>The &sigma; factor of the numerical dissipation term. It can be
+       coordinate dependent.</li>
+    </ul>
+    </li>
+<li><a href="parameters.html#AMR_spec">Special</a> mesh refinement related parameters:
+    <ul>
+    <li>Error function and error tolerance for the refinement condition.</li>
+    <li>Frequency of error checking.</li>
+    <li>Maximum number of time steps without regridding.</li>
+    <li>Buffer zone size.</li>
+    </ul>
+    </li>
+<li><a href="parameters.html#output">Output</a>:
+    <ul>
+    <li>Time difference for datafile writing.</li>
+    <li>...</li>
+    </ul>
+    </li>
+</ul>
+
+<h2>API documentation</h2>
+<ul>
+<li><a href="doxydir/html/index.html">GridRipperApp/C++ API</a></li>
+<li>See also 'man gridripperapp' after installation for practical instructions.</a></li>
+</ul>
+
+<h2>Tools</h2>
+Some of the below tools are shipped with the GridRipper core library, 
+some of them are on the other hand are generated when building and 
+installing GridRipperApp application package of GridRipper.
+<table cellspacing="5pt">
+<tr><td><i>gridripper</i></td>
+    <td>Solves the system of PDEs numerically, stores the solution
+       in a binary file (.bdata).</td>
+    <td>(C++)</td></tr>
+<tr><td><i>grr-odeshoot</i></td>
+       <td>Solves an ODE with shooting method.</td><td>(C++)</td></tr>
+<tr><td><i>grr-intdx</i></td>
+    <td>Reads bdata, numerically integrates the specified function(s) in
+       space using a fifth order polynomial approximation.</td>
+    <td>(C++)</td></tr>
+<tr><td><i>grr-curves</i></td>
+    <td>Reads bdata and creates curves by calculating the x-intercepts of the
+       specified function.</td>
+    <td>(C++)</td></tr>
+<tr><td><i>grr-datatable</i></td>
+    <td>Reads the input and the bdata files, prints the values of the specified
+       field components and grid functions in text format.</td>
+    <td nowrap>(C++)</td></tr>
+<tr><td><i>grr-bdata2txt</i></td>
+    <td>Reads bdata and prints its contents in text format.<br/>
+       Note that it cannot print functions of field components,
+       use grr-datatable for that.</td>
+    <td nowrap>(Perl)</td></tr>
+<tr><td><i>grr-meshdensity</i></td>
+    <td>Reads bdata, prints mesh refinement info.</td>
+    <td nowrap>(Perl)</td></tr>
+</table>
+
+<h2>Applications</h2>
+
+The main aim for developing the code was to solve the Einstein equations
+numerically. The following problems are currently investigated:
+<ul>
+<li>Gravitational collapse of fluid or scalar field in spherical symmetry.</li>
+<li>Creation of baby universes.</li>
+<li>Cosmic inflation.</li>
+<li>Einstein-Klein-Gordon system in 3D scenarios using multipole expansion.</li>
+</ul>
+
+<h2>Download</h2>
+<ul>
+<li>The GridRipper core library source: <a href=http://www.rmki.kfki.hu/~gridripper/gridripper.tar.gz>gridripper.tar.gz</a>.</li>
+<li>The GridRipperApp application package source: <a href=http://www.rmki.kfki.hu/~gridripper/gridripperapp/gridripperapp.tar.gz>gridripperapp.tar.gz</a>.</li>
+</ul>
+First, download, build and install the GridRipper core library. Then download, 
+build and install the GridRipperApp application package source. To write 
+your own PDE, you can simply extend the GridRipperApp code with your equation.
+
+<h2>Authors and contributors</h2>
+<ul>
+<li>P&eacute;ter Csizmadia &mdash; C++: AMR algorithm</li>
+<li>Andr&aacute;s L&aacute;szl&oacute;
+    &mdash; C++: multipole methods</li>
+<li>Istv&aacute;n R&aacute;cz &mdash; ideas and theoretical background</li>
+</ul>
+
+Please contact us if you would like to join to the developers. Our e-mail 
+addresses are found in the manual pages shipped with the GridRipper and 
+GridRipperApp source packages (see the 'man' directory of the above 
+downloadable source packages).
+
+<h2>Thanks</h2>
+This work was supported in part by OTKA grant K67942.
+
+<h2>References</h2>
+<ul>
+<li>P. Csizmadia, <i>Testing a new mesh refinement code in the evolution
+    of a spherically symmetric Klein-Gordon field</i>,
+    International Journal of Modern Physics <b>D</b>15 (2006) 107-119
+    [<a HREF="http://arXiv.org/abs/hep-th/0505036">arXiv:hep-th/0505036</a>]
+<li>P. Csizmadia, <i>Fourth order AMR and nonlinear dynamical systems
+    in compactified space</i>,
+    Classical and Quantum Gravity <b>24</b> (2007) S369-S379.
+<li>P. Csizmadia, A. L&aacute;szl&oacute;, I. R&aacute;cz,
+    <i>Linear waves on fixed Kerr background and their relevance in jet formation</i>,
+    Journal of Physics: Conference Series <b>218</b> (2010) 012007.
+</ul>
+
+<p>
+<hr width="50%">
+<p align="right">
+28 January 2011, A. L&aacute;szl&oacute;
+</p>
+
+</body>
+</html>
diff --git a/doc/parameters.html b/doc/parameters.html
new file mode 100644 (file)
index 0000000..43a6b6c
--- /dev/null
@@ -0,0 +1,223 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>GridRipper Simulation Parameters</title>
+<style type="text/css">
+    body {font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;
+         text-align: justify; width: 720px; margin-left: 56px;}
+    h1 {text-align: center;}
+    h2 {font-size: 12pt; text-align: left;}
+    th {font-size: 10pt; text-align: center; vertical-align: top;}
+    td {text-align: left; vertical-align: top;}
+    td.par_name { font-family: monospace; text-align: left; font-size: 10pt; }
+    td.par_meaning { text-align: left; font-size: 10pt; }
+    td.par_default { text-align: center; font-size: 10px; }
+    blockquote {margin-top: 0; margin-bottom: 0}
+    blockquote.example {
+       margin-top: 0; margin-bottom: 0; border: 1px dashed #333;
+       width: 500px; padding: 0px; white-space: nowrap; overflow: hidden;
+    }
+    pre {margin-top: 0; margin-bottom: 0}
+    div.abstractAndAuthor {margin-top: 9pt; margin-left: 9pt; font-size: 9pt; text-align: center;}
+    img {border: 0;}
+    ul {margin-top: 0; }
+</style>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+
+<a name="physics"><h2>Physics</h2></a>
+
+<blockquote>
+<table cellpadding="4" cellspacing="0" border="0" style="width:600px; overflow:hidden">
+<tr><td class="par_name">pde</td>
+    <td class="par_meaning">Partial differential equation.<br>
+    Name of the PDE class and optional parameters separated by spaces.
+    </td></tr>
+<tr><td class="par_name"><a name="initCond">initCond</a></td>
+    <td class="par_meaning">Initial conditions.<br>
+    Name of the initial condition class and optional parameters separated by
+    spaces. Basic
+    <a href="c++/html/classgridripper_1_1amr1d_1_1FuncInitCond.html"><code>FuncInitCond</code></a>
+    implementations:
+    <ul>
+    <li><code>Zero</code> &mdash; Sets zero value everywhere for each field
+           component.</li>
+    <li><code>UserDef</code> &mdash; User-defined initial condition. Its
+           parameters are the specifications of the field components using
+           mathematical formulas, in the following form:
+           <code><i>f</i>=<i>formula1</i> <i>g</i>=<i>formula2</i> ...</code>.
+           </li>
+    <li><a name="ODEShootInit"><code>ODEShootInit</code></a>
+       &mdash; Initial condition determined by an ordinary differential
+       equation (see the <a href="#ode">ode</a> parameter) which is solved
+       using shooting method.
+       </li>
+    <li><a name="ODERelaxInit"><code>ODERelaxInit</code></a>
+       &mdash; Initial condition determined by an ordinary differential
+       equation (see the <a href="#ode">ode</a> parameter) which is solved
+       using relaxation method.
+       </li>
+    <li><code>BData</code> &mdash; Uses a data file from a previous run.</li>
+    </ul>
+    Common parameters of FuncInitCond implementations:
+    <ul>
+    <li><code>interpolatedLevel=<i>l</i></code>
+       &mdash; Use this parameter to interpolate the initial condition on
+       refined meshes. An integer value <code><i>l</i>&ge;1</code>
+       specifies the minimum refinement level to initialize using
+       interpolation. If set to zero (<code>interpolatedLevel=0</code>),
+       then no interpolation is used; each level is initialized as precisely
+       as possible.
+       </li>
+    </ul>
+    Examples:
+    <blockquote class="example">
+    <pre>initCond=UserDef f=(0.1*r1+0.5*r2+r3)/(r1+r2+r3)
+initCond=BData kgm.bdata
+initCond=gr.fixmp.kerrhiggs.Hunch interpolatedLevel=1</pre>
+    </blockquote>
+    </td></tr>
+<tr><td class="par_name"><a name="ode">ode</a></td>
+    <td class="par_meaning">Initial state specified by an ordinary
+    differential equation.<br>
+    Use it with <code><a href="#initCond">initCond</a>=ODEShootInit</code>
+    or <code>ODERelaxInit</code>.<br>
+    Example:
+    <blockquote class="example">
+    <code>
+initCond=ODEShootInit<br>
+ode=gr.dynss.ekg.EKGODE a=7.162 b=3 c=0.08 d=100 psi=(rho&gt;a-b)*(rho&lt;a+b)?c*exp(d+d*b^2/((rho-a)^2-b^2)):0 psi_rho=(rho&gt;a-b)*(rho&lt;a+b)?-2*c*d*b^2*(rho-a)*exp(d+d*b^2/((rho-a)^2-b^2))/((rho-a)^2-b^2)^2:0
+    </code>
+    </blockquote>
+    </td></tr>
+<tr><td class="par_name">parameters.*</td>
+    <td class="par_meaning">Parameters of the PDE and the initial
+                           condition.
+    </td></tr>
+</table>
+</blockquote>
+
+<a name="basic"><h2>Basic simulation parameters</h2></a>
+
+<blockquote>
+<table cellpadding="4" cellspacing="0" border="0" style="width:600px">
+<tr><td class="par_name">resolution</td>
+    <td class="par_meaning">Grid resolution.<br>
+       Use <code>resolution=<em>N</em></code> to specify the resolution for
+       a unigrid, use
+       <code>resolution=<em>N</em>x2^<em>L</em></code> to specify
+       both the base grid resolution (<em>N</em>) and the maximum number of
+       refinement levels (<em>L</em>). Examples:
+       <blockquote class="example">
+       <pre>resolution=1024
+resolution=256x2^4</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">dtdx</td>
+    <td class="par_meaning">The &Delta;t/&Delta;x Courant factor.<br>
+       It can be constant or a function of time. Examples:
+       <blockquote class="example">
+       <pre>dtdx=1
+dtdx=t&lt;16.4? 1 : t&lt;17.58? 0.1 : 0.02</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">gridInt</td>
+    <td class="par_meaning">Integration method.<br>
+       <code>RK2</code> &mdash; Runge-Kutta 2nd order<br>
+       <code>RK4</code> &mdash; Runge-Kutta 4th order<br>
+       <code>ICN</code> &mdash; Iterated Crank-Nicholson<br>
+       <code>LW2</code> &mdash; Lax-Wendroff
+    </td></tr>
+<tr><td class="par_name">sigma</td>
+    <td class="par_meaning">The &sigma; factor of the numerical dissipation
+       term.<br>
+       It can be coordinate dependent. Examples:
+       <blockquote class="example">
+       <pre>sigma=0.01
+sigma=LStepSigma sigma0=0.02 sigma1=0.01 i=8</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">shoot.integrator</td>
+    <td class="par_meaning">Integration method for
+       <a href="#ODEShootInit">ODEShootInit.</a><br>
+       <code>RK2</code> &mdash; Runge-Kutta 2nd order<br>
+       <code>RK4</code> &mdash; Runge-Kutta 4th order
+    </td></tr>
+</table>
+</blockquote>
+
+<a name="AMR_spec"><h2>Special mesh refinement related parameters</h2></a>
+
+<blockquote>
+<table cellpadding="4" cellspacing="0" border="0" style="width:600px">
+<tr><td class="par_name">amError</td>
+    <td class="par_meaning">Error function for the mesh refinement
+       condition.<br>
+       Examples:
+       <blockquote class="example">
+       <pre>amError=ComponentError 0</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">errorTolerance</td>
+    <td class="par_meaning">Error tolerance for the mesh refinement
+       condition.<br>
+       Example:
+       <blockquote class="example">
+       <pre>errorTolerance=1e-12</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">errorCheckFreq</td>
+    <td class="par_meaning">Frequency of error checking.<br>
+       Example:
+       <blockquote class="example">
+       <pre>errorCheckFreq=8</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">regridFreq</td>
+    <td class="par_meaning">Maximum number of time steps without regridding.<br>
+       Example:
+       <blockquote class="example">
+       <pre>regridFreq=16</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">bufferZoneSize</td>
+    <td class="par_meaning">Buffer zone size.<br>
+       Example:
+       <blockquote class="example">
+       <pre>bufferZoneSize=2</pre>
+       </blockquote>
+    </td></tr>
+</table>
+</blockquote>
+
+<a name="output"><h2>Output file generation</h2></a>
+
+<blockquote>
+<table cellpadding="4" cellspacing="0" border="0" style="width:600px">
+<tr><td class="par_name">dtwrite</td>
+    <td class="par_meaning">Time difference for datafile writing.<br>
+       It can be a constant or a function of time. Examples:
+       <blockquote class="example">
+       <pre>dtwrite=0.1
+dtwrite=t&lt;1.6? 0.1 : t&lt;1.68? 0.01 : t&lt;1.688? 0.001 : 0.0001</pre>
+       </blockquote>
+    </td></tr>
+<tr><td class="par_name">tmax</td>
+    <td class="par_meaning">Output should end at this time.<br>
+       It can be a constant or a function of the initial time parameter,
+       <i>t</i><sub><small>0</small></sub>. Example:
+       <blockquote class="example">
+       <pre>tmax=t0+16</pre>
+       </blockquote>
+    </td></tr>
+</table>
+</blockquote>
+
+<p>
+<hr width="50%">
+<p align="right">
+28 January 2011, A. L&aacute;szl&oacute;
+</p>
+
+</body>
+</html>
diff --git a/gridripperapp.pc.in b/gridripperapp.pc.in
new file mode 100644 (file)
index 0000000..357474d
--- /dev/null
@@ -0,0 +1,17 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+mandir=@mandir@
+datadir=@datadir@
+inputsdir=@datadir@/@LIBNAME@/inputs
+
+Name: @PKGNAME@
+Version: @VERSION@
+Description: @PKGDESCRIPTION@
+Requires: @REQUIRES@
+Libs: -L${libdir} -l@LIBNAME@
+Libs.private: @REQUIRES@
+Cflags: -I${includedir}
diff --git a/include/Makefile b/include/Makefile
new file mode 100644 (file)
index 0000000..d79e5fb
--- /dev/null
@@ -0,0 +1,18 @@
+# Do NOT run this Makefile from this directory. Run the
+# top-level Makefile! This is the Makefile of include directory.
+
+.PHONY : install uninstall
+
+include $(TRUNK)/config.mk
+
+DIRECTORIES       := $(shell $(FIND) . -type d -name '*' -print | $(GREP) -v '.*/\.svn/.*' | $(GREP) -v '.*/\.svn')
+FILES             := $(shell $(FIND) . -type f -name '*' -print | $(GREP) -v '.*/\.svn/.*' | $(GREP) -v '.*/\.svn' | $(GREP) -v '\./Makefile' | $(GREP) -v '.*\.dox')
+TARGDIRECTORIES   := $(patsubst %,$(INCDIR)/%,$(DIRECTORIES))
+TARGFILES         := $(patsubst %,$(INCDIR)/%,$(FILES))
+
+install           :
+       mkdir -p $(TARGDIRECTORIES)
+       @for F in $(FILES) ; do BASEDIR=`dirname $${F}` ; cp $${F} $(INCDIR)/$${BASEDIR}/ ; done
+
+uninstall         :
+       rm -f $(TARGFILES)
diff --git a/include/gridripper/mainpage.dox b/include/gridripper/mainpage.dox
new file mode 100644 (file)
index 0000000..59ebb7a
--- /dev/null
@@ -0,0 +1,68 @@
+/**
+@mainpage GridRipper application library / C++
+@authors Peter Csizmadia, Andras Laszlo
+
+@section intro Introduction
+Fourth order precision Adaptive Mesh Refinement applications (PDE implementations).
+
+@section model Parts of a physical model
+The main parts are the following:
+<ol>
+<li>A partial differential equation (PDE), implemented by overriding
+    <ul>
+    <li>gridripper::amr1d::PDE.</li>
+    </ul>
+<li>An initial condition. It should be a
+    <ul>
+    <li>gridripper::amr1d::InitCond</li>
+    </ul>
+   implementation, but it is usually recommended to override either
+    <ul>
+    <li>gridripper::amr1d::FuncInitCond or</li>
+    <li>gridripper::amr1d::initcond::UserDef.</li>
+    </ul>
+    If the initial condition is the solution of an ordinary differential
+    equation, then one of the following InitCond implementations can be
+    used:
+    <ul>
+    <li>gridripper::amr1d::initcond::ODEShootInit or</li>
+    <li>gridripper::amr1d::initcond::ODERelaxInit.</li>
+    </ul>
+    The ODE should be an implementation of
+    <ul>
+    <li>gridripper::odesolver::ODE.</li>
+    </ul>
+    </li>
+<li>Parameters specified in the input file. They can be queried using the
+    <ul>
+    <li>gridripper::Parameters</li>
+    </ul>
+    argument of the PDE and InitCond constructors.</li>
+</ol>
+
+@section expr Expressions
+The input file can contain mathematical expressions in its
+<em>constants</em> and <em>definitions</em> sections, these are interpreted
+and evaluated by the gridripper::math::expr package. Hence one can simply
+use \ref gridripper::amr1d::initcond::UserDef "UserDef" as initial
+condition instead of creating his/her own implementation.
+If overriding is still necessary, the formulas in the input file can be
+accessed using the
+\ref gridripper::amr1d::initcond::UserDef::fnCollection "fnCollection"
+field.
+  *
+@section math Math
+Mathematics related classes and methods are available in the
+gridripper::math package.
+<ul>
+<li>Numerical integration.</li>
+<li>Interpolation.</li>
+<li>\ref gridripper::math::Matrix "Matrix" operations.</li>
+<li>Special functions like
+       \ref gridripper::math::LambertW "Lambert W" and a
+       \ref gridripper::math::smoothH "smooth step function" together
+       with its \ref gridripper::math::dsmoothH "first" and
+       \ref gridripper::math::d2smoothH "second derivatives".</li>
+</ul>
+  *
+*/
diff --git a/include/gridripper/package.dox b/include/gridripper/package.dox
new file mode 100644 (file)
index 0000000..8450f6d
--- /dev/null
@@ -0,0 +1,7 @@
+/** \dir gridripper
+Basic header files and classes.
+*/
+
+/** \namespace gridripper
+Basic classes and data types.
+*/
diff --git a/include/gridripper/phys/Hunch.h b/include/gridripper/phys/Hunch.h
new file mode 100644 (file)
index 0000000..9d75b88
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef gridripper_phys_Hunch_h
+#define gridripper_phys_Hunch_h
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+
+namespace gridripper { namespace phys {
+
+using namespace gridripper::util;
+using namespace gridripper::amr1d;
+using namespace std;
+
+/**
+ * Gaussian initial condition.
+ *
+ * @version 0.5, 05/08/2009
+ * @since GridRipper 0.5, 02/29/2008
+ * @author Peter Csizmadia
+ */
+class Hunch: public FuncInitCond
+{
+private:
+    tvector<int> componentIndices;
+
+protected:
+    GReal_t x0;
+    GReal_t deltaX;
+    GReal_t c;
+    GReal_t d;
+
+private:
+    void init(string& args, const Parameters* p, const PDE& pde,
+        const string& x0name, const string& deltaXname)
+           throw(IllegalArgumentException&);
+
+protected:
+    Hunch(string& args, const Parameters* p, const PDE& pde,
+         const string& x0name, const string& deltaXname)
+           throw(InitCond::Exception&, IllegalArgumentException&);
+
+public:
+    Hunch(string& args, const Parameters* p, const PDE& pde)
+         throw(InitCond::Exception&, IllegalArgumentException&);
+
+    GReal_t getX0() const {
+       return x0;
+    }
+
+    virtual GReal_t function(GReal_t x) const;
+
+    void init(PDE* pde, GReal_t x, FieldWrapper& v) throw(InitCond::Exception&);
+};
+
+} } // namespace gridripper::phys;
+
+#endif /* gridripper_phys_Hunch_h */
diff --git a/include/gridripper/phys/gr/Factory.h b/include/gridripper/phys/gr/Factory.h
new file mode 100644 (file)
index 0000000..36f3a83
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef gridripper_phys_gr_Factory_h
+#define gridripper_phys_gr_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Factory for general relativistic PDEs and ODEs.
+ *
+ * @version 0.5, 07/15/2008
+ * @since   GridRipper 0.5, 01/22/2007
+ * @author Peter Csizmadia
+ */
+namespace gridripper { namespace phys { namespace gr {
+#include <gridripper/factory_decl.h>
+} } } // namespace gridripper::phys::gr;
+
+#endif /* gridripper_phys_gr_Factory_h */
diff --git a/include/gridripper/phys/gr/dynss/Factory.h b/include/gridripper/phys/gr/dynss/Factory.h
new file mode 100644 (file)
index 0000000..6088aff
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef gridripper_phys_gr_dynss_Factory_h
+#define gridripper_phys_gr_dynss_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Factory for general relativistic problems with dynamical metric.
+ *
+ * @version 0.5, 07/15/2008
+ * @since   GridRipper 0.5, 06/19/2008
+ * @author Peter Csizmadia
+ */
+namespace gridripper { namespace phys { namespace gr { namespace dynss {
+#include <gridripper/factory_decl.h>
+} } } } // namespace gridripper::phys::gr::dynss;
+
+#endif /* gridripper_phys_gr_dynss_Factory_h */
diff --git a/include/gridripper/phys/gr/dynss/ekg/Factory.h b/include/gridripper/phys/gr/dynss/ekg/Factory.h
new file mode 100644 (file)
index 0000000..03a66b8
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef gridripper_phys_gr_dynss_ekg_Factory_h
+#define gridripper_phys_gr_dynss_ekg_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Factory for general relativistic scalar field problems.
+ *
+ * @version 0.5, 07/15/2008
+ * @since   GridRipper 0.5, 01/22/2007
+ * @author Peter Csizmadia
+ */
+namespace gridripper { namespace phys { namespace gr { namespace dynss {
+namespace ekg {
+#include <gridripper/factory_decl.h>
+} } } } } // namespace gridripper::phys::gr::dynss::ekg;
+
+#endif /* gridripper_phys_gr_dynss_ekg_Factory_h */
diff --git a/include/gridripper/phys/gr/dynss/ekg/kodama/CompactKScODE.h b/include/gridripper/phys/gr/dynss/ekg/kodama/CompactKScODE.h
new file mode 100644 (file)
index 0000000..28148f0
--- /dev/null
@@ -0,0 +1,86 @@
+#ifndef gridripper_phys_gr_dynss_ekg_kodama_CompactKScODE_h
+#define gridripper_phys_gr_dynss_ekg_kodama_CompactKScODE_h
+
+#include <gridripper/odesolver/ODE.h>
+#include <gridripper/amr1d/FieldComponents.h>
+#include <gridripper/lang/IllegalArgumentException.h>
+
+namespace gridripper {
+class Parameters;
+}
+
+namespace gridripper { namespace phys { namespace gr { namespace dynss {
+namespace ekg { namespace kodama {
+
+using namespace gridripper;
+using namespace gridripper::odesolver;
+using namespace std;
+
+/**
+ * Massless scalar field with Kodama vector as time evolution
+ * vector field.
+ *
+ * @version 0.5, 01/29/2008
+ * @since   GridRipper 0.5, 01/27/2007
+ * @author Peter Csizmadia
+ */
+class CompactKScODE: public ODE
+{
+private:
+    // Field indices:
+    enum {
+//     I_Phi = 0,
+//     I_Pi  = 1,
+       I_B = 0,
+       I_psi = 1,
+       NUM_COMPS = 2};
+
+    static const string COMPNAMES[NUM_COMPS];
+
+    GReal_t rhomax;
+
+    GReal_t a;
+    GReal_t b;
+    GReal_t c;
+    GReal_t d;
+    GReal_t mass;
+    GReal_t psi0;
+
+public:
+    class Field: public FieldComponents<GReal_t>
+    {
+    public:
+       Field(): FieldComponents<GReal_t>(NUM_COMPS) { }
+       Field(const Field& f): FieldComponents<GReal_t>(f) { }
+       FieldWrapper* cloneFieldWrapper() const {
+           return new Field(*this);
+       }
+    };
+
+    CompactKScODE(const Parameters* p) throw(IllegalArgumentException&);
+
+    FieldArray getInitialValuesForShooting() const;
+
+    tvalarray<GReal_t> getInitialX() const {
+       return tvalarray<GReal_t>(0.0, 1);
+    }
+
+    GReal_t getMinX() const {
+       return 0;
+    }
+
+    GReal_t getMaxX() const {
+       return rhomax;
+    }
+
+    void initPDE(GReal_t rho, const GReal_t* fode, GReal_t* fpde);
+
+    void eval(const GReal_t* F, int offset, GReal_t rho, GReal_t* dF);
+
+private:
+    GReal_t calc_phi(GReal_t rho) const;
+};
+
+} } } } } } // namespace gridripper::phys::gr::dynss::ekg::kodama;
+
+#endif /* gridripper_phys_gr_dynss_ekg_kodama_CompactKScODE_h */
diff --git a/include/gridripper/phys/gr/dynss/ekg/package.html b/include/gridripper/phys/gr/dynss/ekg/package.html
new file mode 100644 (file)
index 0000000..a07387b
--- /dev/null
@@ -0,0 +1,6 @@
+<html>
+<body>
+Einstein-Klein-Gordon system. Strongly hyperbolic system with the Misner-Sharp
+mass as an auxiliary variable.
+</body>
+</html>
diff --git a/include/gridripper/phys/gr/dynss/package.html b/include/gridripper/phys/gr/dynss/package.html
new file mode 100644 (file)
index 0000000..dd5bfd8
--- /dev/null
@@ -0,0 +1,5 @@
+<html>
+<body>
+Dynamical, spherically symmetric spacetime.
+</body>
+</html>
diff --git a/include/gridripper/phys/gr/fixmp/Factory.h b/include/gridripper/phys/gr/fixmp/Factory.h
new file mode 100644 (file)
index 0000000..2022e6e
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef gridripper_phys_gr_fixmp_Factory_h
+#define gridripper_phys_gr_fixmp_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Fixed metric and multipole expansion.
+ *
+ * @version 0.5, 07/15/2008
+ * @since   GridRipper 0.5, 01/22/2007
+ * @author Peter Csizmadia
+ */
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+#include <gridripper/factory_decl.h>
+} } } } // namespace gridripper::phys::gr::fixmp;
+
+#endif /* gridripper_phys_gr_fixmp_Factory_h */
diff --git a/include/gridripper/phys/gr/fixmp/higgsmp/Factory.h b/include/gridripper/phys/gr/fixmp/higgsmp/Factory.h
new file mode 100644 (file)
index 0000000..765de73
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef gridripper_phys_gr_fixmp_higgsmp_Factory_h
+#define gridripper_phys_gr_fixmp_higgsmp_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Factory for Higgs field over a general relativistic spacetime 
+ * (multipole expansion is used).
+ *
+ * @version 0.5, 07/15/2008
+ * @since   GridRipper 0.5, 03/30/2007
+ * @author  Andras Laszlo
+ */
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace higgsmp {
+#include <gridripper/factory_decl.h>
+} } } } } // namespace gridripper::phys::gr::fixmp::higgsmp;
+
+
+#endif /* gridripper_phys_gr_fixmp_higgsmp_Factory_h */
diff --git a/include/gridripper/phys/gr/fixmp/higgsmp/HiggsEq.h b/include/gridripper/phys/gr/fixmp/higgsmp/HiggsEq.h
new file mode 100644 (file)
index 0000000..51f66c1
--- /dev/null
@@ -0,0 +1,236 @@
+#ifndef gridripper_phys_gr_fixmp_higgsmp_HiggsEq_h
+#define gridripper_phys_gr_fixmp_higgsmp_HiggsEq_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/lang/IllegalArgumentException.h>
+#include <gridripper/metric/Metric.h>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace higgsmp {
+
+
+using namespace gridripper;
+using namespace gridripper::metric;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Higgs scalar field equation, using multipole expansion. 
+ * Assumed spacetime: warped product of a 2 dimensional Lorentz 
+ * spacetime and 2 dimensional unit sphere. Coordinates 
+ * in the first manifold: tau, rho. Coordinates in the second 
+ * manifold: theta, phi. Scalar field: F.
+ *
+ * @version 0.5, 03/29/2007
+ * @since   GridRipper 0.5, 03/29/2007
+ * @author  Andras Laszlo
+ */
+class HiggsEq: public PDE
+{
+public:
+    static const GReal_t EPSILON=1e-8;
+
+    /* Field component indices. */
+    enum { ind_f=0, ind_ftau=1, ind_frho=2 };
+
+    /** Maximal multipole order (>=0), calculated by the Factory. */
+    const int maxOrder;
+    /**
+     * Size of a multipole array, 
+     * (maxOrder+1)*(maxOrder+1)*sizeof(GComplex_t)/sizeof(GReal_t).
+     * Calculated by the Factory.
+     */
+    const int arraySize;
+
+    /** Indices of field component sectors. */
+    const int I_f;     // <- ind_f*arraySize
+    const int I_ftau;  // <- ind_ftau*arraySize
+    const int I_frho;  // <- ind_frho*arraySize
+    /** Number of independent components. */
+    static const int NUM_INDEP_COMPS=2;
+    /** Number of constraints. */
+    static const int NUM_CONSTRAINTS=1;
+    /** Number of all components (independent+constraints). */
+    static const int NUM_COMPS=NUM_INDEP_COMPS+NUM_CONSTRAINTS;
+
+    /** Component and constraint names, and coordinate labels. */
+    static const string COMP_NAMES[NUM_COMPS];
+    static const string CONSTRAINT_NAMES[NUM_CONSTRAINTS];
+    static const string COORD_LABELS[2];
+
+private:
+
+    /** Result vector (time derivative). */
+    tvalarray<GReal_t> df;
+
+    /** Spacetime metric. */
+    Metric *metric;
+    mutable MetricValues g;
+
+    /** Parameters of Higgs field equation. */
+    GReal_t lambda;    // <- self coupling constant
+    GReal_t phi0;      // <- equilibrium field value
+    // (mass=2*sqrt(lambda)*phi0)
+    /** Self interaction (on/off). */
+    bool selfInteraction;
+    // The field is f=(phi-phi0)*r in the simulation if selfinteration 
+    // is on, otherwise f=phi*r.
+
+    /**
+     * Factor which determines how much times the nonphysical 
+     * rho region is larger than the physical (>=1).
+     */
+    GReal_t extensionRatio;
+    /**
+     * Factor which determines how much times the energy integration
+     * rho region is smaller than the physical (<=1).
+     */
+    GReal_t EmeasurementRatio;
+
+    /** Auxiliary Parameters. */
+    tvector<GReal_t> param;
+
+    class Energy: public DensityQuantity {
+    private:
+       const HiggsEq& pde;
+    public:
+       Energy(const HiggsEq* p): DensityQuantity(p), pde(*p) { }
+       GReal_t density(GReal_t T, GReal_t R, const tvalarray<GReal_t>& F)
+                       const {
+           return pde.energyDensity(T, R, F);
+       }
+       GReal_t flow(GReal_t T, GReal_t R, const tvalarray<GReal_t>& F) const {
+           return pde.energyFlow(T, R, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new Energy(&pde);
+       }
+    } theEnergy;
+
+public:
+    HiggsEq(const Parameters* p, const int maxorder, const int arraysize) throw(IllegalArgumentException&);
+    ~HiggsEq();
+
+    GReal_t getMinX() const;
+    GReal_t getMaxX() const;
+    GReal_t getPhysicalMinX() const;
+    GReal_t getPhysicalMaxX() const;
+    bool isXPeriodic() const;
+
+    /** Evaluate the equation. This is the key algorithm. */
+    int eval(GReal_t* dF, GReal_t tau, GReal_t rho,
+            const GReal_t* F, const GReal_t* F_rho,
+            const Grid& G, int i, Grad& d, GReal_t dtau);
+
+    /**
+     * Evaluate the constraints. This is also a key algorithm.
+     *
+     * @param G : the grid
+     * @param i : position index
+     * @param v : result array
+     */
+    void evalConstrainedComponents(Grid& G, int i, FieldWrapper& v);
+
+    FieldWrapper* createField(int level) const;
+
+    GReal_t energyDensity(GReal_t T, GReal_t R, const tvalarray<GReal_t>& F)
+                         const;
+
+    GReal_t energyFlow(GReal_t T, GReal_t R, const tvalarray<GReal_t>& F)
+                      const;
+
+    /**
+     * Can the field be extended beyond the specified bound?
+     * @param where : the grid index
+     */
+    bool canBeExtended(int where) const;
+
+    /** Extend left side. */
+    void mirrorLeft(GReal_t rho, FieldWrapper& f) const;
+
+    /** Extend right side. */
+    void mirrorRight(GReal_t rho, FieldWrapper& f) const;
+
+    /**
+     * Tests whether refined field data exists at a given point.
+     * @param g : the grid
+     * @param i : refined grid point index
+     * @return <code>true</code> : if the specified point contains refined
+     *         field data
+     */
+    bool hasExtendedRefinedFieldData(const Grid& G, int i) const;
+
+    /** Get the density quantities. */
+    PhysicalQuantityArray getPhysicalQuantities() const;
+
+    /** Energy extraction position marker. */
+    class Eextract : public MarkerQuantity
+    {
+       private:
+           GReal_t position;
+       public:
+           Eextract(const PDE* eq, GReal_t Position)
+            : MarkerQuantity(eq), position(Position)
+           {  }
+           ~Eextract() {  }
+           std::string getQuantityName() const { return "Eextract"; }
+           GReal_t eval(GReal_t tau);
+           MarkerQuantity* cloneMarkerQuantity() const
+           { return new Eextract(&getPDE(), position); }
+    };
+
+    /** Light ray position marker. */
+    class Lightray : public MarkerQuantity
+    {
+       private:
+           Metric* metric;
+           GReal_t tau0;
+           GReal_t rho0;
+           GReal_t kappa;
+           int direction;
+       public:
+           Lightray(const PDE* eq, Metric* g, GReal_t Tau0, GReal_t Rho0, GReal_t Kappa, int Direction)
+            : MarkerQuantity(eq), metric(g), tau0(Tau0), rho0(Rho0), kappa(Kappa), direction(Direction)
+           {  }
+           ~Lightray() {  }
+           std::string getQuantityName() const { return "Lightray"; }
+           GReal_t eval(GReal_t tau);
+           MarkerQuantity* cloneMarkerQuantity() const
+           { return new Lightray(&getPDE(), metric, tau0, rho0, kappa, direction); }
+    };
+
+    /** Event horizon position marker. */
+    class Horizon : public MarkerQuantity
+    {
+       private:
+           Metric* metric;
+           GReal_t tau0;
+           GReal_t rho0;
+           GReal_t kappa;
+           GReal_t Mass;
+           int direction;
+       public:
+           Horizon(const PDE* eq, Metric* g, GReal_t Tau0, GReal_t Rho0, GReal_t Kappa, GReal_t mass, int Direction)
+            : MarkerQuantity(eq), metric(g), tau0(Tau0), rho0(Rho0), kappa(Kappa), Mass(mass), direction(Direction)
+           {  }
+           ~Horizon() {  }
+           std::string getQuantityName() const { return "Horizon"; }
+           GReal_t eval(GReal_t tau);
+           MarkerQuantity* cloneMarkerQuantity() const
+           { return new Horizon(&getPDE(), metric, tau0, rho0, kappa, Mass, direction); }
+    };
+
+    /** Get the marker quantities. */
+    MarkerQuantityArray getMarkerQuantities() const;
+
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::higgsmp
+
+
+#endif /* gridripper_phys_gr_fixmp_higgsmp_HiggsEq_h */
diff --git a/include/gridripper/phys/gr/fixmp/higgsmp/Hunch.h b/include/gridripper/phys/gr/fixmp/higgsmp/Hunch.h
new file mode 100644 (file)
index 0000000..a8766b9
--- /dev/null
@@ -0,0 +1,86 @@
+#ifndef gridripper_phys_gr_fixmp_higgsmp_Hunch_h
+#define gridripper_phys_gr_fixmp_higgsmp_Hunch_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/metric/MetricFactory.h>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace higgsmp {
+
+
+using namespace gridripper;
+using namespace gridripper::util;
+using namespace gridripper::metric;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Wave packet initial condition for Higgs equation with 
+ * multipole expansion method.
+ *
+ * @version 0.5, 03/30/2007
+ * @since   0.5, 03/30/2007
+ * @author  Andras Laszlo
+ */
+class Hunch: public FuncInitCond
+{
+private:
+    /** Maximal multipole order. */
+    int maxOrder;
+    /** Array size of multipole vector. */
+    int arraySize;
+
+    /** Self interaction on/off. */
+    bool selfInteraction;
+    /**
+     * Equilibrium value of field 
+     * (used only when self interaction is on).
+     */
+    GReal_t phi0;
+    // The field is f=(phi-phi0)*r if selfinteraction is on, 
+    // otherwise f=phi*r.
+
+    /** Wave packet parameters. */
+    GReal_t amplitudeF, centerF, widthF, rampF;
+    /** Angular momentu quantum numbers. */
+    int lF, mF;
+    /** Wave packet parameters. */
+    GReal_t amplitudeFtau, centerFtau, widthFtau, rampFtau;
+    /** Angular momentu quantum numbers. */
+    int lFtau, mFtau;
+
+    /** Metric. */
+    Metric *metric;
+    MetricValues g;
+
+    /** Initial time. */
+    GReal_t tau0;
+
+    /** Compactification parameter (got from metric. */
+    GReal_t kappa;
+
+    /** Message string. */
+    string message;
+
+public:
+    Hunch(string& args, const Parameters* p, const PDE& pde)
+         throw(InitCond::Exception&, IllegalArgumentException&);
+    ~Hunch();
+    GReal_t getTime() const;
+
+    void init(PDE* pde, GReal_t rho, FieldWrapper& v)
+       throw(InitCond::Exception&);
+
+    string getMessage() const;
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::higgsmp
+
+
+#endif /* gridripper_phys_gr_fixmp_higgsmp_Hunch_h */
diff --git a/include/gridripper/phys/gr/fixmp/higgsmp/packages.dox b/include/gridripper/phys/gr/fixmp/higgsmp/packages.dox
new file mode 100644 (file)
index 0000000..97ac1ed
--- /dev/null
@@ -0,0 +1,7 @@
+/** \dir gridripper/phys/gr/fixmp/higgsmp
+Higgs field equation over spherically symmetric spacetime.
+*/
+
+/** \namespace gridripper::phys::gr::fixmp::higgsmp
+Higgs field equation over spherically symmetric spacetime.
+*/
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/Disk.h b/include/gridripper/phys/gr/fixmp/kerrhiggs/Disk.h
new file mode 100644 (file)
index 0000000..03a47e5
--- /dev/null
@@ -0,0 +1,145 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggs_Disk_h
+#define gridripper_phys_gr_fixmp_kerrhiggs_Disk_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+#include <gridripper/math.h>
+#include <sstream>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggs {
+
+
+using namespace gridripper;
+using namespace gridripper::util;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Accretion disk initial condition for Higgs equation with 
+ * multipole expansion method over Kerr spacetime.
+ *
+ * @version 0.5, 03/30/2007
+ * @since   0.5, 03/30/2007
+ * @author  Andras Laszlo
+ */
+class Disk: public FuncInitCond
+{
+private:
+    /** Maximal multipole order. */
+    int maxOrder;
+    /** Maximal multipole order cutoff at initial surface. */
+    int maxOrderInit;
+    /** Array size of multipole vector. */
+    int arraySize;
+
+    /** Self interaction on/off. */
+    bool selfInteraction;
+    /**
+     * Equilibrium value of field 
+     * (used only when self interaction is on).
+     */
+    GReal_t Phi0;
+    // The field is f=(Phi-Phi0)*r if selfinteraction is on, 
+    // otherwise f=Phi*r.
+
+    /** Wave packet parameters */
+    /** Aplitude */
+    GReal_t amplitudeF, amplitudeFt;
+    /** Most probable x values in equatorial plane. */
+    GReal_t centerxF, centerxFt;
+    /** Width in x in equatorial plane. */
+    GReal_t widthxF, widthxFt;
+    /** Ramp length in x in equatorial plane. */
+    GReal_t rampxF, rampxFt;
+    /** Most probable z values in vertical coordinate. */
+    GReal_t centerzF, centerzFt;
+    /** Width in z in vertical coordinate. */
+    GReal_t widthzF, widthzFt;
+    /** Ramp length in z in vertical coordinate. */
+    GReal_t rampzF, rampzFt;
+    /** Parameter omega telling t phase, and parameter m telling the phih phase. */
+    GReal_t omegaInit;
+    int mInit;
+    /** Field discretization. */
+    int fieldDiscret;
+    /** Norm limit for tail error tolerance check. */
+    GReal_t normLimit;
+    /** Multipole expansion tail error tolerance. */
+    GReal_t tailErrorTolerance;
+
+    /** Blackhole parameters */
+    GReal_t M;
+    GReal_t a;
+    GReal_t e;
+    bool isMinkowski;
+
+    /** Minimal and maximal spatial coordinates. */
+    GReal_t minrh;
+    GReal_t maxrh;
+
+    /** Initial time. */
+    GReal_t t0;
+
+    /** Variables for expansion and error control. */
+    string normName;
+    enum norm_t { None, L2, C0, Bound };
+    enum norm_t Norm;
+#ifdef HAVE_AGM
+    GReal_t agmTolerance;
+#else
+    tvector<GReal_t> theta;
+    tvector<GReal_t> phih;
+    tvector< tvector<GComplex_t> > field;
+    tvector< tvector<GComplex_t> > fieldt;
+    tvector< tvector<GReal_t> > fieldBuff;
+    tvector< tvector<GReal_t> > fieldtBuff;
+    tvector< tvector<GReal_t> > fieldBuffDiff;
+    tvector< tvector<GReal_t> > fieldtBuffDiff;
+    tvector<GReal_t> intdphiF;
+    tvector<GReal_t> intdphiFt;
+    tvector<GReal_t> intdphiDiffF;
+    tvector<GReal_t> intdphiDiffFt;
+#endif
+
+    /** Time and radius. */
+    GReal_t t, r;
+
+    /** Start time, current time. */
+    unsigned int tstart, tnow;
+
+    /** Maximum norms to measure C^0 error of tail error. */
+    GReal_t maxNormF;
+    GReal_t maxNormFt;
+    GReal_t maxNormDiffF;
+    GReal_t maxNormDiffFt;
+
+    /** Message string. */
+    mutable ostringstream message;
+
+public:
+    Disk(string& args, const Parameters* p, const PDE& pde)
+        throw(InitCond::Exception&, IllegalArgumentException&);
+    ~Disk();
+    GReal_t getTime() const;
+
+    void init(PDE* pde, GReal_t rh, FieldWrapper& v)
+       throw(InitCond::Exception&);
+
+    /** Function form of initial condition. */
+    GComplex_t funcF(const GReal_t theta, const GReal_t phih) const;
+    GComplex_t funcFt(const GReal_t theta, const GReal_t phih) const;
+
+    string getMessage() const;
+
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggs
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggs_Disk_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/Factory.h b/include/gridripper/phys/gr/fixmp/kerrhiggs/Factory.h
new file mode 100644 (file)
index 0000000..6b0ae6c
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggs_Factory_h
+#define gridripper_phys_gr_fixmp_kerrhiggs_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Factory for KG field over Kerr spacetime 
+ * (multipole expansion is used).
+ *
+ * @version 0.5, 07/15/2008
+ * @since   GridRipper 0.5, 03/30/2007
+ * @author  Andras Laszlo
+ */
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggs {
+#include <gridripper/factory_decl.h>
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggs;
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggs_Factory_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/Hunch.h b/include/gridripper/phys/gr/fixmp/kerrhiggs/Hunch.h
new file mode 100644 (file)
index 0000000..93a014a
--- /dev/null
@@ -0,0 +1,93 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggs_Hunch_h
+#define gridripper_phys_gr_fixmp_kerrhiggs_Hunch_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggs {
+
+
+using namespace gridripper;
+using namespace gridripper::util;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Wave packet initial condition for Higgs equation with 
+ * multipole expansion method over Kerr spacetime.
+ *
+ * @version 0.5, 03/30/2007
+ * @since   0.5, 03/30/2007
+ * @author  Andras Laszlo
+ */
+class Hunch: public FuncInitCond
+{
+private:
+    /** Maximal multipole order. */
+    int maxOrder;
+    /** Array size of multipole vector. */
+    int arraySize;
+
+    /** Self interaction on/off. */
+    bool selfInteraction;
+    /**
+     * Equilibrium value of field 
+     * (used only when self interaction is on).
+     */
+    GReal_t Phi0;
+    // The field is f=(Phi-Phi0)*r if selfinteraction is on, 
+    // otherwise f=Phi*r.
+
+    /** Determine if wave packet should be Gaussian. 
+        Otherwise, it is compactly supported. */
+    bool gaussianHunch;
+    /** Wave packet parameters. */
+    GReal_t amplitudeF, centerF, widthF, rampF;
+    /** Angular momentum quantum numbers. */
+    int lF, mF;
+    /** Wave packet parameters. */
+    GReal_t amplitudeFt, centerFt, widthFt, rampFt;
+    /** Angular momentum quantum numbers. */
+    int lFt, mFt;
+    /** Parameter omega telling t phase. */
+    GReal_t omega;
+
+    /** Blackhole parameters */
+    GReal_t M;
+    GReal_t a;
+    GReal_t e;
+    bool isMinkowski;
+
+    /** Minimal and maximal spatial coordinates. */
+    GReal_t minrh;
+    GReal_t maxrh;
+
+    /** Initial time. */
+    GReal_t t0;
+
+    /** Message string. */
+    string message;
+
+public:
+    Hunch(string& args, const Parameters* p, const PDE& pde)
+         throw(InitCond::Exception&, IllegalArgumentException&);
+    ~Hunch();
+    GReal_t getTime() const;
+
+    void init(PDE* pde, GReal_t rh, FieldWrapper& v)
+       throw(InitCond::Exception&);
+
+    string getMessage() const;
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggs
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggs_Hunch_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrHiggs.h b/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrHiggs.h
new file mode 100644 (file)
index 0000000..56e8938
--- /dev/null
@@ -0,0 +1,555 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggs_KerrHiggs_h
+#define gridripper_phys_gr_fixmp_kerrhiggs_KerrHiggs_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/lang/IllegalArgumentException.h>
+#include <gridripper/multipole/ScalarFieldMP.h>
+
+#include <time.h>
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggs {
+
+
+using namespace gridripper;
+using namespace gridripper::multipole;
+using namespace std;
+
+
+/**
+ * Higgs scalar field equation, using multipole expansion. 
+ * Assumed spacetime: Kerr-Newman. Coordinates \f$t\f$, \f$r\f$, \f$\vartheta\f$, \f$\varphi\f$ 
+ * (Boyer-Lindquist). Scalar field: \f$\Phi\f$.
+ * 
+ * Lagrange form (with 1,-1,-1,-1 metric sign convention):
+ * \f$\left(
+ *     g^{ab}\overline{\mathrm{i}D_{a}(\Phi)}\mathrm{i}D_{b}(\Phi) 
+ *     -V(\Phi)\right)\mathrm{d}v_{g}\f$.
+ * Here \f$V(\Phi):=\lambda(|\Phi|^{2}-|\Phi_{0}|^2)^{2}\f$ and 
+ * \f$D=\nabla-\mathrm{i}q A\f$.
+ * Field equation:
+ * \f$g^{ab}\mathrm{i}D_{a}\mathrm{i}D_{b}\Phi=V'(\Phi)\f$.
+ * Here \f$V'(\Phi)=2\lambda(|\Phi|^2-|\Phi_0|^2)\Phi\f$.
+ * In the \f$\Phi=\Phi_0+\Delta\Phi\f$ representation, the mass of the 
+ * perturbation field \f$\Delta\Phi\f$ is (in case of real \f$\Phi_0\f$):
+ * \f$2\sqrt{\lambda}\Phi_0\f$.
+ * \f$T_{ab}=\mathrm{Re}(\overline{\mathrm{i}D_{a}(\Phi)}\mathrm{i}D_{b}(\Phi))
+ *     -\frac{1}{2}g_{ab}\left(g^{cd}
+ *     \bar{\mathrm{i}D_{c}(\Phi)}\mathrm{i}D_{d}(\Phi)-V(\Phi)
+ *     \right)\f$.
+ *
+ * \f$g=\frac{\Delta-a^2\sin^{2}\vartheta}{\Sigma}dt\vee dt
+ *     +frac{2a(r^2+a^2-\Delta)\sin^{2}\vartheta}{\Sigma}dt\vee d\varphi
+ *     -\frac{\Sigma}{\Delta}dr\vee dr
+ *     -\Sigma d\vartheta\vee d\vartheta
+ *     -\frac{\Gamma\sin^{2}\vartheta}{\Sigma}d\varphi\vee d\varphi\f$,
+ * \f$A=-\frac{er}{\Sigma}dt+\frac{ear\sin^{2}\vartheta}{\Sigma}d\varphi)\f$, where
+ * \f$\Delta:=r^2+a^2+e^2-2Mr$, $\Sigma=r^2+a^2\cos^2\vartheta\f$ and 
+ * \f$\Gamma=(r^2+a^2)^2-a^2\Delta\sin^{2}\vartheta\f$.
+ * 
+ * \f$-g^{ab}D_{a}D_{b} = \frac{1}{\Sigma\Delta}
+ *     \left(-\Gamma\partial_{t}\partial_{t} 
+ *     -2a(r^2+a^2-\Delta)\partial_{t}\partial_{\varphi}
+ *     -2\mathrm{i}qer(r^2+a^2)\partial_{t} 
+ *     -2\mathrm{i}qear\partial_{\varphi}
+ *     +(qer)^2 
+ *     -a^2\partial_{\varphi}\partial_{\varphi} 
+ *     +\Delta\partial_{r}\Delta\partial_{r} + \Delta\Delta_{S^{2}}\right)\f$.
+ *
+ * The actually evolved field is \f$r(\Phi-\Phi_0\f$ in the according 
+ * transformed field equation.
+ *
+ * The equation originally written in the Boyer-Lindquist coordinates 
+ * \f$(t,r,\vartheta,\varphi)\f$ is numerical evolved in the transformed 
+ * \f$(t,\hat{r}(r),\vartheta,\hat{\varphi}(r,\varphi))\f$ coordinates. 
+ * The switched transformedR and transformedPhi select the actual evolution 
+ * coordinates:
+ * transformedR=0 => \f$\hat{r}=r\f$
+ * transformedR=1 => \f$\hat{r}=r+r_{+}*ln|(r-r_{+})/r_{+}|\f$
+ * transformedR=2 => \f$\hat{r}=(isMinkowski ? ln(1+r) : r_{+}*ln|(r-r_{+})/r_{+}|)\f$
+ * transformedR=3 => \f$\hat{r}=r_{*}(r)\f$
+ * transformedPhi=0 => \f$\hat{\varphi}=\varphi\f$
+ * transformedPhi=1 => \f$\hat{\varphi}=\tilde{\varphi}(r,\varphi)\f$
+ * Here, \f$r_{*}(r)=r+1/(2\kappa_{+})ln(r-r_{+})+1/(2\kappa_{-})ln(r-r_{-})\f$
+ * and \f$\hat{\varphi}(r,\varphi)=\varphi+a/(r_{+}-r_{-})ln((r-r_{+})/(r-r_{-}))\f$
+ * with \f$r_{\pm}=M\pm\sqrt{M^2-a^2-e^2}\f$ and 
+ * \f$\kappa_{\pm}=1/2(r_{\pm}-r_{\mp})/(r_{\pm}^{2}+a^2)\f$.
+ *
+ * @version 06/22/2009
+ * @since   GridRipper 0.5, 05/01/2007
+ * @author  Andras Laszlo
+ */
+class KerrHiggs: public PDE
+{
+public:
+
+    /** Error tolerance for checking equality of floating point numbers. */
+    static const GReal_t EPSILON;
+
+    /** Field component indices. */
+    enum { ind_f=0, ind_ft=1, ind_frh=2 };
+
+    /** Maximal multipole order (>=0), calculated by the Factory. */
+    const int maxOrder;
+    /**
+     * Size of a multipole array, 
+     * (maxOrder+1)*(maxOrder+1)*sizeof(GComplex_t)/sizeof(GReal_t).
+     * Calculated by the Factory.
+     */
+    const int arraySize;
+
+    /** Indices of field component sectors (calculated by the constructor). */
+    const int I_f;     // <- ind_f*arraySize
+    const int I_ft;    // <- ind_ft*arraySize
+    const int I_frh;   // <- ind_frh*arraySize
+    /** Number of independent components. */
+    static const int NUM_INDEP_COMPS=2;
+    /** Number of constraints. */
+    static const int NUM_CONSTRAINTS=1;
+    /** Number of all components (independent+constraints). */
+    static const int NUM_COMPS=NUM_INDEP_COMPS+NUM_CONSTRAINTS;
+
+    /** Component and constraint names, and coordinate labels (see code). */
+    static const string COMP_NAMES[NUM_COMPS];
+    static const string CONSTRAINT_NAMES[NUM_CONSTRAINTS];
+    static const string COORD_LABELS[2];
+
+private:
+
+    /** Result vector (time derivative). */
+    tvalarray<GReal_t> df;
+
+    /** Buffers for regularization trick around the origin. */
+    tvector< FieldComponents<GReal_t> > fieldat;
+
+    /** Parameters of Kerr spacetime. */
+    GReal_t M;         // <- mass
+    GReal_t a;         // <- angular momentum per mass
+    GReal_t e;         // <- charge
+    bool isMinkowski;
+
+    /** Parameters of Higgs field equation. */
+    GReal_t lambda;    // <- self coupling constant
+    GReal_t Phi0;      // <- equilibrium field value
+    // (field mass=2*sqrt(lambda)*Phi0)
+    /** Self interaction (on/off). */
+    bool selfInteraction;
+    /** 
+     * True if real(f) and imag(f) is also massive (when 
+     * selfInteraction==false), false if only real(f) is massive as in 
+     * normal self-interacting Higgs case.
+     */
+    bool allmassive;
+    // The field is f=(Phi-Phi0)*r in the simulation if selfinteration 
+    // is on, otherwise f=Phi*r.
+    /** Charge of the field. */
+    GReal_t q;
+
+    /** Minimal and maximal spatial coordinate. */
+    GReal_t minrh;
+    GReal_t maxrh;
+    /** Limits of integration domain for integrated quantities. */
+    GReal_t minrhIntq;
+    GReal_t maxrhIntq;
+
+    /** Is time reversed? (Backward evolution?) */
+    bool isTimeReversed;
+
+    /** Auxiliary quantities. */
+    mutable GReal_t r;
+    mutable GReal_t Delta;
+    mutable ScalarFieldMP<GComplex_t> Sigma;
+    mutable ScalarFieldMP<GComplex_t> Gamma;
+    mutable GComplex_t H2S2SigmaSigma;
+    mutable GComplex_t H2S2GammaGamma;
+    mutable GComplex_t scale;
+    mutable ScalarFieldMP<GComplex_t> scaledSigma;
+    mutable ScalarFieldMP<GComplex_t> scaledGamma;
+    ScalarFieldMP<GComplex_t> Y00;
+    GReal_t neumannTolerance;
+    mutable GReal_t drhdr;
+    mutable GReal_t d2rhdr2;
+    mutable GReal_t dphihdr;
+    mutable GReal_t d2phihdr2;
+    mutable ScalarFieldMP<GComplex_t> physf;
+    mutable ScalarFieldMP<GComplex_t> physft;
+    mutable ScalarFieldMP<GComplex_t> physfr;
+    mutable ScalarFieldMP<GComplex_t> physfperSigma;
+
+    /* Start time. */
+    GReal_t t0;
+    /** Start coordinate of light ray. */
+    GReal_t rh0;
+
+    /** True is Sommerfeld boundary condition is used. */
+    bool isSommerfeld;
+
+    /** Bits to store the exclude flags (to forbid dissipation term). */
+    int exclude;
+
+    /** Angle in degrees for energy radiation calculation in a cone. */
+    GReal_t Theta;
+    tvector< tvector< tvector<GReal_t> > > coeffstorage1;
+    tvector< tvector< tvector<GReal_t> > > coeffstorage2;
+
+public:
+
+    /** Class for (r,phi) |-> (rh,phih) transformations. */
+    class CoordTransf
+    {
+       private:
+           /** Flag is set to true if M==0: */
+           const bool isMinkowski;
+           /** Flag is set to true if a==0 && e==0: */
+           const bool isSchwarzschild;
+           /** Flag is set to true if a!=0: */
+           const bool isRotating;
+           /** r coordinate of the outer horizon. */
+           const GReal_t horizono;
+           /** r coordinate of the inner horizon. */
+           const GReal_t horizoni;
+           /** Surface gravity at the outer horizon. */
+           const GReal_t surfacegravityo;
+           /** Surface gravity at the inner horizon. */
+           const GReal_t surfacegravityi;
+           /** Specific angular momentum. */
+           const GReal_t specangmom;
+           /**
+            * Identifier of transformed radial coordinate.
+            * 0: rh=r
+            * 1: rh=(isMinkowski ? r : r+r_{horizono}*ln|(r-r_{horizono})/r_{horizono}|)
+            * 2: rh=(isMinkowski ? ln(1+r) : r_{horizono}*ln|(r-r_{horizono})/r_{horizono}|)
+            * 3: rh=(isMinkowski ? r : rstar(r))
+            */
+           const int transformedR;
+           /**
+            * Identifier of transformed azimuthal coordinate.
+            * 0: phih=phi
+            * 1: phih=(isMinkowski ? phi : phitilde(r,phi))
+            */
+           const int transformedPhi;
+           /**
+            * Discretization of the base grid with maximal uniform refinement.
+            * Used to tabulate conversion values between Boyer-Lindquist and 
+            * tortoise radius (this is a workaround/hack).
+            */
+           const int rstarTableDiscretization;
+           /** Maximal error tolerance in function inversion by Newton-Raphson method. */
+           const GReal_t newtonraphsonTolerance;
+           /** Maximal iterations in function inversion by Newton-Raphson method. */
+           const int newtonraphsonMaxIteration;
+           /** Tabulated values of inverse of r |-> r_{*}(r) function. */
+           tvector<GReal_t> invrstarTable;
+           /** Minumum, maximum and step in r_{*} in the above table. */
+           const GReal_t rstarMin;
+           const GReal_t rstarMax;
+           const GReal_t rstarStep;
+       public:
+           /** Conversion function between Boyer-Lindquist and tortoise radius. */
+           long double calc_rstar(const long double r);
+           GReal_t calc_invrstar_newtonraphson(const GReal_t rstar) throw(IllegalArgumentException&);
+           GReal_t calc_invrstar(const GReal_t rstar);
+           /** Conversion function between Boyer-Linduist azimuth and tortoise azimuth. */
+           GReal_t calc_phitilde(const GReal_t r, const GReal_t phi);
+           GReal_t calc_invphitilde(const GReal_t r, const GReal_t phitilde);
+       public:
+           /** Valid parametric constructor and destructor. */
+           CoordTransf(const GReal_t MArg, const GReal_t aArg, const GReal_t eArg, 
+                       const int transformedRArg, const int transformedPhiArg, 
+                       const GReal_t minrhArg, const GReal_t maxrhArg, 
+                       const int rstarTableDiscretizationArg, 
+                       const GReal_t newtonraphsonToleranceArg, 
+                       const int newtonraphsonMaxIterationArg);
+           ~CoordTransf() {  }
+           /** Conversion function between Boyer-Linquist and transformed radius. */
+           GReal_t calc_rh(const GReal_t r);
+           GReal_t calc_r(const GReal_t rh);
+           GReal_t calc_drhdr(const GReal_t r);
+           GReal_t calc_d2rhdr2(const GReal_t r);
+           /** Conversion function between Boyer-Linquist and transformed azimuth. */
+           GReal_t calc_phih(const GReal_t r, const GReal_t phi);
+           GReal_t calc_phi(const GReal_t r, const GReal_t phih);
+           GReal_t calc_dphihdr(const GReal_t r);
+           GReal_t calc_d2phihdr2(const GReal_t r);
+    };
+    /** The actual (r,phi) |-> (rh,phih) correspondance (allocated by constructor). */
+    CoordTransf* coordTransf;
+    /** Azimuthal derivative with respect to phih coordinate (just an alias). */
+    static inline ScalarFieldMP<GComplex_t> partial_phih(const ScalarFieldMP<GComplex_t>& field)
+    {
+       return partial_phi(field);
+    }
+    static inline ScalarFieldMP<GComplex_t> Sqr_partial_phih(const ScalarFieldMP<GComplex_t>& field)
+    {
+       return Sqr_partial_phi(field);
+    }
+
+    KerrHiggs(const Parameters* p, const int maxorder, const int arraysize) throw(IllegalArgumentException&);
+
+    ~KerrHiggs();
+
+    GReal_t getMinX() const;
+    GReal_t getMaxX() const;
+    GReal_t getPhysicalMinX() const;
+    GReal_t getPhysicalMaxX() const;
+    bool isXPeriodic() const;
+
+    /**
+     * Evaluate the field equation. This is the key algorithm.
+     * 
+     * @param  dF   : result array pointer
+     * @param  t    : temporal coordinate
+     * @param  rh   : spatial coordinate
+     * @param  F    : the field array at the given point
+     * @param  F_rh : the field spatial derivative at the given point
+     * @param  G    : the grid
+     * @param  i    : the grid index of the given spatial point
+     * @param  d    : the spatial differentiation scheme operator
+     * @param  dt   : the actual temporal step
+     * @return exclusion bitmask (to kill dissipation term for some components)
+     */
+    int eval(GReal_t* dF, GReal_t t, GReal_t rh,
+            const GReal_t* F, const GReal_t* F_rh,
+            const Grid& G, int i, Grad& d, GReal_t dt);
+
+    /**
+     * Evaluate the constrained components. This is also a key algorithm.
+     * Only executed for the initial data! I.e. to be used only 
+     * for conserved constraints!
+     * 
+     * @param  G : the grid
+     * @param  i : the position index
+     * @param  v : result array
+     */
+    void evalConstrainedComponents(Grid& G, int i, FieldWrapper& v);
+
+     /**
+     * Sets nonevolving field components.
+     * Called after the initial data generation and after each time step.
+     * Can be used for non-conserved constraints.
+     * 
+     * @param  G : the grid 
+     * @param  d : differentiation scheme
+     */
+    void setNonevolvingComponents(Grid& G, Grad& d);
+
+    FieldWrapper* createField(int level) const;
+
+    GReal_t energyDensity(GReal_t t, GReal_t rh,
+                         const tvalarray<GReal_t>& F) const;
+
+    GReal_t energyFlow(GReal_t t, GReal_t rh,
+                      const tvalarray<GReal_t>& F) const;
+
+    // Limited to [0,theta]x[0,2pi[.
+    GReal_t energyFlowLimited(GReal_t t, GReal_t rh, GReal_t theta, 
+                      tvector< tvector< tvector<GReal_t> > > *coeffstorage, 
+                      const tvalarray<GReal_t>& F) const;
+
+    GReal_t angmomDensity(GReal_t t, GReal_t rh,
+                         const tvalarray<GReal_t>& F) const;
+
+    GReal_t angmomFlow(GReal_t t, GReal_t rh,
+                      const tvalarray<GReal_t>& F) const;
+
+    // Limited to [0,theta]x[0,2pi[.
+    GReal_t angmomFlowLimited(GReal_t t, GReal_t rh, GReal_t theta, 
+                      tvector< tvector< tvector<GReal_t> > > *coeffstorage, 
+                      const tvalarray<GReal_t>& F) const;
+
+    /**
+     * Can the field be extended beyond the specified bound?
+     * 
+     * @param  where : the grid index
+     * @return <code>true</code> : if can be extended at the point
+     */
+    bool canBeExtended(int where) const;
+
+    /** Extend left side. */
+    void mirrorLeft(GReal_t rh, FieldWrapper& f) const;
+
+    /** Extend right side. */
+    void mirrorRight(GReal_t rh, FieldWrapper& f) const;
+
+    /**
+     * Tests whether refined field data exists at a given point.
+     * 
+     * @param  G : the grid
+     * @param  i : refined grid point index
+     * @return <code>true</code> : if the point contains refined data
+     */
+    bool hasExtendedRefinedFieldData(const Grid& G, int i) const;
+
+    /** Energy calculation. */
+    class Energy: public DensityQuantity {
+    private:
+       const KerrHiggs& pde;
+    public:
+       Energy(const KerrHiggs* p): DensityQuantity(p), pde(*p) { }
+       GReal_t density(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                       const {
+           return pde.energyDensity(t, rh, F);
+       }
+       GReal_t flow(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F) const {
+           return pde.energyFlow(t, rh, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new Energy(&pde);
+       }
+    };
+    Energy theEnergy;
+
+    /** Energy flow calculation under limited angle. */
+    class EnergyFlowLimited: public DensityQuantity {
+    private:
+       const KerrHiggs& pde;
+       GReal_t theta;
+       tvector< tvector< tvector<GReal_t> > > *coeffstorage;
+    public:
+       EnergyFlowLimited(const KerrHiggs* p, GReal_t Theta, tvector< tvector< tvector<GReal_t> > > *Coeffstorage): DensityQuantity(p), pde(*p), theta(Theta), coeffstorage(Coeffstorage) { }
+       GReal_t density(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                       const {
+           return 0.0;
+       }
+       GReal_t flow(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F) const {
+           return pde.energyFlowLimited(t, rh, theta, coeffstorage, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new EnergyFlowLimited(&pde, theta, coeffstorage);
+       }
+       GReal_t getTheta() const { return theta; }
+       void setTheta(GReal_t Theta)
+       {
+           if ( coeffstorage!=NULL )
+           {
+               if ( coeffstorage->size() )
+                   throw IllegalArgumentException("Cannot change theta after initialized coefficient table!", "gridripper_phys_gr_fixmp_kerrhiggs::KerrHiggs::EnergyFlowLimited::setTheta");
+           }
+           theta=Theta;
+       }
+    };
+    EnergyFlowLimited theEnergyFlowLimited1, theEnergyFlowLimited2;
+
+    /** Angular momentum calculation. */
+    class Angmom: public DensityQuantity {
+    private:
+       const KerrHiggs& pde;
+    public:
+       Angmom(const KerrHiggs* p): DensityQuantity(p), pde(*p) { }
+       GReal_t density(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                       const {
+           return pde.angmomDensity(t, rh, F);
+       }
+       GReal_t flow(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                    const {
+           return pde.angmomFlow(t, rh, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new Angmom(&pde);
+       }
+    };
+    Angmom theAngmom;
+
+    /** Angular momentum flow calculation, under limited angle. */
+    class AngmomFlowLimited: public DensityQuantity {
+    private:
+       const KerrHiggs& pde;
+       GReal_t theta;
+       tvector< tvector< tvector<GReal_t> > > *coeffstorage;
+    public:
+       AngmomFlowLimited(const KerrHiggs* p, GReal_t Theta, tvector< tvector< tvector<GReal_t> > > *Coeffstorage): DensityQuantity(p), pde(*p), theta(Theta), coeffstorage(Coeffstorage) { }
+       GReal_t density(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                       const {
+           return 0.0;
+       }
+       GReal_t flow(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                    const {
+           return pde.angmomFlowLimited(t, rh, theta, coeffstorage, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new AngmomFlowLimited(&pde, theta, coeffstorage);
+       }
+       GReal_t getTheta() const { return theta; }
+       void setTheta(GReal_t Theta)
+       {
+           if ( coeffstorage!=NULL )
+           {
+               if ( coeffstorage->size() )
+                   throw IllegalArgumentException("Cannot change theta after initialized coefficient table!", "gridripper_phys_gr_fixmp_kerrhiggs::KerrHiggs::AngmomFlowLimited::setTheta");
+           }
+           theta=Theta;
+       }
+    };
+    AngmomFlowLimited theAngmomFlowLimited1, theAngmomFlowLimited2;
+
+    /** Get the density quantities. */
+    PhysicalQuantityArray getPhysicalQuantities() const;
+
+    /** Integrated quantity integration domain limit. */
+    class IntqBorder : public MarkerQuantity
+    {
+       private:
+           const GReal_t position;
+       public:
+           IntqBorder(const PDE* eq, GReal_t positionarg)
+            : MarkerQuantity(eq), position(positionarg)
+           {  }
+           ~IntqBorder() {  }
+           std::string getQuantityName() const { return "IntqBorder"; }
+           GReal_t eval(GReal_t t);
+           MarkerQuantity* cloneMarkerQuantity() const
+           { return new IntqBorder(&getPDE(), position); }
+    };
+
+    /**
+     * Light ray position marker. The light ray is of minimal impact, i.e. 
+     * obeys \f$(K-(L_{z}-aE)^{2})+(aE-L_{z})=0\f$. This implies
+     * \f$dt/d\tau         = (r^2+a^2)/\Delta E,
+     *  dr/d\tau         = \pm E,
+     *  d\vartheta/d\tau = 0,
+     *  d\varphi/d\tau   = a/\Delta E\f$.
+     * Returns actual rh coordinate.
+     */
+    class Lightray : public MarkerQuantity
+    {
+       private:
+           const PDE* eq;
+           const GReal_t M;
+           const GReal_t a;
+           const GReal_t e;
+           const GReal_t r0;
+           const int direction;
+           bool firststep;
+           GReal_t r;
+           GReal_t tprev;
+       public:
+           Lightray(const PDE* eqarg, GReal_t Marg, GReal_t aarg, GReal_t earg, GReal_t rh0arg, int directionarg)
+            : MarkerQuantity(eqarg), eq(eqarg), M(Marg), a(aarg), e(earg), r0(((KerrHiggs*)eq)->coordTransf->calc_r(rh0arg)), direction(directionarg), firststep(true)
+           {  }
+           ~Lightray() {  }
+           std::string getQuantityName() const { return "Lightray"; }
+           GReal_t eval(GReal_t t);
+           /** Rightside of the lightray differential equation. */
+           GReal_t rightside(GReal_t r) const;
+           MarkerQuantity* cloneMarkerQuantity() const
+           { return new Lightray(&getPDE(), M, a, e, ((KerrHiggs*)eq)->coordTransf->calc_rh(r0), direction); }
+    };
+
+    /** Get the marker quantities. */
+    MarkerQuantityArray getMarkerQuantities() const;
+
+private:
+
+    /** Some helper function for labeling. */
+    static tvector<string> componentNames(int maxOrder);
+    static tvector<string> constraintNames(int maxOrder);
+
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggs
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggs_KerrHiggs_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewman.mpl b/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewman.mpl
new file mode 100644 (file)
index 0000000..d8c38a9
--- /dev/null
@@ -0,0 +1,12 @@
+Ndim_ :=    4   :
+x1_   :=   t   :
+x2_   :=   r   :
+x3_   :=   theta   :
+x4_   :=   phi   :
+g11_   :=   Delta*Sigma/Gamma-Gamma*Omega^2/Sigma*sin(theta)^2 :
+g14_   :=   Gamma*Omega/Sigma*sin(theta)^2 :
+g22_   :=   -Sigma/Delta :
+g33_   :=   -Sigma :
+g44_   :=   -Gamma/Sigma*sin(theta)^2 :
+
+Info_ := `        Kerr-Newman metric in Boyer-Linquist coordinates, with signature (1,-1,-1,-1), and abbreviations: Delta=r^2+a^2+e^2-2*M*r, Sigma=r^2+a^2*cos(theta)^2, Gamma=(r^2+a^2)^2-a^2*Delta*sin(theta)^2, Omega=a*(2*M*r-e^2)/Gamma `: 
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewman.mws b/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewman.mws
new file mode 100644 (file)
index 0000000..c0de834
--- /dev/null
@@ -0,0 +1,1076 @@
+{VERSION 6 0 "IBM INTEL LINUX" "6.0" }
+{USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 
+2 1 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 
+0 0 0 1 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
+}{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 
+}{CSTYLE "_cstyle39" -1 200 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 
+0 1 }{CSTYLE "_cstyle35" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 
+0 1 }{CSTYLE "_cstyle34" -1 209 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 
+0 1 }{CSTYLE "_cstyle36" -1 213 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 
+0 0 0 1 }{CSTYLE "_cstyle38" -1 214 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 
+0 0 0 1 }{CSTYLE "_cstyle78" -1 256 "Courier" 1 12 255 0 0 1 0 1 0 2 
+1 2 0 0 0 1 }{CSTYLE "" 206 257 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }
+{CSTYLE "" 206 258 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" 214 
+259 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" 214 260 "" 0 1 0 0 
+0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" 214 261 "" 0 1 0 0 0 0 0 1 0 0 0 
+0 0 0 0 0 }{CSTYLE "" 214 262 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }
+{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 
+264 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 265 "" 0 1 0 0 
+0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 0 1 0 0 0 0 0 1 0 0 0 0 
+0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 
+1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text Out
+put" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 
+3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Line Printed Output" 
+-1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 1 }
+1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 
+-1 "" 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 
+-1 0 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 
+0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left
+ Justified Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 
+1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle5
+5" -1 200 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 1 0 
+0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle62" -1 204 1 
+{CSTYLE "" -1 -1 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 1 0 0 1 }1 1 0 
+0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle54" -1 206 1 {CSTYLE "" -1 -1 
+"Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 
+1 }{PSTYLE "_pstyle60" -1 208 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 
+2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle59
+" -1 209 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }
+3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle58" -1 215 1 {CSTYLE "" 
+-1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 
+2 -1 1 }{PSTYLE "_pstyle53" -1 222 1 {CSTYLE "" -1 -1 "Times" 1 14 0 
+0 0 1 2 1 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "" 0 
+256 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 
+-1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "_
+pstyle147" -1 258 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 0 1 0 1 0 2 
+1 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle149" -1 
+259 1 {CSTYLE "" -1 -1 "Courier" 1 12 255 0 0 1 0 1 0 2 1 2 0 0 0 1 }
+1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "" 0 260 1 {CSTYLE "" -1 -1 "" 
+0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }
+{PSTYLE "" 0 261 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }}
+{SECT 0 {EXCHG {PARA 222 "" 0 "" {TEXT 209 62 "Kerr-Newman metric calc
+ulations in Boyer-Lindquist coordinates" }}}{EXCHG {PARA 206 "" 0 "" 
+{TEXT 206 21 "Restart maple server." }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 8 "restart;" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 16 "
+Load GRTensorII." }{XPPEDIT 18 0 "conj;" "6#%%conjG" }}}{EXCHG {PARA 
+200 "> " 0 "" {MPLTEXT 1 213 7 "grtw();" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#%=GRTensorII~Version~1.79~(R4)G" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#%06~February~2001G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%ZDeveloped~b
+y~Peter~Musgrave,~Denis~Pollney~and~Kayll~LakeG" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#%DCopyright~1994-2001~by~the~authors.G" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#%inLatest~version~available~from:~http://grtensor.
+phy.queensu.ca/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%8/usr/local/grii/
+metricsG" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 49 "Introduce aliases \+
+to suppress function arguments." }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 86 "alias(Delta=Delta(r),Sigma=Sigma(r,theta),Gamma=Gam
+ma(r,theta),Omega=Omega(r, theta));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6
+&%&DeltaG%&SigmaG%&GammaG%&OmegaG" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 
+206 24 "Load Kerr-Newman metric." }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 43 "grOptionMetricPath:=\".\"; qload(KerrNewman);" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%3grOptionMetricPathGQ\".6\"" }}
+{PARA 6 "" 1 "" {TEXT -1 44 "Calculated ds for KerrNewman (0.000000 se
+c.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%2Default~spacetimeG%+KerrNewm
+anG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewman~spacetime:
+G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%,CoordinatesG" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#-%\"xG6#%#upG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#
+x~G%\"aGK%'vectorG6#7&%\"tG%\"rG%&thetaG%$phiGQ(pprint06\"" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#%-Line~elementG" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/*$)%$~dsG\"\"#\"\"\",,*(,&*(%&DeltaGF(%&SigmaGF(%&Gamm
+aG!\"\"F(**F/F(%&OmegaGF'F.F0-%$sinG6#%&thetaGF'F0F(%#~dGF()%\"tG%#2~G
+F(F(*4F'F(F/F(F2F(F.F0F3F'F7F()F9%\"~GF(%#d~GF()%$phiGF=F(F(**F.F(F-F0
+F7F()%\"rGF:F(F0*(F.F(F7F()F6F:F(F0*,F/F(F.F0F3F'F7F()F@F:F(F0" }}
+{PARA 12 "" 1 "" {XPPMATH 20 "6#%^y~~~~~~~~Kerr-Newman~metric~in~Boyer
+-Linquist~coordinates,~with~signature~(1,-1,-1,-1),~and~abbreviations:
+~Delta=r^2+a^2+e^2-2*M*r,~Sigma=r^2+a^2*cos(theta)^2,~Gamma=(r^2+a^2)^
+2-a^2*Delta*sin(theta)^2,~Omega=a*(2*M*r-e^2)/Gamma~G" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "complexSet_:=\{Phi\};" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#>%,complexSet_G<#%$PhiG" }}}{EXCHG {PARA 206 "" 
+0 "" {TEXT 206 63 "Introduce substitution rules to resolve function ab
+breviations." }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 137 "Resolu
+tion:=\{ Delta=r^2+a^2+e^2-2*M*r, Sigma=r^2+a^2*cos(theta)^2, Gamma=(r
+^2+a^2)^2-a^2*Delta*sin(theta)^2, Omega=a*(2*M*r-e^2)/Gamma \};" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+ResolutionG<&/%&DeltaG,**$)%\"rG\"
+\"#\"\"\"F-*$)%\"aGF,F-F-*$)%\"eGF,F-F-*(F,F-%\"MGF-F+F-!\"\"/%&GammaG
+,&*$),&F)F-F.F-F,F-F-*(F/F-F'F-)-%$sinG6#%&thetaGF,F-F6/%&OmegaG*(F0F-
+,&*(F,F-F5F-F+F-F-F1F6F-F8F6/%&SigmaG,&F)F-*&F/F-)-%$cosGFAF,F-F-" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 29 "grmap(metric, simplify, \+
+`x`);" }}{PARA 6 "" 1 "" {TEXT -1 37 "Applying routine simplify to g(d
+n,dn)" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 19 "grdisplay(metr
+ic);\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewman~spaceti
+me:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%8Covariant~metric~tensorG" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#-%\"gG6$%#dnGF&" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/*&&%#g~G6#%\"aG\"\"\"&%!G6#%\"bGF)K%'matrixG6#7&7&*(%&
+GammaG!\"\"%&SigmaGF5,(*&%&DeltaGF))F6\"\"#F)F)*&)F4F;F))%&OmegaGF;F)F
+5*(F=F)F>F))-%$cosG6#%&thetaGF;F)F)F)\"\"!FF**F4F)F?F)F6F5-%$sinGFDF;7
+&FF,$*&F6F)F9F5F5FFFF7&FFFF,$F6F5FF7&FGFFFF,$*(F4F)F6F5FHF;F5Q(pprint0
+6\"" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 23 "Define vectorpotential.
+" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 67 "grdef ( `A\{a\} := \+
+[ -e*r/Sigma, 0, 0, a*e*r/Sigma*sin(theta)^2 ]` );" }}{PARA 6 "" 1 "" 
+{TEXT -1 42 "Components assigned for metric: KerrNewman" }}{PARA 6 "" 
+1 "" {TEXT -1 28 "Created definition for A(dn)" }}}{EXCHG {PARA 215 "
+" 0 "" {TEXT 257 89 "===== Calculate gauge-covariant divergence of the
+ vectorpotential (should be zero). =====" }}}{EXCHG {PARA 200 "> " 0 "
+" {MPLTEXT 1 213 42 "grdefine( GKDA, \{\}, `A\{a ;b\}*g\{ ^a ^b\}` );
+" }}{PARA 6 "" 1 "" {TEXT -1 34 "Created a definition for A(dn,cdn)" }
+}{PARA 6 "" 1 "" {TEXT -1 27 "Created definition for GKDA" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 13 "grcalc(GKDA);" }}{PARA 6 "" 1 "
+" {TEXT -1 46 "Calculated detg for KerrNewman (0.000000 sec.)" }}
+{PARA 6 "" 1 "" {TEXT -1 50 "Calculated g(up,up) for KerrNewman (0.004
+000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 54 "Calculated g(dn,dn,pdn) for \+
+KerrNewman (0.004000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 55 "Calculated \+
+Chr(dn,dn,dn) for KerrNewman (0.004000 sec.)" }}{PARA 6 "" 1 "" {TEXT 
+-1 55 "Calculated Chr(dn,dn,up) for KerrNewman (0.004000 sec.)" }}
+{PARA 6 "" 1 "" {TEXT -1 51 "Calculated A(dn,cdn) for KerrNewman (0.01
+2000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 46 "Calculated GKDA for KerrNew
+man (0.000000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$
+\"#G!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 16 "grdisplay(G
+KDA);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewman~spacetim
+e:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%GKDAG" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%%GKDAG\"\"!" }}}{EXCHG {PARA 215 "" 0 "" {TEXT 258 
+81 "===== Calculate gauge-covariant d'Alembert operator on charged sca
+lar field.=====" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 83 "alia
+s(Phi=Phi(t,r,theta,phi)); alias(conjugate(Phi)=conjugate(Phi)(t,r,the
+ta,phi));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6'%&DeltaG%&SigmaG%&GammaG%
+&OmegaG%$PhiG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6(%&DeltaG%&SigmaG%&Gam
+maG%&OmegaG%$PhiG-%*conjugateG6#F'" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 27 "grdefine( `P`, \{\}, `Phi` );" }}{PARA 6 "" 1 "" 
+{TEXT -1 24 "Created definition for P" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 41 "grdefine( `Pbar`, \{\}, `conjugate(Phi)` );" }}{PARA 
+6 "" 1 "" {TEXT -1 27 "Created definition for Pbar" }}}{EXCHG {PARA 
+200 "> " 0 "" {MPLTEXT 1 213 49 "grdefine( `GKDPhi\{a\}`, \{\}, `P\{ ,
+a\}-I*q*A\{a\}*P` );" }}{PARA 6 "" 1 "" {TEXT -1 31 "Created a definit
+ion for P(pdn)" }}{PARA 6 "" 1 "" {TEXT -1 33 "Created definition for \+
+GKDPhi(dn)" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 42 "grcalc(GK
+DPhi(dn));\ngrdisplay(GKDPhi(dn));" }}{PARA 6 "" 1 "" {TEXT -1 43 "Cal
+culated P for KerrNewman (0.000000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 
+48 "Calculated P(pdn) for KerrNewman (0.004000 sec.)" }}{PARA 6 "" 1 "
+" {TEXT -1 52 "Calculated GKDPhi(dn) for KerrNewman (0.000000 sec.)" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"%!\"$" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewman~spacetime:G" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#%+GKDPhi(dn)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-
+%'GKDPhiG6#%#dnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%'GKDPhiG6#%\"aG
+K%'vectorG6#7&*&,&*&-%%diffG6$%$PhiG%\"tG\"\"\"%&SigmaGF4F4*,%\"qGF4%
+\"eGF4%\"rGF4F2F4^#F4F4F4F4F5!\"\"-F06$F2F9-F06$F2%&thetaG,$*&,&*&-F06
+$F2%$phiGF4F5F4F;*0F7F4F'F4F8F4F9F4)-%$sinG6#F@\"\"#F4F2F4F:F4F4F4F5F;
+F;Q(pprint06\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "grcalc(GK
+DPhi(up));\ngrdisplay(GKDPhi(up));" }}{PARA 6 "" 1 "" {TEXT -1 34 "Cre
+ated definition for GKDPhi(up) " }}{PARA 6 "" 1 "" {TEXT -1 52 "Calcul
+ated GKDPhi(up) for KerrNewman (0.004000 sec.)" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"#7!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#%>For~the~KerrNewman~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6
+#%+GKDPhi(up)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'GKDPhiG6#%#upG" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%'GKDPhiG%\"tG,$*(%&GammaG\"\"\",**
+&-%%diffG6$%$PhiG%\"tGF*%&SigmaGF*!\"\"*,^#F3F*%\"qGF*%\"eGF*%\"rGF*F0
+F*F**(%&OmegaGF*-F.6$F0%$phiGF*F2F*F3*2F:F*F6F*%\"aGF*F7F*F8F*)-%$sinG
+6#%&thetaG\"\"#F*F0F*^#F*F*F*F*,**&%&DeltaGF*)F2FEF*F**&)F)FEF*)F:FEF*
+F3*(FLF*FMF*)-%$cosGFCFEF*F**(FLF*FMF*F@F*F*F3F3" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/)%'GKDPhiG%\"rG,$*(%&DeltaG\"\"\"%&SigmaG!\"\"-%%diffG
+6$%$PhiG%\"rGF*F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%'GKDPhiG%&thet
+aG,$*&%&SigmaG!\"\"-%%diffG6$%$PhiG%&thetaG\"\"\"F*" }}{PARA 12 "" 1 "
+" {XPPMATH 20 "6#/)%'GKDPhiG%$phiG**,2*,)%&GammaG\"\"#\"\"\"%&OmegaGF-
+)-%$sinG6#%&thetaGF,F--%%diffG6$%$PhiG%\"tGF-%&SigmaGF-F-*2F*F-F.F-F/F
+-%\"qGF-%\"eGF-%\"rGF-F7F-^#F-F-F-*(%&DeltaGF-)F9\"\"$F--F56$F7%$phiGF
+-!\"\"*4F@F-)F9F,F-F;F-%\"aGF-F<F-F=F-F/F-F7F-F>F-F-**F*F-)F.F,F-FCF-F
+9F-F-*4^#FFF-F*F-FKF-F;F-FIF-F<F-F=F-F/F-F7F-F-*,F*F-FKF-)-%$cosGF2F,F
+-FCF-F9F-FF*6F*F-FKF-FOF-F;F-FIF-F<F-F=F-F/F-F7F-F>F-F-F-F+FFF0!\"#,**
+&F@F-FHF-F-*&F*F-FKF-FF*(F*F-FKF-FOF-F-*(F*F-FKF-F/F-F-FF" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "grdefine( `GKDPhibar\{a\}`, \{\}, `
+Pbar\{ ,a\}+I*q*A\{a\}*Pbar` );" }}{PARA 6 "" 1 "" {TEXT -1 34 "Create
+d a definition for Pbar(pdn)" }}{PARA 6 "" 1 "" {TEXT -1 36 "Created d
+efinition for GKDPhibar(dn)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+48 "grcalc(GKDPhibar(dn));\ngrdisplay(GKDPhibar(dn));" }}{PARA 6 "" 1 
+"" {TEXT -1 46 "Calculated Pbar for KerrNewman (0.000000 sec.)" }}
+{PARA 6 "" 1 "" {TEXT -1 51 "Calculated Pbar(pdn) for KerrNewman (0.00
+0000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 55 "Calculated GKDPhibar(dn) fo
+r KerrNewman (0.000000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU
+~Time~G$\"\"!F&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewma
+n~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%.GKDPhibar(dn)G" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#-%*GKDPhibarG6#%#dnG" }}{PARA 11 "" 1 
+"" {XPPMATH 20 "6#/&%*GKDPhibarG6#%\"tG,$*&,&*&-%%diffG6$-%*conjugateG
+6#%$PhiG%\"tG\"\"\"%&SigmaGF4!\"\"*,%\"qGF4%\"eGF4%\"rGF4F/F4^#F4F4F4F
+4F5F6F6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%*GKDPhibarG6#%\"rG-%%dif
+fG6$-%*conjugateG6#%$PhiG%\"rG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%*
+GKDPhibarG6#%&thetaG-%%diffG6$-%*conjugateG6#%$PhiG%&thetaG" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#/&%*GKDPhibarG6#%$phiG*&,&*&-%%diffG6$-%*con
+jugateG6#%$PhiG%$phiG\"\"\"%&SigmaGF3F3*0%\"qGF3%\"aGF3%\"eGF3%\"rGF3)
+-%$sinG6#%&thetaG\"\"#F3F.F3^#F3F3F3F3F4!\"\"" }}}{EXCHG {PARA 200 "> \+
+" 0 "" {MPLTEXT 1 213 65 "grdefine( `GBOXPhi`, \{\}, `GKDPhi\{a ; ^a\}
+-I*q*A\{a\}*GKDPhi\{ ^a\}` );" }}{PARA 6 "" 1 "" {TEXT -1 39 "Created \+
+a definition for GKDPhi(dn,cdn)" }}{PARA 6 "" 1 "" {TEXT -1 38 "Create
+d definition for GKDPhi(dn,cup) " }}{PARA 6 "" 1 "" {TEXT -1 30 "Creat
+ed definition for GBOXPhi" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 
+213 36 "grcalc(GBOXPhi);\ngralter(GBOXPhi,1);" }}{PARA 6 "" 1 "" 
+{TEXT -1 56 "Calculated GKDPhi(dn,cdn) for KerrNewman (0.032000 sec.)
+" }}{PARA 6 "" 1 "" {TEXT -1 56 "Calculated GKDPhi(dn,cup) for KerrNew
+man (0.044000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 49 "Calculated GBOXPhi
+ for KerrNewman (0.008000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*
+CPU~Time~G$\"#%)!\"$" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplif
+ication of a GRTensorII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}
+{PARA 6 "" 1 "" {TEXT -1 43 "Applying routine simplify to object GBOXP
+hi" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#'*!\"$" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "grmap(GBOXPhi, subs, diff(De
+lta, r)=diff(r^2+a^2+e^2-2*M*r, r), `x`);" }}{PARA 6 "" 1 "" {TEXT -1 
+32 "Applying routine subs to GBOXPhi" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 34 "GBoxPhiSimp:=grcomponent(GBOXPhi):" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 218 "GBoxPhiSimp2:=collect((GBoxPhi
+Simp),\{(diff(Phi,`$`(t,2))),(diff(Phi,phi,t)),(diff(Phi,`$`(r,2))),(d
+iff(Phi,`$`(theta,2))),(diff(Phi,`$`(phi,2))),(diff(Phi,t)),(diff(Phi,
+r)),(diff(Phi,theta)),(diff(Phi,phi))\},simplify);" }}{PARA 12 "" 1 "
+" {XPPMATH 20 "6#>%-GBoxPhiSimp2G,6*(%&DeltaG\"\"\"%&SigmaG!\"\"-%%dif
+fG6$%$PhiG-%\"$G6$%\"rG\"\"#F(F**.%&GammaGF*F)F*F'F*,(*&F'F()F)F3F(F(*
+&)F5F3F()%&OmegaGF3F(F**(F:F(F;F()-%$cosG6#%&thetaGF3F(F(F(-%$sinGFA!
+\"#-F,6$F.-F06$%$phiGF3F(F***F)F*FCF*F?F(-F,6$F.FBF(F**.F3F(F5F(F)F*F'
+F*F<F(-F,6%F.FJ%\"tGF(F(*4^#F3F(F5F(F)FEF'F*,(*(F<F(%\"aGF(F>F(F(F(F(*
+&F<F(FVF(F*F(%\"qGF(%\"eGF(F2F(-F,6$F.FQF(F(**F3F(F)F*,&F2F(%\"MGF*F(-
+F,6$F.F2F(F**4FSF(F5F*F)FEF'F*,***F:F(F;F(F>F(FVF(F(*(F'F(F8F(FVF(F(*(
+F:F(F;F(FVF(F**&F:F(F<F(F(F(FXF(FYF(F2F(-F,6$F.FJF(F(**F5F(F)F*F'F*-F,
+6$F.-F06$FQF3F(F(*&F)F*-F,6$F.-F06$FBF3F(F**2F5F*F)!\"$F'F*,2**)FVF3F(
+F:F(F;F()F?\"\"%F(F(**FapF(F8F(F'F(F>F(F(*,F3F(F:F(F<F(FVF(F>F(F(*,F3F
+(FapF(F:F(F;F(F>F(F***F3F(F:F(F<F(FVF(F**$F:F(F(*(FapF(F8F(F'F(F**(Fap
+F(F:F(F;F(F(F(FXF3FYF3F2F3F.F(F*" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 
+74 "After proper collection of terms, the wave operator becomes the fo
+llowing." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 372 "GBoxPhiSimpHum
+anreadable:=Gamma/(Delta*Sigma)*diff(diff(Phi, t), t)-Delta/Sigma*diff
+(diff(Phi, r), r)-2*(r-M)/Sigma*diff(Phi, r)-1/Sigma*LaplaceS2(Phi)+a^
+2/(Delta*Sigma)*diff(diff(Phi, phi), phi)+2*a*(r^2+a^2-Delta)/(Delta*S
+igma)*diff(diff(Phi, t), phi)+2*I*q*e*r*(r^2+a^2)/(Delta*Sigma)*diff(P
+hi, t)+2*I*q*e*a*r/(Delta*Sigma)*diff(Phi, phi)-q^2*e^2*r^2/(Delta*Sig
+ma)*Phi;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%9GBoxPhiSimpHumanreadabl
+eG,4**%&GammaG\"\"\"%&SigmaG!\"\"%&DeltaGF*-%%diffG6$%$PhiG-%\"$G6$%\"
+tG\"\"#F(F(*(F+F(F)F*-F-6$F/-F16$%\"rGF4F(F***F4F(F)F*,&F:F(%\"MGF*F(-
+F-6$F/F:F(F**&F)F*-%*LaplaceS2G6#F/F(F***%\"aGF4F+F*F)F*-F-6$F/-F16$%$
+phiGF4F(F(*.F4F(FEF(,(*$)F:F4F(F(*$)FEF4F(F(F+F*F(F+F*F)F*-F-6%F/FJF3F
+(F(*2^#F4F(%\"qGF(%\"eGF(F:F(,&FMF(FOF(F(F+F*F)F*-F-6$F/F3F(F(*2FTF(FU
+F(FVF(FEF(F:F(F+F*F)F*-F-6$F/FJF(F(*.FUF4FVF4F:F4F+F*F)F*F/F(F*" }}}
+{EXCHG {PARA 0 "" 0 "" {TEXT -1 51 "Rechecking human readable version \+
+of wave operator." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 442 "Expre
+ssion:=GBoxPhiSimpHumanreadable: SimplifiedExpression:=simplify(subs(L
+aplaceS2(Phi)=1/sin(theta)*diff(sin(theta)*diff(Phi,theta),theta)+1/si
+n(theta)^2*diff(diff(Phi,phi),phi),  Expression)): ReferenceExpression
+:=GBoxPhiSimp2: DifferenceExpression:=simplify(subs(Omega=a*(2*M*r-e^2
+)/Gamma, Gamma=(r^2+a^2)^2-a^2*Delta*sin(theta)^2, Sigma=r^2+a^2*cos(t
+heta)^2, Delta=r^2+a^2+e^2-2*M*r, simplify(SimplifiedExpression-Refere
+nceExpression)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5DifferenceExpr
+essionG\"\"!" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 55 "Now transform the
+ box operator to tortoise coordinates:" }}{PARA 0 "" 0 "" {TEXT -1 88 
+"r_\{*\}(r)                :=  r + ln(r - r_\{+\})/(2kappa_\{+\}) + ln
+(r - r_\{-\})/(2kappa_\{-\})," }}{PARA 0 "" 0 "" {TEXT -1 74 "phi^\{~
+\}(r, phi)    := phi + a/(r_\{+\} - r_\{-\})*ln((r - r_\{+\})/(r - r_
+\{-\}))." }}{PARA 0 "" 0 "" {TEXT -1 109 "Here:  kappa_\{+\}:=(r_\{+\}
+ - r_\{-\})/(2*(r_\{+\}^2 + a^2))   and   kappa_\{-\}:=(r_\{-\} - r_\{
++\})/(2*(r_\{-\}^2 + a^2))," }}{PARA 0 "" 0 "" {TEXT -1 60 "with r_\{+
+\}:=M+sqrt(M^2-a^2-e^2), r_\{-\}:=M-sqrt(M^2-a^2-e^2)." }}{PARA 0 "" 
+0 "" {TEXT -1 64 "The Jacobian of this coordinate transformation is th
+e following:" }}{PARA 0 "" 0 "" {TEXT -1 50 "dr_\{*\}/dr=(r^2+a^2)/Del
+ta,    dphi^\{~\}/dr=a/Delta," }}{PARA 0 "" 0 "" {TEXT -1 59 "dr_\{*\}
+/dphi=0,                             dphi^\{~\}/dphi=1." }}{PARA 0 "" 
+0 "" {TEXT -1 93 "The field in the new coordinates shall be denoted by
+ PhiT (from the name: Phi - transformed)." }}{PARA 0 "" 0 "" {TEXT -1 
+92 "The tortoise radius shall be denoted by rstar, and Rstar when unde
+rstood as a function of r." }}{PARA 0 "" 0 "" {TEXT -1 110 "The transf
+ormed azimuth shall be denoted by phitilde, and Phitilde when understo
+od as a function of r and phi." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 22 "alias(Rstar=Rstar(r));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "a
+lias(Phitilde=Phitilde(r, phi));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 
+105 "alias(PhiT=PhiT(t,rstar,theta,phitilde)); alias(conjugate(PhiT)=c
+onjugate(PhiT)(t,rstar,theta,phitilde));" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6)%&DeltaG%&SigmaG%&GammaG%&OmegaG%$PhiG-%*conjugateG6#F'%&RstarG
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6*%&DeltaG%&SigmaG%&GammaG%&OmegaG%$
+PhiG-%*conjugateG6#F'%&RstarG%)PhitildeG" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6+%&DeltaG%&SigmaG%&GammaG%&OmegaG%$PhiG-%*conjugateG6#F'%&RstarG%
+)PhitildeG%%PhiTG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,%&DeltaG%&SigmaG%
+&GammaG%&OmegaG%$PhiG-%*conjugateG6#F'%&RstarG%)PhitildeG%%PhiTG-F)6#F
+-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 341 "GBoxPhiT:=subs(Laplac
+eS2(PhiT(t,Rstar,theta,Phitilde))=LaplaceS2(PhiT(t,Rstar,theta,Phitild
+e)), diff(Phitilde,`$`(phi,2))=0, diff(Phitilde,phi)=1, diff(Phitilde,
+r)=a/Delta, diff(Rstar,`$`(r,2))=2*(r*Delta-(r^2+a^2)*(r-M))/Delta^2, \+
+diff(Rstar,r)=(r^2+a^2)/Delta, simplify(subs(Phi=PhiT(t, Rstar, theta,
+ Phitilde), GBoxPhiSimpHumanreadable)));" }}{PARA 12 "" 1 "" {XPPMATH 
+20 "6#>%)GBoxPhiTG*(,D*&%&GammaG\"\"\"--&%\"DG6$F)F)6#%%PhiTG6&%\"tG%&
+RstarG%&thetaG%)PhitildeGF)F)*&--&F-6$\"\"#F;F/F1F)),&*$)%\"rGF;F)F)*$
+)%\"aGF;F)F)F;F)!\"\"**F;F)F=F)--&F-6$F;\"\"%F/F1F)FCF)FD*(F;F)--&F-6#
+F;F/F1F),&*&F@F)%&DeltaGF)F)*&F=F),&F@F)%\"MGFDF)FDF)FD*()FRF;F)--&F-6
+#FJF/F1F)-%%diffG6$*&FCF)FRFDF@F)FD**F;F)F@F)FLF)F=F)FD**F;F)F@F)FXF)F
+CF)FD**F;F)FUF)FLF)F=F)F)**F;F)FUF)FXF)FCF)F)*&-%*LaplaceS2G6#-F0F1F)F
+RF)FD**F;F)FCF)--&F-6$F)FJF/F1F)F?F)F)*(F;F))FC\"\"$F)FdoF)F)**F;F)FCF
+)FdoF)FRF)FD*.^#F;F)%\"qGF)%\"eGF)FCF)F@F)FXF)F)*,F]pF)F^pF)F_pF))F@Fj
+oF)--&F-6#F)F/F1F)F)*.F]pF)F^pF)F_pF)F@F)FbpF)FBF)F)**)F^pF;F))F_pF;F)
+F?F)FboF)FDF)%&SigmaGFDFRFD" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+643 "GBoxPhiTSimp:=simplify(subs(D[1,1](PhiT)(t,Rstar,theta,Phitilde)=
+diff(PhiT,`$`(t,2)), D[2,2](PhiT)(t,Rstar,theta,Phitilde)=diff(PhiT,`$
+`(rstar,2))(t,Rstar,theta,Phitilde), D[1,4](PhiT)(t,Rstar,theta,Phitil
+de)=diff(diff(PhiT, phitilde), t)(t,Rstar,theta,Phitilde), D[2,4](PhiT
+)(t,Rstar,theta,Phitilde)=diff(diff(PhiT, phitilde), rstar)(t,Rstar,th
+eta,Phitilde), D[1](PhiT)(t,Rstar,theta,Phitilde)=diff(PhiT, t)(t,Rsta
+r,theta,Phitilde), D[2](PhiT)(t,Rstar,theta,Phitilde)=diff(PhiT, rstar
+)(t,Rstar,theta,Phitilde), D[4](PhiT)(t,Rstar,theta,Phitilde)=diff(Phi
+T, phitilde)(t,Rstar,theta,Phitilde), simplify(subs(diff(Delta,r)=2*(r
+-M), GBoxPhiT))));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%-GBoxPhiTSimpG
+,$*(,@*,^#!\"#\"\"\"%\"qGF+%\"eGF+)%\"rG\"\"$F+--%%diffG6$%%PhiTG%\"tG
+6&F6%&RstarG%&thetaG%)PhitildeGF+F+*.F)F+F,F+F-F+F/F+F1F+)%\"aG\"\"#F+
+F+**F>F+F=F+--F36%F5%)phitildeGF6F7F+)F/F>F+!\"\"**F>F+--F36$F5%&rstar
+GF7F+%&DeltaGF+F/F+F+**F>F+--F36%F5FCFJF7F+F=F+FDF+F+**F>F+--F36$F5-%
+\"$G6$FJF>F7F+FDF+F<F+F+**F>F+F=F+F@F+FKF+F+*.F)F+F,F+F-F+F=F+F/F+--F3
+6$F5FCF7F+F+*(F>F+)F=F0F+F@F+FE*&FQF+)F/\"\"%F+F+*&FQF+)F=FjnF+F+*(F>F
++FMF+FgnF+F+*&-%*LaplaceS2G6#-F5F7F+FKF+F+**)F,F>F+)F-F>F+FDF+FboF+F+*
+&%&GammaGF+-F36$F5-FU6$F6F>F+FEF+%&SigmaGFEFKFEFE" }}}{EXCHG {PARA 0 "
+> " 0 "" {MPLTEXT 1 0 463 "GBoxPhiTSimp2:=subs(diff(PhiT,`$`(rstar,2))
+(t,Rstar,theta,Phitilde)=diff(PhiT,`$`(rstar,2)), diff(PhiT,rstar,phit
+ilde)(t,Rstar,theta,Phitilde)=diff(PhiT,rstar,phitilde), diff(PhiT,phi
+tilde,t)(t,Rstar,theta,Phitilde)=diff(PhiT,phitilde,t), diff(PhiT,t)(t
+,Rstar,theta,Phitilde)=diff(PhiT,t), diff(PhiT,rstar)(t,Rstar,theta,Ph
+itilde)=diff(PhiT,rstar), diff(PhiT,phitilde)(t,Rstar,theta,Phitilde)=
+diff(PhiT,phitilde), PhiT(t,Rstar,theta,Phitilde)=PhiT, GBoxPhiTSimp);
+" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%.GBoxPhiTSimp2G,$*(,@*,^#!\"#\"
+\"\"%\"qGF+%\"eGF+)%\"rG\"\"$F+-%%diffG6$%%PhiTG%\"tGF+F+*.F)F+F,F+F-F
++F/F+F1F+)%\"aG\"\"#F+F+**F9F+F8F+-F26%F4%)phitildeGF5F+)F/F9F+!\"\"**
+F9F+-F26$F4%&rstarGF+%&DeltaGF+F/F+F+**F9F+-F26%F4F=FCF+F8F+F>F+F+**F9
+F+-F26$F4-%\"$G6$FCF9F+F>F+F7F+F+**F9F+F8F+F;F+FDF+F+*.F)F+F,F+F-F+F8F
++F/F+-F26$F4F=F+F+*(F9F+)F8F0F+F;F+F?*&FIF+)F/\"\"%F+F+*&FIF+)F8FVF+F+
+*(F9F+FFF+FSF+F+*&-%*LaplaceS2G6#F4F+FDF+F+**)F,F9F+)F-F9F+F>F+F4F+F+*
+&%&GammaGF+-F26$F4-FL6$F5F9F+F?F+%&SigmaGF?FDF?F?" }}}{EXCHG {PARA 0 "
+> " 0 "" {MPLTEXT 1 0 234 "GBoxPhiTSimp3:=collect((GBoxPhiTSimp2), \{(
+diff(PhiT,`$`(t,2))),(diff(PhiT,`$`(rstar,2))),(diff(PhiT,`$`(phitilde
+,2))),diff(PhiT,phitilde,t),diff(PhiT,phitilde,rstar),(diff(PhiT,t)),(
+diff(PhiT,rstar)),(diff(PhiT,phitilde))\}, simplify);" }}{PARA 12 "" 
+1 "" {XPPMATH 20 "6#>%.GBoxPhiTSimp3G,2**%&GammaG\"\"\"%&SigmaG!\"\"%&
+DeltaGF*-%%diffG6$%%PhiTG-%\"$G6$%\"tG\"\"#F(F(**F4F(%\"rGF(F)F*-F-6$F
+/%&rstarGF(F***,(*$)F6\"\"%F(F(*(F4F()F6F4F()%\"aGF4F(F(*$)FBF>F(F(F(F
+)F*F+F*-F-6$F/-F16$F9F4F(F**2^#F4F(%\"qGF(%\"eGF(FBF(F6F(F)F*F+F*-F-6$
+F/%)phitildeGF(F(*.F4F(FBF(,(*$F@F(F(*$FAF(F(F+F*F(F)F*F+F*-F-6%F/FOF3
+F(F(*.F4F(FBF(,&FRF(FSF(F(F)F*F+F*-F-6%F/FOF9F(F**2FJF(FKF(FLF(F6F(FWF
+(F)F*F+F*-F-6$F/F3F(F(*(,&*&-%*LaplaceS2G6#F/F(F+F(F(**)FKF4F()FLF4F(F
+@F(F/F(F(F(F)F*F+F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 400 "G
+BoxPhiTSimpHumanreadable:=Gamma/(Sigma*Delta)*diff(PhiT,`$`(t,2))-(r^2
++a^2)^2/(Sigma*Delta)*diff(PhiT,`$`(rstar,2))-2*r/Sigma*diff(PhiT,rsta
+r)+2*a*(r^2+a^2-Delta)/(Sigma*Delta)*diff(PhiT,phitilde,t)-2*a*(r^2+a^
+2)/(Sigma*Delta)*diff(PhiT,phitilde,rstar)+2*I*q*e*r*(r^2+a^2)/(Sigma*
+Delta)*diff(PhiT,t)+2*I*q*e*a*r/(Sigma*Delta)*diff(PhiT,phitilde)-q^2*
+e^2*r^2/(Sigma*Delta)*PhiT-LaplaceS2(PhiT)/Sigma;" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%:GBoxPhiTSimpHumanreadableG,4**%&GammaG\"\"\"%&SigmaG
+!\"\"%&DeltaGF*-%%diffG6$%%PhiTG-%\"$G6$%\"tG\"\"#F(F(**,&*$)%\"rGF4F(
+F(*$)%\"aGF4F(F(F4F)F*F+F*-F-6$F/-F16$%&rstarGF4F(F***F4F(F9F(F)F*-F-6
+$F/FAF(F**.F4F(F<F(,(F7F(F:F(F+F*F(F)F*F+F*-F-6%F/%)phitildeGF3F(F(*.F
+4F(F<F(F6F(F)F*F+F*-F-6%F/FIFAF(F**2^#F4F(%\"qGF(%\"eGF(F9F(F6F(F)F*F+
+F*-F-6$F/F3F(F(*2FNF(FOF(FPF(F<F(F9F(F)F*F+F*-F-6$F/FIF(F(*.FOF4FPF4F9
+F4F)F*F+F*F/F(F**&-%*LaplaceS2G6#F/F(F)F*F*" }}}{EXCHG {PARA 0 "" 0 "
+" {TEXT -1 63 "Rechecking human readable version of transformed wave o
+perator." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 192 "Expression:=GB
+oxPhiTSimpHumanreadable: SimplifiedExpression:=simplify(Expression): R
+eferenceExpression:=GBoxPhiTSimp3: DifferenceExpression:=simplify(Simp
+lifiedExpression-ReferenceExpression);" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#>%5DifferenceExpressionG\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 209 "" 0 "" {TEXT 259 69 "===== Calc
+ulate energy-momentum tensor of charged scalar field. =====" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "alias(V=V(t,r,theta,phi));" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6-%&DeltaG%&SigmaG%&GammaG%&OmegaG%$Ph
+iG-%*conjugateG6#F'%&RstarG%)PhitildeG%%PhiTG-F)6#F-%\"VG" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "grdefine(`Vpot`,\{\},`V`);" }}
+{PARA 6 "" 1 "" {TEXT -1 27 "Created definition for Vpot" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 128 "grdefine( `T\{a b\}`, g(dn,dn)
+ , `1/2*(GKDPhi\{a\}*GKDPhibar\{b\}+GKDPhi\{b\}*GKDPhibar\{a\})-1/2*g
+\{a b\}*(GKDPhibar\{e\}*GKDPhi\{^e\}-Vpot)`);" }}{PARA 6 "" 1 "" 
+{TEXT -1 31 "Created definition for T(dn,dn)" }}}{EXCHG {PARA 200 "> \+
+" 0 "" {MPLTEXT 1 213 17 "grcalc(T(dn,dn));" }}{PARA 6 "" 1 "" {TEXT 
+-1 46 "Calculated Vpot for KerrNewman (0.000000 sec.)" }}{PARA 6 "" 1 
+"" {TEXT -1 50 "Calculated T(dn,dn) for KerrNewman (0.040000 sec.)" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#S!\"$" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 22 "gralter(T(dn,dn),6,8);" }}
+{PARA 6 "" 1 "" {TEXT -1 48 "Component simplification of a GRTensorII \+
+object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 
+42 "Applying routine expand to object T(dn,dn)" }}{PARA 6 "" 1 "" 
+{TEXT -1 42 "Applying routine normal to object T(dn,dn)" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#O!\"$" }}}{EXCHG {PARA 200 "> \+
+" 0 "" {MPLTEXT 1 213 209 "grmap(T(dn,dn), subs, conjugate(r)=r,conjug
+ate(a)=a,conjugate(q)=q,conjugate(e)=e, conjugate(theta)=theta, conjug
+ate(Sigma)=Sigma, conjugate(Delta)=Delta, conjugate(Gamma)=Gamma, conj
+ugate(Omega)=Omega, 'x' ):" }}{PARA 6 "" 1 "" {TEXT -1 33 "Applying ro
+utine subs to T(dn,dn)" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+20 "grdisplay(T(dn,dn));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~
+KerrNewman~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%)T(dn,dn)G
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%\"TG6$%#dnGF&" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#/&%\"TG6#*&%\"tG\"\"\"%\"tGF)%K~14859~words.~Exceeds~
+grOptionDisplayLimitG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%
+\"tG\"\"\"%\"rGF),$*&#F)\"\"#F)*&,**(-%%diffG6$-%*conjugateG6#%$PhiG%
+\"rGF)-F36$F8%\"tGF)%&SigmaGF)F)*.F2F)%\"qGF)%\"eGF)F9F)F8F)^#F)F)F)*(
+-F36$F8F9F)-F36$F5F<F)F=F)F)*.^#!\"\"F)FCF)F?F)F@F)F9F)F5F)F)F)F=FIF)F
+)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%\"tG\"\"\"%&thetaGF),
+$*&#F)\"\"#F)*&,**(-%%diffG6$-%*conjugateG6#%$PhiG%&thetaGF)-F36$F8%\"
+tGF)%&SigmaGF)F)*.F2F)%\"qGF)%\"eGF)%\"rGF)F8F)^#F)F)F)*(-F36$F8F9F)-F
+36$F5F<F)F=F)F)*.^#!\"\"F)FDF)F?F)F@F)FAF)F5F)F)F)F=FJF)F)" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%\"tG\"\"\"%$phiGF)%J~7891~words.
+~Exceeds~grOptionDisplayLimitG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%
+\"TG6#*&%\"rG\"\"\"%\"rGF)%J~5611~words.~Exceeds~grOptionDisplayLimitG
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%\"rG\"\"\"%&thetaGF),&
+*&#F)\"\"#F)*&-%%diffG6$%$PhiG%\"rGF)-F16$-%*conjugateG6#F3%&thetaGF)F
+)F)*&F-F)*&-F16$F3F:F)-F16$F7F4F)F)F)" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#/&%\"TG6#*&%\"rG\"\"\"%$phiGF),$*&#F)\"\"#F)*&,**(-%%diffG6$%$PhiG%
+\"rGF)-F36$-%*conjugateG6#F5%$phiGF)%&SigmaGF)!\"\"*2^#F>F)F2F)%\"qGF)
+%\"aGF)%\"eGF)F6F))-%$sinG6#%&thetaGF.F)F9F)F)*(-F36$F9F6F)-F36$F5F<F)
+F=F)F>*2FJF)FAF)FBF)FCF)F6F)FDF)F5F)^#F)F)F)F)F=F>F)F>" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#/&%\"TG6#*&%&thetaG\"\"\"%&thetaGF)%J~5597~words.~
+Exceeds~grOptionDisplayLimitG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"
+TG6#*&%&thetaG\"\"\"%$phiGF),$*&#F)\"\"#F)*&,**(-%%diffG6$%$PhiG%&thet
+aGF)-F36$-%*conjugateG6#F5%$phiGF)%&SigmaGF)!\"\"*2^#F>F)F2F)%\"qGF)%
+\"aGF)%\"eGF)%\"rGF))-%$sinG6#F6F.F)F9F)F)*(-F36$F9F6F)-F36$F5F<F)F=F)
+F>*2FJF)FAF)FBF)FCF)FDF)FEF)F5F)^#F)F)F)F)F=F>F)F>" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#/&%\"TG6#*&%$phiG\"\"\"%$phiGF)%J~6241~words.~Exceeds
+~grOptionDisplayLimitG" }}}{EXCHG {PARA 209 "" 0 "" {TEXT 260 42 "====
+= Calculation of volume element. =====" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 13 "grcalc(detg);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%
+*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 18 "
+gralter(detg,1,7);" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplific
+ation of a GRTensorII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}
+{PARA 6 "" 1 "" {TEXT -1 40 "Applying routine simplify to object detg
+" }}{PARA 6 "" 1 "" {TEXT -1 38 "Applying routine factor to object det
+g" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"%!\"$" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 16 "grdisplay(detg);" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewman~spacetime:G" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#%ADeterminant~of~the~metric~tensorG" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%#g~G,$*&)-%$sinG6#%&thetaG\"\"#\"\"
+\")%&SigmaGF,F-!\"\"" }}}{EXCHG {PARA 209 "" 0 "" {TEXT 261 62 "===== \+
+Calculation of energy density on t=const surfaces. =====" }}}{EXCHG 
+{PARA 208 "" 0 "" {TEXT 214 31 "Time translation Killing field." }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 36 "grdef ( `t\{^a\} := [ 1,
+ 0, 0, 0 ]` ):" }}{PARA 6 "" 1 "" {TEXT -1 42 "Components assigned for
+ metric: KerrNewman" }}{PARA 6 "" 1 "" {TEXT -1 28 "Created definition
+ for t(up)" }}}{EXCHG {PARA 208 "" 0 "" {TEXT 214 38 "Unit normal vect
+or of t=const surface." }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+36 "grdef ( `nt\{a\} := [ 1, 0, 0, 0 ]` ):" }}{PARA 6 "" 1 "" {TEXT 
+-1 42 "Components assigned for metric: KerrNewman" }}{PARA 6 "" 1 "" 
+{TEXT -1 29 "Created definition for nt(dn)" }}}{EXCHG {PARA 200 "> " 
+0 "" {MPLTEXT 1 213 26 "grnormalize ( nt(dn), 1 );" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#%LThe~components~of~the~normalized~vector~areG" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#ntG%\"tG*&\"\"\"F(*$*(%&SigmaGF(%&
+GammaGF(,**&%&DeltaGF()F+\"\"#F(F(*&)F,F1F()%&OmegaGF1F(!\"\"*(F3F(F4F
+()-%$cosG6#%&thetaGF1F(F(*(F3F(F4F()-%$sinGF;F1F(F(F6#F(F1F6" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#/)%#ntG%\"rG\"\"!" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/)%#ntG%&thetaG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6
+#/)%#ntG%$phiG\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 67 "Do you wish to ove
+rwrite nt(dn) with the normalized vector? (1=yes)" }}{PARA 6 "" 1 "" 
+{TEXT -1 0 "" }}}{EXCHG {PARA 208 "" 0 "" {TEXT 214 30 "Pull up normal
+ vector indices." }}}{EXCHG {PARA 200 "grnormalize>" 0 "" {MPLTEXT 1 
+213 2 "1;" }}{PARA 6 "" 1 "" {TEXT -1 28 "nt(dn) has been overwritten.
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "grcalc(nt(up));" }}
+{PARA 6 "" 1 "" {TEXT -1 30 "Created definition for nt(up) " }}{PARA 
+6 "" 1 "" {TEXT -1 48 "Calculated nt(up) for KerrNewman (0.000000 sec.
+)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG 
+{PARA 204 "> " 0 "" {MPLTEXT 1 200 50 "ntT:=simplify(grcomponent(nt(up
+), [t]), symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ntTG*(%&Gamm
+aG#\"\"\"\"\"#%&SigmaG#!\"\"F)%&DeltaGF+" }}}{EXCHG {PARA 204 "> " 0 "
+" {MPLTEXT 1 200 23 "grdefine(ntt, \{\}, ntT);" }}{PARA 6 "" 1 "" 
+{TEXT -1 26 "Created definition for ntt" }}}{EXCHG {PARA 200 "> " 0 "
+" {MPLTEXT 1 213 67 "grdefine( `EDensityt`, \{\}, `sqrt(-detg)*ntt*T\{
+a b\}*t\{^a\}*nt\{^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 32 "Created def
+inition for EDensityt" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+18 "grcalc(EDensityt);" }}{PARA 6 "" 1 "" {TEXT -1 45 "Calculated ntt \+
+for KerrNewman (0.000000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 51 "Calcula
+ted EDensityt for KerrNewman (0.028000 sec.)" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"#G!\"$" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 207 "grmap(EDensityt, subs, conjugate(r)=r,conjugate(a)
+=a,conjugate(q)=q,conjugate(e)=e, conjugate(theta)=theta, conjugate(Si
+gma)=Sigma,conjugate(Gamma)=Gamma,conjugate(Omega)=Omega,conjugate(Del
+ta)=Delta, 'x' ):" }}{PARA 6 "" 1 "" {TEXT -1 34 "Applying routine sub
+s to EDensityt" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 21 "gralt
+er(EDensityt,8);" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplificat
+ion of a GRTensorII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 
+6 "" 1 "" {TEXT -1 43 "Applying routine normal to object EDensityt" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 173 "Integrandust:=collect(expand(s
+implify(simplify(grcomponent(EDensityt)/sin(theta),symbolic),trigsin))
+,\{(diff(Phi,t)),(diff(Phi,r)),(diff(Phi,theta)),(diff(Phi,phi))\},fac
+tor);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%-IntegrandustG,,*&#\"\"\"\"
+\"#F(*&-%%diffG6$-%*conjugateG6#%$PhiG%&thetaGF(-F,6$F1F2F(F(F(*&#F(F)
+F(*,%&GammaGF(,&*&-F,6$F.%\"tGF(%&SigmaGF(!\"\"*,%\"qGF(%\"eGF(%\"rGF(
+F.F(^#F(F(F(F(F>F?%&DeltaGF?-F,6$F1F=F(F(F?*&F'F(*(FEF(-F,6$F.FCF(-F,6
+$F1FCF(F(F(*&F'F(*0,&*()F8F)F()%&OmegaGF)F()-%$sinG6#F2F)F(F?*&FEF()F>
+F)F(F(F(,&*&-F,6$F.%$phiGF(F>F(F(*0FAF(%\"aGF(FBF(FCF(FUF(F.F(FDF(F(F(
+F>F?FEF?F8F?FV!\"#-F,6$F1FinF(F(F(*&F'F(**,0*2FRF(FAF(FBF(FCF(F1F(F;F(
+F>F(FDF(F(*.FRF()FAF)F()FBF)F()FCF)F(F1F(F.F(F(*4FdoF()F[oF)F(FeoF(Ffo
+F()FV\"\"%F(F.F(FRF(FSF(F1F(F?**%\"VGF(F8F()F>\"\"$F(FEF(F(*4FdoF(FhoF
+(FeoF(FfoF(F.F(FEF(FZF(F1F(FUF(F(*4^#F?F(FgnF(F]pF(FEF(FAF(F[oF(FBF(FC
+F(F1F(F(*8FgnF(F>F(FRF(FSF(FAF(F[oF(FBF(FCF(FUF(F1F(FDF(F(F(F>F\\oFEF?
+F8F?F(F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 59 "After proper collecti
+on of terms, it becomes the following." }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 504 "IntegrandustHumanreadable:= 1/2*Gamma/Delta*conjugat
+e(diff(Phi, t))*diff(Phi, t) + 1/2*Delta*conjugate(diff(Phi, r))*diff(
+Phi, r) + 1/4*(LaplaceS2(conjugate(Phi)*Phi)-conjugate(LaplaceS2(Phi))
+*Phi-conjugate(Phi)*LaplaceS2(Phi)) - 1/2*a^2/Delta*conjugate(diff(Phi
+, phi))*diff(Phi, phi) + Gamma*q*e*r/(Sigma*Delta)*Im(conjugate(Phi)*d
+iff(Phi, t)) -  q*a*e*r*(Sigma+(e^2-2*M*r))/(Delta*Sigma)*Im(conjugate
+(Phi)*diff(Phi, phi)) -  1/2*q^2*e^2*r^2/Delta*(1-2*(r^2+a^2)/Sigma)*c
+onjugate(Phi)*Phi + 1/2*Sigma*V;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%
+:IntegrandustHumanreadableG,6*&#\"\"\"\"\"#F(**%&GammaGF(%&DeltaG!\"\"
+-%*conjugateG6#-%%diffG6$%$PhiG%\"tGF(F1F(F(F(*&F'F(*(F,F(-F/6#-F26$F4
+%\"rGF(F:F(F(F(*&#F(\"\"%F(-%*LaplaceS2G6#*&-F/6#F4F(F4F(F(F(*&#F(F?F(
+*&-F/6#-FA6#F4F(F4F(F(F-*&#F(F?F(*&FDF(FKF(F(F-*&#F(F)F(**%\"aGF)F,F--
+F/6#-F26$F4%$phiGF(FVF(F(F-*0F+F(%\"qGF(%\"eGF(F<F(%&SigmaGF-F,F--%#Im
+G6#*&FDF(F1F(F(F(*2FZF(FSF(FenF(F<F(,(FfnF(*$)FenF)F(F(*(F)F(%\"MGF(F<
+F(F-F(FfnF-F,F--Fhn6#*&FDF(FVF(F(F-*&#F(F)F(*0FZF)FenF)F<F)F,F-,&F(F(*
+(F)F(,&*$)F<F)F(F(*$)FSF)F(F(F(FfnF-F-F(FDF(F4F(F(F-*(F)F-FfnF(%\"VGF(
+F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 58 "Rechecking expression invol
+ving theta and phi derivatives." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 812 "Expression:=1/4*(LaplaceS2(conjugate(Phi)*Phi)-conjugate(Lapl
+aceS2(Phi))*Phi-conjugate(Phi)*LaplaceS2(Phi)): SimplifiedExpression:=
+simplify(subs(conjugate(LaplaceS2(Phi))=LaplaceS2(conjugate(Phi)), Lap
+laceS2(conjugate(Phi))=1/sin(theta)*diff(sin(theta)*diff(conjugate(Phi
+),theta),theta)+1/sin(theta)^2*diff(diff(conjugate(Phi),phi),phi),  La
+placeS2(Phi)=1/sin(theta)*diff(sin(theta)*diff(Phi,theta),theta)+1/sin
+(theta)^2*diff(diff(Phi,phi),phi), LaplaceS2(conjugate(Phi)*Phi)=1/sin
+(theta)*diff(sin(theta)*diff(conjugate(Phi)*Phi,theta),theta)+1/sin(th
+eta)^2*diff(diff(conjugate(Phi)*Phi,phi),phi), Expression)): Reference
+Expression:=1/2*diff(conjugate(Phi),theta)*diff(Phi,theta)+1/2*1/sin(t
+heta)^2*diff(conjugate(Phi),phi)*diff(Phi,phi): DifferenceExpression:=
+simplify(SimplifiedExpression-ReferenceExpression);" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" }}}{EXCHG {PARA 0 "" 
+0 "" {TEXT -1 37 "Rechecking energy density expression." }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 1202 "Expression:=IntegrandustHumanread
+able: SimplifiedExpression:=simplify(subs(conjugate(LaplaceS2(Phi))=La
+placeS2(conjugate(Phi)), LaplaceS2(conjugate(Phi))=1/sin(theta)*diff(s
+in(theta)*diff(conjugate(Phi),theta),theta)+1/sin(theta)^2*diff(diff(c
+onjugate(Phi),phi),phi),  LaplaceS2(Phi)=1/sin(theta)*diff(sin(theta)*
+diff(Phi,theta),theta)+1/sin(theta)^2*diff(diff(Phi,phi),phi), Laplace
+S2(conjugate(Phi)*Phi)=1/sin(theta)*diff(sin(theta)*diff(conjugate(Phi
+)*Phi,theta),theta)+1/sin(theta)^2*diff(diff(conjugate(Phi)*Phi,phi),p
+hi),  conjugate(diff(Phi, t))=diff(conjugate(Phi), t), conjugate(diff(
+Phi, r))=diff(conjugate(Phi), r), conjugate(diff(Phi, theta))=diff(con
+jugate(Phi), theta), conjugate(diff(Phi, phi))=diff(conjugate(Phi), ph
+i), Im(conjugate(Phi)*diff(Phi, phi))=1/(2*I)*(conjugate(Phi)*diff(Phi
+, phi)-Phi*diff(conjugate(Phi), phi)),  Im(conjugate(Phi)*diff(Phi, t)
+)=1/(2*I)*(conjugate(Phi)*diff(Phi, t)-Phi*diff(conjugate(Phi), t)), E
+xpression)): ReferenceExpression:=Integrandust: DifferenceExpression:=
+simplify(subs(Omega=a*(2*M*r-e^2)/Gamma, Gamma=(r^2+a^2)^2-a^2*Delta*s
+in(theta)^2, Sigma=r^2+a^2*cos(theta)^2, Delta=r^2+a^2+e^2-2*M*r, simp
+lify(SimplifiedExpression-ReferenceExpression)));" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" }}}{EXCHG {PARA 0 "" 0 "
+" {TEXT -1 166 "Now transform the energy density integrandus to tortoi
+se coordinates r_\{*\}, phi^\{~\}. The transformed integrandus shall b
+e denoted by IntegransustT (T -- transformed)." }}}{EXCHG {PARA 0 "> \+
+" 0 "" {MPLTEXT 1 0 198 "IntegrandustAltered:=subs(conjugate(diff(Phi,
+t))=diff(conjugate(Phi),t), conjugate(diff(Phi,r))=diff(conjugate(Phi)
+,r), conjugate(diff(Phi,phi))=diff(conjugate(Phi),phi), IntegrandustHu
+manreadable);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%4IntegrandustAltere
+dG,6*&#\"\"\"\"\"#F(**%&GammaGF(%&DeltaG!\"\"-%%diffG6$-%*conjugateG6#
+%$PhiG%\"tGF(-F/6$F4F5F(F(F(*&F'F(*(F,F(-F/6$F1%\"rGF(-F/6$F4F<F(F(F(*
+&#F(\"\"%F(-%*LaplaceS2G6#*&F1F(F4F(F(F(*&#F(FAF(*&-F26#-FC6#F4F(F4F(F
+(F-*&#F(FAF(*&F1F(FKF(F(F-*&#F(F)F(**%\"aGF)F,F--F/6$F1%$phiGF(-F/6$F4
+FVF(F(F-*0F+F(%\"qGF(%\"eGF(F<F(%&SigmaGF-F,F--%#ImG6#*&F1F(F6F(F(F(*2
+FZF(FSF(FenF(F<F(,(FfnF(*$)FenF)F(F(*(F)F(%\"MGF(F<F(F-F(FfnF-F,F--Fhn
+6#*&F1F(FWF(F(F-*&#F(F)F(*0FZF)FenF)F<F)F,F-,&F(F(*(F)F(,&*$)F<F)F(F(*
+$)FSF)F(F(F(FfnF-F-F(F1F(F4F(F(F-*(F)F-FfnF(%\"VGF(F(" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 175 "IntegrandustT:=Delta/(r^2+a^2)*con
+vert(simplify(subs(Phi=PhiT(t, Rstar, theta, Phitilde), conjugate(Phi)
+=conjugate(PhiT)(t, Rstar, theta, Phitilde), IntegrandustAltered)), D)
+;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%.IntegrandustTG,$*&#\"\"\"\"\"%
+F(*(,&*$)%\"rG\"\"#F(F(*$)%\"aGF/F(F(!\"\",>*,F/F(%&GammaGF(--&%\"DG6#
+F(6#-%*conjugateG6#%%PhiTG6&%\"tG%&RstarG%&thetaG%)PhitildeGF(--F96#F@
+FAF(%&SigmaGF(F(*,F/F()%&DeltaGF/F(,&*&--&F:6#F/F<FAF(--F:6#FC6#F.F(F(
+*&--&F:6#F)F<FAF(--F96#FE6$F.%$phiGF(F(F(,&*&--FQFHFAF(FSF(F(*&--FZFHF
+AF(FfnF(F(F(FIF(F(*(-%*LaplaceS2G6#*&-F=FAF(-F@FAF(F(FIF(FLF(F(**-F>6#
+-Fdo6#FhoF(FhoF(FIF(FLF(F3**FgoF(F\\pF(FIF(FLF(F3*.F/F(F1F(FXF()--FQFh
+nFinF/F(F`oF(FIF(F3*.F)F(F6F(%\"qGF(%\"eGF(F.F(-%#ImG6#*&FgoF(FFF(F(F(
+*0F)F(FdpF(F2F(FepF(F.F(-Fgp6#*(FgoF(F`oF(FapF(F(FIF(F3*.F)F(FdpF(F2F(
+)Fep\"\"$F(F.F(F[qF(F3*0\"\")F(FdpF(F2F(FepF(F-F(F[qF(%\"MGF(F(*0F/F()
+FdpF/F()FepF/F(F-F(FgoF(FhoF(FIF(F3*.F)F(FeqF(FfqF()F.F)F(FgoF(FhoF(F(
+*0F)F(FeqF(FfqF(F-F(FgoF(FhoF(F1F(F(**F/F()FIF/F(%\"VGF(FLF(F(F(FIF3F(
+F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "IntegrandustTSimplifi
+ed:=convert(IntegrandustT, diff);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>
+%8IntegrandustTSimplifiedG,$*&#\"\"\"\"\"%F(*(,&*$)%\"rG\"\"#F(F(*$)%
+\"aGF/F(F(!\"\",>*,F/F(%&GammaGF(--&%\"DG6#F(6#-%*conjugateG6#%%PhiTG6
+&%\"tG%&RstarG%&thetaG%)PhitildeGF(--F96#F@FAF(%&SigmaGF(F(*,F/F()%&De
+ltaGF/F(,&*&--&F:6#F/F<FAF(-%%diffG6$FCF.F(F(*&--&F:6#F)F<FAF(-FT6$FEF
+.F(F(F(,&*&--FQFHFAF(FSF(F(*&--FYFHFAF(FenF(F(F(FIF(F(*(-%*LaplaceS2G6
+#*&-F=FAF(-F@FAF(F(FIF(FLF(F(**-F>6#-F`o6#FdoF(FdoF(FIF(FLF(F3**FcoF(F
+hoF(FIF(FLF(F3*.F/F(F1F(FWF()-FT6$FE%$phiGF/F(F\\oF(FIF(F3*.F)F(F6F(%
+\"qGF(%\"eGF(F.F(-%#ImG6#*&FcoF(FFF(F(F(*0F)F(FapF(F2F(FbpF(F.F(-Fdp6#
+*(FcoF(F\\oF(F]pF(F(FIF(F3*.F)F(FapF(F2F()Fbp\"\"$F(F.F(FhpF(F3*0\"\")
+F(FapF(F2F(FbpF(F-F(FhpF(%\"MGF(F(*0F/F()FapF/F()FbpF/F(F-F(FcoF(FdoF(
+FIF(F3*.F)F(FbqF(FcqF()F.F)F(FcoF(FdoF(F(*0F)F(FbqF(FcqF(F-F(FcoF(FdoF
+(F1F(F(**F/F()FIF/F(%\"VGF(FLF(F(F(FIF3F(F(" }}}{EXCHG {PARA 0 "> " 0 
+"" {MPLTEXT 1 0 135 "IntegrandustTSimplified2:=subs(diff(Phitilde,phi)
+=1, diff(Phitilde,r)=a/Delta, diff(Rstar,r)=(r^2+a^2)/Delta, Integrand
+ustTSimplified);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%9IntegrandustTSi
+mplified2G,$*&#\"\"\"\"\"%F(*(,&*$)%\"rG\"\"#F(F(*$)%\"aGF/F(F(!\"\",>
+*,F/F(%&GammaGF(--&%\"DG6#F(6#-%*conjugateG6#%%PhiTG6&%\"tG%&RstarG%&t
+hetaG%)PhitildeGF(--F96#F@FAF(%&SigmaGF(F(*,F/F()%&DeltaGF/F(,&*(--&F:
+6#F/F<FAF(F+F(FLF3F(*(--&F:6#F)F<FAF(F2F(FLF3F(F(,&*(--FQFHFAF(F+F(FLF
+3F(*(--FVFHFAF(F2F(FLF3F(F(FIF(F(*(-%*LaplaceS2G6#*&-F=FAF(-F@FAF(F(FI
+F(FLF(F(**-F>6#-F[o6#F_oF(F_oF(FIF(FLF(F3**F^oF(FcoF(FIF(FLF(F3*,F/F(F
+1F(FTF(FgnF(FIF(F3*.F)F(F6F(%\"qGF(%\"eGF(F.F(-%#ImG6#*&F^oF(FFF(F(F(*
+0F)F(FhoF(F2F(FioF(F.F(-F[p6#*&F^oF(FgnF(F(FIF(F3*.F)F(FhoF(F2F()Fio\"
+\"$F(F.F(F_pF(F3*0\"\")F(FhoF(F2F(FioF(F-F(F_pF(%\"MGF(F(*0F/F()FhoF/F
+()FioF/F(F-F(F^oF(F_oF(FIF(F3*.F)F(FipF(FjpF()F.F)F(F^oF(F_oF(F(*0F)F(
+FipF(FjpF(F-F(F^oF(F_oF(F1F(F(**F/F()FIF/F(%\"VGF(FLF(F(F(FIF3F(F(" }}
+}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 537 "IntegrandustTSimplified3:=
+subs(D[1](conjugate(PhiT))(t,Rstar,theta,Phitilde)=conjugate(diff(PhiT
+, t)), D[1](PhiT)(t,Rstar,theta,Phitilde)=diff(PhiT, t), D[2](conjugat
+e(PhiT))(t,Rstar,theta,Phitilde)=conjugate(diff(PhiT, rstar)), D[2](Ph
+iT)(t,Rstar,theta,Phitilde)=diff(PhiT, rstar), D[4](conjugate(PhiT))(t
+,Rstar,theta,Phitilde)=conjugate(diff(PhiT, phitilde)), D[4](PhiT)(t,R
+star,theta,Phitilde)=diff(PhiT, phitilde), conjugate(PhiT)(t,Rstar,the
+ta,Phitilde)=conjugate(PhiT), PhiT(t,Rstar,theta,Phitilde)=PhiT, Integ
+randustTSimplified2);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%9Integrandu
+stTSimplified3G,$*&#\"\"\"\"\"%F(*(,&*$)%\"rG\"\"#F(F(*$)%\"aGF/F(F(!
+\"\",>*,F/F(%&GammaGF(-%*conjugateG6#-%%diffG6$%%PhiTG%\"tGF(F:F(%&Sig
+maGF(F(*,F/F()%&DeltaGF/F(,&*(-F86#-F;6$F=%&rstarGF(F+F(FBF3F(*(-F86#-
+F;6$F=%)phitildeGF(F2F(FBF3F(F(,&*(FGF(F+F(FBF3F(*(FMF(F2F(FBF3F(F(F?F
+(F(*(-%*LaplaceS2G6#*&-F86#F=F(F=F(F(F?F(FBF(F(**-F86#-FU6#F=F(F=F(F?F
+(FBF(F3**FXF(FgnF(F?F(FBF(F3*,F/F(F1F(FKF(FMF(F?F(F3*.F)F(F6F(%\"qGF(%
+\"eGF(F.F(-%#ImG6#*&FXF(F:F(F(F(*0F)F(F\\oF(F2F(F]oF(F.F(-F_o6#*&FXF(F
+MF(F(F?F(F3*.F)F(F\\oF(F2F()F]o\"\"$F(F.F(FcoF(F3*0\"\")F(F\\oF(F2F(F]
+oF(F-F(FcoF(%\"MGF(F(*0F/F()F\\oF/F()F]oF/F(F-F(FXF(F=F(F?F(F3*.F)F(F]
+pF(F^pF()F.F)F(FXF(F=F(F(*0F)F(F]pF(F^pF(F-F(FXF(F=F(F1F(F(**F/F()F?F/
+F(%\"VGF(FBF(F(F(F?F3F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+598 "IntegrandustTHumanreadable:=1/2*Gamma/(r^2+a^2)*conjugate(diff(Ph
+iT,t))*diff(PhiT,t)+1/2*(r^2+a^2)*conjugate(diff(PhiT,rstar))*diff(Phi
+T,rstar)+a*Re(conjugate(diff(PhiT,rstar))*diff(PhiT,phitilde))+1/4*Del
+ta/(r^2+a^2)*LaplaceS2(conjugate(PhiT)*PhiT)-1/4*Delta/(r^2+a^2)*conju
+gate(LaplaceS2(PhiT))*PhiT-1/4*Delta/(r^2+a^2)*conjugate(PhiT)*Laplace
+S2(PhiT)+q*e*r*Gamma/((r^2+a^2)*Sigma)*Im(conjugate(PhiT)*diff(PhiT,t)
+)-q*e*a*r/((r^2+a^2)*Sigma)*(Sigma+e^2-2*M*r)*Im(conjugate(PhiT)*diff(
+PhiT,phitilde))-1/2*q^2*e^2*r^2/(r^2+a^2)*(1-2*(r^2+a^2)/Sigma)*conjug
+ate(PhiT)*PhiT+1/2*Delta/(r^2+a^2)*Sigma*V;" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%;IntegrandustTHumanreadableG,6*&#\"\"\"\"\"#F(**%&Gam
+maGF(,&*$)%\"rGF)F(F(*$)%\"aGF)F(F(!\"\"-%*conjugateG6#-%%diffG6$%%Phi
+TG%\"tGF(F7F(F(F(*&F'F(*(F,F(-F56#-F86$F:%&rstarGF(F@F(F(F(*&F2F(-%#Re
+G6#*&F>F(-F86$F:%)phitildeGF(F(F(*&#F(\"\"%F(*(%&DeltaGF(F,F3-%*Laplac
+eS2G6#*&-F56#F:F(F:F(F(F(F(*&#F(FMF(**FOF(F,F3-F56#-FQ6#F:F(F:F(F(F3*&
+#F(FMF(**FOF(F,F3FTF(FenF(F(F3*0%\"qGF(%\"eGF(F/F(F+F(F,F3%&SigmaGF3-%
+#ImG6#*&FTF(F7F(F(F(*2F[oF(F\\oF(F2F(F/F(F,F3F]oF3,(F]oF(*$)F\\oF)F(F(
+*(F)F(%\"MGF(F/F(F3F(-F_o6#*&FTF(FHF(F(F3*&#F(F)F(*0F[oF)F\\oF)F/F)F,F
+3,&F(F(*(F)F(F,F(F]oF3F3F(FTF(F:F(F(F3*,F)F3FOF(F,F3F]oF(%\"VGF(F(" }}
+}{EXCHG {PARA 0 "" 0 "" {TEXT -1 63 "Rechecking human readable transfo
+rmed energy density integrand." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 1389 "Expression:=IntegrandustTHumanreadable: SimplifiedExpression
+:=simplify(subs(conjugate(diff(PhiT, t))=diff(conjugate(PhiT), t), con
+jugate(diff(PhiT, rstar))=diff(conjugate(PhiT), rstar), conjugate(diff
+(PhiT, phitilde))=diff(conjugate(PhiT), phitilde), Im(conjugate(PhiT)*
+diff(PhiT, phitilde))=1/(2*I)*(conjugate(PhiT)*diff(PhiT, phitilde)-Ph
+iT*diff(conjugate(PhiT), phitilde)),  Im(conjugate(PhiT)*diff(PhiT, t)
+)=1/(2*I)*(conjugate(PhiT)*diff(PhiT, t)-PhiT*diff(conjugate(PhiT), t)
+), Re(diff(conjugate(PhiT),rstar)*diff(PhiT,phitilde))=1/2*(diff(conju
+gate(PhiT),rstar)*diff(PhiT,phitilde)+diff(PhiT,rstar)*diff(conjugate(
+PhiT),phitilde)), Expression)): ReferenceExpression:=simplify(subs(con
+jugate(diff(PhiT, t))=diff(conjugate(PhiT), t), conjugate(diff(PhiT, r
+star))=diff(conjugate(PhiT), rstar), conjugate(diff(PhiT, phitilde))=d
+iff(conjugate(PhiT), phitilde), Im(conjugate(PhiT)*diff(PhiT, phitilde
+))=1/(2*I)*(conjugate(PhiT)*diff(PhiT, phitilde)-PhiT*diff(conjugate(P
+hiT), phitilde)),  Im(conjugate(PhiT)*diff(PhiT, t))=1/(2*I)*(conjugat
+e(PhiT)*diff(PhiT, t)-PhiT*diff(conjugate(PhiT), t)), Re(diff(conjugat
+e(PhiT),rstar)*diff(PhiT,phitilde))=1/2*(diff(conjugate(PhiT),rstar)*d
+iff(PhiT,phitilde)+diff(PhiT,rstar)*diff(conjugate(PhiT),phitilde)), I
+ntegrandustTSimplified3)): DifferenceExpression:=simplify(expand(subs(
+Delta=r^2+a^2+e^2-2*M*r, SimplifiedExpression-ReferenceExpression)));
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 209 "" 0 "
+" {TEXT 262 59 "===== Calculation of energy flow on r=const surfaces. \+
+=====" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 54 "grdef ( `nr\{a
+\} := [ 0, 1, 0, 0 ]` ): grcalc( nr(dn) );" }}{PARA 6 "" 1 "" {TEXT 
+-1 42 "Components assigned for metric: KerrNewman" }}{PARA 6 "" 1 "" 
+{TEXT -1 29 "Created definition for nr(dn)" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 27 "grnormalize ( nr(dn), -1 );" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#%LThe~components~of~the~normalized~vector~areG" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%\"tG\"\"!" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/)%#nrG%\"rG*&\"\"\"F(*$*&%&DeltaGF(%&SigmaG!\"\"#F(\"
+\"#F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%&thetaG\"\"!" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%$phiG\"\"!" }}{PARA 6 "" 1 "" 
+{TEXT -1 67 "Do you wish to overwrite nr(dn) with the normalized vecto
+r? (1=yes)" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}}{EXCHG {PARA 200 "grnor
+malize>" 0 "" {MPLTEXT 1 213 2 "1;" }}{PARA 6 "" 1 "" {TEXT -1 28 "nr(
+dn) has been overwritten." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+15 "grcalc(nr(up));" }}{PARA 6 "" 1 "" {TEXT -1 30 "Created definition
+ for nr(up) " }}{PARA 6 "" 1 "" {TEXT -1 48 "Calculated nr(up) for Ker
+rNewman (0.000000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time
+~G$\"\"!F&" }}}{EXCHG {PARA 204 "> " 0 "" {MPLTEXT 1 200 50 "nrR:=simp
+lify(grcomponent(nr(up), [r]), symbolic);" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#>%$nrRG,$*&%&DeltaG#\"\"\"\"\"#%&SigmaG#!\"\"F*F-" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 29 "grdefine( `nrr`, \{\}, `
+nrR` );" }}{PARA 6 "" 1 "" {TEXT -1 26 "Created definition for nrr" }}
+}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 64 "grdefine( `EFlowr`, \{
+\}, `sqrt(-detg)*nrr*T\{a b\}*t\{^a\}*nr\{^b\}` );" }}{PARA 6 "" 1 "" 
+{TEXT -1 29 "Created definition for EFlowr" }}}{EXCHG {PARA 200 "> " 
+0 "" {MPLTEXT 1 213 15 "grcalc(EFlowr);" }}{PARA 6 "" 1 "" {TEXT -1 
+45 "Calculated nrr for KerrNewman (0.000000 sec.)" }}{PARA 6 "" 1 "" 
+{TEXT -1 48 "Calculated EFlowr for KerrNewman (0.008000 sec.)" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\")!\"$" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 18 "gralter(EFlowr,1);" }}{PARA 6 "
+" 1 "" {TEXT -1 48 "Component simplification of a GRTensorII object:" 
+}}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 42 "Applyin
+g routine simplify to object EFlowr" }}{PARA 11 "" 1 "" {XPPMATH 20 "6
+#/%*CPU~Time~G$\"#;!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+64 "Integrandusr:=simplify(grcomponent(EFlowr)/sin(theta),symbolic);" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%-IntegrandusrG,$*&#\"\"\"\"\"#F(*(
+%&DeltaGF(,**(-%%diffG6$-%*conjugateG6#%$PhiG%\"rGF(-F/6$F4%\"tGF(%&Si
+gmaGF(!\"\"*.^#F:F(F.F(%\"qGF(%\"eGF(F5F(F4F(F(*(-F/6$F4F5F(-F/6$F1F8F
+(F9F(F:*.F@F(F=F(F>F(F5F(F1F(^#F(F(F(F(F9F:F(F:" }}}{EXCHG {PARA 256 "
+" 0 "" {TEXT 263 59 "===== Calculation of energy current flow vector f
+ield =====" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "grdefine( `EC
+t\{^a\}`, \{\}, `T\{^a b\}*t\{^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 32 
+"Created definition for T(up,dn) " }}{PARA 6 "" 1 "" {TEXT -1 30 "Crea
+ted definition for ECt(up)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+16 "grcalc(ECt(up));" }}{PARA 6 "" 1 "" {TEXT -1 50 "Calculated T(up,d
+n) for KerrNewman (0.076000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 49 "Calc
+ulated ECt(up) for KerrNewman (0.008000 sec.)" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"#%)!\"$" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 19 "grdisplay(ECt(up));" }}{PARA 11 "" 1 "" {XPPMATH 20 "
+6#%>For~the~KerrNewman~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#
+%(ECt(up)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$ECtG6#%#upG" }}{PARA 
+12 "" 1 "" {XPPMATH 20 "6#/)%$ECtG%\"tG,$*&#\"\"\"\"\"#F**,,Z**-%%diff
+G6$-%*conjugateG6#%$PhiG%$phiGF*)%&SigmaG\"\"%F*%&DeltaGF*-F06$F5F6F*F
+**8^#!\"\"F*%\"qGF*%\"aGF*%\"eGF*%\"rGF*)-%$sinG6#%&thetaGF+F*F2F*)%&G
+ammaGF+F*)%&OmegaGF+F*F;F*F8F*F**4F>F*FIF*FDF*-F06$F5%\"tGF*F8F*F@F*FB
+F*FCF*F2F*F**.-F06$F2FCF*)F:F+F*-F06$F5FCF*FJF*FDF*)F8F+F*F**.FRF*F:F*
+FUF*)FJ\"\"$F*FDF*FKF*F?*0FRF*F:F*FUF*FYF*FDF*FKF*)-%$cosGFGF+F*F**.FR
+F*F:F*FUF*FYF*)FEF9F*FKF*F**,%\"VGF*FJF*)F8FZF*FDF*F:F*F**,F\\oF*FYF*F
+8F*FDF*FKF*F?*.F\\oF*FYF*F8F*FDF*FKF*FfnF*F**,F\\oF*FYF*F8F*FjnF*FKF*F
+**6F>F*F/F*F]oF*F:F*F@F*FAF*FBF*FCF*FDF*F5F*F**:F>F*F/F*F8F*FIF*FKF*Ff
+nF*F@F*FAF*FBF*FCF*FDF*F5F*F**8F/F*F8F*FIF*FKF*F@F*FAF*FBF*FCF*FDF*F5F
+*^#F*F*F**6F@F*FAF*FBF*FCF*FDF*F2F*F:F*F]oF*F;F*FdoF*F**4)F@F+F*)FAF+F
+*)FBF+F*)FCF+F*FjnF*F2F*F:F*FWF*F5F*F**4FgoF*FhoF*FioF*FjoF*FjnF*F2F*F
+IF*FKF*F5F*F?*:F@F*FAF*FBF*FCF*FDF*F2F*FIF*FKF*FfnF*F;F*F8F*FdoF*F**6F
+goF*FhoF*FioF*FjoF*FjnF*F2F*FIF*FKF*FfnF*F5F*F**,FIF*FDF*FNF*FWF*-F06$
+F2FPF*F**4FIF*FDF*F@F*FBF*FCF*F5F*F_pF*F8F*FdoF*F**0FIF*FDF*FgoF*FioF*
+FjoF*F5F*F2F*F**,-F06$F2FHF*-F06$F5FHF*FYF*FDF*FKF*F?*.FdpF*FfpF*FJF*F
+DF*F:F*FWF*F**.FdpF*FfpF*FYF*FDF*FKF*FfnF*F**,FdpF*FfpF*FYF*FjnF*FKF*F
+**,F/F*FWF*FIF*FKF*F;F*F?*.F/F*FWF*FIF*FKF*FfnF*F;F*F*F*FE!\"#,**&F:F*
+FWF*F**&FIF*FKF*F?*(FIF*FKF*FfnF*F**(FIF*FKF*FDF*F*F?FJF?F8F?F*F*" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%$ECtG%\"rG,$*&#\"\"\"\"\"#F**(%&Del
+taGF*%&SigmaG!\"#,**(-%%diffG6$-%*conjugateG6#%$PhiG%\"rGF*-F36$F8%\"t
+GF*F.F*F**.F2F*%\"qGF*%\"eGF*F9F*F8F*^#F*F*F**(-F36$F8F9F*-F36$F5F<F*F
+.F*F**.^#!\"\"F*FBF*F>F*F?F*F9F*F5F*F*F*F*FH" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/)%$ECtG%&thetaG,$*&#\"\"\"\"\"#F**&%&SigmaG!\"#,**(-%%
+diffG6$-%*conjugateG6#%$PhiG%&thetaGF*-F26$F7%\"tGF*F-F*F**.F1F*%\"qGF
+*%\"eGF*%\"rGF*F7F*^#F*F*F**(-F26$F7F8F*-F26$F4F;F*F-F*F**.^#!\"\"F*FB
+F*F=F*F>F*F?F*F4F*F*F*F*FH" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/)%$ECtG
+%$phiG,$*&#\"\"\"\"\"#F**,,T*8F+F*)%\"qGF+F*)%\"eGF+F*)%\"rGF+F*%$PhiG
+F*%\"aGF*)-%$sinG6#%&thetaGF+F*-%*conjugateG6#F5F*)%&GammaGF+F*)%&Omeg
+aGF+F*)-%$cosGF:F+F*F**6F+F*F/F*F1F*F3F*F5F*F6F*F7F*F<F*%&DeltaGF*)%&S
+igmaGF+F*F**6F+F*F/F*F1F*F3F*F5F*F6F*F7F*F<F*F?F*FAF*!\"\"**-%%diffG6$
+F5%\"tGF*)FI\"\"%F*-FN6$F<%$phiGF*FGF*FK**-FN6$F5FUF*FQF*-FN6$F<FPF*FG
+F*FK*2FWF*)FI\"\"$F*F0F*F2F*F4F*F<F*FGF*^#F*F*F**.FWF*FHF*FYF*F?F*FAF*
+FCF*FK*0F+F*F?F*FBF*F7F*FMF*FHF*FYF*F**4F+F*F?F*FBF*F7F*F/F*F1F*F3F*F5
+F*F<F*F**4F0F*F2F*F4F*F5F*FSF*FIF*F?F*FAF*FhnF*F**6F0F*F6F*F2F*F4F*F7F
+*F5F*FYF*FfnF*FGF*FhnF*F**6FWF*FIF*F0F*F2F*F4F*F<F*F?F*FAF*FCF*FhnF*F*
+*:F0F*F6F*F2F*F4F*F7F*F5F*FYF*FIF*F?F*FAF*FCF*FhnF*F**8FMF*FIF*F0F*F6F
+*F2F*F4F*F7F*F<F*F?F*FAF*FhnF*F**6^#!\"#F*F?F*FBF*F7F*FMF*FIF*F0F*F2F*
+F4F*F<F*F**6^#FKF*FMF*FfnF*F0F*F6F*F2F*F4F*F7F*F<F*FGF*F**6^#F+F*F?F*F
+BF*F7F*F0F*F2F*F4F*F5F*FYF*FIF*F**:FeoF*FMF*FIF*F0F*F6F*F2F*F4F*F7F*F<
+F*F?F*FAF*FCF*F**8FeoF*F0F*F6F*F2F*F4F*F7F*F5F*FYF*FIF*F?F*FAF*F**6Feo
+F*F0F*F2F*F4F*F5F*FSF*FIF*F?F*FAF*FCF*F**4FeoF*FWF*FIF*F0F*F2F*F4F*F<F
+*F?F*FAF*F**2FeoF*F0F*F2F*F4F*F5F*FSF*FfnF*FGF*F**,FWF*FHF*FYF*F?F*FAF
+*F**,FMF*FHF*FSF*F?F*FAF*F**.FMF*FHF*FSF*F?F*FAF*FCF*FKF*F8Fco,**&FGF*
+FHF*F**&F?F*FAF*FK*(F?F*FAF*FCF*F**(F?F*FAF*F7F*F*FKF@FKFIFKF*F*" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 67 "Jtt:=simplify(simplify(grcom
+ponent(ECt(up),[t]),trigsin),symbolic);" }}{PARA 12 "" 1 "" {XPPMATH 
+20 "6#>%$JttG,$*&#\"\"\"\"\"#F(*,,@**-%%diffG6$-%*conjugateG6#%$PhiG%$
+phiGF()%&SigmaG\"\"%F(%&DeltaGF(-F.6$F3F4F(!\"\"*8%\"qGF(%\"aGF(%\"eGF
+(%\"rGF()-%$sinG6#%&thetaGF7F(F0F()%&GammaGF)F()%&OmegaGF)F(F9F(F6F(^#
+F(F(F(*.-F.6$F0F@F()F8F)F(-F.6$F3F@F(FGF()FBF)F()F6F)F(F;*,%\"VGF(FGF(
+)F6\"\"$F(FQF(F8F(F;*4^#F;F(FFF(FQF(F=F(F?F(F@F(F3F(-F.6$F0%\"tGF(F6F(
+F(*.F9F(FRF(F-F(FFF(FHF(FQF(F(*6FXF(F=F(F>F(F?F(F@F(FQF(F0F(F8F(FUF(F9
+F(F(*4)F=F)F()F>F)F()F?F)F()F@F)F()FB\"\"'F(F3F(F0F(FFF(FHF(F(*4FFF(FQ
+F(-F.6$F3FenF(F6F(F=F(F?F(F@F(F0F(FJF(F(*6F-F(FUF(F8F(F=F(F>F(F?F(F@F(
+FQF(F3F(FJF(F(*4FinF(FjnF(F[oF(F\\oF(FAF(F0F(F8F(FRF(F3F(F;*,FFF(FQF(F
+`oF(FRF(FYF(F;*8FXF(F-F(F6F(FFF(FHF(F=F(F>F(F?F(F@F(FAF(F3F(F(*0FFF(FQ
+F(FinF(F[oF(F\\oF(F3F(F0F(F;*.-F.6$F0FEF(-F.6$F3FEF(FGF(FQF(F8F(FRF(F;
+F(FB!\"#FGF;F6!\"$F8F;F(F;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+49 "Jtr:=simplify(grcomponent(ECt(up),[r]),symbolic);" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#>%$JtrG,$*&#\"\"\"\"\"#F(*(%&DeltaGF(%&SigmaG!\"#,
+**(-%%diffG6$-%*conjugateG6#%$PhiG%\"rGF(-F16$F6%\"tGF(F,F(F(*.F0F(%\"
+qGF(%\"eGF(F7F(F6F(^#F(F(F(*(-F16$F6F7F(-F16$F3F:F(F,F(F(*.^#!\"\"F(F@
+F(F<F(F=F(F7F(F3F(F(F(F(FF" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+57 "Jttheta:=simplify(grcomponent(ECt(up),[theta]),symbolic);" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(JtthetaG,$*&#\"\"\"\"\"#F(*&,**(-%%
+diffG6$-%*conjugateG6#%$PhiG%&thetaGF(-F.6$F3%\"tGF(%&SigmaGF(!\"\"*.^
+#F9F(F-F(%\"qGF(%\"eGF(%\"rGF(F3F(F(*(-F.6$F3F4F(-F.6$F0F7F(F8F(F9*.F@
+F(F<F(F=F(F>F(F0F(^#F(F(F(F(F8!\"#F(F(" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 159 "Jtphi:=collect(expand(simplify(simplify(grcomponent(
+ECt(up),[phi]),trigsin),symbolic)),\{(diff(Phi,t)),(diff(Phi,r)),(diff
+(Phi,theta)),(diff(Phi,phi))\},factor);" }}{PARA 12 "" 1 "" {XPPMATH 
+20 "6#>%&JtphiG,(*&#\"\"\"\"\"#F(*.,.*.F)F()%&GammaGF)F(%&OmegaGF(-%%d
+iffG6$-%*conjugateG6#%$PhiG%\"tGF(%&SigmaGF()-%$sinG6#%&thetaGF)F(F(*,
+F-F(-F16$F3%$phiGF()F/F)F(F8F(F9F(F(*()F8\"\"$F(F?F(%&DeltaGF(!\"\"*2^
+#!\"#F(F-F(F/F(%\"qGF(%\"eGF(%\"rGF(F3F(F9F(F(*4)F:\"\"%F(F-F(FKF(%\"a
+GF(FLF(FMF(F3F(FBF(^#F(F(F(*4^#FGF(FKF(FQF(FLF(FMF(F3F()F8F)F(FFF(F9F(
+F(F(F8FJFFFGF:FJF.FG-F16$F6F7F(F(F(*&#F(F)F(*0,&*(F-F(FBF(F9F(F(*&FFF(
+FUF(FGF(,&*&F0F(F8F(FG*,FKF(FLF(FMF(F3F(FRF(F(F(F8FJFFFGF:FJF.FG-F16$F
+6FAF(F(FG*&#F(F)F(*4FKF(FLF(FMF(F6F(,2*4F)F(FKF(FLF(FMF(FQF(F3F(FUF(FF
+F(F9F(FG*.FTF(F-F(F?F(FBF(F8F(F9F(F(*2F)F(F-F(F/F(FKF(FLF(FMF(F3F(F9F(
+FG*.FIF(F-F(F/F(F0F(F8F(F9F(F(*.FTF(FQF(F0F(FDF(FFF(F9F(F(*4F)F(FOF(F-
+F(FKF(FLF(FMF(FQF(F3F(FBF(F(*0FOF(F-F(FQF(F0F(FBF(F8F(FRF(F(**F?F(FDF(
+FFF(FRF(F(F(F.FGF8!\"$FFFGF:FJF(FG" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 21 "with(CodeGeneration);" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#7,%\"CG%(FortranG%1IntermediateCodeG%%JavaG%3LanguageDefinitionG
+%'MatlabG%&NamesG%%SaveG%*TranslateG%,VisualBasicG" }}}{EXCHG {PARA 0 
+"> " 0 "" {MPLTEXT 1 0 29 "ssystem(\"rm -f eval_jphi.c\");" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#7$\"\"!Q!6\"" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 451 "C(subs(diff(conjugate(Phi), t)=conjugate(Ft),diff(co
+njugate(Phi), r)=conjugate(Fr),diff(conjugate(Phi), theta)=conjugate(s
+inthetaFtheta)/sintheta,diff(conjugate(Phi), phi)=conjugate(Fphi),diff
+(Phi, t)=Ft,diff(Phi, r)=Fr,diff(Phi, theta)=sinthetaFtheta/sintheta,d
+iff(Phi, phi)=Fphi,conjugate(Phi)=conjugate(F),Phi=F,sin(theta)=sinthe
+ta,Omega=Omega_,Gamma=Gamma_,Sigma=Sigma_,I=GI,[jphi=Jtphi]), deducety
+pes=false, optimize=false, output=\"eval_jphi.c\");" }}{PARA 7 "" 1 "
+" {TEXT -1 89 "Warning, the function names \{conjugate, Delta\} are no
+t recognized in the target language\n" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 67 "subs(\{q=0,e=0,Omega=0,Sigma=r^2,Gamma=r^4\},Jtphi)[q
+=0,e=0,a=0,M=0];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#&,&*&#\"\"\"\"\"#F
+'**%\"rG!\"#-%%diffG6$-%*conjugateG6#%$PhiG%$phiGF'-%$sinG6#%&thetaGF+
+-F-6$F2%\"tGF'F'!\"\"*&#F'F(F'**F*F+-F-6$F/F:F'F4F+-F-6$F2F3F'F'F;6&/%
+\"qG\"\"!/%\"eGFF/%\"aGFF/%\"MGFF" }}}{EXCHG {PARA 257 "" 0 "" {TEXT 
+264 58 "===== Energy current vectorfield with respect to nt  =====" }}
+}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "grdefine( `ECnt\{^a\}`, \{
+\}, `T\{^a b\}*nt\{^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 31 "Created de
+finition for ECnt(up)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "gr
+calc(ECnt(up));" }}{PARA 6 "" 1 "" {TEXT -1 50 "Calculated ECnt(up) fo
+r KerrNewman (0.016000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU
+~Time~G$\"#;!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "Jntt:=s
+implify(simplify(grcomponent(ECnt(up),[t]),trigsin),symbolic);" }}
+{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%JnttG,$*&#\"\"\"\"\"#F(*,,N*8^#!\"
+\"F()%&GammaGF)F()-%$sinG6#%&thetaG\"\"%F(-%%diffG6$-%*conjugateG6#%$P
+hiG%\"tGF(%&SigmaGF(%&OmegaGF(%\"qGF(%\"aGF(%\"eGF(%\"rGF(F=F(F(*6F)F(
+)FAF)F(FBF()FCF)F()FDF)F(F1F(F:F(F/F(F@F(F=F(F.**-F86$F:%$phiGF()F?F6F
+(%&DeltaGF(-F86$F=FLF(F(*8F-F(FJF(F?F(F/F()F@F)F(FAF(FBF(FCF(FDF(F1F(F
+=F(F(*4F/F()F2F)F(FAF(FCF(FDF(F=F(F7F(F?F(^#F(F(F(*4F-F(F/F(FTF(-F86$F
+=F>F(F?F(FAF(FCF(FDF(F:F(F(*.-F86$F:FDF()FNF)F(-F86$F=FDF(F0F(FTF()F?F
+)F(F(*,%\"VGF(F0F()F?\"\"$F(FTF(FNF(F(*8FAF(FBF(FCF(FDF(F1F(F:F(F/F(FR
+F(FOF(F?F(FUF(F(*6F-F(FJF(F\\oF(FNF(FAF(FBF(FCF(FDF(FTF(F=F(F(*.FOF(Fi
+nF(FJF(F/F(FRF(FTF(F(*6FJF(F?F(F/F(F@F(FTF(FAF(FCF(FDF(F=F(FUF(F(*6FAF
+(FBF(FCF(FDF(FTF(F:F(FNF(F\\oF(FOF(FUF(F(*4FFF()FBF)F(FGF(FHF()F2\"\"'
+F(F=F(F:F(F/F(FRF(F(*8FAF(FBF(FCF(FDF(F1F(F:F(F/F(F@F(FWF(F?F(FUF(F(*4
+FFF(FdoF(FGF(FHF(F1F(F:F(FNF(FinF(F=F(F(*,F/F(FTF(FWF(FinF(F7F(F(*6F-F
+(F/F(FTF(FAF(FCF(FDF(F:F(F@F(FOF(F?F(F(*.F/F(FTF(F7F(FinF(F@F(FOF(F(*0
+F/F(FTF(FFF(FGF(FHF(F=F(F:F(F(*.-F86$F:F5F(-F86$F=F5F(F0F(FTF(FNF(FinF
+(F(*.FJF(FinF(F/F(F@F(FTF(FWF(F(F(F2!\"#F?#!\"(F)FN#!\"$F)F0#F.F)F(F(
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "Jntr:=simplify(simplify
+(grcomponent(ECnt(up),[r]),trigsin),symbolic);" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%%JntrG,$*&#\"\"\"\"\"#F(**%&GammaGF',6*(-%%diffG6$-%*
+conjugateG6#%$PhiG%\"rGF(-F/6$F4%\"tGF(%&SigmaGF(!\"\"*.^#F:F(F.F(%\"q
+GF(%\"eGF(F5F(F4F(F(*(-F/6$F4F5F(-F/6$F1F8F(F9F(F:*.F@F(F=F(F>F(F5F(F1
+F(^#F(F(F(**%&OmegaGF(F@F(-F/6$F1%$phiGF(F9F(F:*2F<F(FGF(F@F(F=F(%\"aG
+F(F>F(F5F(F1F(F(*4FGF(F@F(F=F(FLF(F>F(F5F(F1F()-%$cosG6#%&thetaGF)F(FE
+F(F(**FGF(F.F(-F/6$F4FJF(F9F(F:*2FGF(F.F(F=F(FLF(F>F(F5F(F4F(FEF(F(*4F
+<F(FGF(F.F(F=F(FLF(F>F(F5F(F4F(FNF(F(F(F9#!\"&F)%&DeltaGF'F(F(" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 77 "Jnttheta:=simplify(simplify(
+grcomponent(ECnt(up),[theta]),trigsin),symbolic);" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%)JntthetaG,$*&#\"\"\"\"\"#F(**%&GammaG#F(F),6*(-%%dif
+fG6$-%*conjugateG6#%$PhiG%&thetaGF(-F06$F5%\"tGF(%&SigmaGF(F(*.F/F(%\"
+qGF(%\"eGF(%\"rGF(F5F(^#F(F(F(*(-F06$F5F6F(-F06$F2F9F(F:F(F(*.^#!\"\"F
+(FAF(F<F(F=F(F>F(F2F(F(**%&OmegaGF(FAF(-F06$F2%$phiGF(F:F(F(*2FIF(FAF(
+F<F(%\"aGF(F=F(F>F(F2F(F?F(F(*4FFF(FIF(FAF(F<F(FNF(F=F(F>F(F2F()-%$cos
+G6#F6F)F(F(**FIF(F/F(-F06$F5FLF(F:F(F(*2FFF(FIF(F/F(F<F(FNF(F=F(F>F(F5
+F(F(*4FIF(F/F(F<F(FNF(F=F(F>F(F5F(FPF(F?F(F(F(F:#!\"&F)%&DeltaG#FGF)F(
+FG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 73 "Jntphi:=simplify(simp
+lify(grcomponent(ECnt(up),[phi]),trigsin),symbolic);" }}{PARA 12 "" 1 
+"" {XPPMATH 20 "6#>%'JntphiG,$*&#\"\"\"\"\"#F(*,,fn*8%&OmegaGF(-%%diff
+G6$-%*conjugateG6#%$PhiG%$phiGF()%&SigmaG\"\"$F(%&DeltaGF(%\"qGF(%\"aG
+F(%\"eGF(%\"rGF()-%$sinG6#%&thetaGF)F(F4F(^#F(F(F(*6F)F()F:F)F()F<F)F(
+)F=F)F(F4F(F;F(F>F(F1F(F9F()F7F)F(F(*8^#!\"\"F(F-F(F:F(F;F(F<F(F=F(F>F
+(F1F(F9F(F6F(-F/6$F4F5F(F(*6F-F(FEF()F;F)F(FFF(FGF()F?\"\"%F(F1F(F9F(F
+HF(F4F(FK*6)%&GammaGF)F(F-F(F>F(F:F(F<F(F=F(F4F(-F/6$F1%\"tGF(F7F(FCF(
+F(*8F:F(F;F(F<F(F=F(FPF(F1F(FSF()F-F8F(FLF(F7F(FCF(F(*6FJF(FSF(F-F(F>F
+(-F/6$F4FWF(F7F(F:F(F<F(F=F(F1F(F(**FenF()F7FQF(F.F(F9F(FK*.FTF(F-F(F>
+F(%\"VGF(F6F(F9F(F(**FLF(FhnF(FUF(F9F(FK*6F:F(F<F(F=F(F4F(F.F(F7F(FSF(
+)F-F)F(F>F(FCF(F(*4FEF(FOF(FFF(FGF()F?\"\"'F(F1F(FSF(FYF(F4F(F(*2FLF(F
+6F(F:F(F<F(F=F(F1F(F9F(FCF(F(*,F-F(F.F(FhnF(F9F(FLF(FK*.FSF(F-F(F>F(Fe
+nF(FHF(FUF(F(*2FSF(F-F(F>F(FEF(FFF(FGF(F4F(F1F(F(*6F:F(F;F(F<F(F=F(F>F
+(F4F(FUF(F6F(F9F(FCF(F(*6FJF(FenF(F6F(F:F(F;F(F<F(F=F(F>F(F1F(F9F(F(*2
+FJF(F:F(F<F(F=F(F4F(F.F(F6F(F9F(F(*6FJF(FLF(F7F(F:F(F<F(F=F(F1F(FSF(F]
+oF(F>F(F(*0FTF(F-F(F>F(-F/6$F1FBF(-F/6$F4FBF(F9F(FHF(F(*0FTF(F-F(F>F(-
+F/6$F1F=F()F9F)F(-F/6$F4F=F(FHF(F(*8FJF(F.F(F7F(FSF(FYF(F:F(F;F(F<F(F=
+F(FPF(F4F(F(*.FLF(FHF(FUF(FSF(F]oF(F>F(F(*.F.F(FHF(FSF(FYF(FLF(F>F(F(*
+.FenF(FHF(F.F(FSF(F]oF(F>F(F(*8FJF(F:F(F;F(F<F(F=F(FPF(F4F(FUF(F7F(FSF
+(F]oF(F(*6F)F(FEF(FFF(FGF(F4F(F;F(FPF(F1F(FSF(F]oF(FK*8FenF(F7F(F:F(F;
+F(F<F(F=F(FPF(F1F(FSF(F]oF(FCF(F(F(F?!\"#F7#!\"(F)F9#!\"$F)FT#FKF)F(F(
+" }}}{EXCHG {PARA 260 "" 0 "" {TEXT 265 72 "===== Calculation of angul
+ar momentum density on t=const surfaces. =====" }}}{EXCHG {PARA 208 "
+" 0 "" {TEXT 214 31 "Angular rotation Killing field." }}}{EXCHG {PARA 
+200 "> " 0 "" {MPLTEXT 1 213 38 "grdef ( `phi\{^a\} := [ 0, 0, 0, 1 ]`
+ ):" }}{PARA 6 "" 1 "" {TEXT -1 42 "Components assigned for metric: Ke
+rrNewman" }}{PARA 6 "" 1 "" {TEXT -1 30 "Created definition for phi(up
+)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "grdefine( `LDensityt`,
+ \{\}, `sqrt(-detg)*ntt*T\{a b\}*phi\{^a\}*nt\{^b\}` );" }}{PARA 6 "" 
+1 "" {TEXT -1 32 "Created definition for LDensityt" }}}{EXCHG {PARA 
+200 "> " 0 "" {MPLTEXT 1 213 18 "grcalc(LDensityt);" }}{PARA 6 "" 1 "
+" {TEXT -1 51 "Calculated LDensityt for KerrNewman (0.016000 sec.)" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#;!\"$" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 207 "grmap(LDensityt, subs, conjuga
+te(r)=r,conjugate(a)=a,conjugate(q)=q,conjugate(e)=e, conjugate(theta)
+=theta, conjugate(Sigma)=Sigma,conjugate(Gamma)=Gamma,conjugate(Omega)
+=Omega,conjugate(Delta)=Delta, 'x' ):" }}{PARA 6 "" 1 "" {TEXT -1 34 "
+Applying routine subs to LDensityt" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 21 "gralter(LDensityt,8);" }}{PARA 6 "" 1 "" {TEXT -1 
+48 "Component simplification of a GRTensorII object:" }}{PARA 6 "" 1 "
+" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 43 "Applying routine normal
+ to object LDensityt" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$
+\"\"!F&" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 174 "Integrandus
+Lt:=collect(expand(simplify(simplify(grcomponent(LDensityt)/sin(theta)
+,symbolic),trigsin)),\{(diff(Phi,t)),(diff(Phi,r)),(diff(Phi,theta)),(
+diff(Phi,phi))\},factor);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%.Integr
+andusLtG,(*&#\"\"\"\"\"#F(*,%&GammaGF(,&*&-%%diffG6$-%*conjugateG6#%$P
+hiG%$phiGF(%&SigmaGF(F(*0%\"qGF(%\"aGF(%\"eGF(%\"rGF()-%$sinG6#%&theta
+GF)F(F1F(^#F(F(F(F(F6!\"\"%&DeltaGFB-F/6$F4%\"tGF(F(F(*&F'F(*,F+F(,**&
+-F/6$F1FFF(F6F(F(**F)F(%&OmegaGF(F.F(F6F(F(*,^#FBF(F8F(F:F(F;F(F1F(F(*
+2^#F)F(FNF(F8F(F9F(F:F(F;F(F<F(F1F(F(F(F6FBFCFB-F/6$F4F5F(F(F(*&F'F(*2
+F+F(F8F(F:F(F;F(F4F(,,*2F)F(FNF(F8F()F9F)F(F:F(F;F(F1F()F=\"\"%F(F(*,F
+PF(F6F(F9F(FKF(F<F(F(*(F6F(F.F(FAF(F(*.^#!\"#F(F6F(FNF(F.F(F9F(F<F(F(*
+0F)F(F8F(F:F(F;F(F9F(F1F(F<F(FBF(FCFBF6FjnF(F(" }}}{EXCHG {PARA 0 "" 
+0 "" {TEXT -1 59 "After proper collection of terms, it becomes the fol
+lowing." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 391 "IntegrandusLtHu
+manreadable:=1/Delta*Re(conjugate(diff(Phi, t))*Gamma*diff(Phi, phi))+
+a*(r^2+a^2-Delta)/Delta*conjugate(diff(Phi, phi))*diff(Phi, phi)-q*e*a
+*r/Delta*Im(conjugate(Phi)*Gamma*sin(theta)^2/Sigma*diff(Phi, t))+q*e*
+r/Delta*Im(conjugate(Phi)*((r^2+a^2)*Sigma-(r^2+a^2-Delta)*(r^2+a^2-Si
+gma))/Sigma*diff(Phi, phi))-q^2*e^2*r^2*a*(r^2+a^2)/Delta*conjugate(Ph
+i)*sin(theta)^2/Sigma*Phi;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%;Integ
+randusLtHumanreadableG,,*&%&DeltaG!\"\"-%#ReG6#*(-%*conjugateG6#-%%dif
+fG6$%$PhiG%\"tG\"\"\"%&GammaGF5-F16$F3%$phiGF5F5F5*,%\"aGF5,(*$)%\"rG
+\"\"#F5F5*$)F;F@F5F5F'F(F5F'F(-F.6#F7F5F7F5F5*.%\"qGF5%\"eGF5F;F5F?F5F
+'F(-%#ImG6#*,-F.6#F3F5F6F5-%$sinG6#%&thetaGF@%&SigmaGF(F0F5F5F(*,FFF5F
+GF5F?F5F'F(-FI6#**FLF5,&*&,&F=F5FAF5F5FRF5F5*&F<F5,(F=F5FAF5FRF(F5F(F5
+FRF(F7F5F5F5*6FFF@FGF@F?F@F;F5FYF5F'F(FLF5FNF@FRF(F3F5F(" }}}{EXCHG 
+{PARA 0 "" 0 "" {TEXT -1 59 "Rechecking human readable form of angular
+ momentum density." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 985 "Expr
+ession:=IntegrandusLtHumanreadable: SimplifiedExpression:=simplify(sub
+s( Re(conjugate(diff(Phi, t))*Gamma*diff(Phi, phi))=1/2*(diff(conjugat
+e(Phi), t)*Gamma*diff(Phi, phi)+diff(Phi, t)*Gamma*diff(conjugate(Phi)
+, phi)),  conjugate(diff(Phi, phi))=diff(conjugate(Phi), phi), Im(conj
+ugate(Phi)*Gamma*sin(theta)^2*diff(Phi, t)/Sigma)=1/(2*I)*(conjugate(P
+hi)*Gamma*sin(theta)^2*diff(Phi, t)/Sigma-Phi*Gamma*sin(theta)^2*diff(
+conjugate(Phi), t)/Sigma), Im(conjugate(Phi)*((r^2+a^2)*Sigma-(r^2+a^2
+-Delta)*(r^2+a^2-Sigma))*diff(Phi, phi)/Sigma)=1/(2*I)*(conjugate(Phi)
+*((r^2+a^2)*Sigma-(r^2+a^2-Delta)*(r^2+a^2-Sigma))*diff(Phi, phi)/Sigm
+a-Phi*((r^2+a^2)*Sigma-(r^2+a^2-Delta)*(r^2+a^2-Sigma))*diff(conjugate
+(Phi), phi)/Sigma), Expression)): ReferenceExpression:=IntegrandusLt: \+
+DifferenceExpression:=simplify(subs(Omega=a*(2*M*r-e^2)/Gamma, Gamma=(
+r^2+a^2)^2-a^2*Delta*sin(theta)^2, Sigma=r^2+a^2*cos(theta)^2, Delta=r
+^2+a^2+e^2-2*M*r, simplify(SimplifiedExpression-ReferenceExpression)))
+;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" }}
+}{EXCHG {PARA 0 "" 0 "" {TEXT -1 166 "Now transform the energy density
+ integrandus to tortoise coordinates r_\{*\}, phi^\{~\}. The transform
+ed integrandus shall be denoted by IntegransustT (T -- transformed)." 
+}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 200 "IntegrandusLtAltered:=su
+bs(conjugate(diff(Phi,t))=diff(conjugate(Phi),t), conjugate(diff(Phi,r
+))=diff(conjugate(Phi),r), conjugate(diff(Phi,phi))=diff(conjugate(Phi
+),phi), IntegrandusLtHumanreadable);" }}{PARA 12 "" 1 "" {XPPMATH 20 "
+6#>%5IntegrandusLtAlteredG,,*&%&DeltaG!\"\"-%#ReG6#*(-%%diffG6$-%*conj
+ugateG6#%$PhiG%\"tG\"\"\"%&GammaGF5-F.6$F3%$phiGF5F5F5*,%\"aGF5,(*$)%
+\"rG\"\"#F5F5*$)F;F@F5F5F'F(F5F'F(-F.6$F0F9F5F7F5F5*.%\"qGF5%\"eGF5F;F
+5F?F5F'F(-%#ImG6#*,F0F5F6F5-%$sinG6#%&thetaGF@%&SigmaGF(-F.6$F3F4F5F5F
+(*,FFF5FGF5F?F5F'F(-FI6#**F0F5,&*&,&F=F5FAF5F5FPF5F5*&F<F5,(F=F5FAF5FP
+F(F5F(F5FPF(F7F5F5F5*6FFF@FGF@F?F@F;F5FYF5F'F(F0F5FLF@FPF(F3F5F(" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 177 "IntegrandusLtT:=Delta/(r^2+
+a^2)*convert(simplify(subs(Phi=PhiT(t, Rstar, theta, Phitilde), conjug
+ate(Phi)=conjugate(PhiT)(t, Rstar, theta, Phitilde), IntegrandusLtAlte
+red)), D);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%/IntegrandusLtTG,$*(,&
+*$)%\"rG\"\"#\"\"\"F,*$)%\"aGF+F,F,!\"\",2*&-%#ReG6#**--&%\"DG6#F,6#-%
+*conjugateG6#%%PhiTG6&%\"tG%&RstarG%&thetaG%)PhitildeGF,%&GammaGF,--&F
+:6#\"\"%6#F@FAF,--&F:6#F+6#FE6$F*%$phiGF,F,%&SigmaGF,F0*.F/F,--FIF<FAF
+,)FMF+F,FGF,FTF,F)F,F0*,)F/\"\"$F,FVF,FXF,FGF,FTF,F0*.F/F,FVF,FXF,FGF,
+FTF,%&DeltaGF,F,*.%\"qGF,%\"eGF,F/F,F*F,-%#ImG6#*,-F=FAF,FFF,-%$sinG6#
+FDF+FTF0--F9FLFAF,F,FTF,F,*,FinF,FjnF,F*F,-F\\o6#*,F_oF,,2*(F+F,FTF,F)
+F,F0*(F+F,FTF,F.F,F0*$)F*FKF,F,*(F+F,F)F,F.F,F,*$)F/FKF,F,*&FgnF,F)F,F
+0*&FgnF,F.F,F0*&FgnF,FTF,F,F,FGF,FMF,FTF0F,FTF,F,*0)FinF+F,)FjnF+F,F]p
+F,F/F,F_oF,)F`oF+F,-F@FAF,F,*0FepF,FfpF,F)F,FZF,F_oF,FgpF,FhpF,F,F,FTF
+0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "IntegrandusLtTSimpli
+fied:=convert(IntegrandusLtT, diff);" }}{PARA 12 "" 1 "" {XPPMATH 20 "
+6#>%9IntegrandusLtTSimplifiedG,$*(,&*$)%\"rG\"\"#\"\"\"F,*$)%\"aGF+F,F
+,!\"\",2*&-%#ReG6#**--&%\"DG6#F,6#-%*conjugateG6#%%PhiTG6&%\"tG%&Rstar
+G%&thetaG%)PhitildeGF,%&GammaGF,--&F:6#\"\"%6#F@FAF,-%%diffG6$FE%$phiG
+F,F,%&SigmaGF,F0*.F/F,--FIF<FAF,)FMF+F,FGF,FQF,F)F,F0*,)F/\"\"$F,FSF,F
+UF,FGF,FQF,F0*.F/F,FSF,FUF,FGF,FQF,%&DeltaGF,F,*.%\"qGF,%\"eGF,F/F,F*F
+,-%#ImG6#*,-F=FAF,FFF,-%$sinG6#FDF+FQF0--F9FLFAF,F,FQF,F,*,FfnF,FgnF,F
+*F,-Fin6#*,F\\oF,,2*(F+F,FQF,F)F,F0*(F+F,FQF,F.F,F0*$)F*FKF,F,*(F+F,F)
+F,F.F,F,*$)F/FKF,F,*&FZF,F)F,F0*&FZF,F.F,F0*&FZF,FQF,F,F,FGF,FMF,FQF0F
+,FQF,F,*0)FfnF+F,)FgnF+F,FjoF,F/F,F\\oF,)F]oF+F,-F@FAF,F,*0FbpF,FcpF,F
+)F,FWF,F\\oF,FdpF,FepF,F,F,FQF0F0" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 137 "IntegrandusLtTSimplified2:=subs(diff(Phitilde,phi)=1
+, diff(Phitilde,r)=a/Delta, diff(Rstar,r)=(r^2+a^2)/Delta, Integrandus
+LtTSimplified);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%:IntegrandusLtTSi
+mplified2G,$*(,&*$)%\"rG\"\"#\"\"\"F,*$)%\"aGF+F,F,!\"\",2*&-%#ReG6#*(
+--&%\"DG6#F,6#-%*conjugateG6#%%PhiTG6&%\"tG%&RstarG%&thetaG%)PhitildeG
+F,%&GammaGF,--&F:6#\"\"%6#F@FAF,F,%&SigmaGF,F0*,F/F,--FIF<FAF,FGF,FMF,
+F)F,F0**)F/\"\"$F,FOF,FGF,FMF,F0*,F/F,FOF,FGF,FMF,%&DeltaGF,F,*.%\"qGF
+,%\"eGF,F/F,F*F,-%#ImG6#*,-F=FAF,FFF,-%$sinG6#FDF+FMF0--F9FLFAF,F,FMF,
+F,*,FWF,FXF,F*F,-FZ6#**FgnF,,2*(F+F,FMF,F)F,F0*(F+F,FMF,F.F,F0*$)F*FKF
+,F,*(F+F,F)F,F.F,F,*$)F/FKF,F,*&FUF,F)F,F0*&FUF,F.F,F0*&FUF,FMF,F,F,FG
+F,FMF0F,FMF,F,*0)FWF+F,)FXF+F,FeoF,F/F,FgnF,)FhnF+F,-F@FAF,F,*0F]pF,F^
+pF,F)F,FRF,FgnF,F_pF,F`pF,F,F,FMF0F0" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 539 "IntegrandusLtTSimplified3:=subs(D[1](conjugate(PhiT)
+)(t,Rstar,theta,Phitilde)=conjugate(diff(PhiT, t)), D[1](PhiT)(t,Rstar
+,theta,Phitilde)=diff(PhiT, t), D[2](conjugate(PhiT))(t,Rstar,theta,Ph
+itilde)=conjugate(diff(PhiT, rstar)), D[2](PhiT)(t,Rstar,theta,Phitild
+e)=diff(PhiT, rstar), D[4](conjugate(PhiT))(t,Rstar,theta,Phitilde)=co
+njugate(diff(PhiT, phitilde)), D[4](PhiT)(t,Rstar,theta,Phitilde)=diff
+(PhiT, phitilde), conjugate(PhiT)(t,Rstar,theta,Phitilde)=conjugate(Ph
+iT), PhiT(t,Rstar,theta,Phitilde)=PhiT, IntegrandusLtTSimplified2);" }
+}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%:IntegrandusLtTSimplified3G,$*(,&*$
+)%\"rG\"\"#\"\"\"F,*$)%\"aGF+F,F,!\"\",2*&-%#ReG6#*(-%*conjugateG6#-%%
+diffG6$%%PhiTG%\"tGF,%&GammaGF,-F;6$F=%)phitildeGF,F,%&SigmaGF,F0*,F/F
+,-F86#F@F,F@F,FCF,F)F,F0**)F/\"\"$F,FEF,F@F,FCF,F0*,F/F,FEF,F@F,FCF,%&
+DeltaGF,F,*.%\"qGF,%\"eGF,F/F,F*F,-%#ImG6#*,-F86#F=F,F?F,-%$sinG6#%&th
+etaGF+FCF0F:F,F,FCF,F,*,FMF,FNF,F*F,-FP6#**FSF,,2*(F+F,FCF,F)F,F0*(F+F
+,FCF,F.F,F0*$)F*\"\"%F,F,*(F+F,F)F,F.F,F,*$)F/F\\oF,F,*&FKF,F)F,F0*&FK
+F,F.F,F0*&FKF,FCF,F,F,F@F,FCF0F,FCF,F,*0)FMF+F,)FNF+F,F[oF,F/F,FSF,)FU
+F+F,F=F,F,*0FdoF,FeoF,F)F,FHF,FSF,FfoF,F=F,F,F,FCF0F0" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 422 "IntegrandusLtTHumanreadable:=1/(r^
+2+a^2)*Re(conjugate(diff(PhiT, t))*Gamma*diff(PhiT, phitilde))+a*(r^2+
+a^2-Delta)/(r^2+a^2)*conjugate(diff(PhiT, phitilde))*diff(PhiT, phitil
+de)-q*e*a*r/(r^2+a^2)*Im(conjugate(PhiT)*Gamma*sin(theta)^2/Sigma*diff
+(PhiT, t))+q*e*r/(r^2+a^2)*Im(conjugate(PhiT)*((r^2+a^2)*Sigma-(r^2+a^
+2-Delta)*(r^2+a^2-Sigma))/Sigma*diff(PhiT, phitilde))-q^2*e^2*r^2*a*co
+njugate(PhiT)*sin(theta)^2/Sigma*PhiT;" }}{PARA 12 "" 1 "" {XPPMATH 
+20 "6#>%<IntegrandusLtTHumanreadableG,,*&,&*$)%\"rG\"\"#\"\"\"F,*$)%\"
+aGF+F,F,!\"\"-%#ReG6#*(-%*conjugateG6#-%%diffG6$%%PhiTG%\"tGF,%&GammaG
+F,-F96$F;%)phitildeGF,F,F,*,F/F,,(F(F,F-F,%&DeltaGF0F,F'F0-F66#F>F,F>F
+,F,*.F'F0%\"qGF,%\"eGF,F/F,F*F,-%#ImG6#*,-F66#F;F,F=F,-%$sinG6#%&theta
+GF+%&SigmaGF0F8F,F,F0*,FGF,FHF,F*F,F'F0-FJ6#**FMF,,&*&F'F,FSF,F,*&FBF,
+,(F(F,F-F,FSF0F,F0F,FSF0F>F,F,F,*2FGF+FHF+F*F+F/F,FOF+FSF0FMF,F;F,F0" 
+}}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 73 "Rechecking human readable trans
+formed angular momentum density integrand." }}}{EXCHG {PARA 0 "> " 0 "
+" {MPLTEXT 1 0 1391 "Expression:=IntegrandusLtTHumanreadable: Simplifi
+edExpression:=simplify(subs(conjugate(diff(PhiT, t))=diff(conjugate(Ph
+iT), t), conjugate(diff(PhiT, rstar))=diff(conjugate(PhiT), rstar), co
+njugate(diff(PhiT, phitilde))=diff(conjugate(PhiT), phitilde), Im(conj
+ugate(PhiT)*diff(PhiT, phitilde))=1/(2*I)*(conjugate(PhiT)*diff(PhiT, \+
+phitilde)-PhiT*diff(conjugate(PhiT), phitilde)),  Im(conjugate(PhiT)*d
+iff(PhiT, t))=1/(2*I)*(conjugate(PhiT)*diff(PhiT, t)-PhiT*diff(conjuga
+te(PhiT), t)), Re(diff(conjugate(PhiT),rstar)*diff(PhiT,phitilde))=1/2
+*(diff(conjugate(PhiT),rstar)*diff(PhiT,phitilde)+diff(PhiT,rstar)*dif
+f(conjugate(PhiT),phitilde)), Expression)): ReferenceExpression:=simpl
+ify(subs(conjugate(diff(PhiT, t))=diff(conjugate(PhiT), t), conjugate(
+diff(PhiT, rstar))=diff(conjugate(PhiT), rstar), conjugate(diff(PhiT, \+
+phitilde))=diff(conjugate(PhiT), phitilde), Im(conjugate(PhiT)*diff(Ph
+iT, phitilde))=1/(2*I)*(conjugate(PhiT)*diff(PhiT, phitilde)-PhiT*diff
+(conjugate(PhiT), phitilde)),  Im(conjugate(PhiT)*diff(PhiT, t))=1/(2*
+I)*(conjugate(PhiT)*diff(PhiT, t)-PhiT*diff(conjugate(PhiT), t)), Re(d
+iff(conjugate(PhiT),rstar)*diff(PhiT,phitilde))=1/2*(diff(conjugate(Ph
+iT),rstar)*diff(PhiT,phitilde)+diff(PhiT,rstar)*diff(conjugate(PhiT),p
+hitilde)), IntegrandusLtTSimplified3)): DifferenceExpression:=simplify
+(expand(subs(Delta=r^2+a^2+e^2-2*M*r, SimplifiedExpression-ReferenceEx
+pression)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5DifferenceExpressio
+nG\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG 
+{PARA 261 "" 0 "" {TEXT 266 77 "===== Calculation of angular momentum \+
+flow density on r=const surfaces. =====" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 66 "grdefine( `LFlowr`, \{\}, `sqrt(-detg)*nrr*T\{a b\}*p
+hi\{^a\}*nr\{^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 29 "Created definiti
+on for LFlowr" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 15 "grcalc
+(LFlowr);" }}{PARA 6 "" 1 "" {TEXT -1 48 "Calculated LFlowr for KerrNe
+wman (0.008000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$
+\"\")!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 18 "gralter(LF
+lowr,1);" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplification of a
+ GRTensorII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "
+" {TEXT -1 42 "Applying routine simplify to object LFlowr" }}{PARA 11 
+"" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#7!\"$" }}}{EXCHG {PARA 0 "> " 
+0 "" {MPLTEXT 1 0 65 "IntegrandusLr:=simplify(grcomponent(LFlowr)/sin(
+theta),symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%.IntegrandusLrG
+,$*&#\"\"\"\"\"#F(*(%&DeltaGF(,**(-%%diffG6$%$PhiG%\"rGF(-F/6$-%*conju
+gateG6#F1%$phiGF(%&SigmaGF(F(*2F.F(%\"qGF(%\"aGF(%\"eGF(F2F()-%$sinG6#
+%&thetaGF)F(F5F(^#F(F(F(*(-F/6$F5F2F(-F/6$F1F8F(F9F(F(*2^#!\"\"F(FEF(F
+;F(F<F(F=F(F2F(F>F(F1F(F(F(F9FKF(F(" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "38 1 0" 28 }
+{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewmanHelper.mws b/include/gridripper/phys/gr/fixmp/kerrhiggs/KerrNewmanHelper.mws
new file mode 100644 (file)
index 0000000..3e26836
--- /dev/null
@@ -0,0 +1,91 @@
+{VERSION 6 0 "IBM INTEL LINUX" "6.0" }
+{USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 
+2 1 2 0 0 0 1 }{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 
+2 2 1 0 0 0 1 }{CSTYLE "_cstyle5" -1 202 "Times" 1 12 0 0 0 1 2 2 2 2 
+2 2 0 0 0 1 }{CSTYLE "_cstyle3" -1 207 "Courier" 1 12 255 0 0 1 2 1 2 
+2 1 2 0 0 0 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 
+0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Ma
+ple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 
+1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "" 11 12 1 {CSTYLE "" 
+-1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 
+-1 0 }{PSTYLE "_pstyle7" -1 203 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 
+1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle6
+" -1 206 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }
+1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle4" -1 207 1 {CSTYLE "" 
+-1 -1 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 
+0 2 2 -1 1 }}
+{SECT 0 {EXCHG {PARA 207 "> " 0 "" {MPLTEXT 1 207 25 "Delta:=r^2+a^2+e
+^2-2*M*r;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&DeltaG,**$)%\"rG\"\"#
+\"\"\"F**$)%\"aGF)F*F**$)%\"eGF)F*F**(F)F*%\"MGF*F(F*!\"\"" }}}{EXCHG 
+{PARA 207 "> " 0 "" {MPLTEXT 1 207 28 "Sigma:=r^2+a^2*cos(theta)^2;" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&SigmaG,&*$)%\"rG\"\"#\"\"\"F**&)%
+\"aGF)F*)-%$cosG6#%&thetaGF)F*F*" }}}{EXCHG {PARA 207 "> " 0 "" 
+{MPLTEXT 1 207 42 "Gamma:=(r^2+a^2)^2-a^2*Delta*sin(theta)^2;" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&GammaG,&*$),&*$)%\"rG\"\"#\"\"\"F-*
+$)%\"aGF,F-F-F,F-F-*(F/F-,*F)F-F.F-*$)%\"eGF,F-F-*(F,F-%\"MGF-F+F-!\"
+\"F-)-%$sinG6#%&thetaGF,F-F8" }}}{EXCHG {PARA 207 "> " 0 "" {MPLTEXT 
+1 207 27 "Omega:=a*(2*M*r-e^2)/Gamma;" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#>%&OmegaG*(%\"aG\"\"\",&*(\"\"#F'%\"MGF'%\"rGF'F'*$)%\"eGF*F'!\"\"F
+',&*$),&*$)F,F*F'F'*$)F&F*F'F'F*F'F'*(F8F',*F5F'F7F'F-F'*(F*F'F+F'F,F'
+F0F')-%$sinG6#%&thetaGF*F'F0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 24 "rp:=M+sqrt(M^2-a^2-e^2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 
+"rm:=M-sqrt(M^2-a^2-e^2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "kappap
+:=(rp-rm)/(2*(rp^2+a^2));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "kappam
+:=(rm-rp)/(2*(rm^2+a^2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#rpG,&%
+\"MG\"\"\"*$,(*$)F&\"\"#F'F'*$)%\"aGF,F'!\"\"*$)%\"eGF,F'F0#F'F,F'" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#rmG,&%\"MG\"\"\"*$,(*$)F&\"\"#F'F'*
+$)%\"aGF,F'!\"\"*$)%\"eGF,F'F0#F'F,F0" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#>%'kappapG,$*(\"\"#\"\"\",(*$)%\"MGF'F(F(*$)%\"aGF'F(!\"\"*$)%\"eGF
+'F(F0#F(F',&*&F'F(),&F,F(*$F)F4F(F'F(F(*&F'F(F.F(F(F0F(" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#>%'kappamG,$*(\"\"#\"\"\",(*$)%\"MGF'F(F(*$)%\"a
+GF'F(!\"\"*$)%\"eGF'F(F0#F(F',&*&F'F(),&F,F(*$F)F4F0F'F(F(*&F'F(F.F(F(
+F0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "rs(r):=r+ln(r-rp)/(
+2*kappap)+ln(r-rm)/(2*kappam);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "p
+hitilde(r, phi):=phi+a/(rp-rm)*ln((r-rp)/(r-rm));" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>-%#rsG6#%\"rG,(F'\"\"\"*&#F)\"\"%F)*(-%#lnG6#,(F'F)%\"
+MG!\"\"*$,(*$)F2\"\"#F)F)*$)%\"aGF8F)F3*$)%\"eGF8F)F3#F)F8F3F)F5#F3F8,
+&*&F8F)),&F2F)F4F)F8F)F)*&F8F)F:F)F)F)F)F)*&#F)F,F)*(-F/6#,(F'F)F2F3F4
+F)F)F5F@,&*&F8F)),&F2F)F4F3F8F)F)*&F8F)F:F)F)F)F)F3" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#>-%)phitildeG6$%\"rG%$phiG,&F(\"\"\"*&#F*\"\"#F**(%\"
+aGF*,(*$)%\"MGF-F*F**$)F/F-F*!\"\"*$)%\"eGF-F*F6#F6F--%#lnG6#*&,(F'F*F
+3F6*$F0F,F6F*,(F'F*F3F6F@F*F6F*F*F*" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 41 "simplify(diff(rs(r), r)-(r^2+a^2)/Delta);" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 40 "simplify(diff(phitilde(r, phi), phi)-1);" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "sim
+plify(diff(phitilde(r, phi), r)-a/Delta);" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 100 "si
+mplify(simplify((Delta*(Sigma^2-Gamma)-Gamma^2*Omega^2*sin(theta)^2)/(
+Delta*Gamma*sin(theta)^2)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,**$
+)%\"rG\"\"#\"\"\"!\"\"*$)%\"aGF(F)F**$)%\"eGF(F)F**(F(F)%\"MGF)F'F)F)F
+*F-F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 85 "simplify(simplify(
+(Delta*Sigma^2-Gamma^2*Omega^2*sin(theta)^2)/(Sigma*Delta*Gamma)));" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(,**$)%\"rG\"\"#\"\"\"!\"\"*$)%\"aGF
+(F)F**$)%\"eGF(F)F**(F(F)%\"MGF)F'F)F)F*,**(F(F)F2F)F'F)F)*&F,F))-%$co
+sG6#%&thetaGF(F)F*F%F*F.F*F),&F%F)F5F)F*" }}}{EXCHG {PARA 207 "> " 0 "
+" {MPLTEXT 1 207 145 "simplify(simplify((-Gamma^2*q^2*e^2*r^2+Gamma^2*
+Omega^2*q^2*a^2*e^2*r^2*sin(theta)^4-Delta*Sigma^2*q^2*a^2*e^2*r^2*sin
+(theta)^2)/(Gamma*Sigma)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#**,(*&)
+%\"aG\"\"#\"\"\")-%$cosG6#%&thetaGF(F)F)*&F(F)F&F)!\"\"*$)%\"rGF(F)F0F
+))%\"qGF(F))%\"eGF(F)F2F)" }}}{EXCHG {PARA 207 "> " 0 "" {MPLTEXT 1 
+207 57 "simplify((Gamma-a^2*(r^2+a^2-Delta)*sin(theta)^2)/Sigma);" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*$)%\"rG\"\"#\"\"\"F(*$)%\"aGF'F(F(
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 97 "simplify(simplify((a^2*
+Gamma^2*Omega^2*sin(theta)^2-2*Gamma^2*Omega*a-Sigma^2*a^2*Delta)/Gamm
+a));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&)%\"aG\"\"#\"\"\",**(F'F(%
+\"MGF(%\"rGF(F(*&F%F()-%$cosG6#%&thetaGF'F(F(*$)F,F'F(F(*$)%\"eGF'F(!
+\"\"F(F8" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 87 "simplify((Delta
+*Sigma^2*a+Gamma^2*Omega-Gamma^2*Omega^2*a*sin(theta)^2)/(Gamma*Sigma)
+);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%\"aG" }}}{EXCHG {PARA 0 "> " 0 
+"" {MPLTEXT 1 0 237 "simplify(-1/(Gamma*Sigma^2)*(a^2*Gamma^2*Omega^2*
+cos(theta)^4+2*Gamma^2*Omega*a*cos(theta)^2+Sigma^2*a^2*Delta*cos(thet
+a)^2-2*a^2*Gamma^2*Omega^2*cos(theta)^2-2*Gamma^2*Omega*a+Gamma^2+a^2*
+Gamma^2*Omega^2-Sigma^2*a^2*Delta)*q^2*e^2*r^2);" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#,$*()%\"qG\"\"#\"\"\")%\"eGF'F()%\"rGF'F(!\"\"" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "
+" {MPLTEXT 1 0 52 "simplify((2*(r-M)*(r^2+a^2)-2*r*Delta)/(r^2+a^2)^3)
+;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\"\"#\"\"\",(*&%\"MGF&)%\"rGF
+%F&!\"\"*&F)F&)%\"aGF%F&F&*&F+F&)%\"eGF%F&F&F&,&*$F*F&F&*$F.F&F&!\"$F,
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 206 "" 0 "" 
+{TEXT 202 0 "" }}{PARA 203 "" 0 "" {TEXT -1 0 "" }}}{MARK "18 0 0" 0 }
+{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/eval_jphi.sh b/include/gridripper/phys/gr/fixmp/kerrhiggs/eval_jphi.sh
new file mode 100755 (executable)
index 0000000..9f93d24
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+FILES="eval_jphi.c"
+
+
+for FILE in $FILES ; do
+    cat $FILE | \
+    sed 's/Delta(r)/Delta/g' - | \
+    sed 's/pow(/::pow(/g' - | \
+    sed 's/conjugate(/conj(/g' - > $FILE.tmp
+    mv $FILE.tmp $FILE
+done
+
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/nexttoorigin.mws b/include/gridripper/phys/gr/fixmp/kerrhiggs/nexttoorigin.mws
new file mode 100644 (file)
index 0000000..7cc30f3
--- /dev/null
@@ -0,0 +1,228 @@
+{VERSION 6 0 "IBM INTEL LINUX" "6.0" }
+{USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 
+1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 
+0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 }
+{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 
+{CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 
+0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }}
+{SECT 0 {EXCHG {PARA 0 "" 0 "" {TEXT -1 115 "This code calculates the \+
+regularized version of the singular expression f/r^2 at the mesh point
+ next to the origin." }}{PARA 0 "" 0 "" {TEXT -1 246 "Specially, it is
+ also shown that the field value at the mesh point next to the origin \+
+is completely determined with 4-th order accuracy by the field value a
+t the mesh point next to next to the origin, if certain differentiabil
+ity properties hold." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "rest
+art;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 76 "This is the order of accu
+racy of the discretization scheme (has to be even)." }}}{EXCHG {PARA 
+0 "> " 0 "" {MPLTEXT 1 0 5 "M:=4;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>
+%\"MG\"\"%" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 223 "The field at the m
+esh points can be expressed with M-th order accuracy as follows with t
+he derivatives up to M-th order. Here rh is the spatial coordinate, th
+erefore Delta[rh] is the spatial step size assuming uniform grid." }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "for j from -M/2 by 1 to M/2 \+
+do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "    Meshvalue[j+M/2] := f[i+j
+]=f[0,i]+sum(1/N!*(j*Delta[rh])^(N)*f[N,i], N=1..M);" }}{PARA 0 "> " 
+0 "" {MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*Meshva
+lueG6#\"\"!/&%\"fG6#,&%\"iG\"\"\"\"\"#!\"\",,&F*6$F'F-F.*(F/F.&%&Delta
+G6#%#rhGF.&F*6$F.F-F.F0*(F/F.)F5F/F.&F*6$F/F-F.F.*&#\"\"%\"\"$F.*&)F5F
+BF.&F*6$FBF-F.F.F0*&#F/FBF.*&)F5FAF.&F*6$FAF-F.F.F." }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#>&%*MeshvalueG6#\"\"\"/&%\"fG6#,&%\"iGF'F'!\"\",,&F*6
+$\"\"!F-F'*&&%&DeltaG6#%#rhGF'&F*6$F'F-F'F.*&#F'\"\"#F'*&)F4F<F'&F*6$F
+<F-F'F'F'*&#F'\"\"'F'*&)F4\"\"$F'&F*6$FFF-F'F'F.*&#F'\"#CF'*&)F4\"\"%F
+'&F*6$FNF-F'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*MeshvalueG6#\"
+\"#/&%\"fG6#%\"iG&F*6$\"\"!F," }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*M
+eshvalueG6#\"\"$/&%\"fG6#,&%\"iG\"\"\"F.F.,,&F*6$\"\"!F-F.*&&%&DeltaG6
+#%#rhGF.&F*6$F.F-F.F.*&#F.\"\"#F.*&)F4F<F.&F*6$F<F-F.F.F.*&#F.\"\"'F.*
+&)F4F'F.&F*6$F'F-F.F.F.*&#F.\"#CF.*&)F4\"\"%F.&F*6$FMF-F.F.F." }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*MeshvalueG6#\"\"%/&%\"fG6#,&%\"iG
+\"\"\"\"\"#F.,,&F*6$\"\"!F-F.*(F/F.&%&DeltaG6#%#rhGF.&F*6$F.F-F.F.*(F/
+F.)F5F/F.&F*6$F/F-F.F.*&#F'\"\"$F.*&)F5FAF.&F*6$FAF-F.F.F.*&#F/FAF.*&)
+F5F'F.&F*6$F'F-F.F.F." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 175 "One can
+ solve the above system of linear equations for the derivatives up to \+
+M-th order, thus obtaining M-th order accurate numerical scheme for ap
+proximating the derivatives." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 
+0 44 "Meshvalues := \{\}:  for N from 0 by 1 to M do" }}{PARA 0 "> " 
+0 "" {MPLTEXT 1 0 52 "    Meshvalues := Meshvalues union \{ Meshvalue[
+N] \}:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "od:  Meshvalues := Meshva
+lues;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%+MeshvaluesG<'/&%\"fG6#,&%
+\"iG\"\"\"\"\"#!\"\",,&F(6$\"\"!F+F,*(F-F,&%&DeltaG6#%#rhGF,&F(6$F,F+F
+,F.*(F-F,)F4F-F,&F(6$F-F+F,F,*&#\"\"%\"\"$F,*&)F4FAF,&F(6$FAF+F,F,F.*&
+#F-FAF,*&)F4F@F,&F(6$F@F+F,F,F,/&F(6#,&F+F,F,F.,,F0F,*&F4F,F8F,F.*&#F,
+F-F,*&F;F,F<F,F,F,*&#F,\"\"'F,FBF,F.*&#F,\"#CF,FHF,F,/&F(6#F+F0/&F(6#,
+&F+F,F,F,,,F0F,FQF,*&FSF,FTF,F,*&#F,FWF,FBF,F,*&FYF,FHF,F,/&F(6#,&F+F,
+F-F,,,F0F,*(F-F,F4F,F8F,F,*(F-F,F;F,F<F,F,*&#F@FAF,FBF,F,*&FGF,FHF,F,
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "Derivatives := \{\}:  f
+or N from 0 by 1 to M do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 48 "    Der
+ivatives := Derivatives union \{ f[N,i] \}:" }}{PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 32 "od:  Derivatives := Derivatives;" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#>%,DerivativesG<'&%\"fG6$\"\"!%\"iG&F'6$\"\"\"F*&F'6$\"
+\"#F*&F'6$\"\"$F*&F'6$\"\"%F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 
+0 43 "Solution := solve(Meshvalues, Derivatives);" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%)SolutionG<'/&%\"fG6$\"\"!%\"iG&F(6#F+/&F(6$\"\"\"F+,
+$*&#F1\"#7F1*&,*&F(6#,&F+F1\"\"#F1F1*&\"\")F1&F(6#,&F+F1F1!\"\"F1F1&F(
+6#,&F+F1F;FAFA*&F=F1&F(6#,&F+F1F1F1F1FAF1&%&DeltaG6#%#rhGFAF1FA/&F(6$F
+;F+,$*&#F1F5F1*&,,*&\"#;F1F>F1FA*&\"#IF1F,F1F1F8F1FBF1*&FVF1FFF1FAF1FI
+!\"#F1FA/&F(6$\"\"$F+,$*&#F1F;F1*&,**&F;F1FFF1FA*&F;F1F>F1F1F8F1FBFAF1
+FI!\"$F1F1/&F(6$\"\"%F+*&,,FBF1*&\"\"'F1F,F1F1*&FdoF1F>F1FAF8F1*&FdoF1
+FFF1FAF1FI!\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "Parameter
+s := \{\}:  for j from -M/2 by 1 to M/2 do" }}{PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 46 "    Parameters := Parameters union \{ f[i+j] \}:" }}
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "od:  Parameters := Parameters;" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+ParametersG<'&%\"fG6#,&%\"iG\"\"\"
+\"\"#!\"\"&F'6#,&F*F+F+F-&F'6#F*&F'6#,&F*F+F+F+&F'6#,&F*F+F,F+" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "for N from 0 by 1 to M do" }
+}{PARA 0 "> " 0 "" {MPLTEXT 1 0 82 "    collect(select(has, Solution, \+
+f[N,i])[1]*Delta[rh]^N, Parameters)/Delta[rh]^N;" }}{PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 3 "od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"fG6$\"\"!%
+\"iG&F%6#F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"fG6$\"\"\"%\"iG*&&
+%&DeltaG6#%#rhG!\"\",**&#F'\"#7F'&F%6#,&F(F'\"\"#F'F'F.*&#F6\"\"$F'&F%
+6#,&F(F'F'F.F'F.*&#F'F2F'&F%6#,&F(F'F6F.F'F'*&#F6F9F'&F%6#,&F(F'F'F'F'
+F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"fG6$\"\"#%\"iG*&&%&DeltaG
+6#%#rhG!\"#,,*&#\"\"%\"\"$\"\"\"&F%6#,&F(F4F4!\"\"F4F4*&#\"\"&F'F4&F%6
+#F(F4F8*&#F4\"#7F4&F%6#,&F(F4F'F4F4F8*&#F4F@F4&F%6#,&F(F4F'F8F4F8*&F1F
+4&F%6#,&F(F4F4F4F4F4F4" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"fG6$\"
+\"$%\"iG*&&%&DeltaG6#%#rhG!\"$,*&F%6#,&F(\"\"\"F3F3!\"\"&F%6#,&F(F3F3F
+4F3*&#F3\"\"#F3&F%6#,&F(F3F:F3F3F3*&#F3F:F3&F%6#,&F(F3F:F4F3F4F3" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"fG6$\"\"%%\"iG*&,,&F%6#,&F(\"\"\"
+\"\"#!\"\"F.*&\"\"'F.&F%6#F(F.F.*&F'F.&F%6#,&F(F.F.F0F.F0&F%6#,&F(F.F/
+F.F.*&F'F.&F%6#,&F(F.F.F.F.F0F.&%&DeltaG6#%#rhG!\"%" }}}{EXCHG {PARA 
+0 "" 0 "" {TEXT -1 160 "When the field is the transformed scalar field
+, we know that in the origin the 0-th, 1-st and 2-nd r-derivatives are
+ zero for the multipole components with l>0." }}{PARA 0 "" 0 "" {TEXT 
+-1 130 "Using this, we can regularize the ratio f/r^2 (with l>0) at th
+e point next to the origin (here i is the mesh index of the origin)." 
+}}{PARA 0 "" 0 "" {TEXT -1 101 "The necessary higher order derivatives
+ can be calculated numerically with M-th order accurate shceme." }}
+{PARA 0 "" 0 "" {TEXT -1 120 "Then, the below formula gives an M-th or
+der accurate approximation of  f/r^2 (with l>0) at the point next to t
+he origin." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "subs(f[0,i]=0
+, f[1,i]=0, f[2,i]=0, Meshvalue[M/2+1])/r(1*Delta[rh])^2;" }}{PARA 11 
+"" 1 "" {XPPMATH 20 "6#/*&-%\"rG6#&%&DeltaG6#%#rhG!\"#&%\"fG6#,&%\"iG
+\"\"\"F2F2F2*&F%F,,&*&#F2\"\"'F2*&)F(\"\"$F2&F.6$F:F1F2F2F2*&#F2\"#CF2
+*&)F(\"\"%F2&F.6$FBF1F2F2F2F2" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 247 
+"When the field is the transformed scalar field, we know that in the o
+rigin the 0-th, 1-st and 2-nd r-derivatives are zero for the multipole
+ components with l>0, furthermore the 0-th and 2-nd r-derivatives are \+
+zero for multipole component with l=0." }}{PARA 0 "" 0 "" {TEXT -1 96 
+"Plus we know that the reflected multipole component is (-1)^\{l+1\} t
+imes the multipole component." }}{PARA 0 "" 0 "" {TEXT -1 184 "We can \+
+also solve the above system of linear equations with these linear cons
+traints (i.e. we can take into account the above conditions when calcu
+lating the finite difference scheme)." }}{PARA 0 "" 0 "" {TEXT -1 127 
+"By doing so, one gets the following identities for the radial functio
+ns (separately for l=0, and for even and odd l, with l>0)." }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 74 "ConstraintsZeroL := \{ f[0,i]=0, f[
+2,i]=0 \} : for j from -M/2 by 1 to -1 do" }}{PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 66 "    ConstraintsZeroL := ConstraintsZeroL union \{ f[i
++j]=-f[i-j] \}:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 98 "od:  Constraints
+ZeroL := ConstraintsZeroL union \{ f[i]=0 \}:  ConstraintsZeroL := Con
+straintsZeroL;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1ConstraintsZeroLG
+<'/&%\"fG6$\"\"!%\"iGF*/&F(6$\"\"#F+F*/&F(6#,&F+\"\"\"F/!\"\",$&F(6#,&
+F+F4F/F4F5/&F(6#,&F+F4F4F5,$&F(6#,&F+F4F4F4F5/&F(6#F+F*" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 84 "ConstraintsEvenL := \{ f[0,i]=0, f[
+1,i]=0, f[2,i]=0 \}:  for j from -M/2 by 1 to -1 do" }}{PARA 0 "> " 0 
+"" {MPLTEXT 1 0 66 "    ConstraintsEvenL := ConstraintsEvenL union \{ \+
+f[i+j]=-f[i-j] \}:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 98 "od:  Constrai
+ntsEvenL := ConstraintsEvenL union \{ f[i]=0 \}:  ConstraintsEvenL := \+
+ConstraintsEvenL;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1ConstraintsEve
+nLG<(/&%\"fG6$\"\"!%\"iGF*/&F(6$\"\"\"F+F*/&F(6$\"\"#F+F*/&F(6#,&F+F/F
+3!\"\",$&F(6#,&F+F/F3F/F8/&F(6#,&F+F/F/F8,$&F(6#,&F+F/F/F/F8/&F(6#F+F*
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 84 "ConstraintsOddL  := \{ \+
+f[0,i]=0, f[1,i]=0, f[2,i]=0 \}:  for j from -M/2 by 1 to -1 do" }}
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "    ConstraintsOddL := ConstraintsO
+ddL union \{ f[i+j]=f[i-j] \}:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 94 "o
+d:  ConstraintsOddL := ConstraintsOddL union \{ f[i]=0 \}:  Constraint
+sOddL := ConstraintsOddL;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%0Constr
+aintsOddLG<(/&%\"fG6$\"\"!%\"iGF*/&F(6$\"\"\"F+F*/&F(6$\"\"#F+F*/&F(6#
+F+F*/&F(6#,&F+F/F3!\"\"&F(6#,&F+F/F3F//&F(6#,&F+F/F/F;&F(6#,&F+F/F/F/
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 65 "RegularizedMeshvaluesZe
+roL := subs(ConstraintsZeroL, Meshvalues);" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%;RegularizedMeshvaluesZeroLG<'/\"\"!F'/,$&%\"fG6#,&%
+\"iG\"\"\"F/F/!\"\",(*&&%&DeltaG6#%#rhGF/&F+6$F/F.F/F0*&#F/\"\"'F/*&)F
+3\"\"$F/&F+6$F>F.F/F/F0*&#F/\"#CF/*&)F3\"\"%F/&F+6$FFF.F/F/F//,$&F+6#,
+&F.F/\"\"#F/F0,(*(FNF/F3F/F7F/F0*&#FFF>F/F<F/F0*&#FNF>F/FDF/F//F*,(F2F
+/*&#F/F;F/F<F/F/*&FBF/FDF/F//FK,(*(FNF/F3F/F7F/F/*&#FFF>F/F<F/F/*&FTF/
+FDF/F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 65 "RegularizedMeshva
+luesEvenL := subs(ConstraintsEvenL, Meshvalues);" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%;RegularizedMeshvaluesEvenLG<'/\"\"!F'/&%\"fG6#,&%\"i
+G\"\"\"F.F.,&*&#F.\"\"'F.*&)&%&DeltaG6#%#rhG\"\"$F.&F*6$F9F-F.F.F.*&#F
+.\"#CF.*&)F5\"\"%F.&F*6$FAF-F.F.F./,$&F*6#,&F-F.\"\"#F.!\"\",&*&#FAF9F
+.F3F.FJ*&#FIF9F.F?F.F./,$F)FJ,&*&#F.F2F.F3F.FJ*&F=F.F?F.F./FF,&*&#FAF9
+F.F3F.F.*&FOF.F?F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 65 "Reg
+ularizedMeshvaluesOddL  := subs(ConstraintsOddL,  Meshvalues);" }}
+{PARA 12 "" 1 "" {XPPMATH 20 "6#>%:RegularizedMeshvaluesOddLG<'/\"\"!F
+'/&%\"fG6#,&%\"iG\"\"\"F.F.,&*&#F.\"\"'F.*&)&%&DeltaG6#%#rhG\"\"$F.&F*
+6$F9F-F.F.F.*&#F.\"#CF.*&)F5\"\"%F.&F*6$FAF-F.F.F./&F*6#,&F-F.\"\"#F.,
+&*&#FAF9F.F3F.F.*&#FHF9F.F?F.F./FE,&*&#FAF9F.F3F.!\"\"*&FMF.F?F.F./F),
+&*&#F.F2F.F3F.FR*&F=F.F?F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 
+0 66 "\{ solve(RegularizedMeshvaluesZeroL, \{ f[i+1], f[3,i], f[4,i] \+
+\}) \};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<#<%/&%\"fG6$\"\"%%\"iG\"\"
+!/&F'6$\"\"$F*,$*&#F/F)\"\"\"*&,&&F'6#,&F*F3\"\"#F3F3*(F9F3&%&DeltaG6#
+%#rhGF3&F'6$F3F*F3!\"\"F3F;!\"$F3F3/&F'6#,&F*F3F3F3,&*&F2F3*&F;F3F?F3F
+3F3*&#F3\"\")F3F6F3F3" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 66 "\{
+ solve(RegularizedMeshvaluesEvenL, \{ f[i+1], f[3,i], f[4,i] \}) \};" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#<#<%/&%\"fG6$\"\"%%\"iG\"\"!/&F'6$\"
+\"$F*,$*&#F/F)\"\"\"*&&%&DeltaG6#%#rhG!\"$&F'6#,&F*F3\"\"#F3F3F3F3/&F'
+6#,&F*F3F3F3,$*&#F3\"\")F3F:F3F3" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 66 "\{ solve(RegularizedMeshvaluesOddL,  \{ f[i+1], f[3,i
+], f[4,i] \}) \};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<#<%/&%\"fG6$\"\"
+$%\"iG\"\"!/&F'6$\"\"%F*,$*&#F)\"\"#\"\"\"*&&%&DeltaG6#%#rhG!\"%&F'6#,
+&F*F4F3F4F4F4F4/&F'6#,&F*F4F4F4,$*&#F4\"#;F4F;F4F4" }}}{EXCHG {PARA 0 
+"" 0 "" {TEXT -1 15 "=== Summary ===" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 
+-1 645 "The field has the following constraints at the origin, which f
+ollow from C^2 property of the original untransformed physical field: \+
+for l=0 the 0-th and 2-nd derivatives are zero, for l>0 the 0-th and 1
+-th and 2-nd derivatives are zero. The field has the following reflect
+ion constraint at the origin, which follows from the reflection proper
+ty of spherical harmonics: for any l the field is zero at the origin a
+nd the reflected field is (-1)^\{l+1\} times the original field. We re
+quire that the above constraints should exactly hold, and we use finit
+e difference scheme at the origin of 4-th order accuracy. This implies
+ the following relations." }}{PARA 0 "" 0 "" {TEXT -1 85 "- For the l=
+0: f[i+1]=1/8*f[i+2]+3/4*Delta\{rh\}*f[1,i] holds with 4-th order accu
+racy." }}{PARA 0 "" 0 "" {TEXT -1 68 "- For l>0, even l: f[i+1]=1/8*f[
+i+2] holds with 4-th order accuracy." }}{PARA 0 "" 0 "" {TEXT -1 68 "-
+ For l>0, odd l: f[i+1]=1/16*f[i+2] holds with 4-th order accuracy." }
+}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 83 "Now we can evaluate the first de
+rivative next to the origin with these constraints." }}}{EXCHG {PARA 
+0 "> " 0 "" {MPLTEXT 1 0 181 "Derivative1ZeroL := subs(f[i-1]=-f[i+1],
+ f[i]=0, f[i+1]=3/4*Delta[rh]*f[1,i]+1/8*f[i+2], subs(i=i+1, collect(s
+elect(has, Solution, f[1,i])[1]*Delta[rh]^1, Parameters)/Delta[rh]^1))
+;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1Derivative1ZeroLG/&%\"fG6$\"\"
+\",&%\"iGF)F)F)*&&%&DeltaG6#%#rhG!\"\",(*&#F)\"#7F)&F'6#,&F+F)\"\"$F)F
+)F1*&#F)\"#;F)*&F-F)&F'6$F)F+F)F)F1*&#\"#@\"#KF)&F'6#,&F+F)\"\"#F)F)F)
+F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 160 "Derivative1EvenL := \+
+subs(f[i-1]=-f[i+1], f[i]=0, f[i+1]=1/8*f[i+2], subs(i=i+1, collect(se
+lect(has, Solution, f[1,i])[1]*Delta[rh]^1, Parameters)/Delta[rh]^1));
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1Derivative1EvenLG/&%\"fG6$\"\"
+\",&%\"iGF)F)F)*&&%&DeltaG6#%#rhG!\"\",&*&#F)\"#7F)&F'6#,&F+F)\"\"$F)F
+)F1*&#\"#@\"#KF)&F'6#,&F+F)\"\"#F)F)F)F)" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 160 "Derivative1OddL  := subs(f[i-1]=f[i+1], f[i]=0, f[i+
+1]=1/16*f[i+2], subs(i=i+1, collect(select(has, Solution, f[1,i])[1]*D
+elta[rh]^1, Parameters)/Delta[rh]^1));" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#>%0Derivative1OddLG/&%\"fG6$\"\"\",&%\"iGF)F)F)*&&%&DeltaG6#%#rh
+G!\"\",&*&#F)\"#7F)&F'6#,&F+F)\"\"$F)F)F1*&#\"#V\"#kF)&F'6#,&F+F)\"\"#
+F)F)F)F)" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 84 "Now we can evaluate t
+he second derivative next to the origin with these constraints." }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 181 "Derivative2ZeroL := subs(f[
+i-1]=-f[i+1], f[i]=0, f[i+1]=3/4*Delta[rh]*f[1,i]+1/8*f[i+2], subs(i=i
++1, collect(select(has, Solution, f[2,i])[1]*Delta[rh]^2, Parameters)/
+Delta[rh]^2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1Derivative2ZeroLG
+/&%\"fG6$\"\"#,&%\"iG\"\"\"F,F,*&&%&DeltaG6#%#rhG!\"#,(*&#\"#H\"#;F,*&
+F.F,&F'6$F,F+F,F,!\"\"*&#\"#L\"#KF,&F'6#,&F+F,F)F,F,F,*&#F,\"#7F,&F'6#
+,&F+F,\"\"$F,F,F;F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 160 "Der
+ivative2EvenL := subs(f[i-1]=-f[i+1], f[i]=0, f[i+1]=1/8*f[i+2], subs(
+i=i+1, collect(select(has, Solution, f[2,i])[1]*Delta[rh]^2, Parameter
+s)/Delta[rh]^2));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%1Derivative2Eve
+nLG/&%\"fG6$\"\"#,&%\"iG\"\"\"F,F,*&&%&DeltaG6#%#rhG!\"#,&*&#\"#L\"#KF
+,&F'6#,&F+F,F)F,F,F,*&#F,\"#7F,&F'6#,&F+F,\"\"$F,F,!\"\"F," }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 160 "Derivative2OddL  := subs(f[i-1]=f[
+i+1], f[i]=0, f[i+1]=1/16*f[i+2], subs(i=i+1, collect(select(has, Solu
+tion, f[2,i])[1]*Delta[rh]^2, Parameters)/Delta[rh]^2));" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#>%0Derivative2OddLG/&%\"fG6$\"\"#,&%\"iG\"\"\"F,
+F,*&&%&DeltaG6#%#rhG!\"#,&*&#\"#v\"#kF,&F'6#,&F+F,F)F,F,F,*&#F,\"#7F,&
+F'6#,&F+F,\"\"$F,F,!\"\"F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+0 "" }}}}{MARK "34 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }
+{PAGENUMBERS 0 1 2 33 1 1 }
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/origo.tex b/include/gridripper/phys/gr/fixmp/kerrhiggs/origo.tex
new file mode 100644 (file)
index 0000000..ccac768
--- /dev/null
@@ -0,0 +1,126 @@
+%%%%%%%%%%%%%%%%%%%% DOCUMENT TYPE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[a4paper,11pt,reqno]{amsart}
+
+
+%%%%%%%%%%%%%%%%%%%% USED PACKAGES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[latin2]{inputenc}
+\usepackage{t1enc}
+
+
+%%%%%%%%%%%%%%%%%%%% THEOREM STYLES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newtheorem{Thm}{Theorem}
+\newtheorem{Col}[Thm]{Corollary}
+\newtheorem{Lem}[Thm]{Lemma}
+\theoremstyle{remark}\newtheorem{Rem}[Thm]{Remark}
+\theoremstyle{definition}\newtheorem{Def}[Thm]{Definition}
+\theoremstyle{example}\newtheorem{Exa}[Thm]{Example}
+\renewcommand{\qedsymbol}{\setlength{\unitlength}{1mm}\begin{picture}(2.5,2.5)\linethickness{2.5mm}\put(0,1.25){\line(1,0){2.5}}\end{picture}}
+
+
+%%%%%%%%%%%%%%%%%%%% FREQUENTLY USED SYMBOLS %%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\N}{\mathbb{N}}
+\newcommand{\Z}{\mathbb{Z}}
+\newcommand{\R}{\mathbb{R}}
+\newcommand{\C}{\mathbb{C}}
+\newcommand{\e}{\mathrm{e}}
+\newcommand{\I}{\mathrm{i}}
+\newcommand{\D}{\mathrm{d}}
+\newcommand{\W}{\mathrm{W}}
+\newcommand{\id}{\mathrm{id}}
+\newcommand{\dv}{\mathbf{dv}}
+\newcommand{\atanh}{\mathrm{atanh}}
+
+
+%%%%%%%%%%%%%%%%%%%% DOCUMENT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+
+%%%%%%%%%%%%%%%%%%%% DOCUMENT BODY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The wave equation in Minkowski spacetime in polar coordinates:
+\[\ddot{\Phi}=\frac{1}{r}(r\Phi)^{''}+\frac{1}{r^2}\Delta_{S^2}(\Phi).\]
+
+We may introduce $\Psi:=r\Phi$:
+\[\ddot{\Psi}=\Psi^{''}+\frac{1}{r^2}\Delta_{S^2}(\Psi).\]
+
+For the multipole coefficients of $\Psi$ we have:
+\[\ddot{\Psi}^{l}_{m}=\Psi^{l''}_{m}-\frac{l(l+1)}{r^2}\Psi^{l}_{m}.\]
+
+If $\Psi^{l}_{m}$ is analytic around the origin, we may express it via its 
+Taylor coefficients: $\Psi^{l}_{m}(t, r)=\sum_{k=0}^{\infty}\frac{1}{k!}\Psi^{l}_{m, k}(t)r^{k}$.
+
+With this, due to the local uniform convergence of the Taylor series we may interchange 
+differentiation and infinite sum:
+\[\sum_{k=0}^{\infty}\frac{1}{k!}\ddot{\Psi}^{l}_{m, k}(t)r^{k}=
+\sum_{k=2}^{\infty}\frac{1}{k!}\Psi^{l}_{m, k}(t)k(k-1)r^{k-2}
+-\sum_{k=0}^{\infty}\frac{l(l+1)}{k!}\Psi^{l}_{m, k}(t)r^{k-2}.\]
+We may reindex the sums:
+\[\sum_{k=0}^{\infty}\frac{1}{k!}\ddot{\Psi}^{l}_{m, k}(t)r^{k}=
+\sum_{k=0}^{\infty}\frac{1}{(k+2)!}\Psi^{l}_{m, k+2}(t)(k+1)(k+2)r^{k}
+-\sum_{k=-2}^{\infty}\frac{l(l+1)}{(k+2)!}\Psi^{l}_{m, k+2}(t)r^{k}.\]
+
+From the above we may separate the coefficients of $r^{-2}$, $r^{-1}$ and $r^{k}$ ($k\geq0$):
+\[l(l+1)\Psi^{l}_{m, 0}=0,\]
+\[l(l+1)\Psi^{l}_{m, 1}=0,\]
+\[\ddot{\Psi}^{l}_{m, k}=\frac{(k+1)(k+2)-l(l+1)}{(k+1)(k+2)}\Psi^{l}_{m, k+2}.\]
+
+Initially we already know that $\Psi=r\Phi$, therefore $\Psi^{l}_{m, 0}=0$ is 
+automatically satisfied. Thus:
+\[\Psi^{l}_{m, 0}=0,\]
+\[l(l+1)\Psi^{l}_{m, 1}=0,\]
+\[\ddot{\Psi}^{l}_{m, k}=\frac{(k+1)(k+2)-l(l+1)}{(k+1)(k+2)}\Psi^{l}_{m, k+2}.\]
+
+This is equivalent to:
+\[\Psi^{l}_{m, 0}=0,\]
+\[l\neq0 \Rightarrow \Psi^{l}_{m, 1}=0,\]
+\[\ddot{\Psi}^{l}_{m, k}=\frac{(k+1)(k+2)-l(l+1)}{(k+1)(k+2)}\Psi^{l}_{m, k+2}.\]
+It should be noted that the coefficient of the right side of the third equation 
+is zero if and only if $k=l-1$.
+
+If $l=0$:
+\[\Psi^{l}_{m, 0}=0,\]
+\[\ddot{\Psi}^{l}_{m, k}=\frac{(k+1)(k+2)-l(l+1)}{(k+1)(k+2)}\Psi^{l}_{m, k+2}.\]
+The coefficient of the right side is never zero, therefore we have:
+\[k\text{ is even }\Rightarrow\Psi^{l}_{m, k}=0.\]
+
+If $l=1$:
+\[\Psi^{l}_{m, 0}=0,\]
+\[\Psi^{l}_{m, 1}=0,\]
+\[\ddot{\Psi}^{l}_{m, k}=\frac{(k+1)(k+2)-l(l+1)}{(k+1)(k+2)}\Psi^{l}_{m, k+2}.\]
+The coefficient of the right side is zero only for $k=0$, therefore we have:
+\[k=0\text{ or }k\text{ is odd}\Rightarrow\Psi^{l}_{m, k}=0.\]
+
+If $l\geq2$:
+\[\Psi^{l}_{m, 0}=0,\]
+\[\Psi^{l}_{m, 1}=0,\]
+\[\ddot{\Psi}^{l}_{m, k}=\frac{(k+1)(k+2)-l(l+1)}{(k+1)(k+2)}\Psi^{l}_{m, k+2}.\]
+The coefficient of the right side is zero only for $k=l-1$, therefore we have:
+\[k<l+1\text{ or }(k\geq l+1\text{ and }k-(l+1)\text{ is odd})\Rightarrow\Psi^{l}_{m, k}=0.\]
+
+As a summary of the above three cases:
+\[k<l+1\text{ or }(k\geq l+1\text{ and }k-(l+1)\text{ is odd})\Rightarrow\Psi^{l}_{m, k}=0.\]
+
+Therefore, it follows that the $r$-parity of the analytic extension of 
+$\Psi^{l}_{m}$ around zero is $-(-1)^{l}$.
+
+It also follows that $\Psi^{l}_{m}$ begins as:
+\[\Psi^{l}_{m}(t, r)=\frac{1}{0!}0r^{0}+\frac{1}{1!}\Psi^{l}_{m, 1}(t)r^{1}+\frac{1}{2!}0r^{2}+\dots\;\;\;\;(l=0),\]
+\[\Psi^{l}_{m}(t, r)=\frac{1}{0!}0r^{0}+\frac{1}{1!}0r^{1}+\frac{1}{2!}\Psi^{l}_{m, 2}(t)r^2+\dots\;\;\;\;(l=1),\]
+\[\Psi^{l}_{m}(t, r)=\frac{1}{0!}0r^{0}+\frac{1}{1!}0r^{1}+\frac{1}{2!}0r^{2}+\dots\;\;\;\;(l\geq2).\]
+
+Therefore:
+\[\dot{\Psi}^{l}_{m}(t, 0)=0,\]
+\[\dot{\Psi_{t}}^{l}_{m}(t, 0)=0,\]
+\[\dot{\Psi_{r}}^{l}_{m}(t, 0)=0 \text{ (if }l\neq0),\]
+\[\dot{\Psi_{r}}^{l}_{m}(t, 0)={\Psi_{t}}^{l'}_{m}(t, 0) \text{ (if }l=0).\]
+Furthermore:
+\[\Psi^{l''}_{m}(t, 0)=0 \text{ (if }l\neq1).\]
+
+
+%% SPACE BETWEEN REFERENCES AND ADDRESS
+\vspace*{10mm}
+
+
+%%%%%%%%%%%%%%%%%%%% END %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\end{document}
+
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggs/packages.dox b/include/gridripper/phys/gr/fixmp/kerrhiggs/packages.dox
new file mode 100644 (file)
index 0000000..e074917
--- /dev/null
@@ -0,0 +1,7 @@
+/** \dir gridripper/phys/gr/fixmp/kerrhiggs
+Higgs field equation over Kerr-Newman spacetime.
+*/
+
+/** \namespace gridripper::phys::gr::fixmp::kerrhiggs
+Higgs field equation over Kerr-Newman spacetime.
+*/
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggshyp/Disk.h b/include/gridripper/phys/gr/fixmp/kerrhiggshyp/Disk.h
new file mode 100644 (file)
index 0000000..888a444
--- /dev/null
@@ -0,0 +1,142 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggshyp_Disk_h
+#define gridripper_phys_gr_fixmp_kerrhiggshyp_Disk_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+#include <gridripper/math.h>
+#include <sstream>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggshyp {
+
+
+using namespace gridripper;
+using namespace gridripper::util;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Accretion disk initial condition for Higgs equation with 
+ * multipole expansion method over Kerr spacetime, with 
+ * hyperboloidal slicing.
+ *
+ * @version 17/03/2010
+ * @since   17/03/2010
+ * @author  Andras Laszlo, Gabor Toth
+ */
+class Disk: public FuncInitCond
+{
+private:
+    /** Maximal multipole order. */
+    int maxOrder;
+    /** Maximal multipole order cutoff at initial surface. */
+    int maxOrderInit;
+    /** Array size of multipole vector. */
+    int arraySize;
+
+    /** Self interaction on/off. */
+    bool selfInteraction;
+    /**
+     * Equilibrium value of field 
+     * (used only when self interaction is on).
+     */
+    GReal_t phi0;
+    // The field is f=(phi-phi0)*r if selfinteraction is on, 
+    // otherwise f=phi*r.
+
+    /** Wave packet parameters */
+    /** Aplitude */
+    GReal_t amplitudeF, amplitudeFt;
+    /** Most probable x values in equatorial plane. */
+    GReal_t centerxF, centerxFt;
+    /** Width in x in equatorial plane. */
+    GReal_t widthxF, widthxFt;
+    /** Ramp length in x in equatorial plane. */
+    GReal_t rampxF, rampxFt;
+    /** Most probable z values in vertical coordinate. */
+    GReal_t centerzF, centerzFt;
+    /** Width in z in vertical coordinate. */
+    GReal_t widthzF, widthzFt;
+    /** Ramp length in z in vertical coordinate. */
+    GReal_t rampzF, rampzFt;
+    /** Phase parameters in \f$t\f$ and \f$\varphi\f$ direction. */
+    GReal_t omegaInit, mInit;
+    /** Field discretization. */
+    int fieldDiscret;
+    /** Norm limit for tail error tolerance check. */
+    GReal_t normLimit;
+    /** Multipole expansion tail error tolerance. */
+    GReal_t tailErrorTolerance;
+
+    /** Blackhole parameters */
+    GReal_t M;
+    GReal_t a;
+    GReal_t e;
+    bool isMinkowski;
+
+    /** Minimal and maximal spatial coordinates. */
+    GReal_t minR;
+    GReal_t maxR;
+
+    /** Initial time. */
+    GReal_t T0;
+
+    /** Variables for expansion and error control. */
+    enum norm_T { None, L2, C0, Bound };
+    enum norm_T Norm;
+#ifndef HAVE_AGM
+    tvector<GReal_t> theta;
+    tvector<GReal_t> phi;
+    tvector< tvector<GComplex_t> > field;
+    tvector< tvector<GComplex_t> > fieldt;
+    tvector< tvector<GReal_t> > fieldBuff;
+    tvector< tvector<GReal_t> > fieldTBuff;
+    tvector< tvector<GReal_t> > fieldBuffDiff;
+    tvector< tvector<GReal_t> > fieldtBuffDiff;
+    tvector<GReal_t> intdphiF;
+    tvector<GReal_t> intdphiFt;
+    tvector<GReal_t> intdphiDiffF;
+    tvector<GReal_t> intdphiDiffFt;
+#endif
+
+    /** Time and radius. */
+    GReal_t t, r;
+
+    /** Start time, current time. */
+    unsigned int tstart, tnow;
+
+    /** Maximum norms to measure C^0 error of tail error. */
+    GReal_t maxNormF;
+    GReal_t maxNormFt;
+    GReal_t maxNormDiffF;
+    GReal_t maxNormDiffFt;
+    
+    /** Message string. */
+    ostringstream message;
+
+public:
+    Disk(string& args, const Parameters* p, const PDE& pde)
+        throw(InitCond::Exception&, IllegalArgumentException&);
+    ~Disk();
+    //GReal_t getTime() const;
+
+    void init(PDE* pde, GReal_t rh, FieldWrapper& v)
+       throw(InitCond::Exception&);
+
+    /** Function form of initial condition. */
+    GComplex_t funcF(const GReal_t theta, const GReal_t phi) const;
+    GComplex_t funcFt(const GReal_t theta, const GReal_t phi) const;
+
+    //string getMessage() const;
+
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggshyp
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggshyp_Disk_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggshyp/Factory.h b/include/gridripper/phys/gr/fixmp/kerrhiggshyp/Factory.h
new file mode 100644 (file)
index 0000000..295d704
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggshyp_Factory_h
+#define gridripper_phys_gr_fixmp_kerrhiggshyp_Factory_h
+#include <gridripper/factory_inc.h>
+
+/**
+ * Factory for KG field over Kerr spacetime 
+ * (multipole expansion is used). Hyperbolized Boyer-Lindquist 
+ * coordinates are used.
+ *
+ * @since   17/03/2010
+ * @author  Andras Laszlo, Gabor Toth
+ */
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggshyp {
+#include <gridripper/factory_decl.h>
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggshyp;
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggshyp_Factory_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggshyp/Hunch.h b/include/gridripper/phys/gr/fixmp/kerrhiggshyp/Hunch.h
new file mode 100644 (file)
index 0000000..7316611
--- /dev/null
@@ -0,0 +1,91 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggshyp_Hunch_h
+#define gridripper_phys_gr_fixmp_kerrhiggshyp_Hunch_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggshyp {
+
+
+using namespace gridripper;
+using namespace gridripper::util;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Wave packet initial condition for Higgs equation with 
+ * multipole expansion method over Kerr spacetime with 
+ * hyperboloidal slicing.
+ *
+ * @version 17/03/2010
+ * @since   17/03/2010
+ * @author  Andras Laszlo, Gabor Toth
+ */
+class Hunch: public FuncInitCond
+{
+private:
+    /** Maximal multipole order. */
+    int maxOrder;
+    /** Array size of multipole vector. */
+    int arraySize;
+
+    /** Self interaction on/off. */
+    bool selfInteraction;
+    /**
+     * Equilibrium value of field 
+     * (used only when self interaction is on).
+     */
+    GReal_t phi0;
+    // The field is f=(phi-phi0)*r if selfinteraction is on, 
+    // otherwise f=phi*r.
+
+    /** Wave packet parameters. */
+    GReal_t amplitudeF, centerF, widthF, rampF;
+    /** Angular momentum quantum numbers. */
+    int lF, mF;
+    /** Wave packet parameters. */
+    GReal_t amplitudeFt, centerFt, widthFt, rampFt;
+    /** Angular momentum quantum numbers. */
+    int lFt, mFt;
+    /** Energy parameter. */
+    GReal_t omega;
+
+    /** Blackhole parameters */
+    GReal_t M;
+    GReal_t A;
+    //GReal_t e;
+    bool isMinkowski;
+
+    /** Minimal and maximal spatial coordinates. */
+    GReal_t minR;
+    GReal_t maxR;
+
+    /** Initial time. */
+    GReal_t T0;
+
+    /** Message string. */
+    string message;
+
+public:
+    Hunch(string& args, const Parameters* p, const PDE& pde)
+         throw(InitCond::Exception&, IllegalArgumentException&);
+    ~Hunch();
+    GReal_t getTime() const;
+
+    void init(PDE* pde, GReal_t R, FieldWrapper& v)
+       throw(InitCond::Exception&);
+
+    string getMessage() const;
+};
+
+
+} } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggshyp
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggshyp_Hunch_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrHiggsHyp.h b/include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrHiggsHyp.h
new file mode 100644 (file)
index 0000000..d82ed7d
--- /dev/null
@@ -0,0 +1,286 @@
+#ifndef gridripper_phys_gr_fixmp_kerrhiggshyp_KerrHiggsHyp_h
+#define gridripper_phys_gr_fixmp_kerrhiggshyp_KerrHiggsHyp_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/lang/IllegalArgumentException.h>
+#include <gridripper/multipole/ScalarFieldMP.h>
+
+#include <time.h> 
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrhiggshyp {
+
+
+using namespace gridripper;
+using namespace gridripper::multipole;
+using namespace std;
+
+
+//////  Moncrief tipusu kompaktifikacio   ////////
+
+
+/**
+ * The actually evolved field is \f$\Omega\phi\f$ in the accordingly transformed 
+ * field equation.  XXX
+ * 
+ * @version 08/04/2010
+ * @since   17/03/2010
+ * @author  Andras Laszlo, Gabor Zsolt Toth
+ */
+class KerrHiggsHyp: public PDE
+{
+public:
+    static const GReal_t EPSILON=1e-8;
+
+    /* Field component indices. */
+    enum { ind_f=0, ind_fT=1, ind_fR=2 };
+
+    /** Maximal multipole order (>=0), calculated by the Factory. */
+    const int maxOrder;
+    /**
+     * Size of a multipole array, 
+     * (maxOrder+1)*(maxOrder+1)*sizeof(GComplex_t)/sizeof(GReal_t).
+     * Calculated by the Factory.
+     */
+    const int arraySize;
+
+    /** Indices of field component sectors. */
+    const int I_f;     // <- ind_f*arraySize
+    const int I_fT;    // <- ind_fT*arraySize
+    const int I_fR;    // <- ind_fR*arraySize
+    /** Number of independent components. */
+    static const int NUM_INDEP_COMPS=2;
+    /** Number of constraints. */
+    static const int NUM_CONSTRAINTS=1;
+    /** Number of all components (independent+constraints). */
+    static const int NUM_COMPS=NUM_INDEP_COMPS+NUM_CONSTRAINTS;
+
+    /** Component and constraint names, and coordinate labels. */
+    static const string COMP_NAMES[NUM_COMPS];
+    static const string CONSTRAINT_NAMES[NUM_CONSTRAINTS];
+    static const string COORD_LABELS[2];
+
+private:
+
+    /** Result vector (time derivative). */
+    tvalarray<GReal_t> df;
+
+    /** Parameters of Kerr spacetime. */
+    GReal_t M;         // <- mass
+    GReal_t A;         // <- angular momentum
+//    GReal_t e;               // <- charge
+   // GReal_t K;          // koordinatarendszer K parametere XXX
+    
+
+    /** Parameters of Higgs field equation. */
+//    GReal_t lambda;    // <- self coupling constant
+//    GReal_t phi0;      // <- equilibrium field value
+    // (mass=2*sqrt(lambda)*phi0)
+    /** Self interaction (on/off). */
+//    bool selfInteraction;
+    /** 
+     * True if real(f) and imag(f) is also massive (when 
+     * selfInteraction==true), false if only real(f) is massive as in 
+     * normal Higgs case.
+     */
+//    bool allmassive;
+    // The field is f=(phi-phi0)*r in the simulation if selfinteration 
+    // is on, otherwise f=phi*r.
+    /** Charge of the field. */
+//    GReal_t q;
+
+    /** Minimal and maximal spatial coordinate. */
+    GReal_t minR;
+    GReal_t maxR;
+    /** Limits of integration domain for integrated quantities. */
+    GReal_t minRIntq;
+    GReal_t maxRIntq;
+
+    /** Auxiliary quantities. */
+    // coefficients appearing in the diff. eq.
+    GReal_t c0;
+    GReal_t cP;
+    GReal_t cR;
+    GReal_t cT;
+    GReal_t cRP;
+    GReal_t cTP;
+    GReal_t cTR;
+    GReal_t cRR;
+    
+    GReal_t R2,R3,R4,R5,R6,R7,R8,R9,R10,R11;
+    // GReal_t K2,K3,K4;  // XXX
+    GReal_t M2,M3,M4; // XXX
+    GReal_t A2,A3,A4;  // XXX
+    GReal_t AA,BB,aa,bb;  // XXX
+    GReal_t c00,c01,c02,c03,c04,c05,c06,c07,c08,c09;
+    GReal_t cR0,cR1,cR2,cR3,cR4,cR5,cR6,cR7,cR8,cR9,cR10,cR11;
+    GReal_t cT0,cT1,cT2,cT3,cT4,cT5,cT6,cT7,cT8,cT9,cT10;
+   // GReal_t cTR0,cTR1,cTR2,cTR3,cTR4,cTR5,cTR6;
+    GReal_t AA0,AA1,AA2,AA3,AA4,AA5,AA6,AA7; // XXX
+    
+    GReal_t Rprev;
+    bool teszt;
+    int teszt2;
+    time_t time1,time2;
+    
+    mutable ScalarFieldMP<GComplex_t> DEN;
+    mutable GComplex_t H2S2DENDEN;
+    mutable GComplex_t scale;
+    mutable ScalarFieldMP<GComplex_t> scaledDEN;
+    
+    mutable ScalarFieldMP<GComplex_t> aux;
+    
+    GReal_t neumannTolerance;
+
+    /* Start time. */
+    GReal_t T0;
+    /** Start coordinate of light ray. */
+//    GReal_t R0;
+
+    /** R coordinate of the horizon. */
+    static GReal_t horizon;
+    /** Flag is set to true if M==0: */
+    static bool isMinkowski;
+    /**
+     * Identifier of transformed r coordinate.
+     * 0: R=
+     */
+    static int transformedR;
+
+    /** Bits to store the exclude flags. */
+    int exclude;
+
+public:
+
+    KerrHiggsHyp(const Parameters* p, const int maxorder, const int arraysize) throw(IllegalArgumentException&);
+
+    ~KerrHiggsHyp();
+
+    GReal_t getMinX() const;
+    GReal_t getMaxX() const;
+    GReal_t getPhysicalMinX() const;
+    GReal_t getPhysicalMaxX() const;
+    bool isXPeriodic() const;
+
+    /** Evaluate the equation. This is the key algorithm. */
+    int eval(GReal_t* dF, GReal_t T, GReal_t R,
+            const GReal_t* F, const GReal_t* F_R,
+            const Grid& G, int i, Grad& d, GReal_t dT);
+
+    /**
+     * Evaluate the constraints. This is also a key algorithm.
+     *
+     * @param G : the grid
+     * @param i : the position index
+     * @param v : result array
+     */
+    void evalConstrainedComponents(Grid& G, int i, FieldWrapper& v);
+
+    FieldWrapper* createField(int level) const;
+
+    GReal_t energyDensity(GReal_t T, GReal_t R,
+                         const tvalarray<GReal_t>& F) const;
+
+    GReal_t energyFlow(GReal_t T, GReal_t R,
+                      const tvalarray<GReal_t>& F) const;
+
+    GReal_t angmomDensity(GReal_t T, GReal_t R,
+                         const tvalarray<GReal_t>& F) const;
+
+    GReal_t angmomFlow(GReal_t T, GReal_t R,
+                      const tvalarray<GReal_t>& F) const;
+
+    /**
+     * Can the field be extended beyond the specified bound?
+     * @param where : the grid index
+     */
+    bool canBeExtended(int where) const;
+
+    /** Extend left side. */
+    void mirrorLeft(GReal_t rh, FieldWrapper& f) const;
+
+    /** Extend right side. */
+    void mirrorRight(GReal_t rh, FieldWrapper& f) const;
+
+    /**
+     * Tests whether refined field data exists at a given point.
+     * @param g : the grid
+     * @param i : refined grid point index
+     * @return <code>true</code> : if the specified point contains refined
+     *         field data
+     */
+    bool hasExtendedRefinedFieldData(const Grid& G, int i) const;
+
+    /** Energy calculation. */
+    class Energy: public DensityQuantity {
+    private:
+       const KerrHiggsHyp& pde;
+    public:
+       Energy(const KerrHiggsHyp* p): DensityQuantity(p), pde(*p) { }
+       GReal_t density(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                       const {
+           return pde.energyDensity(t, rh, F);
+       }
+       GReal_t flow(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F) const {
+           return pde.energyFlow(t, rh, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new Energy(&pde);
+       }
+    };
+    Energy theEnergy;
+
+    /** Angular momentum calculation. */
+    class Angmom: public DensityQuantity {
+    private:
+       const KerrHiggsHyp& pde;
+    public:
+       Angmom(const KerrHiggsHyp* p): DensityQuantity(p), pde(*p) { }
+       GReal_t density(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                       const {
+           return pde.angmomDensity(t, rh, F);
+       }
+       GReal_t flow(GReal_t t, GReal_t rh, const tvalarray<GReal_t>& F)
+                    const {
+           return pde.angmomFlow(t, rh, F);
+       }
+       DensityQuantity* cloneDensityQuantity() const {
+           return new Angmom(&pde);
+       }
+    };
+    Angmom theAngmom;
+
+    /** Get the density quantities. */
+    PhysicalQuantityArray getPhysicalQuantities() const;
+
+    /** Integrated quantity integration domain limit. */
+    class IntqBorder : public MarkerQuantity
+    {
+       private:
+           const GReal_t position;
+       public:
+           IntqBorder(const PDE* eq, GReal_t positionarg)
+            : MarkerQuantity(eq), position(positionarg)
+           {  }
+           ~IntqBorder() {  }
+           std::string getQuantityName() const { return "IntqBorder"; }
+           GReal_t eval(GReal_t t);
+           MarkerQuantity* cloneMarkerQuantity() const
+           { return new IntqBorder(&getPDE(), position); }
+    };
+
+private:
+    static tvector<string> componentNames(int maxOrder);
+    static tvector<string> constraintNames(int maxOrder);
+
+};
+
+
+} } } } }    // namespace gridripper::phys::gr::fixmp::kerrhiggshyp
+
+
+#endif /* gridripper_phys_gr_fixmp_kerrhiggshyp_KerrHiggsHyp_h */
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrNewmanHyp.mpl b/include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrNewmanHyp.mpl
new file mode 100644 (file)
index 0000000..75ed741
--- /dev/null
@@ -0,0 +1,14 @@
+Ndim_ :=   4    :
+x1_   :=   T    :
+x2_   :=   R    :
+x3_   :=   theta:
+x4_   :=   psi  :
+g11_  :=   G11  :
+g12_  :=   G12  :
+g14_  :=   G14  :
+g22_  :=   G22  :
+g24_  :=   G24  :
+g33_  :=   G33  :
+g44_  :=   G44  :
+
+Info_ := `        Kerr-Newman metric in transformed Boyer-Linquist coordinates, with signature (1,-1,-1,-1).`:
diff --git a/include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrNewmanHyp.mws b/include/gridripper/phys/gr/fixmp/kerrhiggshyp/KerrNewmanHyp.mws
new file mode 100644 (file)
index 0000000..96a65c6
--- /dev/null
@@ -0,0 +1,823 @@
+{VERSION 6 0 "IBM INTEL LINUX" "6.0" }
+{USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 1 12 255 0 0 1 2 1 2 
+2 1 2 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 
+0 0 0 1 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 
+}{CSTYLE "2D Output" -1 20 "Times" 1 12 0 0 255 1 2 2 2 2 2 2 0 0 0 1 
+}{CSTYLE "_cstyle39" -1 200 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 0 0 
+0 1 }{CSTYLE "_cstyle35" -1 206 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 0 0 
+0 1 }{CSTYLE "_cstyle34" -1 209 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 0 0 
+0 1 }{CSTYLE "_cstyle36" -1 213 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 
+0 0 0 1 }{CSTYLE "_cstyle38" -1 214 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 
+0 0 0 1 }{CSTYLE "_cstyle78" -1 256 "Courier" 1 12 255 0 0 1 0 1 0 2 
+1 2 0 0 0 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 
+0 0 1 2 2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Text
+ Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 
+3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Line Printed Output
+" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 0 0 
+1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" 
+-1 -1 "" 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 
+0 -1 0 }{PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 
+0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Outpu
+t" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }
+3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "Left Justified Maple Output" 
+-1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 
+1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle55" -1 200 1 {CSTYLE "" 
+-1 -1 "Courier" 1 12 255 0 0 1 2 1 2 2 1 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 
+0 2 2 -1 1 }{PSTYLE "_pstyle62" -1 204 1 {CSTYLE "" -1 -1 "Courier" 1 
+12 255 0 0 1 2 1 2 2 1 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }
+{PSTYLE "_pstyle54" -1 206 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 
+2 2 2 2 2 1 0 0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle60" 
+-1 208 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }1 
+1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle59" -1 209 1 {CSTYLE "" 
+-1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 
+2 -1 1 }{PSTYLE "_pstyle58" -1 215 1 {CSTYLE "" -1 -1 "Times" 1 12 0 
+0 0 1 2 2 2 2 2 2 1 0 0 1 }3 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pst
+yle53" -1 222 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 0 
+0 1 }1 1 0 0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "" 0 256 1 {CSTYLE "" -1 
+-1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 
+0 }{PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "_pstyle147" -1 258 1 
+{CSTYLE "" -1 -1 "Courier" 1 12 255 0 0 1 0 1 0 2 1 2 1 0 0 1 }1 1 0 
+0 0 0 2 0 2 0 2 2 -1 1 }{PSTYLE "_pstyle149" -1 259 1 {CSTYLE "" -1 
+-1 "Courier" 1 12 255 0 0 1 0 1 0 2 1 2 0 0 0 1 }1 1 0 0 0 0 2 0 2 0 
+2 2 -1 1 }{PSTYLE "" 0 260 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 261 1 
+{CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 
+0 0 0 0 0 -1 0 }}
+{SECT 0 {EXCHG {PARA 222 "" 0 "" {TEXT 209 74 "Kerr-Newman metric calc
+ulations in transformed Boyer-Lindquist coordinates" }}}{EXCHG {PARA 
+206 "" 0 "" {TEXT 206 21 "Restart maple server." }}}{EXCHG {PARA 200 "
+> " 0 "" {MPLTEXT 1 213 8 "restart;" }}}{EXCHG {PARA 206 "" 0 "" 
+{TEXT 206 16 "Load GRTensorII." }{XPPEDIT 18 0 "conj;" "6#%%conjG" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 7 "grtw();" }}{PARA 11 "" 1 
+"" {XPPMATH 20 "6#%=GRTensorII~Version~1.79~(R4)G" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#%06~February~2001G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%
+ZDeveloped~by~Peter~Musgrave,~Denis~Pollney~and~Kayll~LakeG" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#%DCopyright~1994-2001~by~the~authors.G" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#%inLatest~version~available~from:~http
+://grtensor.phy.queensu.ca/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%8/usr
+/local/grii/metricsG" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 49 "Introd
+uce aliases to suppress function arguments." }}}{EXCHG {PARA 200 "> " 
+0 "" {MPLTEXT 1 213 126 "alias(G11=G11(R,theta),G12=G12(R,theta),G14=G
+14(R,theta),G22=G22(R,theta),G24=G24(R,theta),G33=G33(R,theta),G44=G44
+(R,theta));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6)%$G11G%$G12G%$G14G%$G22
+G%$G24G%$G33G%$G44G" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 24 "Load Ke
+rr-Newman metric." }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 46 "gr
+OptionMetricPath:=\".\"; qload(KerrNewmanHyp);" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#>%3grOptionMetricPathGQ\".6\"" }}{PARA 6 "" 1 "" {TEXT 
+-1 47 "Calculated ds for KerrNewmanHyp (0.000000 sec.)" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#/%2Default~spacetimeG%.KerrNewmanHypG" }}{PARA 11 
+"" 1 "" {XPPMATH 20 "6#%AFor~the~KerrNewmanHyp~spacetime:G" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#%,CoordinatesG" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#-%\"xG6#%#upG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#x~G%\"aGK%'
+vectorG6#7&%\"TG%\"RG%&thetaG%$psiGQ(pprint06\"" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#%-Line~elementG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/*$)
+%$~dsG\"\"#\"\"\",0*(%$G11GF(%#~dGF()%\"TG%#2~GF(F(*.F'F(%$G12GF(F,F()
+F.%\"~GF(%#d~GF()%\"RGF3F(F(*.F'F(%$G14GF(F,F(F2F(F4F()%$psiGF3F(F(*(%
+$G22GF(F,F()F6F/F(F(*.F'F(%$G24GF(F,F(F5F(F4F(F9F(F(*(%$G33GF(F,F()%&t
+hetaGF/F(F(*(%$G44GF(F,F()F:F/F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#
+%]q~~~~~~~~Kerr-Newman~metric~in~transformed~Boyer-Linquist~coordinate
+s,~with~signature~(1,-1,-1,-1).G" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 19 "complexSet_:=\{Phi\};" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#>%,complexSet_G<#%$PhiG" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 
+63 "Introduce substitution rules to resolve function abbreviations." }
+}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 138 "#Resolution:=\{ Delta
+=r^2+a^2+e^2-2*M*r, Sigma=r^2+a^2*cos(theta)^2, Gamma=(r^2+a^2)^2-a^2*
+Delta*sin(theta)^2, Omega=a*(2*M*r-e^2)/Gamma \};" }}}{EXCHG {PARA 
+200 "> " 0 "" {MPLTEXT 1 213 29 "grmap(metric, simplify, `x`);" }}
+{PARA 6 "" 1 "" {TEXT -1 37 "Applying routine simplify to g(dn,dn)" }}
+}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 19 "grdisplay(metric);\n" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#%AFor~the~KerrNewmanHyp~spacetime:G" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#%8Covariant~metric~tensorG" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#-%\"gG6$%#dnGF&" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/*&&%#g~G6#%\"aG\"\"\"&%!G6#%\"bGF)K%'matrixG6#7&7&%$G1
+1G%$G12G\"\"!%$G14G7&F4%$G22GF5%$G24G7&F5F5%$G33GF57&F6F9F5%$G44GQ(ppr
+int06\"" }}}{EXCHG {PARA 206 "" 0 "" {TEXT 206 23 "Define vectorpotent
+ial." }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 38 "grdef ( `A\{a\}
+ := [ A1, A2, 0, A4 ]` );" }}{PARA 6 "" 1 "" {TEXT -1 45 "Components a
+ssigned for metric: KerrNewmanHyp" }}{PARA 6 "" 1 "" {TEXT -1 28 "Crea
+ted definition for A(dn)" }}}{EXCHG {PARA 215 "" 0 "" {TEXT 206 89 "==
+=== Calculate gauge-covariant divergence of the vectorpotential (shoul
+d be zero). =====" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 42 "gr
+define( GKDA, \{\}, `A\{a ;b\}*g\{ ^a ^b\}` );" }}{PARA 6 "" 1 "" 
+{TEXT -1 34 "Created a definition for A(dn,cdn)" }}{PARA 6 "" 1 "" 
+{TEXT -1 27 "Created definition for GKDA" }}}{EXCHG {PARA 200 "> " 0 "
+" {MPLTEXT 1 213 13 "grcalc(GKDA);" }}{PARA 6 "" 1 "" {TEXT -1 49 "Cal
+culated detg for KerrNewmanHyp (0.000000 sec.)" }}{PARA 6 "" 1 "" 
+{TEXT -1 53 "Calculated g(up,up) for KerrNewmanHyp (0.004000 sec.)" }}
+{PARA 6 "" 1 "" {TEXT -1 57 "Calculated g(dn,dn,pdn) for KerrNewmanHyp
+ (0.004000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 58 "Calculated Chr(dn,dn,
+dn) for KerrNewmanHyp (0.000000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 58 "
+Calculated Chr(dn,dn,up) for KerrNewmanHyp (0.064000 sec.)" }}{PARA 6 
+"" 1 "" {TEXT -1 54 "Calculated A(dn,cdn) for KerrNewmanHyp (0.028000 \+
+sec.)" }}{PARA 6 "" 1 "" {TEXT -1 49 "Calculated GKDA for KerrNewmanHy
+p (0.012000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"$
+7\"!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 16 "grdisplay(GK
+DA);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%AFor~the~KerrNewmanHyp~spacet
+ime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%GKDAG" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%%GKDAG%K~11881~words.~Exceeds~grOptionDisplayLimitG" 
+}}}{EXCHG {PARA 215 "" 0 "" {TEXT 206 81 "===== Calculate gauge-covari
+ant d'Alembert operator on charged scalar field.=====" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 83 "alias(Phi=Phi(T,R,theta,psi)); \+
+alias(conjugate(Phi)=conjugate(Phi)(T,R,theta,psi));" }}{PARA 11 "" 1 
+"" {XPPMATH 20 "6+%$G11G%$G12G%$G14G%$G22G%$G24G%$G33G%$G44G%$PhiG-%*c
+onjugateG6#F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6+%$G11G%$G12G%$G14G%$G
+22G%$G24G%$G33G%$G44G%$PhiG-%*conjugateG6#F*" }}}{EXCHG {PARA 200 "> \+
+" 0 "" {MPLTEXT 1 213 27 "grdefine( `P`, \{\}, `Phi` );" }}{PARA 6 "" 
+1 "" {TEXT -1 24 "Created definition for P" }}}{EXCHG {PARA 0 "> " 0 "
+" {MPLTEXT 1 0 41 "grdefine( `Pbar`, \{\}, `conjugate(Phi)` );" }}
+{PARA 6 "" 1 "" {TEXT -1 27 "Created definition for Pbar" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 49 "grdefine( `GKDPhi\{a\}`, \{\}, \+
+`P\{ ,a\}-I*q*A\{a\}*P` );" }}{PARA 6 "" 1 "" {TEXT -1 31 "Created a d
+efinition for P(pdn)" }}{PARA 6 "" 1 "" {TEXT -1 33 "Created definitio
+n for GKDPhi(dn)" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 42 "grc
+alc(GKDPhi(dn));\ngrdisplay(GKDPhi(dn));" }}{PARA 6 "" 1 "" {TEXT -1 
+46 "Calculated P for KerrNewmanHyp (0.000000 sec.)" }}{PARA 6 "" 1 "" 
+{TEXT -1 51 "Calculated P(pdn) for KerrNewmanHyp (0.000000 sec.)" }}
+{PARA 6 "" 1 "" {TEXT -1 55 "Calculated GKDPhi(dn) for KerrNewmanHyp (
+0.004000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"%!
+\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%AFor~the~KerrNewmanHyp~spaceti
+me:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%+GKDPhi(dn)G" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#-%'GKDPhiG6#%#dnG" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#/&%'GKDPhiG6#%\"aGK%'vectorG6#7&,&-%%diffG6$%$PhiG%\"TG\"\"\"**^#!
+\"\"F2%\"qGF2%#A1GF2F0F2F2,&-F.6$F0%\"RGF2**F4F2F6F2%#A2GF2F0F2F2-F.6$
+F0%&thetaG,&-F.6$F0%$psiGF2**F4F2F6F2%#A4GF2F0F2F2Q(pprint06\"" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "grcalc(GKDPhi(up));\ngrdispl
+ay(GKDPhi(up));" }}{PARA 6 "" 1 "" {TEXT -1 34 "Created definition for
+ GKDPhi(up) " }}{PARA 6 "" 1 "" {TEXT -1 55 "Calculated GKDPhi(up) for
+ KerrNewmanHyp (0.012000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*C
+PU~Time~G$\"#C!\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%AFor~the~KerrNe
+wmanHyp~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%+GKDPhi(up)G" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'GKDPhiG6#%#upG" }}{PARA 12 "" 1 "
+" {XPPMATH 20 "6#/)%'GKDPhiG%\"TG,$*&,:*(%$G22G\"\"\"%$G44GF,-%%diffG6
+$%$PhiG%\"TGF,F,*.^#!\"\"F,F+F,F-F,%\"qGF,%#A1GF,F1F,F,*&)%$G24G\"\"#F
+,F.F,F5*,F9F,F6F,F7F,F1F,^#F,F,F,*(%$G14GF,F:F,-F/6$F1%\"RGF,F,*.F4F,F
+?F,F:F,F6F,%#A2GF,F1F,F,*(%$G12GF,F-F,F@F,F5*.FFF,F-F,F6F,FDF,F1F,F=F,
+F,*(FFF,F:F,-F/6$F1%$psiGF,F,*.F4F,FFF,F:F,F6F,%#A4GF,F1F,F,*(F?F,F+F,
+FIF,F5*.F?F,F+F,F6F,FMF,F1F,F=F,F,F,,,*(%$G11GF,F+F,F-F,F5**F;F,FFF,F?
+F,F:F,F5*&FRF,F9F,F,*&F+F,)F?F;F,F,*&F-F,)FFF;F,F,F5F5" }}{PARA 12 "" 
+1 "" {XPPMATH 20 "6#/)%'GKDPhiG%\"RG*&,:*(%$G14G\"\"\"%$G24GF+-%%diffG
+6$%$PhiG%\"TGF+!\"\"*.F*F+F,F+%\"qGF+%#A1GF+F0F+^#F+F+F+*(%$G12GF+%$G4
+4GF+F-F+F+*.^#F2F+F8F+F9F+F4F+F5F+F0F+F+*(%$G11GF+F9F+-F.6$F0%\"RGF+F2
+*.F=F+F9F+F4F+%#A2GF+F0F+F6F+F+*&)F*\"\"#F+F>F+F+*,F;F+FDF+F4F+FBF+F0F
++F+*(F8F+F*F+-F.6$F0%$psiGF+F2*.F8F+F*F+F4F+%#A4GF+F0F+F6F+F+*(F=F+F,F
++FHF+F+*.F;F+F=F+F,F+F4F+FLF+F0F+F+F+,,*(F=F+%$G22GF+F9F+F2**FEF+F8F+F
+*F+F,F+F2*&F=F+)F,FEF+F+*&FQF+FDF+F+*&F9F+)F8FEF+F+F2" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#/)%'GKDPhiG%&thetaG*&%$G33G!\"\"-%%diffG6$%$PhiG%&
+thetaG\"\"\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/)%'GKDPhiG%$psiG*&,:*
+(%$G12G\"\"\"%$G24GF+-%%diffG6$%$PhiG%\"TGF+!\"\"*.F*F+F,F+%\"qGF+%#A1
+GF+F0F+^#F+F+F+*(%$G14GF+%$G22GF+F-F+F+*.^#F2F+F8F+F9F+F4F+F5F+F0F+F+*
+(F*F+F8F+-F.6$F0%\"RGF+F2*.F*F+F8F+F4F+%#A2GF+F0F+F6F+F+*(%$G11GF+F,F+
+F=F+F+*.F;F+FCF+F,F+F4F+FAF+F0F+F+*(FCF+F9F+-F.6$F0%$psiGF+F2*.FCF+F9F
++F4F+%#A4GF+F0F+F6F+F+*&)F*\"\"#F+FFF+F+*,F;F+FLF+F4F+FJF+F0F+F+F+,,*(
+FCF+F9F+%$G44GF+F2**FMF+F*F+F8F+F,F+F2*&FCF+)F,FMF+F+*&F9F+)F8FMF+F+*&
+FQF+FLF+F+F2" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "grdefine( `
+GKDPhibar\{a\}`, \{\}, `Pbar\{ ,a\}+I*q*A\{a\}*Pbar` );" }}{PARA 6 "" 
+1 "" {TEXT -1 34 "Created a definition for Pbar(pdn)" }}{PARA 6 "" 1 "
+" {TEXT -1 36 "Created definition for GKDPhibar(dn)" }}}{EXCHG {PARA 
+0 "> " 0 "" {MPLTEXT 1 0 48 "grcalc(GKDPhibar(dn));\ngrdisplay(GKDPhib
+ar(dn));" }}{PARA 6 "" 1 "" {TEXT -1 49 "Calculated Pbar for KerrNewma
+nHyp (0.000000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 54 "Calculated Pbar(p
+dn) for KerrNewmanHyp (0.000000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 58 "
+Calculated GKDPhibar(dn) for KerrNewmanHyp (0.000000 sec.)" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#%AFor~the~KerrNewmanHyp~spacetime:G" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#%.GKDPhibar(dn)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-
+%*GKDPhibarG6#%#dnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%*GKDPhibarG6
+#%\"aGK%'vectorG6#7&**%\"qG\"\"\"%#A1GF.-%*conjugateG6#%$PhiGF.^#F.F.*
+*F-F.%#A2GF.F0F.F4F.-%%diffG6$F0%&thetaG**F-F.%#A4GF.F0F.F4F.Q(pprint0
+6\"" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 65 "grdefine( `GBOXP
+hi`, \{\}, `GKDPhi\{a ; ^a\}-I*q*A\{a\}*GKDPhi\{ ^a\}` );" }}{PARA 6 "
+" 1 "" {TEXT -1 39 "Created a definition for GKDPhi(dn,cdn)" }}{PARA 
+6 "" 1 "" {TEXT -1 38 "Created definition for GKDPhi(dn,cup) " }}
+{PARA 6 "" 1 "" {TEXT -1 30 "Created definition for GBOXPhi" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 36 "grcalc(GBOXPhi);\ngralte
+r(GBOXPhi,1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&
+" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplification of a GRTenso
+rII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT 
+-1 43 "Applying routine simplify to object GBOXPhi" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 69 "grmap(GBOXPhi, subs, diff(Delta, r)=diff(r^2+a^2+e^2-
+2*M*r, r), `x`);" }}{PARA 6 "" 1 "" {TEXT -1 32 "Applying routine subs
+ to GBOXPhi" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 34 "GBoxPhiS
+imp:=grcomponent(GBOXPhi):" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 
+213 218 "GBoxPhiSimp2:=collect((GBoxPhiSimp),\{(diff(Phi,`$`(t,2))),(d
+iff(Phi,phi,t)),(diff(Phi,`$`(r,2))),(diff(Phi,`$`(theta,2))),(diff(Ph
+i,`$`(phi,2))),(diff(Phi,t)),(diff(Phi,r)),(diff(Phi,theta)),(diff(Phi
+,phi))\},simplify);" }}{PARA 8 "" 1 "" {TEXT -1 37 "Error, (in collect
+) cannot collect 0\n" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 74 "After pro
+per collection of terms, the wave operator becomes the following." }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 372 "GBoxPhiSimpHumanreadable:=G
+amma/(Delta*Sigma)*diff(diff(Phi, t), t)-Delta/Sigma*diff(diff(Phi, r)
+, r)-2*(r-M)/Sigma*diff(Phi, r)-1/Sigma*LaplaceS2(Phi)+a^2/(Delta*Sigm
+a)*diff(diff(Phi, phi), phi)+2*a*(r^2+a^2-Delta)/(Delta*Sigma)*diff(di
+ff(Phi, t), phi)+2*I*q*e*r*(r^2+a^2)/(Delta*Sigma)*diff(Phi, t)+2*I*q*
+e*a*r/(Delta*Sigma)*diff(Phi, phi)-q^2*e^2*r^2/(Delta*Sigma)*Phi;" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%9GBoxPhiSimpHumanreadableG,&*&%&Sigm
+aG!\"\"-%*LaplaceS2G6#%$PhiG\"\"\"F(*.%\"qG\"\"#%\"eGF0%\"rGF0%&DeltaG
+F(F'F(F,F-F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 51 "Rechecking human \+
+readable version of wave operator." }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 442 "Expression:=GBoxPhiSimpHumanreadable; SimplifiedExpr
+ession:=simplify(subs(LaplaceS2(Phi)=1/sin(theta)*diff(sin(theta)*diff
+(Phi,theta),theta)+1/sin(theta)^2*diff(diff(Phi,phi),phi),  Expression
+)); ReferenceExpression:=GBoxPhiSimp2; DifferenceExpression:=simplify(
+subs(Omega=a*(2*M*r-e^2)/Gamma, Gamma=(r^2+a^2)^2-a^2*Delta*sin(theta)
+^2, Sigma=r^2+a^2*cos(theta)^2, Delta=r^2+a^2+e^2-2*M*r, simplify(Simp
+lifiedExpression-ReferenceExpression)));" }}{PARA 12 "" 1 "" {XPPMATH 
+20 "6#>%+ExpressionG,4**%&GammaG\"\"\"%&SigmaG!\"\"%&DeltaGF*-%%diffG6
+$%$PhiG-%\"$G6$%\"tG\"\"#F(F(*(F+F(F)F*-F-6$F/-F16$%\"rGF4F(F***F4F(F)
+F*,&F:F(%\"MGF*F(-F-6$F/F:F(F**&F)F*-%*LaplaceS2G6#F/F(F***%\"aGF4F+F*
+F)F*-F-6$F/-F16$%$phiGF4F(F(*.F4F(FEF(,(*$)F:F4F(F(*$)FEF4F(F(F+F*F(F+
+F*F)F*-F-6%F/FJF3F(F(*2^#F4F(%\"qGF(%\"eGF(F:F(,&FMF(FOF(F(F+F*F)F*-F-
+6$F/F3F(F(*2FTF(FUF(FVF(FEF(F:F(F+F*F)F*-F-6$F/FJF(F(*.FUF4FVF4F:F4F+F
+*F)F*F/F(F*" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%5SimplifiedExpression
+G**,Z*(%&GammaG\"\"\"-%%diffG6$%$PhiG-%\"$G6$%\"tG\"\"#F))-%$cosG6#%&t
+hetaGF2F)F)**F2F)%\"aGF)-F+6%F-%$phiGF1F)%&DeltaGF)F)**F2F))F9\"\"$F)F
+:F)F3F)F)*()F=F2F)-F+6$F--F/6$%\"rGF2F)F3F)!\"\"*(F=F)-F+6$F--F/6$F7F2
+F)F3F)FH**F2F)F9F)F:F))FGF2F)FH*()F9F2F)-F+6$F--F/6$F<F2F)F3F)F)*&F=F)
+FJF)F)*,F2F)F9F)F:F)F=F)F3F)FH*&FQF)FRF)FH*&F(F)F*F)FH*&FBF)FCF)F)*(F2
+F)F?F)F:F)FH**)%\"qGF2F))%\"eGF2F)FOF)F-F)F)**F=F)-%$sinGF6F)F4F)-F+6$
+F-F7F)F)*&F=F)FRF)F)*,F2F)-F+6$F-FGF)F=F)FGF)F3F)FH*,F2F)FboF)F=F)%\"M
+GF)F3F)F)**F2F)FboF)F=F)FGF)F)**F2F)FboF)F=F)FeoF)FH*,F2F)F9F)F:F)FOF)
+F3F)F)*,FgnF)FinF)FOF)F-F)F3F)FH*,^#!\"#F)FhnF)FjnF))FGF@F)-F+6$F-F1F)
+F)*.F[pF)FhnF)FjnF)F9F)FGF)-F+6$F-F<F)F)*.^#F2F)FhnF)FjnF)F]pF)F^pF)F3
+F)F)*.F[pF)FhnF)FjnF)FGF)F^pF)FQF)F)*0FdpF)FhnF)FjnF)FGF)F^pF)FQF)F3F)
+F)*0FdpF)FhnF)FjnF)F9F)FGF)FapF)F3F)F)F)%&SigmaGFH,&*$F3F)F)F)FHFHF=FH
+" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%4ReferenceExpressionG,6**\"\"#\"
+\"\"%&SigmaG!\"\",&%\"rGF(%\"MGF*F(-%%diffG6$%$PhiGF,F(F**(%&DeltaGF(F
+)F*-F/6$F1-%\"$G6$F,F'F(F**&F)F*-F/6$F1-F76$%&thetaGF'F(F**4^#F'F(%&Ga
+mmaGF(F)!\"#F3F*,(*(%&OmegaGF(%\"aGF()-%$cosG6#F>F'F(F(*&FEF(FFF(F*F(F
+(F(%\"qGF(%\"eGF(F,F(-F/6$F1%\"tGF(F(**FAF(F)F*F3F*-F/6$F1-F76$FPF'F(F
+(*.FAF*F)F*F3F*,(*&F3F()F)F'F(F(*&)FAF'F()FEF'F(F**(FenF(FfnF(FGF(F(F(
+-%$sinGFJFB-F/6$F1-F76$%$phiGF'F(F**4F@F(FAF*F)FBF3F*,***FenF(FfnF(FFF
+(FGF(F(*(F3F(FYF(FFF(F(*(FenF(FfnF(FFF(F**&FenF(FEF(F(F(FLF(FMF(F,F(-F
+/6$F1F^oF(F(*.F'F(FAF(F)F*F3F*FEF(-F/6%F1F^oFPF(F(**F)F*FhnF*FHF(-F/6$
+F1F>F(F**2FAF*F)!\"$F3F*,2**)FFF'F(FenF(FfnF()FH\"\"%F(F(*,F'F(FapF(Fe
+nF(FfnF(FGF(F**,F'F(FenF(FEF(FFF(FGF(F(**FYF(FapF(F3F(FGF(F(**F'F(FenF
+(FEF(FFF(F**(FYF(FapF(F3F(F**(FapF(FenF(FfnF(F(*$FenF(F(F(FLF'FMF'F,F'
+F1F(F*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5DifferenceExpressionG\"\"
+!" }}}{EXCHG {PARA 209 "" 0 "" {TEXT 214 69 "===== Calculate energy-mo
+mentum tensor of charged scalar field. =====" }}}{EXCHG {PARA 0 "> " 
+0 "" {MPLTEXT 1 0 26 "alias(V=V(t,r,theta,phi));" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6)%&DeltaG%&SigmaG%&GammaG%&OmegaG%$PhiG-%*conjugateG6#F'
+%\"VG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "grdefine(`Vpot`,\{
+\},`V`);" }}{PARA 6 "" 1 "" {TEXT -1 27 "Created definition for Vpot" 
+}}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 128 "grdefine( `T\{a b\}`
+, g(dn,dn) , `1/2*(GKDPhi\{a\}*GKDPhibar\{b\}+GKDPhi\{b\}*GKDPhibar\{a
+\})-1/2*g\{a b\}*(GKDPhibar\{e\}*GKDPhi\{^e\}-Vpot)`);" }}{PARA 6 "" 
+1 "" {TEXT -1 31 "Created definition for T(dn,dn)" }}}{EXCHG {PARA 
+200 "> " 0 "" {MPLTEXT 1 213 17 "grcalc(T(dn,dn));" }}{PARA 6 "" 1 "" 
+{TEXT -1 46 "Calculated Vpot for KerrNewman (0.000000 sec.)" }}{PARA 
+6 "" 1 "" {TEXT -1 50 "Calculated T(dn,dn) for KerrNewman (0.044000 se
+c.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#W!\"$" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 22 "gralter(T(dn,dn),6,8);" 
+}}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplification of a GRTensorI
+I object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 
+42 "Applying routine expand to object T(dn,dn)" }}{PARA 6 "" 1 "" 
+{TEXT -1 42 "Applying routine normal to object T(dn,dn)" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#W!\"$" }}}{EXCHG {PARA 200 "> \+
+" 0 "" {MPLTEXT 1 213 209 "grmap(T(dn,dn), subs, conjugate(r)=r,conjug
+ate(a)=a,conjugate(q)=q,conjugate(e)=e, conjugate(theta)=theta, conjug
+ate(Sigma)=Sigma, conjugate(Delta)=Delta, conjugate(Gamma)=Gamma, conj
+ugate(Omega)=Omega, 'x' ):" }}{PARA 6 "" 1 "" {TEXT -1 33 "Applying ro
+utine subs to T(dn,dn)" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+20 "grdisplay(T(dn,dn));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~
+KerrNewman~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%)T(dn,dn)G
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%\"TG6$%#dnGF&" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#/&%\"TG6#*&%\"tG\"\"\"%\"tGF)%K~14859~words.~Exceeds~
+grOptionDisplayLimitG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%
+\"tG\"\"\"%\"rGF),$*&#F)\"\"#F)*&,**(-%%diffG6$-%*conjugateG6#%$PhiG%
+\"rGF)-F36$F8%\"tGF)%&SigmaGF)!\"\"*.^#F>F)F2F)%\"qGF)%\"eGF)F9F)F8F)F
+)*(-F36$F8F9F)-F36$F5F<F)F=F)F>*.FDF)FAF)FBF)F9F)F5F)^#F)F)F)F)F=F>F)F
+>" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%\"tG\"\"\"%&thetaGF),
+$*&#F)\"\"#F)*&,**(-%%diffG6$-%*conjugateG6#%$PhiG%&thetaGF)-F36$F8%\"
+tGF)%&SigmaGF)!\"\"*.^#F>F)F2F)%\"qGF)%\"eGF)%\"rGF)F8F)F)*(-F36$F8F9F
+)-F36$F5F<F)F=F)F>*.FEF)FAF)FBF)FCF)F5F)^#F)F)F)F)F=F>F)F>" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%\"tG\"\"\"%$phiGF)%J~7891~words.
+~Exceeds~grOptionDisplayLimitG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%
+\"TG6#*&%\"rG\"\"\"%\"rGF)%J~5611~words.~Exceeds~grOptionDisplayLimitG
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%\"rG\"\"\"%&thetaGF),&
+*&#F)\"\"#F)*&-%%diffG6$%$PhiG%\"rGF)-F16$-%*conjugateG6#F3%&thetaGF)F
+)F)*&F-F)*&-F16$F3F:F)-F16$F7F4F)F)F)" }}{PARA 11 "" 1 "" {XPPMATH 20 
+"6#/&%\"TG6#*&%\"rG\"\"\"%$phiGF),$*&#F)\"\"#F)*&,**(-%%diffG6$%$PhiG%
+\"rGF)-F36$-%*conjugateG6#F5%$phiGF)%&SigmaGF)F)*2F2F)%\"qGF)%\"aGF)%
+\"eGF)F6F))-%$sinG6#%&thetaGF.F)F9F)^#F)F)F)*(-F36$F9F6F)-F36$F5F<F)F=
+F)F)*2^#!\"\"F)FIF)F?F)F@F)FAF)F6F)FBF)F5F)F)F)F=FOF)F)" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#/&%\"TG6#*&%&thetaG\"\"\"%&thetaGF)%J~5597~words
+.~Exceeds~grOptionDisplayLimitG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/&%
+\"TG6#*&%&thetaG\"\"\"%$phiGF),$*&#F)\"\"#F)*&,**(-%%diffG6$%$PhiG%&th
+etaGF)-F36$-%*conjugateG6#F5%$phiGF)%&SigmaGF)F)*2F2F)%\"qGF)%\"aGF)%
+\"eGF)%\"rGF))-%$sinG6#F6F.F)F9F)^#F)F)F)*(-F36$F9F6F)-F36$F5F<F)F=F)F
+)*2^#!\"\"F)FIF)F?F)F@F)FAF)FBF)FCF)F5F)F)F)F=FOF)F)" }}{PARA 11 "" 1 
+"" {XPPMATH 20 "6#/&%\"TG6#*&%$phiG\"\"\"%$phiGF)%J~6241~words.~Exceed
+s~grOptionDisplayLimitG" }}}{EXCHG {PARA 209 "" 0 "" {TEXT 214 42 "===
+== Calculation of volume element. =====" }}}{EXCHG {PARA 200 "> " 0 "
+" {MPLTEXT 1 213 13 "grcalc(detg);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#
+/%*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+18 "gralter(detg,1,7);" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simpl
+ification of a GRTensorII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}
+{PARA 6 "" 1 "" {TEXT -1 40 "Applying routine simplify to object detg
+" }}{PARA 6 "" 1 "" {TEXT -1 38 "Applying routine factor to object det
+g" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"%!\"$" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 16 "grdisplay(detg);" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#%>For~the~KerrNewman~spacetime:G" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#%ADeterminant~of~the~metric~tensorG" }
+}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%#g~G,$*&)-%$sinG6#%&thetaG\"\"#\"\"
+\")%&SigmaGF,F-!\"\"" }}}{EXCHG {PARA 209 "" 0 "" {TEXT 214 62 "===== \+
+Calculation of energy density on t=const surfaces. =====" }}}{EXCHG 
+{PARA 208 "" 0 "" {TEXT 214 31 "Time translation Killing field." }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 36 "grdef ( `t\{^a\} := [ 1,
+ 0, 0, 0 ]` ):" }}{PARA 6 "" 1 "" {TEXT -1 42 "Components assigned for
+ metric: KerrNewman" }}{PARA 6 "" 1 "" {TEXT -1 28 "Created definition
+ for t(up)" }}}{EXCHG {PARA 208 "" 0 "" {TEXT 214 38 "Unit normal vect
+or of t=const surface." }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+36 "grdef ( `nt\{a\} := [ 1, 0, 0, 0 ]` ):" }}{PARA 6 "" 1 "" {TEXT 
+-1 42 "Components assigned for metric: KerrNewman" }}{PARA 6 "" 1 "" 
+{TEXT -1 29 "Created definition for nt(dn)" }}}{EXCHG {PARA 200 "> " 
+0 "" {MPLTEXT 1 213 26 "grnormalize ( nt(dn), 1 );" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#%LThe~components~of~the~normalized~vector~areG" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#ntG%\"tG*&\"\"\"F(*$*(%&SigmaGF(%&
+GammaGF(,**&%&DeltaGF()F+\"\"#F(F(*&)F,F1F()%&OmegaGF1F(!\"\"*(F3F(F4F
+()-%$cosG6#%&thetaGF1F(F(*(F3F(F4F()-%$sinGF;F1F(F(F6#F(F1F6" }}{PARA 
+11 "" 1 "" {XPPMATH 20 "6#/)%#ntG%\"rG\"\"!" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/)%#ntG%&thetaG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6
+#/)%#ntG%$phiG\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 67 "Do you wish to ove
+rwrite nt(dn) with the normalized vector? (1=yes)" }}{PARA 6 "" 1 "" 
+{TEXT -1 0 "" }}}{EXCHG {PARA 208 "" 0 "" {TEXT 214 30 "Pull up normal
+ vector indices." }}}{EXCHG {PARA 200 "grnormalize>" 0 "" {MPLTEXT 1 
+213 2 "1;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 
+0 "> " 0 "" {MPLTEXT 1 0 15 "grcalc(nt(up));" }}{PARA 6 "" 1 "" {TEXT 
+-1 30 "Created definition for nt(up) " }}{PARA 6 "" 1 "" {TEXT -1 48 "
+Calculated nt(up) for KerrNewman (0.000000 sec.)" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 204 "> " 0 "" 
+{MPLTEXT 1 200 50 "ntT:=simplify(grcomponent(nt(up), [t]), symbolic);
+" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$ntTG*(%&GammaG#\"\"\"\"\"#%&Sig
+maG#!\"\"F)%&DeltaGF+" }}}{EXCHG {PARA 204 "> " 0 "" {MPLTEXT 1 200 
+23 "grdefine(ntt, \{\}, ntT);" }}{PARA 6 "" 1 "" {TEXT -1 26 "Created \+
+definition for ntt" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 67 "g
+rdefine( `EDensityt`, \{\}, `sqrt(-detg)*ntt*T\{a b\}*t\{^a\}*nt\{^b\}
+` );" }}{PARA 6 "" 1 "" {TEXT -1 32 "Created definition for EDensityt
+" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 18 "grcalc(EDensityt);
+" }}{PARA 6 "" 1 "" {TEXT -1 45 "Calculated ntt for KerrNewman (0.0000
+00 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 51 "Calculated EDensityt for Kerr
+Newman (0.028000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~
+G$\"#G!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 207 "grmap(ED
+ensityt, subs, conjugate(r)=r,conjugate(a)=a,conjugate(q)=q,conjugate(
+e)=e, conjugate(theta)=theta, conjugate(Sigma)=Sigma,conjugate(Gamma)=
+Gamma,conjugate(Omega)=Omega,conjugate(Delta)=Delta, 'x' ):" }}{PARA 
+6 "" 1 "" {TEXT -1 34 "Applying routine subs to EDensityt" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 21 "gralter(EDensityt,8);" }}{PARA 
+6 "" 1 "" {TEXT -1 48 "Component simplification of a GRTensorII object
+:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 43 "Appl
+ying routine normal to object EDensityt" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 
+213 173 "Integrandust:=collect(expand(simplify(simplify(grcomponent(ED
+ensityt)/sin(theta),symbolic),trigsin)),\{(diff(Phi,t)),(diff(Phi,r)),
+(diff(Phi,theta)),(diff(Phi,phi))\},factor);" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%-IntegrandustG,,*&#\"\"\"\"\"#F(*(%&DeltaGF(-%%diffG6
+$-%*conjugateG6#%$PhiG%\"rGF(-F-6$F2F3F(F(F(*&#F(F)F(*,%&GammaGF(,&*&-
+F-6$F/%\"tGF(%&SigmaGF(!\"\"*,%\"qGF(%\"eGF(F3F(F/F(^#F(F(F(F(F?F@F+F@
+-F-6$F2F>F(F(F@*&#F(F)F(*0,&*&F+F()F?F)F(F@*()F9F)F()%&OmegaGF)F()-%$s
+inG6#%&thetaGF)F(F(F(,&*&-F-6$F/%$phiGF(F?F(F(*0FBF(%\"aGF(FCF(F3F(FQF
+(F/F(FDF(F(F(F9F@FR!\"#F?F@F+F@-F-6$F2FZF(F(F@*&F'F(*&-F-6$F/FUF(-F-6$
+F2FUF(F(F(*&#F(F)F(**,0*4)FBF)F()FfnF)F()FCF)F()F3F)F(F/F(F+F(FLF(F2F(
+FQF(F@**%\"VGF(F9F()F?\"\"$F(F+F(F@*4FXF(F[pF(F+F(FBF(FfnF(FCF(F3F(F2F
+(FDF(F(*8^#F@F(FXF(F?F(FNF(FOF(FBF(FfnF(FCF(F3F(FQF(F2F(F(*2F_pF(FNF(F
+BF(FCF(F3F(F2F(F<F(F?F(F(*4FeoF(FfoF(FgoF(FhoF()FR\"\"%F(F/F(FNF(FOF(F
+2F(F(*.FNF(FeoF(FgoF(FhoF(F2F(F/F(F@F(F9F@F?FgnF+F@F(F@" }}}{EXCHG 
+{PARA 0 "" 0 "" {TEXT -1 59 "After proper collection of terms, it beco
+mes the following." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 504 "Inte
+grandustHumanreadable:= 1/2*Gamma/Delta*conjugate(diff(Phi, t))*diff(P
+hi, t) + 1/2*Delta*conjugate(diff(Phi, r))*diff(Phi, r) + 1/4*(Laplace
+S2(conjugate(Phi)*Phi)-conjugate(LaplaceS2(Phi))*Phi-conjugate(Phi)*La
+placeS2(Phi)) - 1/2*a^2/Delta*conjugate(diff(Phi, phi))*diff(Phi, phi)
+ + Gamma*q*e*r/(Sigma*Delta)*Im(conjugate(Phi)*diff(Phi, t)) -  q*a*e*
+r*(Sigma+(e^2-2*M*r))/(Delta*Sigma)*Im(conjugate(Phi)*diff(Phi, phi)) \+
+-  1/2*q^2*e^2*r^2/Delta*(1-2*(r^2+a^2)/Sigma)*conjugate(Phi)*Phi + 1/
+2*Sigma*V;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%:IntegrandustHumanread
+ableG,6*&#\"\"\"\"\"#F(**%&GammaGF(%&DeltaG!\"\"-%*conjugateG6#-%%diff
+G6$%$PhiG%\"tGF(F1F(F(F(*&F'F(*(F,F(-F/6#-F26$F4%\"rGF(F:F(F(F(*&#F(\"
+\"%F(-%*LaplaceS2G6#*&-F/6#F4F(F4F(F(F(*&#F(F?F(*&-F/6#-FA6#F4F(F4F(F(
+F-*&#F(F?F(*&FDF(FKF(F(F-*&#F(F)F(**%\"aGF)F,F--F/6#-F26$F4%$phiGF(FVF
+(F(F-*0F+F(%\"qGF(%\"eGF(F<F(%&SigmaGF-F,F--%#ImG6#*&FDF(F1F(F(F(*2FZF
+(FSF(FenF(F<F(,(FfnF(*$)FenF)F(F(*(F)F(%\"MGF(F<F(F-F(FfnF-F,F--Fhn6#*
+&FDF(FVF(F(F-*&#F(F)F(*0FZF)FenF)F<F)F,F-,&F(F(*(F)F(,&*$)F<F)F(F(*$)F
+SF)F(F(F(FfnF-F-F(FDF(F4F(F(F-*(F)F-FfnF(%\"VGF(F(" }}}{EXCHG {PARA 0 
+"" 0 "" {TEXT -1 58 "Rechecking expression involving theta and phi der
+ivatives." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 812 "Expression:=1
+/4*(LaplaceS2(conjugate(Phi)*Phi)-conjugate(LaplaceS2(Phi))*Phi-conjug
+ate(Phi)*LaplaceS2(Phi)); SimplifiedExpression:=simplify(subs(conjugat
+e(LaplaceS2(Phi))=LaplaceS2(conjugate(Phi)), LaplaceS2(conjugate(Phi))
+=1/sin(theta)*diff(sin(theta)*diff(conjugate(Phi),theta),theta)+1/sin(
+theta)^2*diff(diff(conjugate(Phi),phi),phi),  LaplaceS2(Phi)=1/sin(the
+ta)*diff(sin(theta)*diff(Phi,theta),theta)+1/sin(theta)^2*diff(diff(Ph
+i,phi),phi), LaplaceS2(conjugate(Phi)*Phi)=1/sin(theta)*diff(sin(theta
+)*diff(conjugate(Phi)*Phi,theta),theta)+1/sin(theta)^2*diff(diff(conju
+gate(Phi)*Phi,phi),phi), Expression)); ReferenceExpression:=1/2*diff(c
+onjugate(Phi),theta)*diff(Phi,theta)+1/2*1/sin(theta)^2*diff(conjugate
+(Phi),phi)*diff(Phi,phi); DifferenceExpression:=simplify(SimplifiedExp
+ression-ReferenceExpression);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+Ex
+pressionG,(*&#\"\"\"\"\"%F(-%*LaplaceS2G6#*&-%*conjugateG6#%$PhiGF(F1F
+(F(F(*&#F(F)F(*&-F/6#-F+6#F1F(F1F(F(!\"\"*&#F(F)F(*&F.F(F7F(F(F9" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5SimplifiedExpressionG,$*&#\"\"\"\"
+\"#F(*&,(*&-%%diffG6$-%*conjugateG6#%$PhiG%&thetaGF(-F.6$F3F4F(F(*(F-F
+(F5F()-%$cosG6#F4F)F(!\"\"*&-F.6$F0%$phiGF(-F.6$F3F@F(F(F(-%$sinGF;!\"
+#F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%4ReferenceExpressionG,&*&#
+\"\"\"\"\"#F(*&-%%diffG6$-%*conjugateG6#%$PhiG%&thetaGF(-F,6$F1F2F(F(F
+(*&F'F(*(-%$sinG6#F2!\"#-F,6$F.%$phiGF(-F,6$F1F=F(F(F(" }}{PARA 11 "" 
+1 "" {XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" }}}{EXCHG {PARA 0 "
+" 0 "" {TEXT -1 37 "Rechecking energy density expression." }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 1202 "Expression:=IntegrandustHumanread
+able; SimplifiedExpression:=simplify(subs(conjugate(LaplaceS2(Phi))=La
+placeS2(conjugate(Phi)), LaplaceS2(conjugate(Phi))=1/sin(theta)*diff(s
+in(theta)*diff(conjugate(Phi),theta),theta)+1/sin(theta)^2*diff(diff(c
+onjugate(Phi),phi),phi),  LaplaceS2(Phi)=1/sin(theta)*diff(sin(theta)*
+diff(Phi,theta),theta)+1/sin(theta)^2*diff(diff(Phi,phi),phi), Laplace
+S2(conjugate(Phi)*Phi)=1/sin(theta)*diff(sin(theta)*diff(conjugate(Phi
+)*Phi,theta),theta)+1/sin(theta)^2*diff(diff(conjugate(Phi)*Phi,phi),p
+hi),  conjugate(diff(Phi, t))=diff(conjugate(Phi), t), conjugate(diff(
+Phi, r))=diff(conjugate(Phi), r), conjugate(diff(Phi, theta))=diff(con
+jugate(Phi), theta), conjugate(diff(Phi, phi))=diff(conjugate(Phi), ph
+i), Im(conjugate(Phi)*diff(Phi, phi))=1/(2*I)*(conjugate(Phi)*diff(Phi
+, phi)-Phi*diff(conjugate(Phi), phi)),  Im(conjugate(Phi)*diff(Phi, t)
+)=1/(2*I)*(conjugate(Phi)*diff(Phi, t)-Phi*diff(conjugate(Phi), t)), E
+xpression)); ReferenceExpression:=Integrandust; DifferenceExpression:=
+simplify(subs(Omega=a*(2*M*r-e^2)/Gamma, Gamma=(r^2+a^2)^2-a^2*Delta*s
+in(theta)^2, Sigma=r^2+a^2*cos(theta)^2, Delta=r^2+a^2+e^2-2*M*r, simp
+lify(SimplifiedExpression-ReferenceExpression)));" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%+ExpressionG,6*&#\"\"\"\"\"#F(**%&GammaGF(%&DeltaG!\"
+\"-%*conjugateG6#-%%diffG6$%$PhiG%\"tGF(F1F(F(F(*&F'F(*(F,F(-F/6#-F26$
+F4%\"rGF(F:F(F(F(*&#F(\"\"%F(-%*LaplaceS2G6#*&-F/6#F4F(F4F(F(F(*&#F(F?
+F(*&-F/6#-FA6#F4F(F4F(F(F-*&#F(F?F(*&FDF(FKF(F(F-*&#F(F)F(**%\"aGF)F,F
+--F/6#-F26$F4%$phiGF(FVF(F(F-*0F+F(%\"qGF(%\"eGF(F<F(%&SigmaGF-F,F--%#
+ImG6#*&FDF(F1F(F(F(*2FZF(FSF(FenF(F<F(,(FfnF(*$)FenF)F(F(*(F)F(%\"MGF(
+F<F(F-F(FfnF-F,F--Fhn6#*&FDF(FVF(F(F-*&#F(F)F(*0FZF)FenF)F<F)F,F-,&F(F
+(*(F)F(,&*$)F<F)F(F(*$)FSF)F(F(F(FfnF-F-F(FDF(F4F(F(F-*(F)F-FfnF(%\"VG
+F(F(" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%5SimplifiedExpressionG,$*&#
+\"\"\"\"\"#F(**,^o**%&SigmaGF(%&DeltaGF(-%%diffG6$-%*conjugateG6#%$Phi
+G%$phiGF(-F06$F5F6F(!\"\"*2F)F()%\"qGF)F()%\"aGF)F()%\"eGF)F()%\"rGF)F
+(F2F()-%$cosG6#%&thetaGF)F(F5F(F(*0F)F(F;F(F=F(F?F(FAF(F2F(F5F(F9*2F-F
+(F/F(F<F(F>F(F@F(FBF(F5F(^#F(F(F(*,-F06$F2FBF()F.F)F(-F06$F5FBF(F-F(FC
+F(F(*,%&GammaGF(-F06$F5%\"tGF(-F06$F2FUF(F-F(FCF(F(*,F=F(F/F(F7F(F-F(F
+CF(F9*,F.F(F-F(-F06$F2FGF(-F06$F5FGF(FCF(F(*2FRF(F<F(F@F(FBF(F5F(FVF(F
+CF(FJF(F(*0F<F(F>F()F@\"\"$F(FBF(F/F(F5F(FJF(F(*4F<F(F>F(F@F(FBF(F-F(F
+2F(F7F(FCF(FJF(F(*2F<F(F>F(FjnF(FBF(F2F(F7F(FCF(FJF(F(*0FRF(F<F(F@F(FB
+F(F2F(FSF(FJF(F(*.F)F(F;F(F?F()FB\"\"%F(F2F(F5F(F9*0F)F(F;F(F?F(F`oF(F
+2F(F5F(FCF(F(*.F;F(F?F(FAF(F2F(F5F(F-F(F(*0F;F(F?F(FAF(F2F(F5F(F-F(FCF
+(F9*0^#F9F(FRF(F<F(F@F(FBF(F5F(FVF(F(*2FfoF(F<F(F>F(FjnF(FBF(F/F(F5F(F
+CF(F(*2FfoF(F<F(F>F(F@F(FBF(F-F(F2F(F7F(F(*0FfoF(F<F(F>F(FjnF(FBF(F2F(
+F7F(F(*2^#F)F(F<F(F>F(F@F(FAF(%\"MGF(F2F(F7F(F(*4^#!\"#F(F<F(F>F(F@F(F
+AF(F\\pF(F2F(F7F(FCF(F(*2FfoF(FRF(F<F(F@F(FBF(F2F(FSF(FCF(F(*4FfoF(F-F
+(F/F(F<F(F>F(F@F(FBF(F5F(FCF(F(*2F^pF(F<F(F>F(F@F(FAF(F\\pF(F/F(F5F(F(
+*4F[pF(F<F(F>F(F@F(FAF(F\\pF(F/F(F5F(FCF(F(**FLF(FNF(FOF(F-F(F9**F=F(F
+/F(F7F(F-F(F(**FRF(FSF(FVF(F-F(F9**F.F(F-F(FZF(FfnF(F9**%\"VGF()F-F)F(
+F.F(FCF(F(*(FipF(FjpF(F.F(F9F(F.F9,&*$FCF(F(F(F9F9F-F9F(F(" }}{PARA 
+12 "" 1 "" {XPPMATH 20 "6#>%4ReferenceExpressionG,,*&#\"\"\"\"\"#F(*(%
+&DeltaGF(-%%diffG6$-%*conjugateG6#%$PhiG%\"rGF(-F-6$F2F3F(F(F(*&#F(F)F
+(*,%&GammaGF(,&*&-F-6$F/%\"tGF(%&SigmaGF(!\"\"*,%\"qGF(%\"eGF(F3F(F/F(
+^#F(F(F(F(F?F@F+F@-F-6$F2F>F(F(F@*&#F(F)F(*0,&*&F+F()F?F)F(F@*()F9F)F(
+)%&OmegaGF)F()-%$sinG6#%&thetaGF)F(F(F(,&*&-F-6$F/%$phiGF(F?F(F(*0FBF(
+%\"aGF(FCF(F3F(FQF(F/F(FDF(F(F(F9F@FR!\"#F?F@F+F@-F-6$F2FZF(F(F@*&F'F(
+*&-F-6$F/FUF(-F-6$F2FUF(F(F(*&#F(F)F(**,0*4)FBF)F()FfnF)F()FCF)F()F3F)
+F(F/F(F+F(FLF(F2F(FQF(F@**%\"VGF(F9F()F?\"\"$F(F+F(F@*4FXF(F[pF(F+F(FB
+F(FfnF(FCF(F3F(F2F(FDF(F(*8^#F@F(FXF(F?F(FNF(FOF(FBF(FfnF(FCF(F3F(FQF(
+F2F(F(*2F_pF(FNF(FBF(FCF(F3F(F2F(F<F(F?F(F(*4FeoF(FfoF(FgoF(FhoF()FR\"
+\"%F(F/F(FNF(FOF(F2F(F(*.FNF(FeoF(FgoF(FhoF(F2F(F/F(F@F(F9F@F?FgnF+F@F
+(F@" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" 
+}}}{EXCHG {PARA 209 "" 0 "" {TEXT 214 59 "===== Calculation of energy \+
+flow on r=const surfaces. =====" }}}{EXCHG {PARA 200 "> " 0 "" 
+{MPLTEXT 1 213 54 "grdef ( `nr\{a\} := [ 0, 1, 0, 0 ]` ): grcalc( nr(d
+n) );" }}{PARA 6 "" 1 "" {TEXT -1 42 "Components assigned for metric: \+
+KerrNewman" }}{PARA 6 "" 1 "" {TEXT -1 29 "Created definition for nr(d
+n)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 27 "grnormalize ( nr(dn), -1
+ );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%LThe~components~of~the~normali
+zed~vector~areG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%\"tG\"\"!" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%\"rG*&\"\"\"F(*$*&%&DeltaGF(
+%&SigmaG!\"\"#F(\"\"#F-" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%&th
+etaG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%#nrG%$phiG\"\"!" }}
+{PARA 6 "" 1 "" {TEXT -1 67 "Do you wish to overwrite nr(dn) with the \+
+normalized vector? (1=yes)" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}}{EXCHG 
+{PARA 200 "grnormalize>" 0 "" {MPLTEXT 1 213 2 "1;" }}{PARA 11 "" 1 "
+" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "
+grcalc(nr(up));" }}{PARA 6 "" 1 "" {TEXT -1 30 "Created definition for
+ nr(up) " }}{PARA 6 "" 1 "" {TEXT -1 48 "Calculated nr(up) for KerrNew
+man (0.000000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$
+\"\"!F&" }}}{EXCHG {PARA 204 "> " 0 "" {MPLTEXT 1 200 50 "nrR:=simplif
+y(grcomponent(nr(up), [r]), symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 
+20 "6#>%$nrRG,$*&%&DeltaG#\"\"\"\"\"#%&SigmaG#!\"\"F*F-" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 29 "grdefine( `nrr`, \{\}, `nrR` );
+" }}{PARA 6 "" 1 "" {TEXT -1 26 "Created definition for nrr" }}}
+{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 64 "grdefine( `EFlowr`, \{\}
+, `sqrt(-detg)*nrr*T\{a b\}*t\{^a\}*nr\{^b\}` );" }}{PARA 6 "" 1 "" 
+{TEXT -1 29 "Created definition for EFlowr" }}}{EXCHG {PARA 200 "> " 
+0 "" {MPLTEXT 1 213 15 "grcalc(EFlowr);" }}{PARA 6 "" 1 "" {TEXT -1 
+45 "Calculated nrr for KerrNewman (0.000000 sec.)" }}{PARA 6 "" 1 "" 
+{TEXT -1 48 "Calculated EFlowr for KerrNewman (0.008000 sec.)" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\")!\"$" }}}{EXCHG 
+{PARA 200 "> " 0 "" {MPLTEXT 1 213 18 "gralter(EFlowr,1);" }}{PARA 6 "
+" 1 "" {TEXT -1 48 "Component simplification of a GRTensorII object:" 
+}}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 42 "Applyin
+g routine simplify to object EFlowr" }}{PARA 11 "" 1 "" {XPPMATH 20 "6
+#/%*CPU~Time~G$\"#7!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+64 "Integrandusr:=simplify(grcomponent(EFlowr)/sin(theta),symbolic);" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%-IntegrandusrG,$*&#\"\"\"\"\"#F(*(
+%&DeltaGF(,**(-%%diffG6$-%*conjugateG6#%$PhiG%\"rGF(-F/6$F4%\"tGF(%&Si
+gmaGF(F(*.F.F(%\"qGF(%\"eGF(F5F(F4F(^#F(F(F(*(-F/6$F4F5F(-F/6$F1F8F(F9
+F(F(*.^#!\"\"F(F?F(F;F(F<F(F5F(F1F(F(F(F9FEF(F(" }}}{EXCHG {PARA 256 "
+" 0 "" {TEXT -1 59 "===== Calculation of energy current flow vector fi
+eld =====" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "grdefine( `ECt
+\{^a\}`, \{\}, `T\{^a b\}*t\{^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 32 "
+Created definition for T(up,dn) " }}{PARA 6 "" 1 "" {TEXT -1 30 "Creat
+ed definition for ECt(up)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+16 "grcalc(ECt(up));" }}{PARA 6 "" 1 "" {TEXT -1 50 "Calculated T(up,d
+n) for KerrNewman (0.076000 sec.)" }}{PARA 6 "" 1 "" {TEXT -1 49 "Calc
+ulated ECt(up) for KerrNewman (0.008000 sec.)" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"#%)!\"$" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 19 "grdisplay(ECt(up));" }}{PARA 11 "" 1 "" {XPPMATH 20 "
+6#%>For~the~KerrNewman~spacetime:G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#
+%(ECt(up)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$ECtG6#%#upG" }}{PARA 
+12 "" 1 "" {XPPMATH 20 "6#/)%$ECtG%\"tG,$*&#\"\"\"\"\"#F**,,Z*.-%%diff
+G6$-%*conjugateG6#%$PhiG%$phiGF*)%&SigmaGF+F*)%&GammaGF+F*)%&OmegaGF+F
+*)-%$cosG6#%&thetaGF+F*-F06$F5F6F*F**,F/F*F7F*F9F*F;F*FBF*!\"\"*8F/F*F
+8F*F9F*F;F*%\"qGF*%\"aGF*%\"eGF*%\"rGF*)-%$sinGF@F+F*F5F*^#F*F*F**.-F0
+6$F2FJF*%&DeltaGF*-F06$F5FJF*)F:\"\"$F*)FL\"\"%F*F;F*F**4)FGF+F*)FHF+F
+*)FIF+F*)FJF+F*FWF*F2F*FRF*F7F*F5F*F**,%\"VGF*F:F*)F8FVF*FKF*FRF*F**6F
+GF*FHF*FIF*FJF*FKF*F2F*FRF*FjnF*FBF*FNF*F**:FGF*FHF*FIF*FJF*FKF*F2F*F9
+F*F;F*F=F*FBF*F8F*FNF*F**,FinF*FUF*F8F*FKF*F;F*FE*.FinF*FUF*F8F*FKF*F;
+F*F=F*F**,FinF*FUF*F8F*FWF*F;F*F**,F9F*FKF*-F06$F5%\"tGF*F7F*-F06$F2Fc
+oF*F**4^#FEF*F9F*FKF*FaoF*F8F*FGF*FIF*FJF*F2F*F**6FgoF*F/F*FjnF*FRF*FG
+F*FHF*FIF*FJF*FKF*F5F*F**:FgoF*F/F*F8F*F9F*F;F*F=F*FGF*FHF*FIF*FJF*FKF
+*F5F*F**8FgoF*FGF*FHF*FIF*FJF*FKF*F2F*F9F*F;F*FBF*F8F*F**4FZF*FenF*Ffn
+F*FgnF*FWF*F2F*F9F*F;F*F5F*FE*6FZF*FenF*FfnF*FgnF*FWF*F2F*F9F*F;F*F=F*
+F5F*F***F/F*)F8FXF*FRF*FBF*F**0F9F*FKF*FZF*FfnF*FgnF*F5F*F2F*F**4F9F*F
+KF*FGF*FIF*FJF*F5F*FdoF*F8F*FNF*F**,-F06$F2FAF*-F06$F5FAF*FUF*FKF*F;F*
+FE*.FbpF*FdpF*FUF*FKF*F;F*F=F*F**.FPF*)FRF+F*FSF*F:F*FKF*F7F*F**.FPF*F
+RF*FSF*FUF*FKF*F;F*FE*0FPF*FRF*FSF*FUF*FKF*F;F*F=F*F**.FbpF*FdpF*F:F*F
+KF*FRF*F7F*F**,FbpF*FdpF*FUF*FWF*F;F*F*F*FL!\"#,**&FRF*F7F*F**&F9F*F;F
+*FE*(F9F*F;F*F=F*F**(F9F*F;F*FKF*F*FEF:FEF8FEF*F*" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/)%$ECtG%\"rG,$*&#\"\"\"\"\"#F**(%&DeltaGF*,**(-%%diffG
+6$-%*conjugateG6#%$PhiG%\"rGF*-F16$F6%\"tGF*%&SigmaGF*F**.F0F*%\"qGF*%
+\"eGF*F7F*F6F*^#F*F*F**(-F16$F6F7F*-F16$F3F:F*F;F*F**.^#!\"\"F*FAF*F=F
+*F>F*F7F*F3F*F*F*F;!\"#F*FG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/)%$ECt
+G%&thetaG,$*&#\"\"\"\"\"#F**&%&SigmaG!\"#,**(-%%diffG6$-%*conjugateG6#
+%$PhiG%&thetaGF*-F26$F7%\"tGF*F-F*!\"\"*.^#F<F*F1F*%\"qGF*%\"eGF*%\"rG
+F*F7F*F**(-F26$F7F8F*-F26$F4F;F*F-F*F<*.FCF*F?F*F@F*FAF*F4F*^#F*F*F*F*
+F*F*" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/)%$ECtG%$phiG,$*&#\"\"\"\"\"#
+F**,,T*:^#!\"\"F*-%%diffG6$%$PhiG%\"tGF*%&SigmaGF*%\"qGF*%\"aGF*%\"eGF
+*%\"rGF*)-%$sinG6#%&thetaGF+F*-%*conjugateG6#F4F*)%&GammaGF+F*)%&Omega
+GF+F*)-%$cosGF>F+F*F**8F/F*F7F*F8F*F9F*F:F*F;F*F4F*-F26$F@F5F*F6F*FCF*
+FEF*F**6^#!\"#F*FCF*FFF*F;F*F1F*F6F*F7F*F9F*F:F*F@F*F**6^#F+F*FCF*FFF*
+F;F*F7F*F9F*F:F*F4F*FKF*F6F*F**2-F26$F4%$phiGF*)F6\"\"$F*F7F*F9F*F:F*F
+@F*%&DeltaGF*^#F*F*F***FSF*)F6\"\"%F*FKF*FXF*F0*6FSF*F6F*F7F*F9F*F:F*F
+@F*FCF*FEF*FGF*FYF*F**8F1F*F6F*F7F*F8F*F9F*F:F*F;F*F@F*FCF*FEF*FYF*F**
+:F7F*F8F*F9F*F:F*F;F*F4F*FKF*F6F*FCF*FEF*FGF*FYF*F**4F7F*F9F*F:F*F4F*-
+F26$F@FUF*F6F*FCF*FEF*FYF*F**6F+F*)F7F+F*)F9F+F*)F:F+F*F4F*F8F*F;F*F@F
+*FCF*FEF*F0**F1F*FenF*F[oF*FXF*F0*8F+F*F^oF*F_oF*F`oF*F4F*F8F*F;F*F@F*
+FCF*FEF*FGF*F**.F1F*)F6F+F*F[oF*FCF*FEF*FGF*F0*6F+F*F^oF*F_oF*F`oF*F4F
+*F8F*F;F*F@F*FXF*FdoF*F**,FSF*FdoF*FKF*FCF*FEF*F**.FSF*FdoF*FKF*FCF*FE
+F*FGF*F0*,F1F*FdoF*F[oF*FCF*FEF*F**6F7F*F8F*F9F*F:F*F;F*F4F*FKF*FVF*FX
+F*FYF*F**6F/F*F7F*F9F*F:F*F4F*F[oF*F6F*FCF*FEF*FGF*F**2F/F*F7F*F9F*F:F
+*F4F*F[oF*FVF*FXF*F**6F/F*F1F*FVF*F7F*F8F*F9F*F:F*F;F*F@F*FXF*F**4F/F*
+FSF*F6F*F7F*F9F*F:F*F@F*FCF*FEF*F**4F+F*FCF*FFF*F;F*F^oF*F_oF*F`oF*F4F
+*F@F*F**0F+F*FCF*FFF*F;F*F1F*FdoF*FKF*F*F*F<FO,**&FXF*FdoF*F**&FCF*FEF
+*F0*(FCF*FEF*FGF*F**(FCF*FEF*F;F*F*F0FDF0F6F0F*F*" }}}{EXCHG {PARA 0 "
+> " 0 "" {MPLTEXT 1 0 67 "Jtt:=simplify(simplify(grcomponent(ECt(up),[
+t]),trigsin),symbolic);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$JttG,$*&
+#\"\"\"\"\"#F(*,,@*4)%\"qGF)F()%\"aGF)F()%\"eGF)F()%\"rGF)F()-%$sinG6#
+%&thetaG\"\"%F(-%*conjugateG6#%$PhiGF(%&DeltaGF()%&SigmaGF)F(F>F(!\"\"
+*,%\"VGF(%&GammaGF()FA\"\"$F()F6F)F(F?F(FB*4)FEF)F(FHF(-%%diffG6$F>%\"
+tGF(FAF(F.F(F2F(F4F(F;F(^#F(F(F(*,FJF(FHF(FKF(F@F(-FL6$F;FNF(FB*6^#FBF
+(F.F(F0F(F2F(F4F(FHF(F;F(F?F(FFF(-FL6$F>%$phiGF(F(*4FTF(FJF(FHF(F.F(F2
+F(F4F(F>F(FQF(FAF(F(*.FUF(F@F(-FL6$F;FWF(FJF()%&OmegaGF)F(FHF(F(*8FTF(
+FZF(FAF(FJF(FfnF(F.F(F0F(F2F(F4F(F5F(F>F(F(**FZF()FAF:F(F?F(FUF(FB*4F-
+F(F/F(F1F(F3F()F6\"\"'F(F;F(F>F(FJF(FfnF(F(*8F.F(F0F(F2F(F4F(F5F(F;F(F
+JF(FfnF(FUF(FAF(FOF(F(*0FJF(FHF(F-F(F1F(F3F(F>F(F;F(FB*6FFF(F?F(FZF(F.
+F(F0F(F2F(F4F(FHF(F>F(FOF(F(*.-FL6$F;F4F()F?F)F(-FL6$F>F4F(FEF(FHF(F@F
+(FB*.-FL6$F;F9F(-FL6$F>F9F(FEF(FHF(F?F(F@F(FBF(F6!\"#FEFBFA!\"$F?FBF(F
+B" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "Jtr:=simplify(grcompon
+ent(ECt(up),[r]),symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$JtrG
+,$*&#\"\"\"\"\"#F(*(%&DeltaGF(,**(-%%diffG6$-%*conjugateG6#%$PhiG%\"rG
+F(-F/6$F4%\"tGF(%&SigmaGF(F(*.F.F(%\"qGF(%\"eGF(F5F(F4F(^#F(F(F(*(-F/6
+$F4F5F(-F/6$F1F8F(F9F(F(*.^#!\"\"F(F?F(F;F(F<F(F5F(F1F(F(F(F9!\"#F(FE
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "Jttheta:=simplify(grcom
+ponent(ECt(up),[theta]),symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#
+>%(JtthetaG,$*&#\"\"\"\"\"#F(*&%&SigmaG!\"#,**(-%%diffG6$-%*conjugateG
+6#%$PhiG%&thetaGF(-F06$F5%\"tGF(F+F(!\"\"*.^#F:F(F/F(%\"qGF(%\"eGF(%\"
+rGF(F5F(F(*(-F06$F5F6F(-F06$F2F9F(F+F(F:*.FAF(F=F(F>F(F?F(F2F(^#F(F(F(
+F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 159 "Jtphi:=collect(e
+xpand(simplify(simplify(grcomponent(ECt(up),[phi]),trigsin),symbolic))
+,\{(diff(Phi,t)),(diff(Phi,r)),(diff(Phi,theta)),(diff(Phi,phi))\},fac
+tor);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&JtphiG,(*&#\"\"\"\"\"#F(*.
+,.*4^#!\"\"F(%\"qGF(%\"aGF(%\"eGF(%\"rGF(-%*conjugateG6#%$PhiGF()-%$si
+nG6#%&thetaGF)F(%&DeltaGF()%&SigmaGF)F(F(*()F>\"\"$F(-%%diffG6$F3%$phi
+GF(F<F(F.*2^#!\"#F()%&GammaGF)F(%&OmegaGF(F/F(F1F(F2F(F3F(F7F(F(*.F)F(
+FIF(FKF(-FC6$F3%\"tGF(F7F(F>F(F(*,FIF(FBF()FKF)F(F7F(F>F(F(*4)F8\"\"%F
+(FIF(F/F(F0F(F1F(F2F(F3F(FQF(^#F(F(F(F(FJF.F8FHF<F.F>FH-FC6$F6FOF(F(F(
+*&#F(F)F(*0,&*&F<F(F=F(F.*(FIF(FQF(F7F(F(F(,&*&FMF(F>F(F.*,F/F(F1F(F2F
+(F3F(FUF(F(F(FJF.F8FHF<F.F>FH-FC6$F6FEF(F(F.*&#F(F)F(*4F/F(F1F(F2F(F6F
+(,2*.F-F(F0F(F7F(FMF(F@F(F<F(F(*2F)F(FIF(FKF(F/F(F1F(F2F(F3F(F7F(F.*4F
+)F(FSF(FIF(F/F(F0F(F1F(F2F(F3F(FQF(F(*.FGF(FIF(FKF(F7F(FMF(F>F(F(*0F0F
+(FSF(FMF(F>F(FIF(FQF(FUF(F(*4F)F(F/F(F0F(F1F(F2F(F3F(F7F(F<F(F=F(F.*.F
+-F(FBF(F>F(FIF(FQF(F7F(F(**FBF(F@F(F<F(FUF(F(F(F8FHFJF.F>!\"$F<F.F(F.
+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "with(CodeGeneration);" 
+}}{PARA 11 "" 1 "" {XPPMATH 20 "6#7,%\"CG%(FortranG%1IntermediateCodeG
+%%JavaG%3LanguageDefinitionG%'MatlabG%&NamesG%%SaveG%*TranslateG%,Visu
+alBasicG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "ssystem(\"rm -f
+ eval_jphi.c\");" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$\"\"!Q!6\"" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 451 "C(subs(diff(conjugate(Phi),
+ t)=conjugate(Ft),diff(conjugate(Phi), r)=conjugate(Fr),diff(conjugate
+(Phi), theta)=conjugate(sinthetaFtheta)/sintheta,diff(conjugate(Phi), \+
+phi)=conjugate(Fphi),diff(Phi, t)=Ft,diff(Phi, r)=Fr,diff(Phi, theta)=
+sinthetaFtheta/sintheta,diff(Phi, phi)=Fphi,conjugate(Phi)=conjugate(F
+),Phi=F,sin(theta)=sintheta,Omega=Omega_,Gamma=Gamma_,Sigma=Sigma_,I=G
+I,[jphi=Jtphi]), deducetypes=false, optimize=false, output=\"eval_jphi
+.c\");" }}{PARA 7 "" 1 "" {TEXT -1 89 "Warning, the function names \{c
+onjugate, Delta\} are not recognized in the target language\n" }}}
+{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 67 "subs(\{q=0,e=0,Omega=0,Sigma
+=r^2,Gamma=r^4\},Jtphi)[q=0,e=0,a=0,M=0];" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#&,&*&#\"\"\"\"\"#F'**%\"rG!\"#-%%diffG6$-%*conjugateG6#
+%$PhiG%$phiGF'-%$sinG6#%&thetaGF+-F-6$F2%\"tGF'F'!\"\"*&#F'F(F'**F*F+-
+F-6$F/F:F'F4F+-F-6$F2F3F'F'F;6&/%\"qG\"\"!/%\"eGFF/%\"aGFF/%\"MGFF" }}
+}{EXCHG {PARA 257 "" 0 "" {TEXT -1 58 "===== Energy current vectorfiel
+d with respect to nt  =====" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+45 "grdefine( `ECnt\{^a\}`, \{\}, `T\{^a b\}*nt\{^b\}` );" }}{PARA 6 "
+" 1 "" {TEXT -1 31 "Created definition for ECnt(up)" }}}{EXCHG {PARA 
+0 "> " 0 "" {MPLTEXT 1 0 17 "grcalc(ECnt(up));" }}{PARA 6 "" 1 "" 
+{TEXT -1 50 "Calculated ECnt(up) for KerrNewman (0.016000 sec.)" }}
+{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"#;!\"$" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "Jntt:=simplify(simplify(grcomponent
+(ECnt(up),[t]),trigsin),symbolic);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#
+>%%JnttG,$*&#\"\"\"\"\"#F(*,,N*6^#!\"\"F()%&GammaGF)F()-%$sinG6#%&thet
+aGF)F(%\"qGF(%\"eGF(%\"rGF(-%*conjugateG6#%$PhiGF(%&OmegaGF(-%%diffG6$
+F<%$phiGF(%&SigmaGF(F(*6F-F(-F?6$F9FAF()FB\"\"$F(%&DeltaGF(F6F(%\"aGF(
+F7F(F8F(F1F(F<F(F(*4)F6F)F()FIF)F()F7F)F()F8F)F()F2\"\"%F(F9F(FHF()FBF
+)F(F<F(F(*,%\"VGF(F0F(FFF(F1F(FHF(F(*8F6F(FIF(F7F(F8F(FOF(F9F(F/F(F=F(
+-F?6$F<%\"tGF(FBF(^#F(F(F(*6FDF(FBF(F/F(F=F(F1F(F6F(F7F(F8F(F<F(FXF(F(
+*4F-F(F/F(F1F(FUF(FBF(F6F(F7F(F8F(F9F(F(*,F/F(F1F(FUF(FQF(-F?6$F9FWF(F
+(*4F/F(F1F(F6F(F7F(F8F(F<F(FfnF(FBF(FXF(F(*8F6F(FIF(F7F(F8F(FOF(F9F(F/
+F()F=F)F(F>F(FBF(FXF(F(*8F-F(FDF(FBF(F/F(FjnF(F6F(FIF(F7F(F8F(FOF(F<F(
+F(*6F)F(F/F(FOF(FKF(FMF(FNF(F9F(F=F(FIF(F<F(F.*.F>F(FQF(FDF(F/F(FjnF(F
+1F(F(*6F6F(FIF(F7F(F8F(F1F(F9F(FHF(FFF(F>F(FXF(F(**FDF()FBFPF(FHF(F>F(
+F(*4FKF(FLF(FMF(FNF()F2\"\"'F(F9F(F<F(F/F(FjnF(F(*0F/F(F1F(FKF(FMF(FNF
+(F<F(F9F(F(*8F-F(F/F(FOF(FfnF(FBF(F=F(F6F(FIF(F7F(F8F(F<F(F(*.F/F(F1F(
+FfnF(FQF(F=F(F>F(F(*.-F?6$F9F8F()FHF)F(-F?6$F<F8F(F0F(F1F(FQF(F(*.-F?6
+$F9F5F(-F?6$F<F5F(F0F(F1F(FHF(FQF(F(*.FDF(FQF(F/F(F=F(F1F(FUF(F(F(F2!
+\"#FB#!\"(F)FH#!\"$F)F0#F.F)F(F(" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 69 "Jntr:=simplify(simplify(grcomponent(ECnt(up),[r]),tri
+gsin),symbolic);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%%JntrG,$*&#\"\"
+\"\"\"#F(**%&GammaGF',6*(-%%diffG6$-%*conjugateG6#%$PhiG%\"rGF(-F/6$F4
+%\"tGF(%&SigmaGF(!\"\"*.^#F:F(F.F(%\"qGF(%\"eGF(F5F(F4F(F(*(-F/6$F4F5F
+(-F/6$F1F8F(F9F(F:*.F@F(F=F(F>F(F5F(F1F(^#F(F(F(**%&OmegaGF(F@F(-F/6$F
+1%$phiGF(F9F(F:*2F<F(FGF(F@F(F=F(%\"aGF(F>F(F5F(F1F(F(*4FGF(F@F(F=F(FL
+F(F>F(F5F(F1F()-%$cosG6#%&thetaGF)F(FEF(F(**FGF(F.F(-F/6$F4FJF(F9F(F:*
+2FGF(F.F(F=F(FLF(F>F(F5F(F4F(FEF(F(*4F<F(FGF(F.F(F=F(FLF(F>F(F5F(F4F(F
+NF(F(F(F9#!\"&F)%&DeltaGF'F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 77 "Jnttheta:=simplify(simplify(grcomponent(ECnt(up),[theta]),trig
+sin),symbolic);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)JntthetaG,$*&#\"
+\"\"\"\"#F(**%&GammaGF',6*(-%%diffG6$-%*conjugateG6#%$PhiG%&thetaGF(-F
+/6$F4%\"tGF(%&SigmaGF(!\"\"*.^#F:F(F.F(%\"qGF(%\"eGF(%\"rGF(F4F(F(*(-F
+/6$F4F5F(-F/6$F1F8F(F9F(F:*.FAF(F=F(F>F(F?F(F1F(^#F(F(F(**%&OmegaGF(FA
+F(-F/6$F1%$phiGF(F9F(F:*2F<F(FHF(FAF(F=F(%\"aGF(F>F(F?F(F1F(F(*4FHF(FA
+F(F=F(FMF(F>F(F?F(F1F()-%$cosG6#F5F)F(FFF(F(**FHF(F.F(-F/6$F4FKF(F9F(F
+:*2FHF(F.F(F=F(FMF(F>F(F?F(F4F(FFF(F(*4F<F(FHF(F.F(F=F(FMF(F>F(F?F(F4F
+(FOF(F(F(F9#!\"&F)%&DeltaG#F:F)F(F(" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 73 "Jntphi:=simplify(simplify(grcomponent(ECnt(up),[phi])
+,trigsin),symbolic);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'JntphiG,$*&
+#\"\"\"\"\"#F(*,,fn*8-%%diffG6$%$PhiG%\"tGF(%&SigmaGF(%\"qGF(%\"aGF(%
+\"eGF(%\"rGF()-%$sinG6#%&thetaG\"\"%F(-%*conjugateG6#F0F()%&GammaGF)F(
+)%&OmegaGF)F(^#F(F(F(*6^#!\"\"F(-F.6$F0%$phiGF(F2F(F3F(F5F(F6F(F=F(F@F
+(FBF()F8F)F(F(*.FHF()F2F)F(-F.6$F=F1F(F@F(FBF(FKF(F(*6F3F(F5F(F6F(F0F(
+-F.6$F=FJF(F2F(F@F(FBF(FKF(FDF(F(*.F-F(FMF(FQF(F@F(FBF(FKF(F(*8FFF(FQF
+(F2F(F@F()FC\"\"$F(F3F(F4F(F5F(F6F(F7F(F0F(F(*2FHF()F2FVF(F3F(F5F(F6F(
+F=F(%&DeltaGF(FDF(F(*8FFF(F3F(F4F(F5F(F6F(F7F(F0F(FNF(F2F(F@F(FBF(F(**
+FHF()F2F<F(FNF(FYF(FG*6F)F()F3F)F()F5F)F()F6F)F(F0F(F4F(F7F(F=F(F@F(FB
+F(FG*8FCF(FQF(FXF(FYF(F3F(F4F(F5F(F6F(FKF(F0F(FDF(F(*6F@F(FCF(FKF(F3F(
+F5F(F6F(F0F(FNF(F2F(FDF(F(**F-F(FfnF(FQF(FYF(FG*6F)F(FhnF(FinF(FjnF(F0
+F(F4F(FKF(F=F(FYF(FMF(F(*.FAF(FCF(FKF(%\"VGF(FXF(FYF(F(*.FQF(FMF(F@F(F
+UF(FHF(FKF(F(*4FhnF()F4F)F(FinF(FjnF()F8\"\"'F(F=F(F@F(FUF(F0F(F(*6F3F
+(F4F(F5F(F6F(FKF(F0F(FNF(FXF(FYF(FDF(F(*2FFF(F3F(F5F(F6F(F0F(FQF(FXF(F
+YF(F(*6FFF(F-F(FXF(F3F(F4F(F5F(F6F(FKF(F=F(FYF(F(*2F@F(FCF(FKF(FhnF(Fi
+nF(FjnF(F0F(F=F(F(*.F@F(FCF(FKF(F-F(FMF(FNF(F(*6FFF(F@F(FCF(FKF(F-F(F2
+F(F3F(F5F(F6F(F=F(F(*8FFF(FCF(F3F(F4F(F5F(F6F(FKF(F=F(FYF(FXF(FHF(F(*0
+FAF(FCF(FKF(-F.6$F=F;F(-F.6$F0F;F(FYF(FMF(F(*0FAF(FCF(FKF(-F.6$F=F6F()
+FYF)F(-F.6$F0F6F(FMF(F(*8F3F(F4F(F5F(F6F(F7F(F=F(F@F(FUF(FHF(F2F(FDF(F
+(*,FCF(FQF(FfnF(FYF(FHF(FG*6FCF(FhnF(FcoF(FinF(FjnF(F7F(F=F(FYF(FMF(F0
+F(FGF(F8!\"#F2#!\"(F)FY#!\"$F)FA#FGF)F(F(" }}}{EXCHG {PARA 260 "" 0 "
+" {TEXT -1 72 "===== Calculation of angular momentum density on t=cons
+t surfaces. =====" }}}{EXCHG {PARA 208 "" 0 "" {TEXT 214 31 "Angular r
+otation Killing field." }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+38 "grdef ( `phi\{^a\} := [ 0, 0, 0, 1 ]` ):" }}{PARA 6 "" 1 "" {TEXT 
+-1 42 "Components assigned for metric: KerrNewman" }}{PARA 6 "" 1 "" 
+{TEXT -1 30 "Created definition for phi(up)" }}}{EXCHG {PARA 0 "> " 0 
+"" {MPLTEXT 1 0 69 "grdefine( `LDensityt`, \{\}, `sqrt(-detg)*ntt*T\{a
+ b\}*phi\{^a\}*nt\{^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 32 "Created de
+finition for LDensityt" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 
+18 "grcalc(LDensityt);" }}{PARA 6 "" 1 "" {TEXT -1 51 "Calculated LDen
+sityt for KerrNewman (0.016000 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "
+6#/%*CPU~Time~G$\"#;!\"$" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 
+213 207 "grmap(LDensityt, subs, conjugate(r)=r,conjugate(a)=a,conjugat
+e(q)=q,conjugate(e)=e, conjugate(theta)=theta, conjugate(Sigma)=Sigma,
+conjugate(Gamma)=Gamma,conjugate(Omega)=Omega,conjugate(Delta)=Delta, \+
+'x' ):" }}{PARA 6 "" 1 "" {TEXT -1 34 "Applying routine subs to LDensi
+tyt" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 21 "gralter(LDensity
+t,8);" }}{PARA 6 "" 1 "" {TEXT -1 48 "Component simplification of a GR
+TensorII object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" 
+{TEXT -1 43 "Applying routine normal to object LDensityt" }}{PARA 11 "
+" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\"!F&" }}}{EXCHG {PARA 200 "> " 
+0 "" {MPLTEXT 1 213 174 "IntegrandusLt:=collect(expand(simplify(simpli
+fy(grcomponent(LDensityt)/sin(theta),symbolic),trigsin)),\{(diff(Phi,t
+)),(diff(Phi,r)),(diff(Phi,theta)),(diff(Phi,phi))\},factor);" }}
+{PARA 12 "" 1 "" {XPPMATH 20 "6#>%.IntegrandusLtG,(*&#\"\"\"\"\"#F(*,%
+&GammaGF(,&*&-%%diffG6$-%*conjugateG6#%$PhiG%$phiGF(%&SigmaGF(F(*0%\"q
+GF(%\"aGF(%\"eGF(%\"rGF()-%$sinG6#%&thetaGF)F(F1F(^#F(F(F(F(F6!\"\"%&D
+eltaGFB-F/6$F4%\"tGF(F(F(*&F'F(*,F+F(,**&-F/6$F1FFF(F6F(F(**F)F(%&Omeg
+aGF(F.F(F6F(F(*,^#FBF(F8F(F:F(F;F(F1F(F(*2^#F)F(FNF(F8F(F9F(F:F(F;F(F<
+F(F1F(F(F(F6FBFCFB-F/6$F4F5F(F(F(*&F'F(*2F+F(F8F(F:F(F;F(F4F(,,*,FPF(F
+6F(F9F(FKF(F<F(F(*0F)F(F8F(F:F(F;F(F9F(F1F(F<F(FB*(F6F(F.F(FAF(F(*2F)F
+(FNF(F8F()F9F)F(F:F(F;F(F1F()F=\"\"%F(F(*.^#!\"#F(F6F(FNF(F.F(F9F(F<F(
+F(F(FCFBF6F[oF(F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 59 "After proper
+ collection of terms, it becomes the following." }}}{EXCHG {PARA 0 "> \+
+" 0 "" {MPLTEXT 1 0 391 "IntegrandusLtHumanreadable:=1/Delta*Re(conjug
+ate(diff(Phi, t))*Gamma*diff(Phi, phi))+a*(r^2+a^2-Delta)/Delta*conjug
+ate(diff(Phi, phi))*diff(Phi, phi)-q*e*a*r/Delta*Im(conjugate(Phi)*Gam
+ma*sin(theta)^2/Sigma*diff(Phi, t))+q*e*r/Delta*Im(conjugate(Phi)*((r^
+2+a^2)*Sigma-(r^2+a^2-Delta)*(r^2+a^2-Sigma))/Sigma*diff(Phi, phi))-q^
+2*e^2*r^2*a*(r^2+a^2)/Delta*conjugate(Phi)*sin(theta)^2/Sigma*Phi;" }}
+{PARA 12 "" 1 "" {XPPMATH 20 "6#>%;IntegrandusLtHumanreadableG,,*&%&De
+ltaG!\"\"-%#ReG6#*(-%*conjugateG6#-%%diffG6$%$PhiG%\"tG\"\"\"%&GammaGF
+5-F16$F3%$phiGF5F5F5*,%\"aGF5,(*$)%\"rG\"\"#F5F5*$)F;F@F5F5F'F(F5F'F(-
+F.6#F7F5F7F5F5*.%\"qGF5%\"eGF5F;F5F?F5F'F(-%#ImG6#*,-F.6#F3F5F6F5-%$si
+nG6#%&thetaGF@%&SigmaGF(F0F5F5F(*,FFF5FGF5F?F5F'F(-FI6#**FLF5,&*&,&F=F
+5FAF5F5FRF5F5*&F<F5,(F=F5FAF5FRF(F5F(F5FRF(F7F5F5F5*6FFF@FGF@F?F@F;F5F
+YF5F'F(FLF5FNF@FRF(F3F5F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 59 "Rech
+ecking human readable form of angular momentum density." }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 985 "Expression:=IntegrandusLtHumanread
+able; SimplifiedExpression:=simplify(subs( Re(conjugate(diff(Phi, t))*
+Gamma*diff(Phi, phi))=1/2*(diff(conjugate(Phi), t)*Gamma*diff(Phi, phi
+)+diff(Phi, t)*Gamma*diff(conjugate(Phi), phi)),  conjugate(diff(Phi, \+
+phi))=diff(conjugate(Phi), phi), Im(conjugate(Phi)*Gamma*sin(theta)^2*
+diff(Phi, t)/Sigma)=1/(2*I)*(conjugate(Phi)*Gamma*sin(theta)^2*diff(Ph
+i, t)/Sigma-Phi*Gamma*sin(theta)^2*diff(conjugate(Phi), t)/Sigma), Im(
+conjugate(Phi)*((r^2+a^2)*Sigma-(r^2+a^2-Delta)*(r^2+a^2-Sigma))*diff(
+Phi, phi)/Sigma)=1/(2*I)*(conjugate(Phi)*((r^2+a^2)*Sigma-(r^2+a^2-Del
+ta)*(r^2+a^2-Sigma))*diff(Phi, phi)/Sigma-Phi*((r^2+a^2)*Sigma-(r^2+a^
+2-Delta)*(r^2+a^2-Sigma))*diff(conjugate(Phi), phi)/Sigma), Expression
+)); ReferenceExpression:=IntegrandusLt; DifferenceExpression:=simplify
+(subs(Omega=a*(2*M*r-e^2)/Gamma, Gamma=(r^2+a^2)^2-a^2*Delta*sin(theta
+)^2, Sigma=r^2+a^2*cos(theta)^2, Delta=r^2+a^2+e^2-2*M*r, simplify(Sim
+plifiedExpression-ReferenceExpression)));" }}{PARA 12 "" 1 "" 
+{XPPMATH 20 "6#>%+ExpressionG,,*&%&DeltaG!\"\"-%#ReG6#*(-%*conjugateG6
+#-%%diffG6$%$PhiG%\"tG\"\"\"%&GammaGF5-F16$F3%$phiGF5F5F5*,%\"aGF5,(*$
+)%\"rG\"\"#F5F5*$)F;F@F5F5F'F(F5F'F(-F.6#F7F5F7F5F5*.%\"qGF5%\"eGF5F;F
+5F?F5F'F(-%#ImG6#*,-F.6#F3F5F6F5-%$sinG6#%&thetaGF@%&SigmaGF(F0F5F5F(*
+,FFF5FGF5F?F5F'F(-FI6#**FLF5,&*&,&F=F5FAF5F5FRF5F5*&F<F5,(F=F5FAF5FRF(
+F5F(F5FRF(F7F5F5F5*6FFF@FGF@F?F@F;F5FYF5F'F(FLF5FNF@FRF(F3F5F(" }}
+{PARA 12 "" 1 "" {XPPMATH 20 "6#>%5SimplifiedExpressionG,$*&#\"\"\"\"
+\"#F(*(%&SigmaG!\"\"%&DeltaGF,,fn*2%\"qGF(%\"eGF(%\"rGF(F-F(F+F(-%*con
+jugateG6#%$PhiGF(-%%diffG6$F6%$phiGF(^#F(F(F(*0^#!\"#F(F0F(F1F()F2\"\"
+$F(F+F(F3F(F7F(F(*0^#F)F(F0F(F1F(F?F(F+F(F6F(-F86$F3F:F(F(*2F=F(F0F(F1
+F(F2F(F+F()%\"aGF)F(F3F(F7F(F(*2FBF(F0F(F1F(F2F(F+F(FFF(F6F(FCF(F(*0F0
+F(F1F(F2F()FG\"\"%F(F3F(F7F(F;F(F(*0F0F(F1F(F?F(F-F(F6F(FCF(F;F(F(*2F0
+F(F1F(F2F(F-F(FFF(F6F(FCF(F;F(F(*.^#F,F(F0F(F1F()F2\"\"&F(F6F(FCF(F(*2
+F0F(F1F(FGF(F2F(%&GammaGF(F3F(-F86$F6%\"tGF(F;F(F(*2FOF(F0F(F1F(F2F(F+
+F(F-F(F6F(FCF(F(*0FBF(F0F(F1F(F?F(FFF(F3F(F7F(F(*0F=F(F0F(F1F(F?F(FFF(
+F6F(FCF(F(*0FOF(F0F(F1F(F2F(FJF(F6F(FCF(F(*0FOF(F0F(F1F(F?F(F-F(F3F(F7
+F(F(*2FOF(F0F(F1F(F2F(F-F(FFF(F3F(F7F(F(*4F0F(F1F(FGF(F2F(FSF(F6F(-F86
+$F3FVF()-%$cosG6#%&thetaGF)F(F;F(F(*4FOF(F0F(F1F(FGF(F2F(FSF(F3F(FTF(F
+jnF(F(*2FOF(FSF(F0F(FGF(F1F(F2F(F6F(FhnF(F(**FSF(F+F(FTF(FCF(F(**FSF(F
++F(FhnF(F7F(F(*.F)F(FGF(FCF(F7F(F+F()F2F)F(F(*.F)F(FGF(FCF(F7F(F+F(F-F
+(F,*0F)F()F0F)F()F1F)F()F2FKF(F6F(FGF(F3F(F,*2F)F(FgoF(FhoF(FioF(F6F(F
+GF(F3F(FjnF(F(*0F)F(FgoF(FhoF(FdoF(F6F()FGF@F(F3F(F,*2F)F(FgoF(FhoF(Fd
+oF(F6F(F\\pF(F3F(FjnF(F(*.F0F(F1F(FPF(F3F(F7F(F;F(F(*,F)F(F\\pF(FCF(F7
+F(F+F(F(F(F(F(" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%4ReferenceExpressi
+onG,(*&#\"\"\"\"\"#F(*,%&GammaGF(,&*&-%%diffG6$-%*conjugateG6#%$PhiG%$
+phiGF(%&SigmaGF(F(*0%\"qGF(%\"aGF(%\"eGF(%\"rGF()-%$sinG6#%&thetaGF)F(
+F1F(^#F(F(F(F(F6!\"\"%&DeltaGFB-F/6$F4%\"tGF(F(F(*&F'F(*,F+F(,**&-F/6$
+F1FFF(F6F(F(**F)F(%&OmegaGF(F.F(F6F(F(*,^#FBF(F8F(F:F(F;F(F1F(F(*2^#F)
+F(FNF(F8F(F9F(F:F(F;F(F<F(F1F(F(F(F6FBFCFB-F/6$F4F5F(F(F(*&F'F(*2F+F(F
+8F(F:F(F;F(F4F(,,*,FPF(F6F(F9F(FKF(F<F(F(*0F)F(F8F(F:F(F;F(F9F(F1F(F<F
+(FB*(F6F(F.F(FAF(F(*2F)F(FNF(F8F()F9F)F(F:F(F;F(F1F()F=\"\"%F(F(*.^#!
+\"#F(F6F(FNF(F.F(F9F(F<F(F(F(FCFBF6F[oF(F(" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#>%5DifferenceExpressionG\"\"!" }}}{EXCHG {PARA 261 "" 
+0 "" {TEXT -1 77 "===== Calculation of angular momentum flow density o
+n r=const surfaces. =====" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 
+66 "grdefine( `LFlowr`, \{\}, `sqrt(-detg)*nrr*T\{a b\}*phi\{^a\}*nr\{
+^b\}` );" }}{PARA 6 "" 1 "" {TEXT -1 29 "Created definition for LFlowr
+" }}}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 15 "grcalc(LFlowr);" }}
+{PARA 6 "" 1 "" {TEXT -1 48 "Calculated LFlowr for KerrNewman (0.00800
+0 sec.)" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/%*CPU~Time~G$\"\")!\"$" }}
+}{EXCHG {PARA 200 "> " 0 "" {MPLTEXT 1 213 18 "gralter(LFlowr,1);" }}
+{PARA 6 "" 1 "" {TEXT -1 48 "Component simplification of a GRTensorII \+
+object:" }}{PARA 6 "" 1 "" {TEXT -1 0 "" }}{PARA 6 "" 1 "" {TEXT -1 
+42 "Applying routine simplify to object LFlowr" }}{PARA 11 "" 1 "" 
+{XPPMATH 20 "6#/%*CPU~Time~G$\"#;!\"$" }}}{EXCHG {PARA 0 "> " 0 "" 
+{MPLTEXT 1 0 65 "IntegrandusLr:=simplify(grcomponent(LFlowr)/sin(theta
+),symbolic);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%.IntegrandusLrG,$*&#
+\"\"\"\"\"#F(*(%&DeltaGF(,**(-%%diffG6$%$PhiG%\"rGF(-F/6$-%*conjugateG
+6#F1%$phiGF(%&SigmaGF(F(*2F.F(%\"qGF(%\"aGF(%\"eGF(F2F()-%$sinG6#%&the
+taGF)F(F5F(^#F(F(F(*(-F/6$F5F2F(-F/6$F1F8F(F9F(F(*2^#!\"\"F(FEF(F;F(F<
+F(F=F(F2F(F>F(F1F(F(F(F9FKF(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 
+1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG 
+{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "2 0 0" 8 }{VIEWOPTS 1 
+1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }
diff --git a/include/gridripper/phys/gr/fixmp/kerrkgaxhyp/Disk.h b/include/gridripper/phys/gr/fixmp/kerrkgaxhyp/Disk.h
new file mode 100644 (file)
index 0000000..387a25f
--- /dev/null
@@ -0,0 +1,142 @@
+#ifndef gridripper_phys_gr_fixmp_kerrkgaxhyp_Disk_h
+#define gridripper_phys_gr_fixmp_kerrkgaxhyp_Disk_h
+
+
+#include <gridripper/Parameters.h>
+#include <gridripper/amr1d/PDE.h>
+#include <gridripper/amr1d/FuncInitCond.h>
+#include <gridripper/math.h>
+#include <sstream>
+
+
+namespace gridripper { namespace phys { namespace gr { namespace fixmp {
+namespace kerrkgaxhyp {
+
+
+using namespace gridripper;
+using namespace gridripper::util;
+using namespace gridripper::amr1d;
+using namespace std;
+
+
+/**
+ * Accretion disk initial condition for Higgs equation with 
+ * multipole expansion method over Kerr spacetime, with 
+ * hyperboloidal slicing.
+ *
+ * @version 17/03/2010
+ * @since   17/03/2010
+ * @author  Andras Laszlo, Gabor Toth
+ */
+class Disk: public FuncInitCond
+{
+private:
+    /** Maximal multipole order. */
+    int maxOrder;
+    /** Maximal multipole order cutoff at initial surface. */
+    int maxOrderInit;
+    /** Array size of multipole ve