aboutsummaryrefslogtreecommitdiff
path: root/Carpet
diff options
context:
space:
mode:
authoreschnett <>2001-03-01 11:40:00 +0000
committereschnett <>2001-03-01 11:40:00 +0000
commit310f0ea48d18866b773136aed11200b6eda6378b (patch)
tree445d3e34ce8b89812994b6614f7bc9f4acbc7fe2 /Carpet
Initial revision
darcs-hash:20010301114010-f6438-12fb8a9ffcc80e86c0a97e37b5b0dae0dbc59b79.gz
Diffstat (limited to 'Carpet')
-rw-r--r--Carpet/COPYING341
-rw-r--r--Carpet/Carpet/COPYING341
-rw-r--r--Carpet/Carpet/README9
-rw-r--r--Carpet/Carpet/configuration.ccl12
-rw-r--r--Carpet/Carpet/doc/TODO17
-rw-r--r--Carpet/Carpet/doc/schedule.tex141
-rw-r--r--Carpet/Carpet/doc/threelev_initdata.eps552
-rw-r--r--Carpet/Carpet/doc/threelev_initdata.tex107
-rw-r--r--Carpet/Carpet/doc/threelev_initdata_2.eps470
-rw-r--r--Carpet/Carpet/interface.ccl89
-rw-r--r--Carpet/Carpet/options/README9
-rw-r--r--Carpet/Carpet/options/carpet-because29
-rw-r--r--Carpet/Carpet/options/carpet-harpo-gcc38
-rw-r--r--Carpet/Carpet/options/carpet-harpo-sgi31
-rw-r--r--Carpet/Carpet/options/carpet-hawaii-sgi27
-rw-r--r--Carpet/Carpet/options/carpet-lilypond29
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-debug31
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-gcc3235
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-ic50
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-ic-debug47
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-ic750
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-lf9539
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-lf95-debug40
-rw-r--r--Carpet/Carpet/options/carpet-lilypond-prof33
-rw-r--r--Carpet/Carpet/options/carpet-mintaka32
-rw-r--r--Carpet/Carpet/options/carpet-tat-ic50
-rw-r--r--Carpet/Carpet/par/carpet-test.par7
-rw-r--r--Carpet/Carpet/par/carpet-test.th2
-rw-r--r--Carpet/Carpet/par/multipatch.par42
-rw-r--r--Carpet/Carpet/par/test_rad.par45
-rw-r--r--Carpet/Carpet/par/test_rad.th14
-rw-r--r--Carpet/Carpet/par/test_rad_ref.par53
-rw-r--r--Carpet/Carpet/par/test_rad_ref.th15
-rw-r--r--Carpet/Carpet/param.ccl294
-rw-r--r--Carpet/Carpet/schedule.ccl7
-rw-r--r--Carpet/Carpet/src/CallFunction.cc298
-rw-r--r--Carpet/Carpet/src/CarpetParamCheck.cc39
-rw-r--r--Carpet/Carpet/src/CarpetStartup.cc45
-rw-r--r--Carpet/Carpet/src/Checksum.cc181
-rw-r--r--Carpet/Carpet/src/Comm.cc165
-rw-r--r--Carpet/Carpet/src/Cycle.cc115
-rw-r--r--Carpet/Carpet/src/Evolve.cc351
-rw-r--r--Carpet/Carpet/src/Initialise.cc556
-rw-r--r--Carpet/Carpet/src/Poison.cc194
-rw-r--r--Carpet/Carpet/src/Recompose.cc861
-rw-r--r--Carpet/Carpet/src/Restrict.cc106
-rw-r--r--Carpet/Carpet/src/SetupGH.cc960
-rw-r--r--Carpet/Carpet/src/Shutdown.cc74
-rw-r--r--Carpet/Carpet/src/Storage.cc251
-rw-r--r--Carpet/Carpet/src/carpet.hh70
-rw-r--r--Carpet/Carpet/src/carpet_public.h113
-rw-r--r--Carpet/Carpet/src/carpet_public.hh15
-rw-r--r--Carpet/Carpet/src/defines.hh33
-rw-r--r--Carpet/Carpet/src/functions.hh73
-rw-r--r--Carpet/Carpet/src/helpers.cc337
-rw-r--r--Carpet/Carpet/src/make.code.defn25
-rw-r--r--Carpet/Carpet/src/modes.cc976
-rw-r--r--Carpet/Carpet/src/modes.hh322
-rw-r--r--Carpet/Carpet/src/typecase187
-rw-r--r--Carpet/Carpet/src/util/plot-bboxes1
-rw-r--r--Carpet/Carpet/src/variables.cc98
-rw-r--r--Carpet/Carpet/src/variables.hh136
-rw-r--r--Carpet/CarpetIOASCII/COPYING341
-rw-r--r--Carpet/CarpetIOASCII/README8
-rw-r--r--Carpet/CarpetIOASCII/configuration.ccl6
-rw-r--r--Carpet/CarpetIOASCII/doc/documentation.tex154
-rw-r--r--Carpet/CarpetIOASCII/interface.ccl22
-rw-r--r--Carpet/CarpetIOASCII/param.ccl375
-rw-r--r--Carpet/CarpetIOASCII/schedule.ccl16
-rw-r--r--Carpet/CarpetIOASCII/src/ioascii.cc1181
-rw-r--r--Carpet/CarpetIOASCII/src/ioascii.h22
-rw-r--r--Carpet/CarpetIOASCII/src/ioascii.hh73
-rw-r--r--Carpet/CarpetIOASCII/src/make.code.defn9
-rw-r--r--Carpet/CarpetIOASCII/src/make.configuration.defn4
-rw-r--r--Carpet/CarpetIOASCII/src/make.configuration.deps53
-rwxr-xr-xCarpet/CarpetIOASCII/src/util/Carpet2ygraph.pl121
-rwxr-xr-xCarpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl105
-rw-r--r--Carpet/CarpetIOASCII/src/util/carpet2sdf.c167
-rw-r--r--Carpet/CarpetIOASCII/src/util/carpet2xgraph.c186
-rw-r--r--Carpet/CarpetIOHDF5/COPYING341
-rw-r--r--Carpet/CarpetIOHDF5/README8
-rw-r--r--Carpet/CarpetIOHDF5/configuration.ccl6
-rw-r--r--Carpet/CarpetIOHDF5/doc/documentation.tex314
-rw-r--r--Carpet/CarpetIOHDF5/interface.ccl20
-rw-r--r--Carpet/CarpetIOHDF5/par/CarpetWaveToyCheckpointTest.par43
-rw-r--r--Carpet/CarpetIOHDF5/par/CarpetWaveToyRecoverTest.par12
-rw-r--r--Carpet/CarpetIOHDF5/param.ccl113
-rw-r--r--Carpet/CarpetIOHDF5/schedule.ccl63
-rw-r--r--Carpet/CarpetIOHDF5/src/Checkpoint.cc437
-rw-r--r--Carpet/CarpetIOHDF5/src/Recover.cc523
-rw-r--r--Carpet/CarpetIOHDF5/src/iohdf5.cc1181
-rw-r--r--Carpet/CarpetIOHDF5/src/iohdf5.h44
-rw-r--r--Carpet/CarpetIOHDF5/src/iohdf5.hh198
-rw-r--r--Carpet/CarpetIOHDF5/src/iohdf5GH.h56
-rw-r--r--Carpet/CarpetIOHDF5/src/iohdf5chckpt_recover.cc914
-rw-r--r--Carpet/CarpetIOHDF5/src/iohdf5utils.cc521
-rw-r--r--Carpet/CarpetIOHDF5/src/make.code.defn5
-rw-r--r--Carpet/CarpetIOHDF5/src/make.configuration.defn7
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.it_64.h5bin0 -> 957639 bytes
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.parfile44
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc.par14
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.x.asc227
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.y.asc227
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.z.asc227
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_maximum.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_minimum.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm1.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm2.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc.par14
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.x.asc632
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.y.asc866
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.z.asc632
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_maximum.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_minimum.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm1.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm2.xg4
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data.par57
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/phi.h5bin0 -> 11584 bytes
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/phi_maximum.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/phi_minimum.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm1.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm2.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/psi.h5bin0 -> 11584 bytes
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/psi_maximum.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/psi_minimum.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm1.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm2.xg34
-rw-r--r--Carpet/CarpetIOHDF5/test/output_initial_data.parfile57
-rw-r--r--Carpet/CarpetIOScalar/COPYING341
-rw-r--r--Carpet/CarpetIOScalar/README10
-rw-r--r--Carpet/CarpetIOScalar/configuration.ccl6
-rw-r--r--Carpet/CarpetIOScalar/doc/documentation.tex144
-rw-r--r--Carpet/CarpetIOScalar/interface.ccl8
-rw-r--r--Carpet/CarpetIOScalar/param.ccl57
-rw-r--r--Carpet/CarpetIOScalar/schedule.ccl16
-rw-r--r--Carpet/CarpetIOScalar/src/ioscalar.cc487
-rw-r--r--Carpet/CarpetIOScalar/src/make.code.defn8
-rw-r--r--Carpet/CarpetInterp/COPYING341
-rw-r--r--Carpet/CarpetInterp/README10
-rw-r--r--Carpet/CarpetInterp/configuration.ccl6
-rw-r--r--Carpet/CarpetInterp/doc/documentation.tex143
-rw-r--r--Carpet/CarpetInterp/interface.ccl52
-rw-r--r--Carpet/CarpetInterp/param.ccl3
-rw-r--r--Carpet/CarpetInterp/schedule.ccl7
-rw-r--r--Carpet/CarpetInterp/src/interp.cc695
-rw-r--r--Carpet/CarpetInterp/src/interp.h19
-rw-r--r--Carpet/CarpetInterp/src/interp.hh29
-rw-r--r--Carpet/CarpetInterp/src/make.code.defn9
-rw-r--r--Carpet/CarpetInterp/test/waveinterp.par144
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/arrays1d[0].x.asc257
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi..asc157
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.average.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.count.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.maximum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.minimum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.norm1.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.norm2.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.norm_inf.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.sum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.x.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.y.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phi.z.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit..asc157
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.average.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.count.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.maximum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.minimum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.norm1.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.norm2.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.norm_inf.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.sum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.x.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.y.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phit.z.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix..asc157
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.average.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.count.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.maximum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.minimum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.norm1.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.norm2.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.norm_inf.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.sum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.x.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.y.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phix.z.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy..asc157
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.average.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.count.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.maximum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.minimum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.norm1.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.norm2.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.norm_inf.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.sum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.x.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.y.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiy.z.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz..asc157
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.average.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.count.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.maximum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.minimum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.norm1.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.norm2.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.norm_inf.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.sum.asc19
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.x.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.y.asc808
-rw-r--r--Carpet/CarpetInterp/test/waveinterp/phiz.z.asc808
-rw-r--r--Carpet/CarpetLib/COPYING341
-rw-r--r--Carpet/CarpetLib/README8
-rw-r--r--Carpet/CarpetLib/configuration.ccl8
-rw-r--r--Carpet/CarpetLib/interface.ccl22
-rw-r--r--Carpet/CarpetLib/param.ccl24
-rw-r--r--Carpet/CarpetLib/schedule.ccl2
-rw-r--r--Carpet/CarpetLib/src/bbox.cc270
-rw-r--r--Carpet/CarpetLib/src/bbox.hh171
-rw-r--r--Carpet/CarpetLib/src/bboxset.cc393
-rw-r--r--Carpet/CarpetLib/src/bboxset.hh156
-rw-r--r--Carpet/CarpetLib/src/checkindex.F7723
-rw-r--r--Carpet/CarpetLib/src/copy_3d_complex16.F77114
-rw-r--r--Carpet/CarpetLib/src/copy_3d_int4.F77114
-rw-r--r--Carpet/CarpetLib/src/copy_3d_real8.F77114
-rw-r--r--Carpet/CarpetLib/src/data.cc1388
-rw-r--r--Carpet/CarpetLib/src/data.hh130
-rw-r--r--Carpet/CarpetLib/src/defs.cc176
-rw-r--r--Carpet/CarpetLib/src/defs.hh194
-rw-r--r--Carpet/CarpetLib/src/dh.cc689
-rw-r--r--Carpet/CarpetLib/src/dh.hh146
-rw-r--r--Carpet/CarpetLib/src/dist.cc83
-rw-r--r--Carpet/CarpetLib/src/dist.hh120
-rw-r--r--Carpet/CarpetLib/src/gdata.cc438
-rw-r--r--Carpet/CarpetLib/src/gdata.hh219
-rw-r--r--Carpet/CarpetLib/src/gf.cc91
-rw-r--r--Carpet/CarpetLib/src/gf.hh87
-rw-r--r--Carpet/CarpetLib/src/ggf.cc608
-rw-r--r--Carpet/CarpetLib/src/ggf.hh225
-rw-r--r--Carpet/CarpetLib/src/gh.cc240
-rw-r--r--Carpet/CarpetLib/src/gh.hh142
-rw-r--r--Carpet/CarpetLib/src/instantiate178
-rw-r--r--Carpet/CarpetLib/src/make.code.defn47
-rw-r--r--Carpet/CarpetLib/src/make.configuration.defn7
-rw-r--r--Carpet/CarpetLib/src/operators.hh8
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8.F77193
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl.F77193
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl_eno.F90302
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl_minmod.F77325
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3.F77218
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3_rf2.F77628
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o5.F77226
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_2tl_rf2.F77402
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl.F77197
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl_eno.F90370
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl_minmod.F77388
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3.F77222
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3_rf2.F77757
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o5.F77230
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_3tl_rf2.F77430
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_eno.F90299
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_minmod.F77264
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_o3.F77194
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_o3_rf2.F77420
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_o5.F77205
-rw-r--r--Carpet/CarpetLib/src/prolongate_3d_real8_rf2.F77341
-rw-r--r--Carpet/CarpetLib/src/restrict_3d_real8.F77128
-rw-r--r--Carpet/CarpetLib/src/restrict_3d_real8_rf2.F77111
-rw-r--r--Carpet/CarpetLib/src/th.cc81
-rw-r--r--Carpet/CarpetLib/src/th.hh104
-rw-r--r--Carpet/CarpetLib/src/vect.cc59
-rw-r--r--Carpet/CarpetLib/src/vect.hh797
-rw-r--r--Carpet/CarpetReduce/COPYING341
-rw-r--r--Carpet/CarpetReduce/README29
-rw-r--r--Carpet/CarpetReduce/configuration.ccl6
-rw-r--r--Carpet/CarpetReduce/doc/documentation.tex143
-rw-r--r--Carpet/CarpetReduce/interface.ccl27
-rw-r--r--Carpet/CarpetReduce/param.ccl6
-rw-r--r--Carpet/CarpetReduce/schedule.ccl44
-rw-r--r--Carpet/CarpetReduce/src/make.code.defn9
-rw-r--r--Carpet/CarpetReduce/src/mask_carpet.cc292
-rw-r--r--Carpet/CarpetReduce/src/mask_carpet.hh13
-rw-r--r--Carpet/CarpetReduce/src/mask_coords.c128
-rw-r--r--Carpet/CarpetReduce/src/mask_init.c161
-rw-r--r--Carpet/CarpetReduce/src/reduce.cc1174
-rw-r--r--Carpet/CarpetReduce/src/reduce.h19
-rw-r--r--Carpet/CarpetReduce/src/reduce.hh8
-rw-r--r--Carpet/CarpetRegrid/COPYING341
-rw-r--r--Carpet/CarpetRegrid/README8
-rw-r--r--Carpet/CarpetRegrid/configuration.ccl6
-rw-r--r--Carpet/CarpetRegrid/interface.ccl72
-rw-r--r--Carpet/CarpetRegrid/param.ccl347
-rw-r--r--Carpet/CarpetRegrid/schedule.ccl8
-rw-r--r--Carpet/CarpetRegrid/src/automatic.cc408
-rw-r--r--Carpet/CarpetRegrid/src/baselevel.cc40
-rw-r--r--Carpet/CarpetRegrid/src/centre.cc95
-rw-r--r--Carpet/CarpetRegrid/src/make.code.defn18
-rw-r--r--Carpet/CarpetRegrid/src/manualcoordinatelist.cc185
-rw-r--r--Carpet/CarpetRegrid/src/manualcoordinates.cc166
-rw-r--r--Carpet/CarpetRegrid/src/manualgridpointlist.cc125
-rw-r--r--Carpet/CarpetRegrid/src/manualgridpoints.cc131
-rw-r--r--Carpet/CarpetRegrid/src/moving.cc84
-rw-r--r--Carpet/CarpetRegrid/src/paramcheck.cc47
-rw-r--r--Carpet/CarpetRegrid/src/regrid.cc199
-rw-r--r--Carpet/CarpetRegrid/src/regrid.h22
-rw-r--r--Carpet/CarpetRegrid/src/regrid.hh151
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet.par67
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep.par68
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm2.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_maximum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_minimum.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm1.xg4
-rw-r--r--Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm2.xg4
-rw-r--r--Carpet/CarpetSlab/COPYING341
-rw-r--r--Carpet/CarpetSlab/README8
-rw-r--r--Carpet/CarpetSlab/configuration.ccl6
-rw-r--r--Carpet/CarpetSlab/interface.ccl97
-rw-r--r--Carpet/CarpetSlab/param.ccl2
-rw-r--r--Carpet/CarpetSlab/schedule.ccl2
-rw-r--r--Carpet/CarpetSlab/src/make.code.defn9
-rw-r--r--Carpet/CarpetSlab/src/slab.cc880
-rw-r--r--Carpet/CarpetSlab/src/slab.h89
-rw-r--r--Carpet/CarpetSlab/src/slab.hh37
-rw-r--r--Carpet/CarpetTest/COPYING341
-rw-r--r--Carpet/CarpetTest/README9
-rw-r--r--Carpet/CarpetTest/interface.ccl29
-rw-r--r--Carpet/CarpetTest/param.ccl32
-rw-r--r--Carpet/CarpetTest/schedule.ccl14
-rw-r--r--Carpet/CarpetTest/src/carpettest_check_arguments.F7744
-rw-r--r--Carpet/CarpetTest/src/carpettest_check_sizes.c107
-rw-r--r--Carpet/CarpetTest/src/make.code.defn9
-rw-r--r--Carpet/CarpetTest/test/arraysizes.par28
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr1.xl15
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr2.xl13
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr2.xyp56
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr2.yl14
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.xl10
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.xyp23
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.xyzv92
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.xzp27
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.yl11
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.yzp32
-rw-r--r--Carpet/CarpetTest/test/arraysizes/arr3.zl12
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.xl17
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.xyp117
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.xyzv1117
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.xzp117
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.yl17
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.yzp117
-rw-r--r--Carpet/CarpetTest/test/arraysizes/gf.zl17
-rw-r--r--Carpet/CarpetTest/test/arraysizes/sc.xl8
-rw-r--r--Carpet/CarpetWeb/CarpetMonth/index.html340
-rw-r--r--Carpet/CarpetWeb/Makefile6
-rw-r--r--Carpet/CarpetWeb/bugs.html47
-rw-r--r--Carpet/CarpetWeb/cbxSmall.jpgbin0 -> 2537 bytes
-rw-r--r--Carpet/CarpetWeb/doc/documentation.ps5526
-rw-r--r--Carpet/CarpetWeb/doc/first-steps.ps2719
-rw-r--r--Carpet/CarpetWeb/doc/internals.ps2859
-rw-r--r--Carpet/CarpetWeb/favicon.icobin0 -> 318 bytes
-rw-r--r--Carpet/CarpetWeb/feature-requests.html84
-rw-r--r--Carpet/CarpetWeb/index.html287
-rw-r--r--Carpet/CarpetWeb/logoab8.pngbin0 -> 1114 bytes
-rw-r--r--Carpet/CarpetWeb/pictures/carpetwavetoy.jpegbin0 -> 302184 bytes
-rw-r--r--Carpet/CarpetWeb/robots.txt3
-rw-r--r--Carpet/CarpetWeb/valid-xhtml10.pngbin0 -> 2414 bytes
-rw-r--r--Carpet/README11
-rw-r--r--Carpet/doc/Grid1.eps188
-rw-r--r--Carpet/doc/Grid1.fig51
-rw-r--r--Carpet/doc/Makefile29
-rw-r--r--Carpet/doc/Periodic1.eps201
-rw-r--r--Carpet/doc/Periodic1.fig39
-rw-r--r--Carpet/doc/Periodic2.eps262
-rw-r--r--Carpet/doc/Periodic2.fig99
-rw-r--r--Carpet/doc/carpet.bib50
-rw-r--r--Carpet/doc/documentation.tex892
-rw-r--r--Carpet/doc/first-steps.tex583
-rw-r--r--Carpet/doc/internals.tex777
-rw-r--r--Carpet/doxygen/Doxyfile1080
-rw-r--r--Carpet/doxygen/README16
437 files changed, 77486 insertions, 0 deletions
diff --git a/Carpet/COPYING b/Carpet/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/Carpet/COPYING b/Carpet/Carpet/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/Carpet/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/Carpet/README b/Carpet/Carpet/README
new file mode 100644
index 000000000..81065fb42
--- /dev/null
+++ b/Carpet/Carpet/README
@@ -0,0 +1,9 @@
+Cactus Code Thorn Carpet
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/README,v 1.2 2004/01/25 14:57:27 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides a parallel AMR (adaptive mesh refinement) driver
+with MPI.
diff --git a/Carpet/Carpet/configuration.ccl b/Carpet/Carpet/configuration.ccl
new file mode 100644
index 000000000..3880e348b
--- /dev/null
+++ b/Carpet/Carpet/configuration.ccl
@@ -0,0 +1,12 @@
+# Configuration definitions for thorn Carpet
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/configuration.ccl,v 1.5 2004/06/08 21:09:25 schnetter Exp $
+
+PROVIDES Carpet
+{
+ SCRIPT
+ LANG
+}
+
+REQUIRES IOUtil CarpetLib
+
+REQUIRES THORNS: IOUtil CarpetLib
diff --git a/Carpet/Carpet/doc/TODO b/Carpet/Carpet/doc/TODO
new file mode 100644
index 000000000..00eba8d0a
--- /dev/null
+++ b/Carpet/Carpet/doc/TODO
@@ -0,0 +1,17 @@
+-*-Text-*-
+$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/doc/TODO,v 1.5 2001/04/23 08:10:11 schnetter Exp $
+
+CarpetSlab: Add support for diagonal lines
+
+Carpet: Add support for a shadow hierarchy
+
+Carpet: Distribute processes in all directions, not only z
+
+Carpet: Test suite
+
+Carpet: Finish documentation
+
+CarpetIOASCII: put more information into output files
+
+Carpet: Allow en-/disabling storage for grid functions with one time
+level
diff --git a/Carpet/Carpet/doc/schedule.tex b/Carpet/Carpet/doc/schedule.tex
new file mode 100644
index 000000000..fcb529ae2
--- /dev/null
+++ b/Carpet/Carpet/doc/schedule.tex
@@ -0,0 +1,141 @@
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/doc/schedule.tex,v 1.3 2004/02/09 12:42:03 schnetter Exp $
+\documentclass{article}
+\begin{document}
+\section{The PUGH schedule:}
+
+\fbox{\begin{minipage}[t]{\textwidth}
+STARTUP\\
+WRAGH\\
+PARAMCHECK\\
+BASEGRID
+\end{minipage}}
+\\
+\fbox{\begin{minipage}[t]{\textwidth}
+Recover? (yes/no)
+\\
+\fbox{\begin{minipage}[t]{0.475\textwidth}
+INITIAL\\
+POSTINITIAL\\
+POSTSTEP
+\end{minipage}}
+\fbox{\begin{minipage}[t]{0.475\textwidth}
+RECOVER\_VARIABLES\\
+POST\_RECOVER\_VARIABLES
+\end{minipage}}
+\end{minipage}}
+\\
+\fbox{\begin{minipage}[t]{\textwidth}
+CPINITIAL\\
+ANALYSIS\\
+OutputGH
+\end{minipage}}
+\\
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+main\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.87\textwidth}
+Advance time\\
+PRESTEP\\
+EVOL\\
+POSTSTEP\\
+CHECKPOINT\\
+ANALYSIS\\
+OutputGH
+\end{minipage}}}
+\\
+\fbox{\begin{minipage}[t]{\textwidth}
+TERMINATE\\
+SHUTDOWN
+\end{minipage}}
+
+
+
+\newpage
+\section{The Carpet schedule:}
+
+\fbox{\begin{minipage}[t]{\textwidth}
+STARTUP\\
+WRAGH\\
+PARAMCHECK\\
+BASEGRID
+\end{minipage}}
+\\
+\fbox{\begin{minipage}[t]{\textwidth}
+Recover? (yes/no)
+\\
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+initial\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.345\textwidth}
+INITIAL\\
+Regrid\\
+$\longrightarrow$ Recurse\\
+Restrict\\
+POSTRESTRICTINITIAL\\
+POSTINITIAL\\
+POSTSTEP
+\end{minipage}}}
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+recover\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.345\textwidth}
+RECOVER\_VARIABLES\\
+POST\_RECOVER\_VARIABLES
+$\longrightarrow$ Recurse
+\end{minipage}}}
+\\
+\fbox{\begin{minipage}[t]{0.47\textwidth}
+3 Time Level Initialisation
+\end{minipage}}
+\end{minipage}}
+\\
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+initial\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.87\textwidth}
+$\longrightarrow$ Recurse\\
+CPINITIAL\\
+ANALYSIS\\
+OutputGH
+\end{minipage}}}
+\\
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+main\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+evol\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.74\textwidth}
+Regrid\\
+Advance time\\
+PRESTEP\\
+EVOL\\
+$\longrightarrow$ Recurse\\
+Restrict\\
+POSTRESTRICT\\
+POSTSTEP\\
+CHECKPOINT\\
+ANALYSIS\\
+OutputGH
+\end{minipage}}}}
+\\
+\fbox{\begin{minipage}[t]{0.1\textwidth}
+shutdown\\
+loop
+\end{minipage}
+\fbox{\begin{minipage}[t]{0.87\textwidth}
+$\longrightarrow$ Recurse\\
+TERMINATE
+\end{minipage}}}
+\\
+\fbox{\begin{minipage}[t]{\textwidth}
+SHUTDOWN
+\end{minipage}}
+
+\end{document}
diff --git a/Carpet/Carpet/doc/threelev_initdata.eps b/Carpet/Carpet/doc/threelev_initdata.eps
new file mode 100644
index 000000000..6e7283a3f
--- /dev/null
+++ b/Carpet/Carpet/doc/threelev_initdata.eps
@@ -0,0 +1,552 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: threelev_initdata.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Wed Jul 17 01:40:55 2002
+%%For: shawley@ockham (,,,)
+%%BoundingBox: 0 0 572 603
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 603 moveto 0 0 lineto 572 0 lineto 572 603 lineto closepath clip newpath
+-10.0 649.1 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/Times-Roman /Times-Roman-iso isovec ReEncode
+/Times-Bold /Times-Bold-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% Polyline
+7.500 slw
+n 900 1800 m
+ 3600 1800 l gs col0 s gr
+% Polyline
+n 5400 1800 m
+ 8100 1800 l gs col0 s gr
+% Polyline
+n 5400 5400 m
+ 8100 5400 l gs col0 s gr
+% Polyline
+n 900 5400 m
+ 3600 5400 l gs col0 s gr
+% Polyline
+n 900 9000 m
+ 3600 9000 l gs col0 s gr
+% Polyline
+n 5400 9000 m
+ 8100 9000 l gs col0 s gr
+% Polyline
+n 900 900 m
+ 3600 900 l gs col0 s gr
+% Polyline
+n 5400 900 m
+ 8100 900 l gs col0 s gr
+% Polyline
+n 5400 2700 m
+ 8100 2700 l gs col0 s gr
+% Polyline
+n 5400 4500 m
+ 8100 4500 l gs col0 s gr
+% Polyline
+n 5400 6300 m
+ 8100 6300 l gs col0 s gr
+% Polyline
+n 900 4500 m
+ 3600 4500 l gs col0 s gr
+% Polyline
+n 900 6300 m
+ 3600 6300 l gs col0 s gr
+% Polyline
+n 1810 1750 m
+ 2710 1750 l gs col2 s gr
+% Polyline
+n 1355 1775 m
+ 3155 1775 l gs col1 s gr
+% Polyline
+n 6310 1750 m
+ 7210 1750 l gs col2 s gr
+% Polyline
+n 5855 1775 m
+ 7655 1775 l gs col1 s gr
+% Polyline
+n 1360 4925 m
+ 3160 4925 l gs col1 s gr
+% Polyline
+n 1810 5350 m
+ 2710 5350 l gs col2 s gr
+% Polyline
+n 1355 5375 m
+ 3155 5375 l gs col1 s gr
+% Polyline
+n 5860 4925 m
+ 7660 4925 l gs col1 s gr
+% Polyline
+n 6310 5350 m
+ 7210 5350 l gs col2 s gr
+% Polyline
+n 5855 5375 m
+ 7655 5375 l gs col1 s gr
+% Polyline
+n 5855 5830 m
+ 7655 5830 l gs col1 s gr
+% Polyline
+n 900 8100 m
+ 3600 8100 l gs col0 s gr
+% Polyline
+n 900 9900 m
+ 3600 9900 l gs col0 s gr
+% Polyline
+n 1360 8525 m
+ 3160 8525 l gs col1 s gr
+% Polyline
+n 1805 8735 m
+ 2705 8735 l gs col2 s gr
+% Polyline
+n 1810 8950 m
+ 2710 8950 l gs col2 s gr
+% Polyline
+n 1355 8975 m
+ 3155 8975 l gs col1 s gr
+% Polyline
+n 1355 9430 m
+ 3155 9430 l gs col1 s gr
+% Polyline
+n 5400 8100 m
+ 8100 8100 l gs col0 s gr
+% Polyline
+n 5400 9900 m
+ 8100 9900 l gs col0 s gr
+% Polyline
+n 5860 8525 m
+ 7660 8525 l gs col1 s gr
+% Polyline
+n 6305 8735 m
+ 7205 8735 l gs col2 s gr
+% Polyline
+n 6310 8950 m
+ 7210 8950 l gs col2 s gr
+% Polyline
+n 5855 8975 m
+ 7655 8975 l gs col1 s gr
+% Polyline
+n 5855 9430 m
+ 7655 9430 l gs col1 s gr
+% Polyline
+n 6305 9205 m
+ 7205 9205 l gs col2 s gr
+% Polyline
+2 slj
+ [15 30] 30 sd
+gs clippath
+842 999 m 798 958 l 694 1068 l 799 1002 l 738 1109 l cp
+eoclip
+n 810 1770 m 809 1769 l 805 1766 l 800 1760 l 792 1752 l 781 1742 l
+ 768 1728 l 754 1713 l 738 1695 l 721 1676 l 705 1655 l
+ 688 1633 l 673 1609 l 658 1584 l 645 1557 l 633 1528 l
+ 622 1497 l 614 1462 l 609 1426 l 607 1387 l 609 1348 l
+ 614 1311 l 622 1276 l 633 1244 l 645 1214 l 658 1186 l
+ 673 1160 l 688 1136 l 705 1113 l 721 1091 l 738 1070 l
+ 754 1051 l 768 1034 l 781 1020 l 792 1009 l
+ 810 990 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 738 1109 m 799 1002 l 694 1068 l col0 s
+% Polyline
+2 slj
+ [15 30] 30 sd
+gs clippath
+5350 962 m 5306 921 l 5202 1031 l 5307 965 l 5246 1072 l cp
+eoclip
+n 5318 1733 m 5317 1732 l 5313 1729 l 5308 1723 l 5300 1715 l 5289 1705 l
+ 5276 1691 l 5262 1676 l 5246 1658 l 5229 1639 l 5213 1618 l
+ 5196 1596 l 5181 1572 l 5166 1547 l 5153 1520 l 5141 1491 l
+ 5130 1460 l 5122 1425 l 5117 1389 l 5115 1350 l 5117 1311 l
+ 5122 1274 l 5130 1239 l 5141 1207 l 5153 1177 l 5166 1149 l
+ 5181 1123 l 5196 1099 l 5213 1076 l 5229 1054 l 5246 1033 l
+ 5262 1014 l 5276 997 l 5289 983 l 5300 972 l
+ 5318 953 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5246 1072 m 5307 965 l 5202 1031 l col0 s
+% Polyline
+2 slj
+ [15 30] 30 sd
+gs clippath
+5869 4935 m 5834 4886 l 5710 4974 l 5826 4930 l 5745 5023 l cp
+eoclip
+n 5820 5385 m 5818 5383 l 5814 5380 l 5808 5373 l 5798 5364 l 5786 5352 l
+ 5773 5337 l 5759 5321 l 5745 5304 l 5731 5286 l 5719 5266 l
+ 5707 5245 l 5698 5221 l 5690 5196 l 5686 5169 l 5685 5140 l
+ 5688 5112 l 5695 5085 l 5705 5061 l 5716 5040 l 5729 5021 l
+ 5743 5004 l 5759 4987 l 5774 4973 l 5789 4959 l 5804 4947 l
+ 5816 4937 l
+ 5840 4920 l gs col1 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5745 5023 m 5826 4930 l 5710 4974 l col1 s
+% Polyline
+2 slj
+ [15 30] 30 sd
+gs clippath
+1361 4930 m 1319 4888 l 1211 4995 l 1318 4932 l 1254 5038 l cp
+eoclip
+n 1309 5361 m 1307 5359 l 1303 5354 l 1296 5346 l 1287 5335 l 1276 5322 l
+ 1264 5306 l 1252 5288 l 1240 5269 l 1230 5248 l 1221 5225 l
+ 1215 5200 l 1211 5171 l 1210 5140 l 1214 5109 l 1220 5080 l
+ 1230 5055 l 1241 5032 l 1253 5011 l 1266 4992 l 1279 4975 l
+ 1293 4959 l 1305 4945 l
+ 1330 4920 l gs col1 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 1254 5038 m 1318 4932 l 1211 4995 l col1 s
+% Polyline
+2 slj
+ [15 15] 15 sd
+gs clippath
+1813 8743 m 1775 8697 l 1710 8750 l 1776 8736 l 1748 8797 l cp
+eoclip
+n 1778 8955 m 1777 8955 l 1774 8952 l 1767 8947 l 1757 8939 l 1745 8928 l
+ 1732 8916 l 1721 8902 l 1712 8886 l 1705 8867 l 1703 8845 l
+ 1706 8823 l 1714 8804 l 1724 8787 l 1736 8772 l 1748 8759 l
+ 1761 8748 l
+ 1783 8730 l gs col2 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 1748 8797 m 1776 8736 l 1710 8750 l col2 s
+% Polyline
+2 slj
+ [15 15] 15 sd
+gs clippath
+6305 8728 m 6267 8682 l 6202 8735 l 6268 8721 l 6240 8782 l cp
+eoclip
+n 6270 8940 m 6269 8940 l 6266 8937 l 6259 8932 l 6249 8924 l 6237 8913 l
+ 6224 8901 l 6213 8887 l 6204 8871 l 6197 8852 l 6195 8830 l
+ 6198 8808 l 6206 8789 l 6216 8772 l 6228 8757 l 6240 8744 l
+ 6253 8733 l
+ 6275 8715 l gs col2 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6240 8782 m 6268 8721 l 6202 8735 l col2 s
+/Helvetica-iso ff 240.00 scf sf
+3709 4578 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3672 8178 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8190 8178 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8153 4578 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8134 5498 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7629 8591 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3147 8591 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7647 1841 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7666 5329 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7703 5891 m
+gs 1 -1 sc (_p_p) col1 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2715 8797 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2757 5388 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7249 8940 m
+gs 1 -1 sc (_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7223 5388 m
+gs 1 -1 sc (" ") col2 sh gr
+/Symbol ff 255.00 scf sf
+338 941 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+353 1811 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 255.00 scf sf
+4718 911 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+4808 2771 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+323 6386 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+158 4571 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+4823 1886 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 255.00 scf sf
+443 5486 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 255.00 scf sf
+4943 5471 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 255.00 scf sf
+4703 6386 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+4793 4571 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+368 8156 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+488 9086 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 255.00 scf sf
+218 9956 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+4853 9971 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 255.00 scf sf
+4928 9101 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 255.00 scf sf
+4718 8186 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2730 1775 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3122 1821 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7238 1758 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7655 5002 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3152 4998 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2749 8925 m
+gs 1 -1 sc (_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7220 8786 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7250 9207 m
+gs 1 -1 sc (_p_p) col2 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7661 9432 m
+gs 1 -1 sc (_p_p) col1 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3642 9000 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3629 9901 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3619 6311 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3637 5399 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3634 981 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8138 2692 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8135 1789 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8129 971 m
+gs 1 -1 sc (" ") col0 sh gr
+/Times-Roman-iso ff 360.00 scf sf
+4365 8280 m
+gs 1 -1 sc 270.0 rot (FLIP ALL) col0 sh gr
+/Times-Roman-iso ff 270.00 scf sf
+9045 7965 m
+gs 1 -1 sc 270.0 rot (If Maxlevels even,) col0 sh gr
+/Times-Roman-iso ff 270.00 scf sf
+8775 8145 m
+gs 1 -1 sc 270.0 rot (then FLIP ALL) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+2085 2355 m
+gs 1 -1 sc (2) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+6671 3142 m
+gs 1 -1 sc (3) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+2088 6713 m
+gs 1 -1 sc (4) col0 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 8955 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 9405 m
+gs 1 -1 sc (_p_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7695 8955 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8145 9900 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8145 9000 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8145 6300 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 5355 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3645 1800 m
+gs 1 -1 sc (_p) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+2160 10305 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+6795 10260 m
+gs 1 -1 sc (7) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+6660 6660 m
+gs 1 -1 sc (5) col0 sh gr
+/Times-Roman-iso ff 360.00 scf sf
+4230 1080 m
+gs 1 -1 sc 270.0 rot (FLIP l=0) col0 sh gr
+/Times-Roman-iso ff 360.00 scf sf
+4320 4680 m
+gs 1 -1 sc 270.0 rot (FLIP l=0,1) col0 sh gr
+$F2psEnd
+rs
diff --git a/Carpet/Carpet/doc/threelev_initdata.tex b/Carpet/Carpet/doc/threelev_initdata.tex
new file mode 100644
index 000000000..db59176b1
--- /dev/null
+++ b/Carpet/Carpet/doc/threelev_initdata.tex
@@ -0,0 +1,107 @@
+\documentclass{article}
+
+\usepackage{epsf}
+\topmargin -0.5in
+\textheight 9.9in
+\oddsidemargin -0.3in
+\leftmargin -1in
+\textwidth 7in
+
+
+\begin{document}
+
+\title{Getting Three Timelevels of FMR Initial Data}
+\author{Scott Hawley}
+\date{June 6, 2002}
+\maketitle
+
+For parabolic interpolation in time, one needs three timelevels worth
+of data on the coarse grid in order to provide boundary data on the
+finer grid. Here we describe one scheme for obtaining these extra
+timelevels of data at the initial time. Essentially, we evolve
+each grid backwards in time by two steps, but we do so rather carefully.
+
+The following diagram shows the scheme. We start with initial
+data for all grids being specified at the current time (Step 1, not
+shown). We then evolve the coarse grid forward one step (Step 2) by
+the timestep $\Delta t$;
+in so doing we first move the coarse grid storage from the current
+timelevel (denoted by `` '' on the right of the first pane in the
+diagram, because variables at the current time receive no suffix
+in Cactus) to the previous timelevel (denoted by ``\_p'') before
+evolving. We then ``flip'' all the timelevels for the coarse grid (l=0),
+meaning
+that we exchange the data on the `` '' and \_p\_p timelevels,
+thus turning the picture upside down.
+We then evolve the coarse grid ``backward'' --- which is really
+just forward but with a timestep of $-\Delta t$. Then we move on
+to the finer grid, evolving and flipping...
+
+Take a look at the diagram. (We use $\tau$ instead of $t$ to denote
+the time, simply because it was easier to do that in the
+drawing program.) After the diagram we give a
+listing of pseudo-code which implements this scheme.
+\begin{center}
+ \epsfxsize=5.5in
+ \epsffile{threelev_initdata.eps}
+\end{center}
+
+\begin{center}
+ \epsfxsize=5.5in
+ \epsffile{threelev_initdata_2.eps}
+\end{center}
+
+Diagram finished.
+
+\pagebreak
+
+Here's some pseudo-code:
+\begin{verbatim}
+
+ int time_dir = 1; //Positive = forward (+t), Negative = backward (-t)
+ int lev;
+
+ // At this point we assume that we have initial data given on
+ // one timelevel, and we want to get data on the other timelevels
+
+ do lev = 0 to MaxLevels-1
+ // Evolve "forward" (which may be backward for lev=1,3,5,7...)
+ Evolve(lev, time_dir*dt(lev))
+
+ flip_timelevels_on_lev_and_coarser(lev)
+ // Keep track of which direction (in time) we're integrating
+ time_dir = -time_dir
+
+ // Evolve in the opposite time-direction
+ Evolve(lev, time_dir*dt(lev))
+ end do
+
+ // Make sure we're pointed backwards, in order to get 2 "previous"
+ // timelevels. We could change the if statement to
+ // "if (mod(MaxLevels,2) == 0)", but I prefer to check time_dir
+ // explicitly, because it's easier to follow and I don't have to
+ // worry about having made a mistake
+ if (time_dir > 0) then
+ flip_timelevels_on_lev_and_coarser(MaxLevels-1)
+ time_dir = -time_dir
+ end if
+
+ // Evolve each level backwards one more timestep
+ do lev = MaxLevels-1 to 0
+ Evolve(lev,-dt(lev))
+ if (lev>0) then
+ Restrict(lev -> lev-1)
+ end if
+ end do
+
+ // Here's where a user can add in extra evolution code if they want
+ // to be extra-careful ("anal"), but remember that you'll be
+ // overwriting the t=0 data so you'll need to re-load it if you do
+ // this.
+
+ // Finally, one last flip to point us forward again
+ flip_all_timelevels()
+ time_dir = -time_dir
+\end{verbatim}
+
+\end{document}
diff --git a/Carpet/Carpet/doc/threelev_initdata_2.eps b/Carpet/Carpet/doc/threelev_initdata_2.eps
new file mode 100644
index 000000000..51b78b396
--- /dev/null
+++ b/Carpet/Carpet/doc/threelev_initdata_2.eps
@@ -0,0 +1,470 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: threelev_initdata_2.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Wed Jul 17 01:42:08 2002
+%%For: shawley@ockham (,,,)
+%%BoundingBox: 0 0 548 489
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 489 moveto 0 0 lineto 548 0 lineto 548 489 lineto closepath clip newpath
+-2.8 524.8 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
+/Times-Bold /Times-Bold-iso isovec ReEncode
+/Times-Roman /Times-Roman-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% Polyline
+7.500 slw
+n 900 1800 m
+ 3600 1800 l gs col0 s gr
+% Polyline
+n 5400 1800 m
+ 8100 1800 l gs col0 s gr
+% Polyline
+n 900 5400 m
+ 3600 5400 l gs col0 s gr
+% Polyline
+n 5400 5450 m
+ 8100 5450 l gs col0 s gr
+% Polyline
+n 900 900 m
+ 3600 900 l gs col0 s gr
+% Polyline
+n 900 2700 m
+ 3600 2700 l gs col0 s gr
+% Polyline
+n 5400 900 m
+ 8100 900 l gs col0 s gr
+% Polyline
+n 5400 2700 m
+ 8100 2700 l gs col0 s gr
+% Polyline
+n 900 4500 m
+ 3600 4500 l gs col0 s gr
+% Polyline
+n 900 6300 m
+ 3600 6300 l gs col0 s gr
+% Polyline
+n 5400 4550 m
+ 8100 4550 l gs col0 s gr
+% Polyline
+n 5400 6350 m
+ 8100 6350 l gs col0 s gr
+% Polyline
+n 1805 1300 m
+ 2705 1300 l gs col2 s gr
+% Polyline
+n 1805 1535 m
+ 2705 1535 l gs col2 s gr
+% Polyline
+n 1360 1325 m
+ 3160 1325 l gs col1 s gr
+% Polyline
+n 1810 1750 m
+ 2710 1750 l gs col2 s gr
+% Polyline
+n 1355 1775 m
+ 3155 1775 l gs col1 s gr
+% Polyline
+n 1355 2230 m
+ 3155 2230 l gs col1 s gr
+% Polyline
+n 5855 875 m
+ 7655 875 l gs col1 s gr
+% Polyline
+n 6305 1300 m
+ 7205 1300 l gs col2 s gr
+% Polyline
+n 5860 1325 m
+ 7660 1325 l gs col1 s gr
+% Polyline
+n 6305 1535 m
+ 7205 1535 l gs col2 s gr
+% Polyline
+n 6310 1750 m
+ 7210 1750 l gs col2 s gr
+% Polyline
+n 5855 1775 m
+ 7655 1775 l gs col1 s gr
+% Polyline
+n 1355 5375 m
+ 3155 5375 l gs col1 s gr
+% Polyline
+n 1805 5805 m
+ 2705 5805 l gs col2 s gr
+% Polyline
+n 1355 5830 m
+ 3155 5830 l gs col1 s gr
+% Polyline
+n 1810 6060 m
+ 2710 6060 l gs col2 s gr
+% Polyline
+n 1795 6255 m
+ 2695 6255 l gs col2 s gr
+% Polyline
+n 1355 6280 m
+ 3155 6280 l gs col1 s gr
+% Polyline
+n 6305 4500 m
+ 7205 4500 l gs col2 s gr
+% Polyline
+n 5855 4525 m
+ 7655 4525 l gs col1 s gr
+% Polyline
+n 6310 4735 m
+ 7210 4735 l gs col2 s gr
+% Polyline
+n 6305 4950 m
+ 7205 4950 l gs col2 s gr
+% Polyline
+n 5860 4975 m
+ 7660 4975 l gs col1 s gr
+% Polyline
+n 5855 5425 m
+ 7655 5425 l gs col1 s gr
+% Polyline
+2 slj
+ [15 15] 15 sd
+gs clippath
+1812 1316 m 1770 1273 l 1711 1331 l 1775 1311 l 1752 1374 l cp
+eoclip
+n 1777 1526 m 1774 1523 l 1767 1518 l 1758 1511 l 1747 1501 l 1736 1489 l
+ 1726 1476 l 1718 1461 l 1712 1442 l 1710 1421 l 1713 1399 l
+ 1719 1380 l 1728 1363 l 1739 1348 l 1750 1335 l
+ 1781 1305 l gs col2 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 1752 1374 m 1775 1311 l 1711 1331 l col2 s
+% Polyline
+2 slj
+ [15 30] 30 sd
+gs clippath
+5859 885 m 5815 844 l 5712 955 l 5816 888 l 5756 996 l cp
+eoclip
+n 5835 1323 m 5833 1321 l 5828 1316 l 5821 1308 l 5810 1297 l 5798 1284 l
+ 5785 1268 l 5772 1250 l 5759 1231 l 5747 1210 l 5736 1187 l
+ 5728 1161 l 5722 1132 l 5719 1101 l 5721 1070 l 5726 1041 l
+ 5733 1014 l 5743 991 l 5754 970 l 5766 950 l 5779 933 l
+ 5792 916 l 5803 902 l
+ 5827 876 l gs col1 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5756 996 m 5816 888 l 5712 955 l col1 s
+% Polyline
+2 slj
+ [15 30] 30 sd
+gs clippath
+899 4507 m 852 4470 l 759 4589 l 857 4514 l 806 4626 l cp
+eoclip
+n 878 5398 m 877 5397 l 875 5394 l 872 5389 l 866 5381 l 859 5370 l
+ 850 5356 l 840 5340 l 829 5321 l 816 5301 l 804 5279 l
+ 791 5255 l 779 5230 l 767 5204 l 755 5177 l 744 5148 l
+ 734 5118 l 726 5085 l 718 5050 l 712 5013 l 708 4974 l
+ 706 4933 l 707 4889 l 711 4847 l 717 4808 l 725 4772 l
+ 734 4739 l 745 4709 l 757 4680 l 769 4654 l 782 4629 l
+ 796 4606 l 809 4584 l 822 4565 l 833 4547 l 844 4532 l
+ 852 4520 l
+ 867 4501 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 806 4626 m 857 4514 l 759 4589 l col0 s
+/Helvetica-iso ff 240.00 scf sf
+8236 4629 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3661 4569 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3121 5409 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2731 6084 m
+gs 1 -1 sc (_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7208 4524 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7223 4726 m
+gs 1 -1 sc (_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7216 4914 m
+gs 1 -1 sc (_p_p) col2 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7628 4539 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8154 5439 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8146 6324 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2716 6219 m
+gs 1 -1 sc (_p_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2731 5844 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3631 6287 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3631 5387 m
+gs 1 -1 sc (_p) col0 sh gr
+/Symbol ff 240.00 scf sf
+181 931 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 240.00 scf sf
+331 1854 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 240.00 scf sf
+316 2754 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Symbol ff 240.00 scf sf
+4666 946 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 240.00 scf sf
+4846 1854 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 240.00 scf sf
+4816 2754 m
+gs 1 -1 sc (t=Dt) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3676 984 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2716 1359 m
+gs 1 -1 sc (" ") col2 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3151 1404 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2731 1524 m
+gs 1 -1 sc (_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+2746 1734 m
+gs 1 -1 sc (_p_p) col2 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3676 1757 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+3661 2657 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8146 954 m
+gs 1 -1 sc (" ") col0 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7606 924 m
+gs 1 -1 sc (" ") col1 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8191 2694 m
+gs 1 -1 sc (_p_p) col0 sh gr
+/Helvetica-iso ff 240.00 scf sf
+8169 1764 m
+gs 1 -1 sc (_p) col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7246 1734 m
+gs 1 -1 sc (_p_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7223 1531 m
+gs 1 -1 sc (_p) col2 sh gr
+/Helvetica-iso ff 150.00 scf sf
+7208 1329 m
+gs 1 -1 sc (" ") col2 sh gr
+/Symbol ff 240.00 scf sf
+4816 4569 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Helvetica-Bold-iso ff 240.00 scf sf
+2911 1269 m
+gs 1 -1 sc (R) col4 sh gr
+/Helvetica-Bold-iso ff 240.00 scf sf
+7726 759 m
+gs 1 -1 sc (R) col4 sh gr
+/Symbol ff 240.00 scf sf
+4726 5499 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Symbol ff 240.00 scf sf
+4636 6414 m
+gs 1 -1 sc (t=-2Dt) col0 sh gr
+/Symbol ff 240.00 scf sf
+166 5469 m
+gs 1 -1 sc (t=-Dt) col0 sh gr
+/Helvetica-Bold-iso ff 240.00 scf sf
+2146 5079 m
+gs 1 -1 sc (\(*\)) col4 sh gr
+/Helvetica-Bold-iso ff 240.00 scf sf
+6646 1164 m
+gs 1 -1 sc (\(*\)) col4 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+2176 6684 m
+gs 1 -1 sc (10) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+6736 6684 m
+gs 1 -1 sc (11) col0 sh gr
+/Helvetica-Bold-iso ff 240.00 scf sf
+1261 7839 m
+gs 1 -1 sc (R = Restriction) col4 sh gr
+/Helvetica-Bold-iso ff 240.00 scf sf
+1216 8259 m
+gs 1 -1 sc (\(*\) = Can evolve finer levels further, if feeling "anal") col4 sh gr
+/Times-Roman-iso ff 360.00 scf sf
+4276 4569 m
+gs 1 -1 sc 270.0 rot (FLIP ALL) col0 sh gr
+/Symbol ff 240.00 scf sf
+360 6390 m
+gs 1 -1 sc (t=0) col0 sh gr
+/Symbol ff 240.00 scf sf
+45 4545 m
+gs 1 -1 sc (t=-2Dt) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+2205 3060 m
+gs 1 -1 sc (8) col0 sh gr
+/Times-Bold-iso ff 270.00 scf sf
+6750 3015 m
+gs 1 -1 sc (9) col0 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 6255 m
+gs 1 -1 sc (_p_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 5805 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7695 4950 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7695 5400 m
+gs 1 -1 sc (_p_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 1755 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+3195 2205 m
+gs 1 -1 sc (_p_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7740 1305 m
+gs 1 -1 sc (_p) col1 sh gr
+/Helvetica-iso ff 195.00 scf sf
+7695 1755 m
+gs 1 -1 sc (_p_p) col1 sh gr
+$F2psEnd
+rs
diff --git a/Carpet/Carpet/interface.ccl b/Carpet/Carpet/interface.ccl
new file mode 100644
index 000000000..1e59767be
--- /dev/null
+++ b/Carpet/Carpet/interface.ccl
@@ -0,0 +1,89 @@
+# Interface definition for thorn Carpet
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/interface.ccl,v 1.18 2004/06/08 21:09:25 schnetter Exp $
+
+IMPLEMENTS: Driver
+
+include header: carpet_public.hh in carpet.hh
+include header: carpet_public.h in carpet.h
+
+uses include header: defs.hh
+uses include header: dist.hh
+
+uses include header: bbox.hh
+uses include header: bboxset.hh
+uses include header: vect.hh
+
+uses include header: data.hh
+uses include header: dh.hh
+uses include header: gf.hh
+uses include header: ggf.hh
+uses include header: gh.hh
+uses include header: th.hh
+
+uses include header: operators.hh
+
+
+
+# Provide the function to en-/disable prolongation
+CCTK_INT FUNCTION EnableProlongating(CCTK_INT IN flag)
+PROVIDES FUNCTION EnableProlongating WITH CarpetEnableProlongating LANGUAGE C
+
+
+
+# The location of the boundary points
+CCTK_INT FUNCTION GetBoundarySpecification \
+ (CCTK_INT IN size, \
+ CCTK_INT OUT ARRAY nboundaryzones, \
+ CCTK_INT OUT ARRAY is_internal, \
+ CCTK_INT OUT ARRAY is_staggered, \
+ CCTK_INT OUT ARRAY shiftout)
+USES FUNCTION GetBoundarySpecification
+
+# The overall size of the domain
+CCTK_INT FUNCTION GetDomainSpecification \
+ (CCTK_INT IN size, \
+ CCTK_REAL OUT ARRAY physical_min, \
+ CCTK_REAL OUT ARRAY physical_max, \
+ CCTK_REAL OUT ARRAY interior_min, \
+ CCTK_REAL OUT ARRAY interior_max, \
+ CCTK_REAL OUT ARRAY exterior_min, \
+ CCTK_REAL OUT ARRAY exterior_max, \
+ CCTK_REAL OUT ARRAY spacing)
+USES FUNCTION GetDomainSpecification
+
+# Conversion between boundary types
+CCTK_INT FUNCTION ConvertFromPhysicalBoundary \
+ (CCTK_INT IN size, \
+ CCTK_REAL IN ARRAY physical_min, \
+ CCTK_REAL IN ARRAY physical_max, \
+ CCTK_REAL OUT ARRAY interior_min, \
+ CCTK_REAL OUT ARRAY interior_max, \
+ CCTK_REAL OUT ARRAY exterior_min, \
+ CCTK_REAL OUT ARRAY exterior_max, \
+ CCTK_REAL IN ARRAY spacing)
+USES FUNCTION ConvertFromPhysicalBoundary
+
+CCTK_INT FUNCTION ConvertFromExteriorBoundary \
+ (CCTK_INT IN size, \
+ CCTK_REAL OUT ARRAY physical_min, \
+ CCTK_REAL OUT ARRAY physical_max, \
+ CCTK_REAL OUT ARRAY interior_min, \
+ CCTK_REAL OUT ARRAY interior_max, \
+ CCTK_REAL IN ARRAY exterior_min, \
+ CCTK_REAL IN ARRAY exterior_max, \
+ CCTK_REAL IN ARRAY spacing)
+USES FUNCTION ConvertFromExteriorBoundary
+
+
+
+# The true prototype of the routine below:
+# int Carpet_Regrid (const cGH * cctkGH,
+# gh<dim>::rexts * bbsss,
+# gh<dim>::rbnds * obss,
+# gh<dim>::rprocs * pss);
+CCTK_INT FUNCTION Carpet_Regrid (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_POINTER IN bbsss, \
+ CCTK_POINTER IN obss, \
+ CCTK_POINTER IN pss, \
+ CCTK_INT IN force)
+USES FUNCTION Carpet_Regrid
diff --git a/Carpet/Carpet/options/README b/Carpet/Carpet/options/README
new file mode 100644
index 000000000..df42f880a
--- /dev/null
+++ b/Carpet/Carpet/options/README
@@ -0,0 +1,9 @@
+$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/README,v 1.1 2001/04/06 10:37:35 schnetter Exp $
+
+This directory contains sample options files for various architectures
+and compilers. The syntax of the file names is
+
+ carpet-MACHINE-COMPILER
+
+so that e. g. carpet-lilypong-lf95 is a configuration for the machine
+Lilypond, using the LF95 compiler.
diff --git a/Carpet/Carpet/options/carpet-because b/Carpet/Carpet/options/carpet-because
new file mode 100644
index 000000000..c7df166af
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-because
@@ -0,0 +1,29 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-because,v 1.1 2003/04/30 12:46:15 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = g77
+F90 = g77
+
+CXXFLAGS = -DCARPET_REAL -ftemplate-depth-30
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+F77_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+SYS_INC_DIRS = /usr/include/hdf /home/eschnett/FlexIO
+LIBDIRS = /home/eschnett/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt g2c m
+
+HDF5 = yes
+MPI = MPICH
+
+DEBUG = yes
+
+# PTHREADS
+PTHREADS = no
diff --git a/Carpet/Carpet/options/carpet-harpo-gcc b/Carpet/Carpet/options/carpet-harpo-gcc
new file mode 100644
index 000000000..ba494a449
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-harpo-gcc
@@ -0,0 +1,38 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-harpo-gcc,v 1.4 2002/09/08 20:38:35 schnetter Exp $
+
+CC = gcc
+CXX = g++
+F77 = g77
+F90 = g77
+LD = g++
+
+#CC = /u1/eschnett/bin/gcc
+#CXX = /u1/eschnett/bin/g++
+#F77 = /u1/eschnett/bin/g77
+#F90 = /u1/eschnett/bin/g77
+#LD = /u1/eschnett/bin/g++
+
+CFLAGS =
+CXXFLAGS = -ftemplate-depth-30 -DMPIPP_H
+FFLAGS =
+F90FLAGS =
+
+C_OPTIMISE_FLAGS = -O3 -funroll-loops
+CXX_OPTIMISE_FLAGS = -O3 -funroll-loops
+F90_OPTIMISE_FLAGS = -O3 -funroll-loops -malign-double
+F77_OPTIMISE_FLAGS = -O3 -funroll-loops -malign-double
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations -Winline
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations -Winline
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+SYS_INC_DIRS = /u1/eschnett/include /u1/eschnett/scratch/FlexIO
+LIBDIRS = /u1/eschnett/lib /u1/eschnett/scratch/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z
+
+HDF5 = yes
+MPI = NATIVE
+
+OPTIMISE = no
+DEBUG = yes
diff --git a/Carpet/Carpet/options/carpet-harpo-sgi b/Carpet/Carpet/options/carpet-harpo-sgi
new file mode 100644
index 000000000..64fcb11b8
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-harpo-sgi
@@ -0,0 +1,31 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-harpo-sgi,v 1.5 2002/06/07 20:44:03 schnetter Exp $
+
+CPP = /lib/cpp -DMPIPP_H
+
+CFLAGS = -mips4 -r12000 -64 -LANG:restrict=ON
+CXXFLAGS = -mips4 -r12000 -64 -LANG:restrict=ON -LANG:std -LANG:vla=ON -no_auto_include -ptused -DMPIPP_H
+F90FLAGS = -mips4 -r12000 -64
+F77FLAGS = -mips4 -r12000 -64
+LDFLAGS = -LANG:std -LANG:vla=ON -64 -mips4 -r12000 -Wl,"-woff 84","-woff 85"
+
+C_OPTIMISE_FLAGS = -O3 -OPT:Olimit=0
+CXX_OPTIMISE_FLAGS = -O3 -OPT:Olimit=0
+F77_OPTIMISE_FLAGS = -O3 -OPT:Olimit=0
+F90_OPTIMISE_FLAGS = -O3 -OPT:Olimit=0
+
+C_DEBUG_FLAGS = -g3
+CXX_DEBUG_FLAGS = -g3
+F77_DEBUG_FLAGS = -g3
+F90_DEBUG_FLAGS = -g3
+
+SYS_INC_DIRS = /usr/local/hdf/include /u1/eschnett/FlexIO
+LIBDIRS = /usr/local/hdf/lib /u1/eschnett/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio ffio fpe fortran ftn ftn90 hdf5 mfhdf df jpeg z
+
+HDF5 = yes
+HDF5_DIR = /usr/local/hdf5_64
+
+MPI = NATIVE
+
+OPTIMISE = yes
+DEBUG = yes
diff --git a/Carpet/Carpet/options/carpet-hawaii-sgi b/Carpet/Carpet/options/carpet-hawaii-sgi
new file mode 100644
index 000000000..0e3340c47
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-hawaii-sgi
@@ -0,0 +1,27 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-hawaii-sgi,v 1.2 2002/05/05 22:16:56 schnetter Exp $
+
+CPP = /lib/cpp -DMPIPP_H
+
+CXXFLAGS = -LANG:std -LANG:vla=ON -FE:eliminate_duplicate_inline_copies -FE:template_in_elf_section -64 -mips4 -r12000 -no_auto_include -ptused -DMPIPP_H
+LDFLAGS = -LANG:std -LANG:vla=ON -64 -mips4 -r12000 -Wl,"-woff 84","-woff 85"
+
+C_OPTIMISE_FLAGS = -O3 -INLINE -LNO -OPT:Olimit=100000
+CXX_OPTIMISE_FLAGS = -O3 -INLINE -LNO -OPT:Olimit=100000
+F77_OPTIMISE_FLAGS = -O3 -INLINE -LNO -OPT:Olimit=100000
+F90_OPTIMISE_FLAGS = -O3 -INLINE -LNO -OPT:Olimit=100000
+
+C_DEBUG_FLAGS = -g3
+CXX_DEBUG_FLAGS = -g3
+F77_DEBUG_FLAGS = -g3
+F90_DEBUG_FLAGS = -g3
+
+SYS_INC_DIRS = /usr/center/maui/eriks/include /usr/center/maui/eriks/FlexIO
+LIBDIRS = /usr/center/maui/eriks/lib /usr/center/maui/eriks/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z
+
+HDF5 = yes
+HDF5_DIR = /usr/center/maui/eriks
+MPI = NATIVE
+
+OPTIMISE = yes
+DEBUG = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond b/Carpet/Carpet/options/carpet-lilypond
new file mode 100644
index 000000000..f36c01245
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond
@@ -0,0 +1,29 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond,v 1.9 2002/10/16 17:33:51 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = g77
+F90 = g77
+
+CXXFLAGS = -DCARPET_REAL -ftemplate-depth-30
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+F77_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+SYS_INC_DIRS = /home/eschnett/proj/FlexIO
+LIBDIRS = /home/eschnett/proj/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt g2c m
+
+HDF5 = yes
+MPI = MPICH
+
+DEBUG = yes
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-debug b/Carpet/Carpet/options/carpet-lilypond-debug
new file mode 100644
index 000000000..3f69bbf0e
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-debug
@@ -0,0 +1,31 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-debug,v 1.3 2002/10/16 17:33:51 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = g77
+F90 = g77
+
+CXXFLAGS = -DCARPET_REAL -ftemplate-depth-30
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+F77_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+#FLEXIO_DIR = /home/eschnett/proj/FlexIO
+#SYS_INC_DIRS = /home/eschnett/proj/FlexIO
+#LIBDIRS = /home/eschnett/proj/FlexIO
+#LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt g2c m
+
+HDF5 = yes
+MPI = MPICH
+
+DEBUG = yes
+OPTIMISE = no
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-gcc32 b/Carpet/Carpet/options/carpet-lilypond-gcc32
new file mode 100644
index 000000000..8c2c29fda
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-gcc32
@@ -0,0 +1,35 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-gcc32,v 1.4 2002/10/16 17:33:51 schnetter Exp $
+
+CPP = /home/eschnett/gcc32/bin/cpp -traditional -DCARPET_REAL
+CC = /home/eschnett/gcc32/bin/gcc
+CXX = /home/eschnett/gcc32/bin/g++
+F77 = /home/eschnett/gcc32/bin/g77
+F90 = /home/eschnett/gcc32/bin/g77
+
+CFLAGS = -m128bit-long-double -fmessage-length=0
+CXXFLAGS = -m128bit-long-double -fmessage-length=0 -DCARPET_REAL -ftemplate-depth-30
+F77FLAGS = -malign-double -fmessage-length=0
+F90FLAGS = -malign-double -fmessage-length=0
+LDFLAGS = -Wl,-rpath,/home/eschnett/gcc32/lib
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentium2
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentium2
+F90_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentium2
+F77_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentium2
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+SYS_INC_DIRS = /home/eschnett/proj/FlexIO
+LIBDIRS = /home/eschnett/proj/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt g2c m
+
+HDF5 = yes
+MPI = MPICH
+
+DEBUG = yes
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-ic b/Carpet/Carpet/options/carpet-lilypond-ic
new file mode 100644
index 000000000..a02cdff0a
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-ic
@@ -0,0 +1,50 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-ic,v 1.8 2002/11/16 19:10:50 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+CC = icc
+CXX = icc
+F77 = ifc
+F90 = ifc
+LD = icc
+
+LIBDIRS =
+LIBS = intrins IEPCF90 F90 imf m irc cxa cprts cxa
+
+# basic
+CFLAGS = -DCARPET_REAL -c99
+CXXFLAGS = -DCARPET_REAL -c99
+F90FLAGS = -DCARPET_REAL -w95
+F77FLAGS = -DCARPET_REAL -w95
+LDFLAGS = -DCARPET_REAL -g
+
+# debugging
+DEBUG = yes
+C_DEBUG_FLAGS = -g -fp
+CXX_DEBUG_FLAGS = -g -fp
+F77_DEBUG_FLAGS = -g -fp
+F90_DEBUG_FLAGS = -g -fp
+
+# warnings
+#WARN=yes
+C_WARN_FLAGS = -w1
+CXX_WARN_FLAGS = -w1
+F77_WARN_FLAGS =
+F90_WARN_FLAGS =
+
+# optimisation
+OPTIMISE = yes
+C_OPTIMISE_FLAGS = -O3 -tpp6 -xi
+CXX_OPTIMISE_FLAGS = -O3 -tpp6 -xi
+F77_OPTIMISE_FLAGS = -O3 -tpp6
+F90_OPTIMISE_FLAGS = -O3 -tpp6
+
+# HDF
+HDF5 = YES
+HDF5_DIR = /usr/local
+
+# MPI
+MPI = MPICH
+MPICH_DIR = /usr/lib/mpich
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-ic-debug b/Carpet/Carpet/options/carpet-lilypond-ic-debug
new file mode 100644
index 000000000..ed8db4dbc
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-ic-debug
@@ -0,0 +1,47 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-ic-debug,v 1.1 2002/11/16 19:10:50 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+CC = icc
+CXX = icc
+F77 = ifc
+F90 = ifc
+LD = icc
+
+LIBDIRS =
+LIBS = intrins IEPCF90 F90 imf m irc cxa cprts cxa
+
+# basic
+CFLAGS = -DCARPET_REAL -c99
+CXXFLAGS = -DCARPET_REAL -c99
+F90FLAGS = -DCARPET_REAL -w95
+F77FLAGS = -DCARPET_REAL -w95
+LDFLAGS = -DCARPET_REAL -g
+
+# debugging
+DEBUG = yes
+C_DEBUG_FLAGS = -g -fp
+CXX_DEBUG_FLAGS = -g -fp
+F77_DEBUG_FLAGS = -g -fp
+F90_DEBUG_FLAGS = -g -fp
+
+# warnings
+#WARN=yes
+C_WARN_FLAGS = -w1
+CXX_WARN_FLAGS = -w1
+F77_WARN_FLAGS =
+F90_WARN_FLAGS =
+
+# optimisation
+OPTIMISE = yes
+C_OPTIMISE_FLAGS = -O0 -tpp6 -xi
+CXX_OPTIMISE_FLAGS = -O0 -tpp6 -xi
+F77_OPTIMISE_FLAGS = -O0 -tpp6
+F90_OPTIMISE_FLAGS = -O0 -tpp6
+
+# HDF
+HDF5 = YES
+HDF5_DIR = /usr/local
+
+# MPI
+MPI = MPICH
+MPICH_DIR = /usr/lib/mpich
diff --git a/Carpet/Carpet/options/carpet-lilypond-ic7 b/Carpet/Carpet/options/carpet-lilypond-ic7
new file mode 100644
index 000000000..51ad8cbfc
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-ic7
@@ -0,0 +1,50 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-ic7,v 1.5 2002/11/16 19:10:50 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+CC = /opt/intel/compiler70/ia32/bin/icc
+CXX = /opt/intel/compiler70/ia32/bin/icc
+F77 = /opt/intel/compiler70/ia32/bin/ifc
+F90 = /opt/intel/compiler70/ia32/bin/ifc
+LD = /opt/intel/compiler70/ia32/bin/icc
+
+LIBDIRS =
+LIBS = intrins IEPCF90 F90 imf m irc cxa cprts cxa
+
+# basic
+CFLAGS = -DCARPET_REAL -c99
+CXXFLAGS = -DCARPET_REAL -c99
+F90FLAGS = -DCARPET_REAL -w95
+F77FLAGS = -DCARPET_REAL -w95
+LDFLAGS = -g -Qoption,ld,-rpath,/opt/intel/compiler70/ia32/lib
+
+# debugging
+DEBUG = yes
+C_DEBUG_FLAGS = -g -fp
+CXX_DEBUG_FLAGS = -g -fp
+F77_DEBUG_FLAGS = -g -fp
+F90_DEBUG_FLAGS = -g -fp
+
+# warnings
+#WARN=yes
+C_WARN_FLAGS = -w1
+CXX_WARN_FLAGS = -w1
+F77_WARN_FLAGS =
+F90_WARN_FLAGS =
+
+# optimisation
+OPTIMISE = yes
+C_OPTIMISE_FLAGS = -O3 -tpp6 -xi
+CXX_OPTIMISE_FLAGS = -O3 -tpp6 -xi
+F77_OPTIMISE_FLAGS = -O3 -tpp6
+F90_OPTIMISE_FLAGS = -O3 -tpp6
+
+# HDF
+HDF5 = YES
+HDF5_DIR = /usr/local
+
+# MPI
+MPI = MPICH
+MPICH_DIR = /usr/lib/mpich
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-lf95 b/Carpet/Carpet/options/carpet-lilypond-lf95
new file mode 100644
index 000000000..7ce0f298f
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-lf95
@@ -0,0 +1,39 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-lf95,v 1.6 2002/10/16 17:33:52 schnetter Exp $
+
+LAHEY = /usr/local/lf9560
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = lf95
+F90 = lf95
+
+CFLAGS = -g3
+CXXFLAGS = -g3 -DCARPET_REAL -ftemplate-depth-30
+F77FLAGS = --pca
+F90FLAGS = --pca
+LDFLAGS = -g3
+
+DEBUG = no
+C_DEBUG_FLAGS =
+CXX_DEBUG_FLAGS =
+F77_DEBUG_FLAGS = -g --chk
+F90_DEBUG_FLAGS = -g --chk
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O --tpp
+F77_OPTIMISE_FLAGS = -O --tpp
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = --warn
+F77_WARN_FLAGS = --warn
+
+SYS_INC_DIRS = /home/eschnett/proj/FlexIO
+LIBDIRS = /home/eschnett/proj/FlexIO /usr/local/lf9560/lib
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt fj9i6 fj9f6 fj9e6 fccx86_6a m
+
+HDF5 = yes
+MPI = MPICH
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-lf95-debug b/Carpet/Carpet/options/carpet-lilypond-lf95-debug
new file mode 100644
index 000000000..2008532af
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-lf95-debug
@@ -0,0 +1,40 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-lf95-debug,v 1.5 2002/10/16 17:33:52 schnetter Exp $
+
+LAHEY = /usr/local/lf9560
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = lf95
+F90 = lf95
+
+CFLAGS = -g3
+CXXFLAGS = -g3 -DCARPET_REAL -ftemplate-depth-30
+F77FLAGS = --pca
+F90FLAGS = --pca
+LDFLAGS = -g3
+
+DEBUG = yes
+C_DEBUG_FLAGS =
+CXX_DEBUG_FLAGS =
+F77_DEBUG_FLAGS = -g --chk
+F90_DEBUG_FLAGS = -g --chk
+
+OPTIMISE = no
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O --tpp
+F77_OPTIMISE_FLAGS = -O --tpp
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = --warn
+F77_WARN_FLAGS = --warn
+
+SYS_INC_DIRS = /home/eschnett/proj/FlexIO
+LIBDIRS = /home/eschnett/proj/FlexIO /usr/local/lf9560/lib
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt fj9i6 fj9f6 fj9e6 fccx86_6a m
+
+HDF5 = yes
+MPI = MPICH
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-lilypond-prof b/Carpet/Carpet/options/carpet-lilypond-prof
new file mode 100644
index 000000000..0ac899f6c
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-lilypond-prof
@@ -0,0 +1,33 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-prof,v 1.3 2002/10/16 17:33:52 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = g77
+F90 = g77
+
+CFLAGS = -pg
+CXXFLAGS = -pg -DCARPET_REAL -ftemplate-depth-30
+F77FLAGS = -pg
+F90FLAGS = -pg
+LDFLAGS = -pg
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+F77_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+SYS_INC_DIRS = /home/eschnett/proj/FlexIO
+LIBDIRS = /home/eschnett/proj/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt g2c m
+
+HDF5 = yes
+MPI = MPICH
+
+DEBUG = yes
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-mintaka b/Carpet/Carpet/options/carpet-mintaka
new file mode 100644
index 000000000..0a9aad429
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-mintaka
@@ -0,0 +1,32 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-mintaka,v 1.3 2002/10/16 17:33:52 schnetter Exp $
+
+CPP = cpp -traditional -DCARPET_REAL
+F77 = g77
+F90 = g77
+
+CXXFLAGS = -DCARPET_REAL -ftemplate-depth-30
+LDFLAGS = -Wl,-rpath,/home/schnette/lib
+
+C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro
+F90_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+F77_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -malign-double
+
+C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations
+F90_WARN_FLAGS = -Wall
+F77_WARN_FLAGS = -Wall
+
+SYS_INC_DIRS = /home/schnette/lilypond/proj/FlexIO
+LIBDIRS = /home/schnette/lilypond/proj/FlexIO
+LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt g2c m
+
+HDF5 = yes
+HDF5_DIR = /home/schnette
+MPI = MPICH
+MPICH_DIR = /usr/lib/mpich
+
+DEBUG = yes
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/options/carpet-tat-ic b/Carpet/Carpet/options/carpet-tat-ic
new file mode 100644
index 000000000..739b4ddd9
--- /dev/null
+++ b/Carpet/Carpet/options/carpet-tat-ic
@@ -0,0 +1,50 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-tat-ic,v 1.1 2002/11/03 12:22:24 schnetter Exp $
+
+CPP = /home/schnette/gcc/bin/cpp -traditional -DCARPET_REAL
+CC = icc
+CXX = icc
+F77 = ifc
+F90 = ifc
+LD = icc
+
+LIBDIRS =
+LIBS = intrins IEPCF90 F90 imf m irc cxa cprts cxa
+
+# basic
+CFLAGS = -DCARPET_REAL -c99
+CXXFLAGS = -DCARPET_REAL -c99
+F90FLAGS = -DCARPET_REAL -w95
+F77FLAGS = -DCARPET_REAL -w95
+LDFLAGS = -DCARPET_REAL -g -Qoption,ld,-rpath,/home/schnette/opt/intel/compiler60/ia32/lib
+
+# debugging
+DEBUG = yes
+C_DEBUG_FLAGS = -g -fp
+CXX_DEBUG_FLAGS = -g -fp
+F77_DEBUG_FLAGS = -g -fp
+F90_DEBUG_FLAGS = -g -fp
+
+# warnings
+#WARN=yes
+C_WARN_FLAGS = -w1
+CXX_WARN_FLAGS = -w1
+F77_WARN_FLAGS =
+F90_WARN_FLAGS =
+
+# optimisation
+OPTIMISE = yes
+C_OPTIMISE_FLAGS = -O3 -tpp6
+CXX_OPTIMISE_FLAGS = -O3 -tpp6
+F77_OPTIMISE_FLAGS = -O3 -tpp6
+F90_OPTIMISE_FLAGS = -O3 -tpp6
+
+# HDF
+HDF5 = YES
+HDF5_DIR = /usr/local
+
+# MPI
+MPI = MPICH
+MPICH_DIR = /usr/lib/mpich
+
+# PTHREADS
+PTHREADS = yes
diff --git a/Carpet/Carpet/par/carpet-test.par b/Carpet/Carpet/par/carpet-test.par
new file mode 100644
index 000000000..9f07305be
--- /dev/null
+++ b/Carpet/Carpet/par/carpet-test.par
@@ -0,0 +1,7 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/par/carpet-test.par,v 1.2 2004/03/23 11:58:54 schnetter Exp $
+
+ActiveThorns = "Carpet"
+
+Cactus::cctk_itlast = 10
+
+Carpet::max_refinement_levels = 2
diff --git a/Carpet/Carpet/par/carpet-test.th b/Carpet/Carpet/par/carpet-test.th
new file mode 100644
index 000000000..ab588089f
--- /dev/null
+++ b/Carpet/Carpet/par/carpet-test.th
@@ -0,0 +1,2 @@
+Carpet/Carpet # driver (CarpetLib) [ ] {Cactus,IO}
+Carpet/CarpetLib # CarpetLib ( ) [ ] { }
diff --git a/Carpet/Carpet/par/multipatch.par b/Carpet/Carpet/par/multipatch.par
new file mode 100644
index 000000000..44e6ce7cf
--- /dev/null
+++ b/Carpet/Carpet/par/multipatch.par
@@ -0,0 +1,42 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/par/multipatch.par,v 1.1 2004/05/04 22:07:18 schnetter Exp $
+
+Cactus::cctk_itlast = 20
+
+ActiveThorns = "Slab"
+
+ActiveThorns = "IOUtil"
+IO::out_dir = $parfile
+
+ActiveThorns = "Carpet CarpetLib CarpetReduce"
+Carpet::num_maps = 2
+driver::global_nsize = 12
+
+ActiveThorns = "Boundary CartGrid3D CoordBase SymBase"
+grid::type = byspacing
+grid::dxyz = 0.1
+
+#ActiveThorns = "Periodic"
+#Periodic::periodic_y = yes
+#Periodic::periodic_z = yes
+
+ActiveThorns = "SimplePatchBoundary"
+SimplePatchBoundary::offset_x[1] = 1.0
+
+ActiveThorns = "WaveToyC"
+WaveToy::bound = radiation
+
+ActiveThorns = "IDScalarWaveC"
+#IDScalarWave::initial_data = plane
+#IDScalarWave::kx = 6.28318530717959
+#IDScalarWave::ky = 6.28318530717959
+
+ActiveThorns = "Time"
+Time::dtfac = 0.5
+
+ActiveThorns = "IOBasic"
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_vars = "WaveToy::phi"
+
+ActiveThorns = "CarpetIOASCII"
+IOASCII::out1D_every = 1
+IOASCII::out1D_vars = "WaveToy::phi"
diff --git a/Carpet/Carpet/par/test_rad.par b/Carpet/Carpet/par/test_rad.par
new file mode 100644
index 000000000..ee7af3cd2
--- /dev/null
+++ b/Carpet/Carpet/par/test_rad.par
@@ -0,0 +1,45 @@
+!DESC "Octant evolution with radiation boundaries"
+
+# $Id: test_rad.par,v 1.2 2002/10/24 21:11:53 schnetter Exp $
+#
+# /*@@
+# @file test_rad.par
+# @date Saturday 18th September
+# @author Gabrielle Allen
+# @desc
+# Wavetoy parameter file demonstrating radiation boundaries in Octant
+# @enddesc
+# @@*/
+
+ActiveThorns = "boundary iobasic idscalarwavec time wavetoyc carpet carpetlib carpetslab carpetreduce cartgrid3d ioutil ioascii"
+
+time::dtfac = 0.5
+
+idscalarwave::initial_data = "gaussian"
+idscalarwave::sigma = 2.8
+idscalarwave::radius = 5
+
+wavetoyc::bound = "radiation"
+
+grid::type = "BySpacing"
+grid::domain = "octant"
+grid::dxyz = 0.6
+
+driver::global_nx = 15
+driver::global_ny = 15
+driver::global_nz = 15
+
+cactus::cctk_itlast = 10
+
+IOBasic::outScalar_every = 1
+IOBasic::outScalar_vars = "wavetoy::phi"
+
+IOASCII::out1D_style = "gnuplot f(x)"
+IOASCII::out1D_every = 1
+IOASCII::out1D_z = "no"
+IOASCII::out1D_y = "no"
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "wavetoy::phi "
+
+IO::out_dir = "test_rad"
+IO::out_fileinfo = "none"
diff --git a/Carpet/Carpet/par/test_rad.th b/Carpet/Carpet/par/test_rad.th
new file mode 100644
index 000000000..73c560c03
--- /dev/null
+++ b/Carpet/Carpet/par/test_rad.th
@@ -0,0 +1,14 @@
+!DESC "Octant evolution with radiation boundaries"
+
+CactusBase/Boundary # boundary (grid) [ ] { }
+CactusBase/IOBasic # IOBasic (IO) [ ] {IO}
+CactusWave/IDScalarWaveC # idscalarwave (wavetoy,grid) [ ] {grid}
+CactusBase/Time # time ( ) [ ] { }
+CactusWave/WaveToyC # wavetoy (Grid,Boundary) [ ] { }
+Carpet/Carpet # driver (CarpetLib) [ ] {Cactus,IO}
+Carpet/CarpetLib # CarpetLib ( ) [ ] { }
+Carpet/CarpetSlab # Hyperslab (CarpetLib,driver) [ ] { }
+Carpet/CarpetReduce # reduce (CarpetLib,driver) [ ] { }
+CactusBase/CartGrid3D # grid ( ) [ ] {driver}
+CactusBase/IOUtil # IO ( ) [ ] { }
+Carpet/CarpetIOASCII # IOASCII (CarpetLib,driver,Hyperslab) [ ] {IO}
diff --git a/Carpet/Carpet/par/test_rad_ref.par b/Carpet/Carpet/par/test_rad_ref.par
new file mode 100644
index 000000000..e00217ac4
--- /dev/null
+++ b/Carpet/Carpet/par/test_rad_ref.par
@@ -0,0 +1,53 @@
+!DESC "Octant evolution with radiation boundaries"
+
+# $Id: test_rad_ref.par,v 1.2 2002/10/24 21:11:53 schnetter Exp $
+#
+# /*@@
+# @file test_rad.par
+# @date Saturday 18th September
+# @author Gabrielle Allen
+# @desc
+# Wavetoy parameter file demonstrating radiation boundaries in Octant
+# @enddesc
+# @@*/
+
+ActiveThorns = "boundary iobasic idscalarwavec time wavetoyc carpet carpetlib carpetregrid carpetslab carpetreduce cartgrid3d ioutil carpetioascii"
+
+time::dtfac = 0.5
+
+idscalarwave::initial_data = "gaussian"
+idscalarwave::sigma = 2.8
+idscalarwave::radius = 5
+
+wavetoyc::bound = "radiation"
+
+grid::type = "BySpacing"
+grid::domain = "octant"
+grid::dxyz = 0.6
+
+# this file produces wrong output because the coordinat thorn
+# produces wrong coordinate arrays.
+
+driver::global_nx = 15
+driver::global_ny = 15
+driver::global_nz = 15
+
+Carpet::max_refinement_levels = 2
+CarpetRegrid::refinement_levels = 2
+CarpetRegrid::refined_regions = manual-gridpoint-list
+CarpetRegrid::gridpoints = "[ [ ([2,2,2]:[15,15,15]:[1,1,1]) ] ]"
+CarpetRegrid::outerbounds = "[ [ [[1,0],[1,0],[1,0]] ] ]"
+
+cactus::cctk_itlast = 20
+
+IOBasic::outScalar_every = 1
+IOBasic::outScalar_vars = "wavetoy::phi"
+
+IOASCII::out1D_every = 1
+IOASCII::out1D_z = "no"
+IOASCII::out1D_y = "no"
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "wavetoy::phi "
+
+IO::out_dir = "test_rad_ref"
+IO::out_fileinfo = "none"
diff --git a/Carpet/Carpet/par/test_rad_ref.th b/Carpet/Carpet/par/test_rad_ref.th
new file mode 100644
index 000000000..538d486c2
--- /dev/null
+++ b/Carpet/Carpet/par/test_rad_ref.th
@@ -0,0 +1,15 @@
+!DESC "Octant evolution with radiation boundaries"
+
+CactusBase/Boundary # boundary (grid) [ ] { }
+CactusBase/IOBasic # IOBasic (IO) [ ] {IO}
+CactusWave/IDScalarWaveC # idscalarwave (wavetoy,grid) [ ] {grid}
+CactusBase/Time # time ( ) [ ] { }
+CactusWave/WaveToyC # wavetoy (Grid,Boundary) [ ] { }
+Carpet/Carpet # driver (CarpetLib) [ ] {Cactus,IO}
+Carpet/CarpetLib # CarpetLib ( ) [ ] { }
+Carpet/CarpetRegrid # CarpetRegrid (CarpetLib,driver) [ ] { }
+Carpet/CarpetSlab # Hyperslab (CarpetLib,driver) [ ] { }
+Carpet/CarpetReduce # reduce (CarpetLib,driver) [ ] { }
+CactusBase/CartGrid3D # grid ( ) [ ] {driver}
+CactusBase/IOUtil # IO ( ) [ ] { }
+Carpet/CarpetIOASCII # IOASCII (CarpetLib,driver,Hyperslab) [ ] {IO}
diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl
new file mode 100644
index 000000000..3cd8c1a54
--- /dev/null
+++ b/Carpet/Carpet/param.ccl
@@ -0,0 +1,294 @@
+# Parameter definitions for thorn Carpet
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.40 2004/08/07 19:47:12 schnetter Exp $
+
+shares: Cactus
+
+USES BOOLEAN terminate_next
+USES KEYWORD terminate
+USES CCTK_INT cctk_itlast
+USES CCTK_REAL cctk_initial_time
+USES CCTK_REAL cctk_final_time
+USES CCTK_REAL max_runtime
+
+
+
+shares: IO
+
+USES STRING out_dir
+
+
+
+private:
+
+BOOLEAN domain_from_coordbase "Use the domain description from CoordBase"
+{
+} "no"
+
+
+
+CCTK_INT global_nx "Grid size in x direction"
+{
+ 0:* :: "must be nonnegative"
+} 10
+
+CCTK_INT global_ny "Grid size in y direction"
+{
+ 0:* :: "must be nonnegative"
+} 10
+
+CCTK_INT global_nz "Grid size in z direction"
+{
+ 0:* :: "must be nonnegative"
+} 10
+
+CCTK_INT global_nsize "Grid size in each spatial direction"
+{
+ 0:* :: "must be nonnegative"
+ -1 :: "use the per-dimension parameters"
+} -1
+
+
+
+CCTK_INT ghost_size_x "Ghost zones in x direction"
+{
+ 0:* :: "must be nonnegative"
+} 1
+
+CCTK_INT ghost_size_y "Ghost zones in y direction"
+{
+ 0:* :: "must be nonnegative"
+} 1
+
+CCTK_INT ghost_size_z "Ghost zones in z direction"
+{
+ 0:* :: "must be nonnegative"
+} 1
+
+CCTK_INT ghost_size "Ghost zones in each spatial direction"
+{
+ 0:* :: "must be nonnegative"
+ -1 :: "use the per-dimension parameters"
+} -1
+
+
+
+restricted:
+
+BOOLEAN periodic "do not use this parameter"
+{
+} "no"
+
+BOOLEAN periodic_x "do not use this parameter"
+{
+} "no"
+
+BOOLEAN periodic_y "do not use this parameter"
+{
+} "no"
+
+BOOLEAN periodic_z "do not use this parameter"
+{
+} "no"
+
+
+
+private:
+
+CCTK_INT max_refinement_levels "Maximum number of refinement levels (including the base level)"
+{
+ 1:* :: "must be positive"
+} 1
+
+CCTK_INT refinement_factor "Refinement factor"
+{
+ 1:* :: "must be positive"
+} 2
+
+
+
+CCTK_INT convergence_level "Convergence level"
+{
+ *:* :: "negative for finer, positive for coarser resolutions"
+} 0
+
+CCTK_INT num_convergence_levels "Number of convergence levels (including the base level)"
+{
+ 1:* :: "must be positive"
+} 1
+
+CCTK_INT convergence_factor "Multigrid factor"
+{
+ 1:* :: "must be positive"
+} 2
+
+
+
+CCTK_INT num_maps "Number of maps"
+{
+ 1:* :: ""
+} 1
+
+
+
+CCTK_INT prolongation_order_space "Order of prolongation operator in space" STEERABLE=recover
+{
+ 1 :: "first order (linear)"
+ 3 :: "third order (cubic)"
+ 5 :: "fifth order"
+} 1
+
+CCTK_INT prolongation_order_time "Order of prolongation operator in time" STEERABLE=recover
+{
+ 0 :: "zeroth order (constant)"
+ 1 :: "first order (linear)"
+ 2 :: "second order (quadratic)"
+} 1
+
+
+
+CCTK_INT buffer_width "Width of the buffer zone inside the fine grid" STEERABLE=recover
+{
+ 0:* :: "Should be the radius of the numerical domain of dependence of the time integrator, minus the number of ghost zones"
+} 0
+
+
+
+CCTK_STRING base_extents "Extents of base grid components, in grid point units of the finest level"
+{
+ "^$" :: "leave empty for one grid component covering the whole region (default)"
+# We want the string to contain a list of bboxes. Each bbox contains
+# three vectors specifying the lower bound, upper bound, and stride.
+# (The upper bound is inclusive. All values are nonnegative integers.)
+# The syntax for vectors, bboxes, and lists is described below.
+# All spaces are optional.
+# The () parentheses and [] brackets are literals.
+# The {} braces are used for grouping.
+# If you put everything together, you get the tapeworm below.
+# There should be a way to define abbreviations in regexps!
+# Having #defines in param.ccl files would help a lot.
+# VECT := " [ 0 , 0 , 0 ]"
+# BBOX := " (VECT :VECT :VECT )"
+# LIST := " [{{BBOX ,}*BBOX}? ]"
+ "^\[(([[:space:]]*\([[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\)[[:space:]]*,)*[[:space:]]*\([[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\))?[[:space:]]*\]$" :: "[ ([<imin>,<jmin>,<kmin>]:[<imax>,<jmax>,<kmax>]:[<istride>,<jstride>,<kstride>]), ... ]"
+} ""
+
+CCTK_STRING base_outerbounds "Outer boundaries of base grid components"
+{
+ "^$" :: "leave empty for using the default, which depends on cctk_gsh"
+# See above for an explanation of this syntax, and of the tapeworm below.
+# Each vector element is 0 or 1,
+# where 0 is handled by synchronisation or prolongation,
+# and 1 stands for a user-supplied ("outer") boundary condition.
+# BND := " [ 0 , 0 ]"
+# VECT := " [ BND , BND , BND ]"
+# LIST := " [{{VECT ,}*VECT}? ]"
+ "^\[(([[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\][[:space:]]*,)*[[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\])?[[:space:]]*\]$" :: "[ [ [<ilower>,<iupper>], [<jlower>,<jupper>], [<klower>,<kupper>] ], ... ]"
+} ""
+
+
+
+BOOLEAN enable_all_storage "Enable storage for all grid functions" STEERABLE=recover
+{
+} "yes"
+
+
+
+BOOLEAN poison_new_timelevels "Try to catch uninitialised grid elements by setting new timelevels to values that will catch your attention" STEERABLE=always
+{
+} "no"
+
+BOOLEAN check_for_poison "Explicitely check for the poison value after every time step" STEERABLE=always
+{
+} "no"
+
+CCTK_INT poison_value "Integer value (0..255) used to poison new timelevels (with memset)" STEERABLE=always
+{
+ 0:255 :: "Must fit into a byte. Use 0 for zero, 255 for nan, and e.g. 113 for a large value."
+} 255
+
+CCTK_INT max_poison_locations "Maximum number of poison locations that are printed to the screen" STEERABLE=always
+{
+ -1 :: "print all locations"
+ 0:* :: "print only that many locations"
+} 10
+
+
+
+BOOLEAN checksum_timelevels "Try to catch unintentionally changed timelevels by taking checksums and comparing against these" STEERABLE=always
+{
+} "no"
+
+
+
+BOOLEAN suppress_restriction "Suppress the restriction operations. This makes the coarser refinement levels independent of the finer ones." STEERABLE=always
+{
+} "no"
+
+
+
+BOOLEAN verbose "Display info on the screen" STEERABLE=always
+{
+} "no"
+
+BOOLEAN veryverbose "Display a lot of info on the screen" STEERABLE=always
+{
+} "no"
+
+BOOLEAN barriers "Insert barriers at strategic places for debugging purposes (slows down execution)" STEERABLE=always
+{
+} "no"
+
+
+
+KEYWORD processor_topology "How to determine the processor topology" STEERABLE=recover
+{
+ "manual" :: "Specified by processor_topology_*"
+ "along-z" :: "Split the region along the z direction only"
+ "along-dir" :: "Split the region along one direction only"
+ "automatic" :: "Choose the topology automatically"
+} "automatic"
+
+CCTK_INT processor_topology_3d_x "Number of processors in x-direction" STEERABLE=recover
+{
+ 1:* :: "must be positive"
+} 1
+
+CCTK_INT processor_topology_3d_y "Number of processors in y-direction" STEERABLE=recover
+{
+ 1:* :: "must be positive"
+} 1
+
+CCTK_INT processor_topology_3d_z "Number of processors in z-direction" STEERABLE=recover
+{
+ 1:* :: "must be positive"
+} 1
+
+CCTK_INT split_direction "Direction in which the domain should be split" STEERABLE=recover
+{
+ 0:* :: "0 for x, 1 for y, 2 for z, etc."
+} 2
+
+
+
+STRING grid_structure_filename "File name to output grid structure to (empty = no output)" STEERABLE=recover
+{
+ ".*" :: "must be a legal file name"
+} ""
+
+
+
+private:
+
+BOOLEAN init_each_timelevel "Call initial data routines once for each timelevel" STEERABLE=always
+{
+} "no"
+
+BOOLEAN prolongate_initial_data "Prolongate the refined regions during initial data generation" STEERABLE=always
+{
+} "yes"
+
+
+
+BOOLEAN init_3_timelevels "Set up 3 timelevels of initial data" STEERABLE=always
+{
+} "no"
diff --git a/Carpet/Carpet/schedule.ccl b/Carpet/Carpet/schedule.ccl
new file mode 100644
index 000000000..491f070ba
--- /dev/null
+++ b/Carpet/Carpet/schedule.ccl
@@ -0,0 +1,7 @@
+# Schedule definitions for thorn Carpet
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/schedule.ccl,v 1.7 2004/05/27 12:28:01 schnetter Exp $
+
+schedule CarpetStartup at STARTUP as Driver_Startup
+{
+ LANG: C
+} "Startup routine"
diff --git a/Carpet/Carpet/src/CallFunction.cc b/Carpet/Carpet/src/CallFunction.cc
new file mode 100644
index 000000000..4511c10ef
--- /dev/null
+++ b/Carpet/Carpet/src/CallFunction.cc
@@ -0,0 +1,298 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include <algorithm>
+
+#include "cctk.h"
+#include "cctki_GHExtensions.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CallFunction.cc,v 1.19 2004/08/02 11:43:15 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_CallFunction_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+ /// Traverse one function on all components of one refinement level
+ /// of one multigrid level.
+ int CallFunction (void* function, ///< the function to call
+ cFunctionData* attribute, ///< attributes of the function
+ void* data) ///< ???
+ {
+// Checkpoint ("Starting CallFunction...");
+
+ cGH* cgh = (cGH*)data;
+
+ assert (!! attribute->meta
+ + !! attribute->global
+ + !! attribute->level
+ + !! attribute->singlemap
+ + !! attribute->local <= 1);
+
+ assert (!! attribute->loop_global
+ + !! attribute->loop_level
+ + !! attribute->loop_singlemap
+ + !! attribute->loop_local <= 1);
+
+ if (attribute->meta || is_meta_mode()) {
+ // Convtest operation
+
+ if (do_meta_mode) {
+ if (attribute->loop_local) {
+ BEGIN_META_MODE(cgh) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Meta time local mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ } END_META_MODE;
+ } else if (attribute->loop_singlemap) {
+ BEGIN_META_MODE(cgh) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Meta time singlemap mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_MAP_LOOP;
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ } END_META_MODE;
+ } else if (attribute->loop_level) {
+ BEGIN_META_MODE(cgh) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ Checkpoint ("Meta time level mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ } END_META_MODE;
+ } else if (attribute->loop_global) {
+ BEGIN_META_MODE(cgh) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ Checkpoint ("Meta time global mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_MGLEVEL_LOOP;
+ } END_META_MODE;
+ } else {
+ BEGIN_META_MODE(cgh) {
+ Checkpoint ("Meta mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_META_MODE;
+ }
+ }
+
+ } else if (attribute->global || is_global_mode()) {
+ // Global operation: call once
+
+ assert (! attribute->loop_meta);
+
+ if (do_global_mode) {
+ if (attribute->loop_local) {
+ BEGIN_GLOBAL_MODE(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Global time local mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_GLOBAL_MODE;
+ } else if (attribute->loop_singlemap) {
+ BEGIN_GLOBAL_MODE(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Global time singlemap mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_MAP_LOOP;
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_GLOBAL_MODE;
+ } else if (attribute->loop_level) {
+ BEGIN_GLOBAL_MODE(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ Checkpoint ("Global time level mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_GLOBAL_MODE;
+ } else {
+ BEGIN_GLOBAL_MODE(cgh) {
+ Checkpoint ("Global mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+ } END_GLOBAL_MODE;
+ }
+ }
+
+ } else if (attribute->level) {
+ // Level operation: call once per refinement level
+
+ assert (! attribute->loop_meta);
+ assert (! attribute->loop_global);
+
+ if (attribute->loop_local) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Level time local mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } else if (attribute->loop_singlemap) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Level time singlemap mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_MAP_LOOP;
+ } else {
+ Checkpoint ("Level mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ }
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+
+ } else if (attribute->singlemap) {
+ // Single map operation: call once per refinement level and map
+
+ assert (! attribute->loop_meta);
+ assert (! attribute->loop_global);
+ assert (! attribute->loop_level);
+
+ if (attribute->loop_local) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Singlemap time local mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } else {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Singlemap mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_MAP_LOOP;
+ }
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+
+ } else {
+ // Local operation: call once per component
+
+ assert (! attribute->loop_meta);
+ assert (! attribute->loop_global);
+ assert (! attribute->loop_level);
+ assert (! attribute->loop_singlemap);
+
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ Checkpoint ("Local mode call at %s to %s::%s",
+ attribute->where, attribute->thorn, attribute->routine);
+ const int res = CCTK_CallFunction (function, attribute, data);
+ assert (res==0);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ for (int n=0; n<attribute->n_SyncGroups; ++n) {
+ char * const groupname = CCTK_GroupName (attribute->SyncGroups[n]);
+ SyncGroup (cgh, groupname);
+ free (groupname);
+ }
+
+ }
+
+// Checkpoint ("done with CallFunction.");
+
+ // The return value indicates whether the grid functions have been
+ // synchronised.
+ // 0: let the flesh do the synchronisation
+ // 1: we did the synchronisation
+ return 1;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/CarpetParamCheck.cc b/Carpet/Carpet/src/CarpetParamCheck.cc
new file mode 100644
index 000000000..e3e407120
--- /dev/null
+++ b/Carpet/Carpet/src/CarpetParamCheck.cc
@@ -0,0 +1,39 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CarpetParamCheck.cc,v 1.9 2003/09/19 16:04:31 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_CarpetParamCheck_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+ /** Ensure that the parameters have legal values.
+ *
+ * Note that this checking happens only after most of Carpet has
+ * already been set up.
+ */
+ void CarpetParamCheck (CCTK_ARGUMENTS)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ if (CCTK_ParameterQueryTimesSet ("periodic", "Carpet")
+ || CCTK_ParameterQueryTimesSet ("periodic_x", "Carpet")
+ || CCTK_ParameterQueryTimesSet ("periodic_y", "Carpet")
+ || CCTK_ParameterQueryTimesSet ("periodic_z", "Carpet")) {
+ CCTK_PARAMWARN ("Some of the parameters \"Carpet::periodic*\" have been set. These parameters are there for compatibility reasons only and must not be used.");
+ }
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/CarpetStartup.cc b/Carpet/Carpet/src/CarpetStartup.cc
new file mode 100644
index 000000000..c55c99d9a
--- /dev/null
+++ b/Carpet/Carpet/src/CarpetStartup.cc
@@ -0,0 +1,45 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CarpetStartup.cc,v 1.5 2003/09/19 16:04:31 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_CarpetStartup_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+ void CarpetStartup()
+ {
+ CCTK_RegisterBanner ("AMR driver provided by Carpet");
+
+ GHExtension = CCTK_RegisterGHExtension("Carpet");
+ CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH);
+
+ CCTK_OverloadInitialise (Initialise);
+ CCTK_OverloadEvolve (Evolve);
+ CCTK_OverloadShutdown (Shutdown);
+
+ CCTK_OverloadSyncGroup (SyncGroup);
+ CCTK_OverloadEnableGroupStorage (EnableGroupStorage);
+ CCTK_OverloadDisableGroupStorage (DisableGroupStorage);
+ CCTK_OverloadEnableGroupComm (EnableGroupComm);
+ CCTK_OverloadDisableGroupComm (DisableGroupComm);
+ CCTK_OverloadBarrier (Barrier);
+ CCTK_OverloadExit (Exit);
+ CCTK_OverloadAbort (Abort);
+ CCTK_OverloadMyProc (MyProc);
+ CCTK_OverloadnProcs (nProcs);
+ CCTK_OverloadArrayGroupSizeB (ArrayGroupSizeB);
+ CCTK_OverloadQueryGroupStorageB (QueryGroupStorageB);
+ CCTK_OverloadGroupDynamicData (GroupDynamicData);
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Checksum.cc b/Carpet/Carpet/src/Checksum.cc
new file mode 100644
index 000000000..6943e681a
--- /dev/null
+++ b/Carpet/Carpet/src/Checksum.cc
@@ -0,0 +1,181 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Checksum.cc,v 1.15 2004/03/24 17:44:51 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Checksum_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ // Checksum information
+ struct ckdesc {
+ bool valid;
+ unsigned int sum;
+ };
+
+ // Helper class
+ struct ckdesc4 {
+ vector<vector<vector<vector<ckdesc> > > > a; // [m][c][var][tl]
+ };
+
+ // Checksum information
+ vector<vector<vector<ckdesc4> > > checksums; // [rl][ml][group]
+
+
+
+ void CalculateChecksums (const cGH* cgh, const checktimes where)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (! checksum_timelevels) return;
+
+ Checkpoint ("CalculateChecksums");
+
+ checksums.resize(maxreflevels);
+ checksums.at(reflevel).resize(mglevels);
+ checksums.at(reflevel).at(mglevel).resize(CCTK_NumGroups());
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+ const int grouptype = CCTK_GroupTypeI(group);
+ if (reflevel == 0 || grouptype == CCTK_GF) {
+ checksums.at(reflevel).at(mglevel).at(group).a.resize(arrdata.at(group).size());
+ BEGIN_MAP_LOOP(cgh, grouptype) {
+ checksums.at(reflevel).at(mglevel).at(group).a.at(map).resize(arrdata.at(group).at(map).hh->components(reflevel));
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) {
+ const int nvars = CCTK_NumVarsInGroupI(group);
+ checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).resize(nvars);
+ if (nvars > 0) {
+
+ const int n0 = CCTK_FirstVarIndexI(group);
+ const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0));
+ assert (sz>0);
+
+ ivect size(1);
+ const int gpdim = groupdata.at(group).info.dim;
+ for (int d=0; d<gpdim; ++d) {
+ size[d] = groupdata.at(group).info.lsh[d];
+ }
+ const int np = prod(size);
+
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ const int min_tl = mintl(where, num_tl);
+ const int max_tl = maxtl(where, num_tl);
+
+ for (int var=0; var<nvars; ++var) {
+ checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).resize(num_tl);
+ for (int tl=min_tl; tl<=max_tl; ++tl) {
+
+ const int n = n0 + var;
+ const void* data = cgh->data[n][tl];
+ unsigned int chk = 0;
+ for (int i=0; i<np*sz/(int)sizeof chk; ++i) {
+ chk += ((const unsigned int*)data)[i];
+ }
+
+ checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).sum = chk;
+ checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).valid = true;
+
+ } // for tl
+ } // for var
+ } // if group has vars
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } // if grouptype fits
+ } // if storage
+ } // for group
+
+ }
+
+
+
+ void CheckChecksums (const cGH* cgh, const checktimes where)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (! checksum_timelevels) return;
+
+ Checkpoint ("CheckChecksums");
+
+ assert ((int)checksums.size()==maxreflevels);
+ assert ((int)checksums.at(reflevel).size()==mglevels);
+ assert ((int)checksums.at(reflevel).at(mglevel).size()==CCTK_NumGroups());
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+ const int grouptype = CCTK_GroupTypeI(group);
+ if (reflevel == 0 || grouptype == CCTK_GF) {
+ assert (checksums.at(reflevel).at(mglevel).at(group).a.size()==arrdata.at(group).size());
+ BEGIN_MAP_LOOP(cgh, grouptype) {
+ assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).size()==arrdata.at(group).at(map).hh->components(reflevel));
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) {
+ const int nvars = CCTK_NumVarsInGroupI(group);
+ assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).size()==nvars);
+ if (nvars > 0) {
+
+ const int n0 = CCTK_FirstVarIndexI(group);
+ const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0));
+ assert (sz>0);
+
+ ivect size(1);
+ const int gpdim = groupdata.at(group).info.dim;
+ for (int d=0; d<gpdim; ++d) {
+ size[d] = groupdata.at(group).info.lsh[d];
+ }
+ const int np = prod(size);
+
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ const int min_tl = mintl(where, num_tl);
+ const int max_tl = maxtl(where, num_tl);
+
+ for (int var=0; var<nvars; ++var) {
+ assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).size()==num_tl);
+ for (int tl=min_tl; tl<=max_tl; ++tl) {
+ if (checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).valid) {
+
+ const int n = n0 + var;
+ const void* data = cgh->data[n][tl];
+ unsigned int chk = 0;
+ for (int i=0; i<np*sz/(int)sizeof chk; ++i) {
+ chk += ((const unsigned int*)data)[i];
+ }
+ const bool unexpected_change =
+ chk != checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).sum;
+
+ if (unexpected_change) {
+ char* fullname = CCTK_FullName(n);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Timelevel %d, component %d, refinement level %d of the variable \"%s\" has changed unexpectedly",
+ tl, component, reflevel, fullname);
+ free (fullname);
+ }
+
+ } // if valid
+ } // for tl
+ } // for var
+ } // if group has vars
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } // if grouptype fits
+ } // if storage
+ } // for group
+
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Comm.cc b/Carpet/Carpet/src/Comm.cc
new file mode 100644
index 000000000..c66dd6915
--- /dev/null
+++ b/Carpet/Carpet/src/Comm.cc
@@ -0,0 +1,165 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "ggf.hh"
+#include "gh.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Comm.cc,v 1.29 2004/05/21 18:16:23 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Comm_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ int SyncGroup (const cGH* cgh, const char* groupname)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ const int group = CCTK_GroupIndex(groupname);
+ assert (group>=0 && group<CCTK_NumGroups());
+ assert (group<(int)arrdata.size());
+
+ Checkpoint ("SyncGroup \"%s\" time=%g", groupname, (double)cgh->cctk_time);
+
+ const int grouptype = CCTK_GroupTypeI(group);
+
+ if (grouptype == CCTK_GF) {
+ if (reflevel == -1) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot synchronise in global mode "
+ "(Tried to synchronise group \"%s\")",
+ groupname);
+ }
+ if (map != -1 && component == -1) {
+ if (maps == 1) {
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Synchronising group \"%s\" in singlemap mode",
+ groupname);
+ } else {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot synchronise in singlemap mode "
+ "(Tried to synchronise group \"%s\")",
+ groupname);
+ }
+ }
+ if (component != -1) {
+ if (maps == 1 && vhh.at(map)->local_components(reflevel) == 1) {
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Synchronising group \"%s\" in local mode",
+ groupname);
+ } else {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot synchronise in local mode "
+ "(Tried to synchronise group \"%s\")",
+ groupname);
+ }
+ }
+ }
+
+ if (! CCTK_QueryGroupStorageI(cgh, group)) {
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot synchronise group \"%s\" because it has no storage",
+ groupname);
+ return -1;
+ }
+
+ if (CCTK_NumVarsInGroupI(group) == 0) return 0;
+
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ const int tl = 0;
+
+ // Prolongate the boundaries
+ if (do_prolongate) {
+ switch (grouptype) {
+
+ case CCTK_GF:
+ assert (reflevel>=0 && reflevel<reflevels);
+ if (reflevel > 0) {
+
+ // use the current time here (which may be modified by the
+ // user)
+ const CCTK_REAL time
+ = (cgh->cctk_time - cctk_initial_time) / delta_time;
+
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ for (int c=0; c<vhh.at(m)->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(var)->ref_bnd_prolongate
+ (state, tl, reflevel, c, mglevel, time);
+ }
+ }
+ }
+ } // for state
+ } // if reflevel>0
+ break;
+
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ // do nothing
+ break;
+
+ default:
+ assert (0);
+ } // switch grouptype
+ } // if do_prolongate
+
+ // Sync
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_GF:
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ for (int c=0; c<vhh.at(m)->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(var)->sync
+ (state, tl, reflevel, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ for (int var=0; var<(int)arrdata.at(group).at(0).data.size(); ++var) {
+ arrdata.at(group).at(0).data.at(var)->sync (state, 0, 0, 0, 0);
+ }
+ break;
+
+ default:
+ assert (0);
+ } // switch grouptype
+ } // for state
+
+ return 0;
+ }
+
+
+
+ int EnableGroupComm (const cGH* cgh, const char* groupname)
+ {
+ // Communication is always enabled
+ return 0;
+ }
+
+ int DisableGroupComm (const cGH* cgh, const char* groupname)
+ {
+ // Communication is always enabled
+ return -1;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc
new file mode 100644
index 000000000..69a195563
--- /dev/null
+++ b/Carpet/Carpet/src/Cycle.cc
@@ -0,0 +1,115 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+
+#include "ggf.hh"
+#include "gh.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.19 2004/05/21 18:16:23 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Cycle_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ void CycleTimeLevels (const cGH* cgh)
+ {
+ Checkpoint ("CycleTimeLevels");
+ assert (is_level_mode());
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ assert (group<(int)arrdata.size());
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_GF:
+ assert (reflevel>=0 && reflevel<reflevels);
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ assert (m<(int)arrdata.at(group).size());
+ assert (var<(int)arrdata.at(group).at(m).data.size());
+ for (int c=0; c<arrdata.at(group).at(m).hh->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(var)->cycle (reflevel, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ if (do_global_mode) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ assert (var<(int)arrdata.at(group).at(0).data.size());
+ for (int c=0; c<arrdata.at(group).at(0).hh->components(0); ++c) {
+ arrdata.at(group).at(0).data.at(var)->cycle (0, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ default:
+ assert (0);
+ } // switch grouptype
+ } // if storage
+ } // for group
+ }
+
+
+
+ void FlipTimeLevels (const cGH* cgh)
+ {
+ Checkpoint ("FlipTimeLevels");
+ assert (is_level_mode());
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ assert (group<(int)arrdata.size());
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+ const int num_vars = CCTK_NumVarsInGroupI(group);
+ if (num_vars>0) {
+ const int var0 = CCTK_FirstVarIndexI(group);
+ assert (var0>=0);
+
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_GF:
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ assert (var<(int)arrdata.at(group).at(m).data.size());
+ for (int c=0; c<arrdata.at(group).at(m).hh->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(var)->flip (reflevel, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ if (do_global_mode) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ assert (var<(int)arrdata.at(group).at(0).data.size());
+ for (int c=0; c<arrdata.at(group).at(0).hh->components(0); ++c) {
+ arrdata.at(group).at(0).data.at(var)->flip (0, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ default:
+ assert (0);
+ } // switch grouptype
+
+ } // if num_vars>0
+ } // if storage
+ } // for group
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc
new file mode 100644
index 000000000..e226a8330
--- /dev/null
+++ b/Carpet/Carpet/src/Evolve.cc
@@ -0,0 +1,351 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Termination.h"
+
+// IRIX wants this before <time.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# elif HAVE_TIME_H
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "dist.hh"
+#include "th.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.54 2004/08/19 15:38:20 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Evolve_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ static bool do_terminate (const cGH *cgh,
+ const CCTK_REAL time, const int iteration)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ bool term;
+
+ // Early shortcut
+ if (terminate_next || CCTK_TerminationReached(cgh)) {
+
+ term = true;
+
+ } else {
+
+ const bool term_iter = iteration >= cctk_itlast;
+ const bool term_time
+ = (delta_time > 0
+ ? time >= cctk_final_time - 1.0e-8 * cgh->cctk_delta_time
+ : time <= cctk_final_time - 1.0e-8 * cgh->cctk_delta_time);
+#ifdef HAVE_TIME_GETTIMEOFDAY
+ // get the current time
+ struct timeval tv;
+ gettimeofday (&tv, 0);
+ const double thetime = tv.tv_sec + tv.tv_usec / 1e6;
+
+ static bool firsttime = true;
+ static double initial_runtime;
+ if (firsttime) {
+ firsttime = false;
+ initial_runtime = thetime;
+ }
+
+ const double runtime = thetime - initial_runtime;
+ const bool term_runtime = (max_runtime > 0
+ && runtime >= 60.0 * max_runtime);
+#else
+ const bool term_runtime = false;
+#endif
+
+ if (CCTK_Equals(terminate, "never")) {
+ term = false;
+ } else if (CCTK_Equals(terminate, "iteration")) {
+ term = term_iter;
+ } else if (CCTK_Equals(terminate, "time")) {
+ term = term_time;
+ } else if (CCTK_Equals(terminate, "runtime")) {
+ term = term_runtime;
+ } else if (CCTK_Equals(terminate, "any")) {
+ term = term_iter || term_time || term_runtime;
+ } else if (CCTK_Equals(terminate, "all")) {
+ term = term_iter && term_time && term_runtime;
+ } else if (CCTK_Equals(terminate, "either")) {
+ term = term_iter || term_time;
+ } else if (CCTK_Equals(terminate, "both")) {
+ term = term_iter && term_time;
+ } else if (CCTK_Equals(terminate, "immediately")) {
+ term = true;
+ } else {
+ CCTK_WARN (0, "Unsupported termination condition");
+ }
+
+ }
+
+ {
+ int local, global;
+ local = term;
+ MPI_Allreduce (&local, &global, 1, MPI_INT, MPI_LOR, dist::comm);
+ term = global;
+ }
+
+ return term;
+ }
+
+
+
+ int Evolve (tFleshConfig* fc)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ Waypoint ("Starting evolution loop");
+
+ const int convlev = 0;
+ cGH* cgh = fc->GH[convlev];
+
+ // Main loop
+ while (! do_terminate(cgh, cgh->cctk_time, cgh->cctk_iteration)) {
+
+
+
+ // Advance time
+ ++cgh->cctk_iteration;
+ global_time = cctk_initial_time
+ + cgh->cctk_iteration * delta_time / maxreflevelfact;
+ cgh->cctk_time = global_time;
+ if ((cgh->cctk_iteration-1)
+ % (maxreflevelfact / ipow(reffact, reflevels-1)) == 0) {
+ Waypoint ("Evolving iteration %d at t=%g",
+ cgh->cctk_iteration, (double)cgh->cctk_time);
+ }
+
+
+
+ // Regrid
+ {
+ bool did_regrid = false;
+ for (int rl=0; rl<reflevels; ++rl) {
+ {
+ const int ml=0;
+ const int do_every = maxreflevelfact / ipow(reffact, rl);
+ if ((cgh->cctk_iteration-1) % do_every == 0) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ Checkpoint ("Regrid");
+ did_regrid |= Regrid (cgh, false, true);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // if do_every
+ } // ml
+ } // for rl
+
+ if (did_regrid) {
+ for (int rl=0; rl<reflevels; ++rl) {
+ for (int ml=mglevels-1; ml>=0; --ml) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Postregrid at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Postregrid
+ Checkpoint ("Scheduling POSTREGRID");
+ CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // for ml
+ } // for rl
+ } // if did_regrid
+ }
+
+
+
+ for (int ml=mglevels-1; ml>=0; --ml) {
+
+ bool have_done_global_mode = false;
+ bool have_done_anything = false;
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ if ((cgh->cctk_iteration-1) % do_every == 0) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ do_global_mode = ! have_done_global_mode;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+ assert (! (have_done_global_mode && do_global_mode));
+ have_done_global_mode |= do_global_mode;
+ have_done_anything = true;
+
+ // Advance times
+ for (int m=0; m<maps; ++m) {
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ }
+ cgh->cctk_time = (global_time
+ - delta_time / maxreflevelfact
+ + delta_time * mglevelfact / reflevelfact);
+ CycleTimeLevels (cgh);
+
+ Waypoint ("Evolution I at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Checking
+ CalculateChecksums (cgh, allbutcurrenttime);
+ Poison (cgh, currenttimebutnotifonly);
+
+ // Evolve
+ Checkpoint ("Scheduling PRESTEP");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Checkpoint ("Scheduling EVOL");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, currenttime);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // if do_every
+ } // for rl
+
+ if (have_done_anything) assert (have_done_global_mode);
+
+ } // for ml
+
+
+
+ for (int ml=mglevels-1; ml>=0; --ml) {
+ for (int rl=reflevels-1; rl>=0; --rl) {
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ if (cgh->cctk_iteration % do_every == 0) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ Waypoint ("Evolution/Restrict at iteration %d time %g",
+ cgh->cctk_iteration, (double)cgh->cctk_time);
+
+ // Restrict
+ Restrict (cgh);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // if do_every
+ } // for rl
+ } // for ml
+
+
+
+ for (int ml=mglevels-1; ml>=0; --ml) {
+
+ bool have_done_global_mode = false;
+ bool have_done_anything = false;
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ if (cgh->cctk_iteration % do_every == 0) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ int finest_active_reflevel = -1;
+ {
+ for (int rl_=0; rl_<reflevels; ++rl_) {
+ const int do_every_
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl_));
+ if (cgh->cctk_iteration % do_every_ == 0) {
+ finest_active_reflevel = rl_;
+ }
+ }
+ assert (finest_active_reflevel >= 0);
+ }
+ do_global_mode = rl == finest_active_reflevel;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+ assert (! (have_done_global_mode && do_global_mode));
+ have_done_global_mode |= do_global_mode;
+ have_done_anything = true;
+
+ Waypoint ("Evolution II at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ Checkpoint ("Scheduling POSTRESTRICT");
+ CCTK_ScheduleTraverse ("CCTK_POSTRESTRICT", cgh, CallFunction);
+
+ // Poststep
+ Checkpoint ("Scheduling POSTSTEP");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, currenttime);
+ CalculateChecksums (cgh, currenttime);
+
+ // Checkpoint
+ Checkpoint ("Scheduling CHECKPOINT");
+ CCTK_ScheduleTraverse ("CCTK_CHECKPOINT", cgh, CallFunction);
+
+ // Analysis
+ Checkpoint ("Scheduling ANALYSIS");
+ CCTK_ScheduleTraverse ("CCTK_ANALYSIS", cgh, CallFunction);
+
+ // Output
+ Checkpoint ("OutputGH");
+ CCTK_OutputGH (cgh);
+
+ // Checking
+ CheckChecksums (cgh, alltimes);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // if do_every
+ } // for rl
+
+ if (have_done_anything) assert (have_done_global_mode);
+
+ } // for ml
+
+
+
+ } // main loop
+
+ Waypoint ("Done with evolution loop");
+
+ return 0;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc
new file mode 100644
index 000000000..fde570065
--- /dev/null
+++ b/Carpet/Carpet/src/Initialise.cc
@@ -0,0 +1,556 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include <iostream>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctki_GHExtensions.h"
+#include "cctki_ScheduleBindings.h"
+#include "cctki_WarnLevel.h"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.52 2004/08/19 15:38:20 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Initialise_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ int Initialise (tFleshConfig* fc)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ // Initialise stuff
+ const int convlev = 0;
+ cGH* const cgh = CCTK_SetupGH (fc, convlev);
+ CCTKi_AddGH (fc, convlev, cgh);
+
+ // Delay checkpoint until MPI has been initialised
+ Waypoint ("Starting initialisation");
+
+ // Initialise stuff
+ cgh->cctk_iteration = 0;
+ global_time = cctk_initial_time;
+ delta_time = 1.0;
+ cgh->cctk_time = global_time;
+ cgh->cctk_delta_time = delta_time;
+
+ do_global_mode = true;
+ do_meta_mode = true;
+
+ // Enable storage and communtication
+ CCTKi_ScheduleGHInit (cgh);
+
+ // Initialise stuff
+ CCTKi_InitGHExtensions (cgh);
+
+
+
+ // Output the grid structure
+ {
+ // Loop over maps
+ for (int m=0; m<maps; ++m) {
+ // Write grid structure to file
+ OutputGridStructure
+ (cgh, m,
+ vhh.at(m)->extents, vhh.at(m)->outer_boundaries,
+ vhh.at(m)->processors);
+ } // loop over maps
+ }
+
+
+
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ do_global_mode = true;
+ do_meta_mode = mglevel==mglevels-1;
+
+ // Register coordinates
+ Checkpoint ("Scheduling CCTK_WRAGH");
+ CCTK_ScheduleTraverse ("CCTK_WRAGH", cgh, CallFunction);
+
+ // Check parameters
+ Checkpoint ("Scheduling PARAMCHECK");
+ CCTK_ScheduleTraverse ("CCTK_PARAMCHECK", cgh, CallFunction);
+ CCTKi_FinaliseParamWarn();
+ } END_MGLEVEL_LOOP;
+
+
+
+ if (fc->recovered) {
+ // if recovering
+
+
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ cgh->cctk_time = global_time;
+
+ Waypoint ("Recovering I at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Set up the grids
+ Checkpoint ("Scheduling BASEGRID");
+ CCTK_ScheduleTraverse ("CCTK_BASEGRID", cgh, CallFunction);
+
+ // Recover
+ Checkpoint ("Scheduling RECOVER_VARIABLES");
+ CCTK_ScheduleTraverse ("CCTK_RECOVER_VARIABLES", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+
+ // Regrid
+ {
+ bool did_regrid = false;
+ {
+ const int ml=0;
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ // Regrid
+ Checkpoint ("Regrid");
+ did_regrid |= Regrid (cgh, true, false);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // ml
+
+ if (did_regrid) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = true;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Postregrid at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Postregrid
+ Checkpoint ("Scheduling POSTREGRID");
+ CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // if did_regrid
+ }
+
+ } // for rl
+
+
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==reflevels-1;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Recovering II at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Post recover
+ Checkpoint ("Scheduling POST_RECOVER_VARIABLES");
+ CCTK_ScheduleTraverse
+ ("CCTK_POST_RECOVER_VARIABLES", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, alltimes);
+ CheckChecksums (cgh, allbutcurrenttime);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+
+
+ } else {
+ // if not recovering
+
+
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ cgh->cctk_time = global_time;
+
+ Waypoint ("Initialisation I at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Checking
+ Poison (cgh, alltimes);
+
+ // Set up the grids
+ Checkpoint ("Scheduling BASEGRID");
+ CCTK_ScheduleTraverse ("CCTK_BASEGRID", cgh, CallFunction);
+
+ const int num_tl = init_each_timelevel ? 3 : 1;
+
+ // Rewind
+ for (int m=0; m<maps; ++m) {
+ vtt.at(m)->set_delta
+ (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel));
+ FlipTimeLevels (cgh);
+ for (int tl=0; tl<num_tl; ++tl) {
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ CycleTimeLevels (cgh);
+ }
+ vtt.at(m)->set_delta
+ (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel));
+ FlipTimeLevels (cgh);
+ }
+
+ const bool outer_do_global_mode = do_global_mode;
+ for (int tl=num_tl-1; tl>=0; --tl) {
+ do_global_mode = outer_do_global_mode && tl==0;
+
+ // Advance times
+ for (int m=0; m<maps; ++m) {
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ }
+ cgh->cctk_time
+ = global_time - tl * delta_time * mglevelfact / reflevelfact;
+ CycleTimeLevels (cgh);
+
+ // Set up the initial data
+ Checkpoint ("Scheduling INITIAL");
+ CCTK_ScheduleTraverse ("CCTK_INITIAL", cgh, CallFunction);
+
+ } // for tl
+ do_global_mode = outer_do_global_mode;
+
+ // Checking
+ PoisonCheck (cgh, currenttime);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+
+ // Regrid
+ {
+ bool did_regrid = false;
+ {
+ const int ml=0;
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ // Regrid
+ Checkpoint ("Regrid");
+ did_regrid |= Regrid (cgh, false, prolongate_initial_data);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // ml
+
+ if (did_regrid) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = true;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Postregrid at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Postregrid
+ Checkpoint ("Scheduling POSTREGRID");
+ CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // if did_regrid
+ }
+
+ } // for rl
+
+
+
+ for (int rl=reflevels-1; rl>=0; --rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+
+ Waypoint ("Initialisation/Restrict at iteration %d time %g",
+ cgh->cctk_iteration, (double)cgh->cctk_time);
+
+ // Restrict
+ Restrict (cgh);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==reflevels-1;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Initialisation II at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ Checkpoint ("Scheduling POSTRESTRICTINITIAL");
+ CCTK_ScheduleTraverse
+ ("CCTK_POSTRESTRICTINITIAL", cgh, CallFunction);
+
+ // Postinitial
+ Checkpoint ("Scheduling POSTINITIAL");
+ CCTK_ScheduleTraverse ("CCTK_POSTINITIAL", cgh, CallFunction);
+
+ // Poststep
+ Checkpoint ("Scheduling POSTSTEP");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, alltimes);
+ CheckChecksums (cgh, allbutcurrenttime);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+
+
+ if (init_3_timelevels) {
+ // Use Scott Hawley's algorithm for getting two extra
+ // timelevels of data
+ Waypoint ("Initialising three timelevels");
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ // Advance times
+ for (int m=0; m<maps; ++m) {
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ }
+ cgh->cctk_time
+ = global_time + delta_time * mglevelfact / reflevelfact;
+ CycleTimeLevels (cgh);
+
+ Waypoint ("Initialisation 3TL evolution I (a) (forwards) at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Checking
+ CalculateChecksums (cgh, allbutcurrenttime);
+ Poison (cgh, currenttimebutnotifonly);
+
+ // Evolve forward
+ Checkpoint ("Scheduling PRESTEP");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Checkpoint ("Scheduling EVOL");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, currenttime);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+ delta_time *= -1;
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ // Flip time levels
+ Waypoint ("Flipping timelevels");
+ FlipTimeLevels (cgh);
+
+ cgh->cctk_time
+ = global_time + delta_time * mglevelfact / reflevelfact;
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Initialisation 3TL evolution I (b) (backwards) at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Checking
+ CalculateChecksums (cgh, allbutcurrenttime);
+ Poison (cgh, currenttimebutnotifonly);
+
+ // Evolve backward
+ Checkpoint ("Scheduling PRESTEP");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Checkpoint ("Scheduling EVOL");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, alltimes);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+ Waypoint ("Hourglass structure in place");
+
+ // Evolve each level "backwards" one more timestep
+ // Starting with the finest level and proceeding to the coarsest
+ for (int rl=reflevels-1; rl>=0; --rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Initialisation 3TL evolution II (b) (backwards) at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Restrict
+ Restrict (cgh);
+
+ Checkpoint ("Scheduling POSTRESTRICT");
+ CCTK_ScheduleTraverse ("CCTK_POSTRESTRICT", cgh, CallFunction);
+
+ // Poststep
+ Checkpoint ("Scheduling POSTSTEP");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, alltimes);
+
+ // Advance times
+ for (int m=0; m<maps; ++m) {
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ }
+ cgh->cctk_time
+ = global_time + 2 * delta_time * mglevelfact / reflevelfact;
+ CycleTimeLevels (cgh);
+
+ Waypoint ("Initialisation 3TL evolution I (c) (backwards) at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Checking
+ CalculateChecksums (cgh, allbutcurrenttime);
+ Poison (cgh, currenttimebutnotifonly);
+
+ // Evolve backward
+ Checkpoint ("Scheduling PRESTEP");
+ CCTK_ScheduleTraverse ("CCTK_PRESTEP", cgh, CallFunction);
+ Checkpoint ("Scheduling EVOL");
+ CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction);
+ Checkpoint ("Scheduling POSTSTEP");
+ CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction);
+
+ // Checking
+ PoisonCheck (cgh, alltimes);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+ delta_time *= -1;
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ // Flip time levels back
+ Waypoint ("Flipping timelevels back");
+ FlipTimeLevels (cgh);
+
+ // Invert level times back
+ for (int m=0; m<maps; ++m) {
+ vtt.at(m)->set_delta
+ (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel));
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ vtt.at(m)->advance_time (reflevel, mglevel);
+ vtt.at(m)->set_delta
+ (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel));
+ }
+ cgh->cctk_time = global_time;
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+ Waypoint ("Finished initialising three timelevels");
+
+ } // if init_3_timelevels
+
+ } // if not recovering
+
+
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==reflevels-1;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Initialisation III at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Checkpoint
+ Checkpoint ("Scheduling CPINITIAL");
+ CCTK_ScheduleTraverse ("CCTK_CPINITIAL", cgh, CallFunction);
+
+ // Analysis
+ Checkpoint ("Scheduling ANALYSIS");
+ CCTK_ScheduleTraverse ("CCTK_ANALYSIS", cgh, CallFunction);
+
+ // Output
+ Checkpoint ("OutputGH");
+ CCTK_OutputGH (cgh);
+
+ // Checking
+ PoisonCheck (cgh, alltimes);
+ CheckChecksums (cgh, allbutcurrenttime);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+ } // for rl
+
+
+
+ Waypoint ("Done with initialisation");
+
+ return 0;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Poison.cc b/Carpet/Carpet/src/Poison.cc
new file mode 100644
index 000000000..7f1a00f2e
--- /dev/null
+++ b/Carpet/Carpet/src/Poison.cc
@@ -0,0 +1,194 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Poison.cc,v 1.17 2004/03/23 19:30:14 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Poison_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ void Poison (const cGH* cgh, const checktimes where)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (! poison_new_timelevels) return;
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+ PoisonGroup (cgh, group, where);
+ } // if has storage
+ } // for group
+ }
+
+
+
+ void PoisonGroup (const cGH* cgh, const int group, const checktimes where)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ if (! poison_new_timelevels) return;
+
+ if (! CCTK_QueryGroupStorageI(cgh, group)) {
+ char * const groupname = CCTK_GroupName(group);
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot poison group \"%s\" because it has no storage",
+ groupname);
+ free (groupname);
+ return;
+ }
+
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int nvar = CCTK_NumVarsInGroupI(group);
+ const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0));
+ assert (sz>0);
+
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ const int min_tl = mintl(where, num_tl);
+ const int max_tl = maxtl(where, num_tl);
+
+ if (min_tl <= max_tl) {
+
+ {
+ char * const groupname = CCTK_GroupName(group);
+ Checkpoint ("PoisonGroup \"%s\"", groupname);
+ free (groupname);
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+
+ BEGIN_MAP_LOOP(cgh, grouptype) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) {
+
+ ivect size(1);
+ const int gpdim = groupdata.at(group).info.dim;
+ for (int d=0; d<gpdim; ++d) {
+ size[d] = groupdata.at(group).info.lsh[d];
+ }
+ const int np = prod(size);
+
+ for (int var=0; var<nvar; ++var) {
+ const int n = n0 + var;
+ for (int tl=min_tl; tl<=max_tl; ++tl) {
+ memset (cgh->data[n][tl], poison_value, np*sz);
+ } // for tl
+ } // for var
+
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+
+ } // if tl
+ }
+
+
+
+ void PoisonCheck (const cGH* cgh, const checktimes where)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (! check_for_poison) return;
+
+ Checkpoint ("PoisonCheck");
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+
+ const int grouptype = CCTK_GroupTypeI(group);
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int nvar = CCTK_NumVarsInGroupI(group);
+ const int tp = CCTK_VarTypeI(n0);
+ const int gpdim = groupdata.at(group).info.dim;
+
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ const int min_tl = mintl(where, num_tl);
+ const int max_tl = maxtl(where, num_tl);
+
+ BEGIN_MAP_LOOP(cgh, grouptype) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) {
+
+ ivect size(1);
+ for (int d=0; d<gpdim; ++d) {
+ size[d] = groupdata.at(group).info.lsh[d];
+ }
+ const int np = prod(size);
+
+ for (int var=0; var<nvar; ++var) {
+ const int n = n0 + var;
+
+ for (int tl=min_tl; tl<=max_tl; ++tl) {
+
+ const void* const data = cgh->data[n][tl];
+ int numpoison=0;
+ for (int k=0; k<size[2]; ++k) {
+ for (int j=0; j<size[1]; ++j) {
+ for (int i=0; i<size[0]; ++i) {
+ const int idx = i + size[0] * (j + size[1] * k);
+ bool poisoned=false;
+ switch (tp) {
+#define TYPECASE(N,T) \
+ case N: { \
+ T worm; \
+ memset (&worm, poison_value, sizeof worm); \
+ const T & val = ((const T*)data)[idx]; \
+ poisoned = memcmp (&worm, &val, sizeof worm) == 0; \
+ break; \
+ }
+#include "typecase"
+#undef TYPECASE
+ default:
+ UnsupportedVarType(n);
+ }
+ if (poisoned) {
+ ++numpoison;
+ if (max_poison_locations==-1
+ || numpoison<=max_poison_locations) {
+ char* fullname = CCTK_FullName(n);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Timelevel %d, component %d, map %d, refinement level %d of the variable \"%s\" contains poison at [%d,%d,%d]",
+ tl, component, map, reflevel, fullname, i,j,k);
+ free (fullname);
+ }
+ } // if poisoned
+ } // for i
+ } // for j
+ } // for k
+ if (max_poison_locations!=-1 && numpoison>max_poison_locations) {
+ char* fullname = CCTK_FullName(n);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Timelevel %d, component %d, map %d, refinement level %d of the variable \"%s\" contains poison at %d of %d locations; not all locations were printed",
+ tl, component, map, reflevel, fullname, numpoison, np);
+ free (fullname);
+ } else if (numpoison>0) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Found poison at %d of %d locations",
+ numpoison, np);
+ }
+
+ } // for tl
+ } // for var
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+
+ } // if has storage
+ } // for group
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc
new file mode 100644
index 000000000..e86761021
--- /dev/null
+++ b/Carpet/Carpet/src/Recompose.cc
@@ -0,0 +1,861 @@
+#include <assert.h>
+#include <math.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iomanip>
+#include <list>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+
+#include "bbox.hh"
+#include "bboxset.hh"
+#include "defs.hh"
+#include "gh.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+#include "modes.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.72 2004/08/19 15:38:20 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Recompose_cc);
+}
+
+#define DEBUG false // false or true
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ // Reduction operator
+ template<typename iter, typename func>
+ static typename func::result_type
+ reduce (iter const first, iter const last,
+ typename func::result_type const & init)
+ {
+ typename func::result_type res (init);
+ for (iter it (first); it != last; ++it) {
+ res = func::operator() (res, *it);
+ }
+ return res;
+ }
+
+
+
+ static void SplitRegions_Automatic_Recursively (bvect const & dims,
+ int const nprocs,
+ rvect const rshape,
+ ibbox const & bb,
+ bbvect const & ob,
+ int const & p,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs,
+ vector<int> & ps);
+ static void SplitRegions_AsSpecified (const cGH* cgh,
+ vector<ibbox>& bbs,
+ vector<bbvect>& obs,
+ vector<int>& ps);
+
+
+
+ void CheckRegions (const gh<dim>::rexts & bbsss,
+ const gh<dim>::rbnds & obss,
+ const gh<dim>::rprocs& pss)
+ {
+ // At least one level
+ if (bbsss.size() == 0) {
+ CCTK_WARN (0, "I cannot set up a grid hierarchy with zero refinement levels.");
+ }
+ assert (bbsss.size() > 0);
+ // At most maxreflevels levels
+ if ((int)bbsss.size() > maxreflevels) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "I cannot set up a grid hierarchy with more than Carpet::max_refinement_levels refinement levels. I found Carpet::max_refinement_levels=%d, while %d levels were requested.",
+ (int)maxreflevels, (int)bbsss.size());
+ }
+ assert ((int)bbsss.size() <= maxreflevels);
+ for (int rl=0; rl<(int)bbsss.size(); ++rl) {
+ // No empty levels
+ assert (bbsss.at(rl).size() > 0);
+ for (int c=0; c<(int)bbsss.at(rl).size(); ++c) {
+ // At least one multigrid level
+ assert (bbsss.at(rl).at(c).size() > 0);
+ for (int ml=0; ml<(int)bbsss.at(rl).at(c).size(); ++ml) {
+ // Check sizes
+ // Do allow processors with zero grid points
+// assert (all(bbsss.at(rl).at(c).at(ml).lower() <= bbsssi.at(rl).at(c).at(ml).upper()));
+ // Check strides
+ const int str = ipow(reffact, maxreflevels-rl-1) * ipow(mgfact, ml);
+ assert (all(bbsss.at(rl).at(c).at(ml).stride() == str));
+ // Check alignments
+ assert (all(bbsss.at(rl).at(c).at(ml).lower() % str == 0));
+ assert (all(bbsss.at(rl).at(c).at(ml).upper() % str == 0));
+ }
+ }
+ }
+
+ assert (pss.size() == bbsss.size());
+ assert (obss.size() == bbsss.size());
+ for (int rl=0; rl<(int)bbsss.size(); ++rl) {
+ assert (obss.at(rl).size() == bbsss.at(rl).size());
+ assert (pss.at(rl).size() == bbsss.at(rl).size());
+ }
+
+ }
+
+
+
+ bool Regrid (const cGH* cgh, const bool force_recompose, const bool do_init)
+ {
+ assert (is_level_mode());
+
+ if (! CCTK_IsFunctionAliased ("Carpet_Regrid")) {
+ static bool didtell = false;
+ if (!didtell) {
+ CCTK_WARN (1, "No regridding routine has been provided. There will be no regridding. Maybe you forgot to activate a regridding thorn?");
+ didtell = true;
+ }
+ return false;
+ }
+
+ bool did_change = false;
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+
+ gh<dim>::rexts bbsss = vhh.at(map)->extents;
+ gh<dim>::rbnds obss = vhh.at(map)->outer_boundaries;
+ gh<dim>::rprocs pss = vhh.at(map)->processors;
+
+ // Check whether to recompose
+ CCTK_INT const do_recompose
+ = Carpet_Regrid (cgh, &bbsss, &obss, &pss, force_recompose);
+ assert (do_recompose >= 0);
+ did_change = did_change || do_recompose;
+
+ if (do_recompose) {
+
+ CCTK_INFO ("Recomposing the grid hierarchy");
+
+ // Check the regions
+ CheckRegions (bbsss, obss, pss);
+ // TODO: check also that the current and all coarser levels
+ // did not change
+
+ // Write grid structure to file
+ OutputGridStructure (cgh, map, bbsss, obss, pss);
+
+ // Recompose
+ vhh.at(map)->recompose (bbsss, obss, pss, do_init);
+
+ OutputGrids (cgh, map, *vhh.at(map));
+
+ }
+
+ } END_MAP_LOOP;
+
+ // Calculate new number of levels
+ reflevels = vhh.at(0)->reflevels();
+ for (int m=0; m<maps; ++m) {
+ assert (vhh.at(m)->reflevels() == reflevels);
+ }
+
+ // One cannot switch off the current level
+ assert (reflevels > reflevel);
+
+ return did_change;
+ }
+
+
+
+ void OutputGrids (const cGH* cgh, const int m, const gh<dim>& hh)
+ {
+ CCTK_INFO ("New grid structure (grid points):");
+ cout << " Refinement level " << reflevel << ", map " << map << endl;
+ for (int rl=0; rl<hh.reflevels(); ++rl) {
+ for (int c=0; c<hh.components(rl); ++c) {
+ for (int ml=0; ml<hh.mglevels(rl,c); ++ml) {
+ const int convfact = ipow(mgfact, ml);
+ const int levfact = ipow(reffact, rl);
+ const ivect lower = hh.extents.at(rl).at(c).at(ml).lower();
+ const ivect upper = hh.extents.at(rl).at(c).at(ml).upper();
+ assert (all(lower * levfact % maxreflevelfact == 0));
+ assert (all(upper * levfact % maxreflevelfact == 0));
+ assert (all(((upper - lower) * levfact / maxreflevelfact)
+ % convfact == 0));
+ cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]"
+ << " exterior: "
+ << "proc "
+ << hh.processors.at(rl).at(c)
+ << " "
+ << lower * levfact / maxreflevelfact
+ << " : "
+ << upper * levfact / maxreflevelfact
+ << " ("
+ << (upper - lower) * levfact / maxreflevelfact / convfact + 1
+ << ")"
+ << endl;
+ }
+ }
+ }
+
+ CCTK_INFO ("New grid structure (coordinates):");
+ for (int rl=0; rl<hh.reflevels(); ++rl) {
+ for (int c=0; c<hh.components(rl); ++c) {
+ for (int ml=0; ml<hh.mglevels(rl,c); ++ml) {
+ const rvect origin = origin_space.at(0);
+ const rvect delta = delta_space;
+ const ivect lower = hh.extents.at(rl).at(c).at(ml).lower();
+ const ivect upper = hh.extents.at(rl).at(c).at(ml).upper();
+ const int convfact = ipow(mgfact, ml);
+ const int levfact = ipow(reffact, rl);
+ cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]"
+ << " exterior: "
+ << origin + delta * lower / maxreflevelfact
+ << " : "
+ << origin + delta * upper / maxreflevelfact
+ << " : "
+ << delta * convfact / levfact << endl;
+ }
+ }
+ }
+ }
+
+
+
+ void OutputGridStructure (const cGH * const cgh,
+ const int m,
+ const gh<dim>::rexts & bbsss,
+ const gh<dim>::rbnds & obss,
+ const gh<dim>::rprocs& pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ // Output only on the root processor
+ if (CCTK_MyProc(cgh) != 0) return;
+
+ // Output only if output is desired
+ if (strcmp(grid_structure_filename, "") == 0) return;
+
+ // Get grid hierarchy extention from IOUtil
+ const ioGH * const iogh = (const ioGH *)CCTK_GHExtension (cgh, "IO");
+
+ // Output only if IO exists and has been initialised
+ if (! iogh) return;
+
+ assert (iogh);
+
+ // Create the output directory
+ CCTK_CreateDirectory (0755, out_dir);
+
+ ostringstream filenamebuf;
+ filenamebuf << out_dir << "/" << grid_structure_filename;
+ // we need a persistent temporary here
+ string filenamestr = filenamebuf.str();
+ const char * filename = filenamestr.c_str();
+
+ ofstream file;
+
+ static bool do_truncate = true;
+
+ if (do_truncate) {
+ do_truncate = false;
+ struct stat fileinfo;
+ if (! iogh->recovered
+ || stat(filename, &fileinfo)!=0) {
+ file.open (filename, ios::out | ios::trunc);
+ assert (file.good());
+ file << "# grid structure" << endl
+ << "# format: map reflevel component mglevel processor bounding-box is-outer-boundary" << endl;
+ assert (file.good());
+ }
+ }
+ if (! file.is_open()) {
+ file.open (filename, ios::app);
+ assert (file.good());
+ }
+
+ file << "iteration " << cgh->cctk_iteration << endl;
+ file << "maps " << maps << endl;
+ file << m << " reflevels " << bbsss.size() << endl;
+ for (int rl=0; rl<(int)bbsss.size(); ++rl) {
+ file << m << " " << rl << " components " << bbsss.at(rl).size() << endl;
+ for (int c=0; c<(int)bbsss.at(rl).size(); ++c) {
+ file << m << " " << rl << " " << c << " mglevels " << bbsss.at(rl).at(c).size() << endl;
+ for (int ml=0; ml<(int)bbsss.at(rl).at(c).size(); ++ml) {
+ file << m << " " << rl << " " << c << " " << ml << " " << pss.at(rl).at(c) << " " << bbsss.at(rl).at(c).at(ml) << obss.at(rl).at(c) << endl;
+ }
+ }
+ }
+ file << endl;
+
+ file.close();
+ assert (file.good());
+ }
+
+
+
+ // TODO: this routine should go into CarpetRegrid (except maybe
+ // SplitRegions_AlongZ for grid arrays)
+ void SplitRegions (const cGH* cgh, vector<ibbox>& bbs, vector<bbvect>& obs,
+ vector<int>& ps)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (CCTK_EQUALS (processor_topology, "along-z")) {
+ SplitRegions_AlongZ (cgh, bbs, obs, ps);
+ } else if (CCTK_EQUALS (processor_topology, "along-dir")) {
+ SplitRegions_AlongDir (cgh, bbs, obs, ps, split_direction);
+ } else if (CCTK_EQUALS (processor_topology, "automatic")) {
+ SplitRegions_Automatic (cgh, bbs, obs, ps);
+ } else if (CCTK_EQUALS (processor_topology, "manual")) {
+ SplitRegions_AsSpecified (cgh, bbs, obs, ps);
+ } else {
+ assert (0);
+ }
+ }
+
+
+
+ void SplitRegions_AlongZ (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps)
+ {
+ SplitRegions_AlongDir (cgh, bbs, obs, ps, 2);
+ }
+
+
+
+ void SplitRegions_AlongDir (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps,
+ const int dir)
+ {
+ // Something to do?
+ if (bbs.size() == 0) {
+ ps.resize(0);
+ return;
+ }
+
+ const int nprocs = CCTK_nProcs(cgh);
+
+ if (nprocs==1) {
+ ps.resize(1);
+ ps.at(0) = 0;
+ return;
+ }
+
+ assert (bbs.size() == 1);
+
+ assert (dir>=0 && dir<dim);
+
+ const ivect rstr = bbs.at(0).stride();
+ const ivect rlb = bbs.at(0).lower();
+ const ivect rub = bbs.at(0).upper() + rstr;
+ const bbvect obnd = obs.at(0);
+
+ bbs.resize(nprocs);
+ obs.resize(nprocs);
+ ps.resize(nprocs);
+ for (int c=0; c<nprocs; ++c) {
+ ivect cstr = rstr;
+ ivect clb = rlb;
+ ivect cub = rub;
+ const int glonpz = (rub[dir] - rlb[dir]) / cstr[dir];
+ const int locnpz = (glonpz + nprocs - 1) / nprocs;
+ const int zstep = locnpz * cstr[dir];
+ clb[dir] = rlb[dir] + zstep * c;
+ cub[dir] = rlb[dir] + zstep * (c+1);
+ if (clb[dir] > rub[dir]) clb[dir] = rub[dir];
+ if (cub[dir] > rub[dir]) cub[dir] = rub[dir];
+ assert (clb[dir] <= cub[dir]);
+ assert (cub[dir] <= rub[dir]);
+ bbs.at(c) = ibbox(clb, cub-cstr, cstr);
+ obs.at(c) = obnd;
+ ps.at(c) = c;
+ if (c>0) obs.at(c)[dir][0] = false;
+ if (c<nprocs-1) obs.at(c)[dir][1] = false;
+ }
+
+ for (int n=0; n<(int)ps.size(); ++n) {
+ assert (ps.at(n) == n);
+ }
+ }
+
+
+
+ static void SplitRegions_Automatic_Recursively (bvect const & dims,
+ int const nprocs,
+ rvect const rshape,
+ ibbox const & bb,
+ bbvect const & ob,
+ int const & p,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs,
+ vector<int> & ps)
+ {
+ if (DEBUG) cout << "SRAR enter" << endl;
+ // check preconditions
+ assert (nprocs >= 1);
+
+ // are we done?
+ if (all(dims)) {
+ if (DEBUG) cout << "SRAR bottom" << endl;
+
+ // check precondition
+ assert (nprocs == 1);
+
+ // return arguments
+ bbs.assign (1, bb);
+ obs.assign (1, ob);
+ ps.assign (1, p);
+
+ // return
+ if (DEBUG) cout << "SRAR exit" << endl;
+ return;
+ }
+
+ // choose a direction
+ int mydim = -1;
+ CCTK_REAL mysize = 0;
+ int alldims = 0;
+ CCTK_REAL allsizes = 1;
+ for (int d=0; d<dim; ++d) {
+ if (! dims[d]) {
+ ++ alldims;
+ allsizes *= rshape[d];
+ if (rshape[d] >= mysize) {
+ mydim = d;
+ mysize = rshape[d];
+ }
+ }
+ }
+ assert (mydim>=0 && mydim<dim);
+ assert (mysize>=0);
+ if (DEBUG) cout << "SRAR mydim " << mydim << endl;
+ if (DEBUG) cout << "SRAR mysize " << mysize << endl;
+
+ if (mysize == 0) {
+ // the bbox is empty
+ if (DEBUG) cout << "SRAR empty" << endl;
+
+ // create the bboxes
+ bbs.clear();
+ obs.clear();
+ ps.clear();
+ bbs.reserve(nprocs);
+ obs.reserve(nprocs);
+ ps.reserve(nprocs);
+
+ // create a new bbox
+ assert (bb.empty());
+ bbvect const newob (false);
+ ibbox const newbb (bb);
+ int const newp (p);
+ if (DEBUG) cout << "SRAR " << mydim << " newbb " << newbb << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " newob " << newob << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " newp " << newp << endl;
+
+ // store
+ bbs.insert (bbs.end(), nprocs, newbb);
+ obs.insert (obs.end(), nprocs, newob);
+ for (int pp=0; pp<nprocs; ++pp) ps.insert (ps.end(), 1, newp+pp);
+
+ // check postconditions
+ assert ((int)bbs.size() == nprocs);
+ assert ((int)obs.size() == nprocs);
+ assert ((int)ps.size() == nprocs);
+ if (DEBUG) cout << "SRAR exit" << endl;
+ return;
+ }
+
+ // mark this direction as done
+ assert (! dims[mydim]);
+ bvect const newdims = dims.replace(mydim, true);
+
+ // choose a number of slices for this direction
+ int const nslices
+ = min(nprocs,
+ (int)floor(mysize * pow(nprocs/allsizes, 1.0/alldims) + 0.5));
+ assert (nslices <= nprocs);
+ if (DEBUG) cout << "SRAR " << mydim << " nprocs " << nprocs << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " nslices " << nslices << endl;
+
+ // split the remaining processors
+ vector<int> mynprocs(nslices);
+ int const mynprocs_base = nprocs / nslices;
+ int const mynprocs_left = nprocs - nslices * mynprocs_base;
+ for (int n=0; n<nslices; ++n) {
+ mynprocs.at(n) = n < mynprocs_left ? mynprocs_base+1 : mynprocs_base;
+ }
+ int sum_mynprocs = 0;
+ for (int n=0; n<nslices; ++n) {
+ sum_mynprocs += mynprocs.at(n);
+ }
+ assert (sum_mynprocs == nprocs);
+ if (DEBUG) cout << "SRAR " << mydim << " mynprocs " << mynprocs << endl;
+
+ // split the region
+ vector<int> myslice(nslices);
+ int slice_left = ((bb.upper() - bb.lower()) / bb.stride())[mydim] + 1;
+ int nprocs_left = nprocs;
+ for (int n=0; n<nslices; ++n) {
+ if (n == nslices-1) {
+ myslice.at(n) = slice_left;
+ } else {
+ myslice.at(n) = (int)floor(1.0 * slice_left * mynprocs.at(n) / nprocs_left + 0.5);
+ }
+ assert (myslice.at(n) >= 0);
+ slice_left -= myslice.at(n);
+ nprocs_left -= mynprocs.at(n);
+ }
+ assert (slice_left == 0);
+ assert (nprocs_left == 0);
+ if (DEBUG) cout << "SRAR " << mydim << " myslice " << myslice << endl;
+
+ // create the bboxes and recurse
+ if (DEBUG) cout << "SRAR " << mydim << ": create bboxes" << endl;
+ bbs.clear();
+ obs.clear();
+ ps.clear();
+ bbs.reserve(nprocs);
+ obs.reserve(nprocs);
+ ps.reserve(nprocs);
+ ivect last_up;
+ for (int n=0; n<nslices; ++n) {
+ if (DEBUG) cout << "SRAR " << mydim << " n " << n << endl;
+
+ // create a new bbox
+ ivect lo = bb.lower();
+ ivect up = bb.upper();
+ ivect str = bb.stride();
+ bbvect newob = ob;
+ if (n > 0) {
+ lo[mydim] = last_up[mydim] + str[mydim];
+ newob[mydim][0] = false;
+ }
+ if (n < nslices-1) {
+ up[mydim] = lo[mydim] + (myslice.at(n)-1) * str[mydim];
+ newob[mydim][1] = false;
+ last_up = up;
+ }
+ ibbox newbb(lo, up, str);
+ int newp(p + n * mynprocs_base + (n < mynprocs_left ? n : mynprocs_left));
+ if (DEBUG) cout << "SRAR " << mydim << " newbb " << newbb << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " newob " << newob << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " newp " << newp << endl;
+
+ // recurse
+ vector<ibbox> newbbs;
+ vector<bbvect> newobs;
+ vector<int> newps;
+ SplitRegions_Automatic_Recursively
+ (newdims, mynprocs.at(n), rshape,
+ newbb, newob, newp, newbbs, newobs, newps);
+ if (DEBUG) cout << "SRAR " << mydim << " newbbs " << newbbs << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " newobs " << newobs << endl;
+ if (DEBUG) cout << "SRAR " << mydim << " newps " << newps << endl;
+
+ // store
+ assert ((int)newbbs.size() == mynprocs.at(n));
+ assert ((int)newobs.size() == mynprocs.at(n));
+ assert ((int)newps.size() == mynprocs.at(n));
+ bbs.insert (bbs.end(), newbbs.begin(), newbbs.end());
+ obs.insert (obs.end(), newobs.begin(), newobs.end());
+ ps.insert (ps.end(), newps.begin(), newps.end());
+ }
+
+ // check postconditions
+ assert ((int)bbs.size() == nprocs);
+ assert ((int)obs.size() == nprocs);
+ assert ((int)ps.size() == nprocs);
+ for (int n=0; n<(int)ps.size(); ++n) {
+ assert ((int)ps.at(n) == p+n);
+ }
+ if (DEBUG) cout << "SRAR exit" << endl;
+ }
+
+
+
+ void SplitRegions_Automatic (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps)
+ {
+ if (DEBUG) cout << "SRA enter" << endl;
+ // Something to do?
+ if (bbs.size() == 0) {
+ ps.resize(0);
+ return;
+ }
+
+ const int nprocs = CCTK_nProcs(cgh);
+ if (DEBUG) cout << "SRA nprocs " << nprocs << endl;
+
+ // nslices: number of disjoint bboxes
+ int const nslices = bbs.size();
+ if (DEBUG) cout << "SRA nslices " << nslices << endl;
+ // ncomps: number of components per processor
+ int const ncomps = (nslices + nprocs - 1) / nprocs;
+ if (DEBUG) cout << "SRA ncomps " << ncomps << endl;
+ assert (ncomps > 0);
+ vector<int> mysize(nslices);
+ for (int c=0; c<nslices; ++c) {
+ mysize.at(c) = bbs.at(c).size();
+ }
+ vector<int> mynprocs(nslices);
+ {
+ if (DEBUG) cout << "SRA: distributing processors to slices" << endl;
+ int ncomps_left = nprocs * ncomps;
+ for (int c=0; c<nslices; ++c) {
+ mynprocs.at(c) = 1;
+ -- ncomps_left;
+ }
+ while (ncomps_left > 0) {
+ if (DEBUG) cout << "SRA ncomps_left " << ncomps_left << endl;
+ int maxc = -1;
+ CCTK_REAL maxratio = -1;
+ for (int c=0; c<nslices; ++c) {
+ CCTK_REAL const ratio = (CCTK_REAL)mysize.at(c) / mynprocs.at(c);
+ if (ratio > maxratio) { maxc=c; maxratio=ratio; }
+ }
+ assert (maxc>=0 && maxc<nslices);
+ ++ mynprocs.at(maxc);
+ if (DEBUG) cout << "SRA maxc " << maxc << endl;
+ if (DEBUG) cout << "SRA mynprocs[maxc] " << mynprocs.at(maxc) << endl;
+ -- ncomps_left;
+ }
+ assert (ncomps_left == 0);
+ int sum_nprocs = 0;
+ for (int c=0; c<nslices; ++c) {
+ sum_nprocs += mynprocs.at(c);
+ }
+ assert (sum_nprocs == nprocs * ncomps);
+ }
+ if (DEBUG) cout << "SRA mynprocs " << mynprocs << endl;
+
+ vector<ibbox> allbbs;
+ vector<bbvect> allobs;
+ vector<int> allps;
+
+ if (DEBUG) cout << "SRA: splitting regions" << endl;
+ for (int c=0, p=0; c<nslices; p+=mynprocs.at(c), ++c) {
+
+ const ibbox bb = bbs.at(c);
+ const bbvect ob = obs.at(c);
+ if (DEBUG) cout << "SRA c " << c << endl;
+ if (DEBUG) cout << "SRA p " << p << endl;
+ if (DEBUG) cout << "SRA bb " << bb << endl;
+ if (DEBUG) cout << "SRA ob " << ob << endl;
+
+ const ivect rstr = bb.stride();
+ const ivect rlb = bb.lower();
+ const ivect rub = bb.upper() + rstr;
+
+ // calculate real shape factors
+ rvect rshape;
+ if (any(rub == rlb)) {
+ // the bbox is empty
+ rshape = 0.0;
+ } else {
+ for (int d=0; d<dim; ++d) {
+ rshape[d] = (CCTK_REAL)(rub[d]-rlb[d]) / (rub[0]-rlb[0]);
+ }
+ const CCTK_REAL rfact = pow(nprocs / prod(rshape), 1.0/dim);
+ rshape *= rfact;
+ assert (abs(prod(rshape) - nprocs) < 1e-6);
+ }
+ if (DEBUG) cout << "SRA shapes " << rshape << endl;
+
+ bvect const dims = false;
+
+ vector<ibbox> thebbs;
+ vector<bbvect> theobs;
+ vector<int> theps;
+
+ SplitRegions_Automatic_Recursively
+ (dims, mynprocs.at(c), rshape, bb, ob, p, thebbs, theobs, theps);
+ if (DEBUG) cout << "SRA thebbs " << thebbs << endl;
+ if (DEBUG) cout << "SRA theobs " << theobs << endl;
+ if (DEBUG) cout << "SRA theps " << theps << endl;
+
+ allbbs.insert(allbbs.end(), thebbs.begin(), thebbs.end());
+ allobs.insert(allobs.end(), theobs.begin(), theobs.end());
+ allps.insert(allps.end(), theps.begin(), theps.end());
+
+ } // for c
+
+ bbs = allbbs;
+ obs = allobs;
+ ps = allps;
+ for (int n=0; n<(int)ps.size(); ++n) {
+ ps.at(n) /= ncomps;
+ assert (ps.at(n) >= 0 && ps.at(n) < nprocs);
+ }
+
+ if (DEBUG) cout << "SRA exit" << endl;
+ }
+
+
+
+ static void SplitRegions_AsSpecified (const cGH* cgh,
+ vector<ibbox>& bbs,
+ vector<bbvect>& obs,
+ vector<int>& ps)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ // Something to do?
+ if (bbs.size() == 0) {
+ ps.resize(0);
+ return;
+ }
+
+ const int nprocs = CCTK_nProcs(cgh);
+
+ assert (bbs.size() == 1);
+
+ const ivect rstr = bbs.at(0).stride();
+ const ivect rlb = bbs.at(0).lower();
+ const ivect rub = bbs.at(0).upper() + rstr;
+ const bbvect obnd = obs.at(0);
+
+ const ivect nprocs_dir
+ (processor_topology_3d_x, processor_topology_3d_y,
+ processor_topology_3d_z);
+ assert (all (nprocs_dir > 0));
+ if (prod(nprocs_dir) != nprocs) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The specified processor topology [%d,%d,%d] requires %d processors, but there are %d processors", nprocs_dir[0], nprocs_dir[1], nprocs_dir[2], prod(nprocs_dir), nprocs);
+ }
+ assert (prod(nprocs_dir) == nprocs);
+
+ bbs.resize(nprocs);
+ obs.resize(nprocs);
+ ps.resize(nprocs);
+ const ivect cstr = rstr;
+ const ivect glonp = (rub - rlb) / cstr;
+// const ivect locnp = (glonp + nprocs_dir - 1) / nprocs_dir;
+ const ivect locnp = glonp / nprocs_dir;
+ const ivect rem = glonp % nprocs_dir;
+ const ivect step = locnp * cstr;
+ assert (dim==3);
+ for (int k=0; k<nprocs_dir[2]; ++k) {
+ for (int j=0; j<nprocs_dir[1]; ++j) {
+ for (int i=0; i<nprocs_dir[0]; ++i) {
+ const int c = i + nprocs_dir[0] * (j + nprocs_dir[1] * k);
+ const ivect ipos (i, j, k);
+ ivect clb = rlb + step * ipos;
+ ivect cub = rlb + step * (ipos+1);
+// clb = min (clb, rub);
+// cub = min (cub, rub);
+ for (int d=0; d<dim; ++d) {
+ if (ipos[d]<rem[d]) {
+ clb[d] += cstr[d] * ipos[d];
+ cub[d] += cstr[d] * (ipos[d]+1);
+ } else {
+ clb[d] += cstr[d] * rem[d];
+ cub[d] += cstr[d] * rem[d];
+ }
+ }
+ assert (all (clb >= 0));
+ assert (all (clb <= cub));
+ assert (all (cub <= rub));
+ assert (all (! (ipos==0) || clb==rlb));
+ assert (all (! (ipos==nprocs_dir-1) || cub==rub));
+ bbs.at(c) = ibbox(clb, cub-cstr, cstr);
+ obs.at(c) = obnd;
+ ps.at(c) = c;
+ if (i>0) obs.at(c)[0][0] = false;
+ if (j>0) obs.at(c)[1][0] = false;
+ if (k>0) obs.at(c)[2][0] = false;
+ if (i<nprocs_dir[0]-1) obs.at(c)[0][1] = false;
+ if (j<nprocs_dir[1]-1) obs.at(c)[1][1] = false;
+ if (k<nprocs_dir[2]-1) obs.at(c)[2][1] = false;
+ }
+ }
+ }
+
+ for (int n=0; n<(int)ps.size(); ++n) {
+ assert (ps.at(n) == n);
+ }
+ }
+
+
+
+ static void MakeMultigridBoxes (const cGH* cgh,
+ ibbox const & base,
+ ibbox const & bb,
+ bbvect const & ob,
+ vector<ibbox>& bbs)
+ {
+ bbs.resize (mglevels);
+ bbs.at(0) = bb;
+ // boundary offsets
+ jjvect nboundaryzones, is_internal, is_staggered, shiftout;
+ const int ierr = GetBoundarySpecification
+ (2*dim, &nboundaryzones[0][0], &is_internal[0][0],
+ &is_staggered[0][0], &shiftout[0][0]);
+ assert (!ierr);
+ // (distance in grid points between the exterior and the physical boundary)
+ iivect offset;
+ for (int d=0; d<dim; ++d) {
+ for (int f=0; f<2; ++f) {
+ assert (! is_staggered[d][f]);
+ offset[d][f] = (+ (is_internal[d][f] ? 0 : nboundaryzones[d][f] - 1)
+ + shiftout[d][f]);
+ }
+ }
+ vector<ibbox> bases(mglevels);
+ bases.at(0) = base;
+ for (int ml=1; ml<mglevels; ++ml) {
+ // next finer base
+ ivect const fbaselo = bases.at(ml-1).lower();
+ ivect const fbasehi = bases.at(ml-1).upper();
+ ivect const fbasestr = bases.at(ml-1).stride();
+ // this base
+ ivect const basestr = fbasestr * mgfact;
+ ivect const baselo = fbaselo + (xpose(offset)[0] - ivect(mgfact) * xpose(offset)[0]) * fbasestr;
+ ivect const basehi = fbasehi + (xpose(offset)[1] - ivect(mgfact) * xpose(offset)[1]) * fbasestr;
+ ivect const baselo1 = baselo;
+ ivect const basehi1 = baselo1 + (basehi - baselo1) / basestr * basestr;
+ bases.at(ml) = ibbox(baselo1, basehi1, basestr);
+ // next finer grid
+ ivect const flo = bbs.at(ml-1).lower();
+ ivect const fhi = bbs.at(ml-1).upper();
+ ivect const fstr = bbs.at(ml-1).stride();
+ // this grid
+ ivect const str = fstr * mgfact;
+ ivect const lo = flo + xpose(ob)[0].ifthen ( (xpose(offset)[0] - ivect(mgfact) * xpose(offset)[0]) * fstr, ivect(0));
+ ivect const hi = fhi + xpose(ob)[1].ifthen (- (xpose(offset)[1] - ivect(mgfact) * xpose(offset)[1]) * fstr, ivect(0));
+ ivect const lo1 = baselo1 + (lo - baselo1 + str - 1) / str * str;
+ ivect const hi1 = lo1 + (hi - lo1) / str * str;
+ bbs.at(ml) = ibbox(lo1, hi1, str);
+ }
+ }
+
+ void MakeMultigridBoxes (const cGH* cgh,
+ vector<ibbox> const & bbs,
+ vector<bbvect> const & obs,
+ vector<vector<ibbox> >& bbss)
+ {
+ assert (bbs.size() == obs.size());
+ ibbox base;
+ for (int c=0; c<(int)bbs.size(); ++c) {
+ base = base.expanded_containing(bbs.at(c));
+ }
+ bbss.resize(bbs.size());
+ for (int c=0; c<(int)bbs.size(); ++c) {
+ MakeMultigridBoxes (cgh, base, bbs.at(c), obs.at(c), bbss.at(c));
+ }
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Restrict.cc b/Carpet/Carpet/src/Restrict.cc
new file mode 100644
index 000000000..c44540dba
--- /dev/null
+++ b/Carpet/Carpet/src/Restrict.cc
@@ -0,0 +1,106 @@
+#include <assert.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "ggf.hh"
+#include "gh.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Restrict.cc,v 1.27 2004/05/21 18:16:23 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Restrict_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ void Restrict (const cGH* cgh)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (is_level_mode());
+
+ if (suppress_restriction) {
+ Checkpoint ("Restriction suppressed");
+ return;
+ }
+
+ Checkpoint ("Restrict");
+
+ // Restrict
+ if (reflevel < reflevels-1) {
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+
+ const int tl = 0;
+
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ assert (m<(int)arrdata.at(group).size());
+
+ // use background time here (which may not be modified
+ // by the user)
+ const CCTK_REAL time = vtt.at(m)->time (tl, reflevel, mglevel);
+
+ const CCTK_REAL time1 = vtt.at(m)->time (0, reflevel, mglevel);
+ const CCTK_REAL time2
+ = (cgh->cctk_time - cctk_initial_time) / delta_time;
+ assert (fabs(time1 - time2) / (fabs(time1) + fabs(time2) + fabs(cgh->cctk_delta_time)) < 1e-12);
+
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ assert (var<(int)arrdata.at(group).at(m).data.size());
+ for (int c=0; c<vhh.at(m)->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(var)->ref_restrict
+ (state, tl, reflevel, c, mglevel, time);
+ }
+ }
+ }
+
+ } // if group has storage
+ } // if grouptype == CCTK_GF
+ } // loop over groups
+ } // for state
+ } // if not finest refinement level
+
+
+
+ // Sync
+ if (reflevel < reflevels-1) {
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+
+ const int tl = 0;
+
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ assert (m<(int)arrdata.at(group).size());
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ assert (var<(int)arrdata.at(group).at(m).data.size());
+ for (int c=0; c<vhh.at(m)->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(var)->sync
+ (state, tl, reflevel, c, mglevel);
+ }
+ }
+ }
+
+ } // if group has storage
+ } // if grouptype == CCTK_GF
+ } // loop over groups
+ } // for state
+ } // if not finest refinement level
+
+ }
+
+} // namespace Carpet
+
diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc
new file mode 100644
index 000000000..d19ab3dc3
--- /dev/null
+++ b/Carpet/Carpet/src/SetupGH.cc
@@ -0,0 +1,960 @@
+#include <assert.h>
+#include <limits.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <iostream>
+#include <sstream>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "util_ErrorCodes.h"
+#include "util_Table.h"
+
+#include "bbox.hh"
+#include "defs.hh"
+#include "dist.hh"
+#include "ggf.hh"
+#include "gh.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.85 2004/08/07 20:07:27 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_SetupGH_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ static bool CanTransferVariableType (const cGH * const cgh, const int group)
+ {
+ // Find out which types correspond to the default types
+#if CCTK_INTEGER_PRECISION_1
+# define CCTK_DEFAULT_INTEGER_TYPE CCTK_VARIABLE_INT1
+#elif CCTK_INTEGER_PRECISION_2
+# define CCTK_DEFAULT_INTEGER_TYPE CCTK_VARIABLE_INT2
+#elif CCTK_INTEGER_PRECISION_4
+# define CCTK_DEFAULT_INTEGER_TYPE CCTK_VARIABLE_INT4
+#elif CCTK_INTEGER_PRECISION_8
+# define CCTK_DEFAULT_INTEGER_TYPE CCTK_VARIABLE_INT8
+#else
+# error "Unsupported default integer type"
+#endif
+
+#if CCTK_REAL_PRECISION_4
+# define CCTK_DEFAULT_REAL_TYPE CCTK_VARIABLE_REAL4
+# define CCTK_DEFAULT_COMPLEX_TYPE CCTK_VARIABLE_COMPLEX8
+#elif CCTK_REAL_PRECISION_8
+# define CCTK_DEFAULT_REAL_TYPE CCTK_VARIABLE_REAL8
+# define CCTK_DEFAULT_COMPLEX_TYPE CCTK_VARIABLE_COMPLEX16
+#elif CCTK_REAL_PRECISION_16
+# define CCTK_DEFAULT_REAL_TYPE CCTK_VARIABLE_REAL16
+# define CCTK_DEFAULT_COMPLEX_TYPE CCTK_VARIABLE_COMPLEX32
+#else
+# error "Unsupported default real type"
+#endif
+
+ if (CCTK_NumVarsInGroupI(group) == 0) return true;
+
+ const int var0 = CCTK_FirstVarIndexI(group);
+ const int type0 = CCTK_VarTypeI(var0);
+ int type1;
+ switch (type0) {
+ case CCTK_VARIABLE_INT:
+ type1 = CCTK_DEFAULT_INTEGER_TYPE;
+ break;
+ case CCTK_VARIABLE_REAL:
+ type1 = CCTK_DEFAULT_REAL_TYPE;
+ break;
+ case CCTK_VARIABLE_COMPLEX:
+ type1 = CCTK_DEFAULT_COMPLEX_TYPE;
+ break;
+ default:
+ type1 = type0;
+ }
+ switch (type1) {
+
+#ifdef CCTK_REAL8
+ case CCTK_VARIABLE_REAL8:
+ // This type is supported.
+ return true;
+#endif
+
+#ifdef CCTK_REAL4
+ case CCTK_VARIABLE_REAL4:
+#endif
+#ifdef CCTK_REAL16
+ case CCTK_VARIABLE_REAL16:
+#endif
+#ifdef CCTK_REAL4 /* CCTK_COMPLEX8 */
+ case CCTK_VARIABLE_COMPLEX8:
+#endif
+#ifdef CCTK_REAL8 /* CCTK_COMPLEX16 */
+ case CCTK_VARIABLE_COMPLEX16:
+#endif
+#ifdef CCTK_REAL16 /* CCTK_COMPLEX32 */
+ case CCTK_VARIABLE_COMPLEX32:
+#endif
+ // This type is not supported, but could be.
+ return false;
+
+ case CCTK_VARIABLE_BYTE:
+#ifdef CCTK_INT1
+ case CCTK_VARIABLE_INT1:
+#endif
+#ifdef CCTK_INT2
+ case CCTK_VARIABLE_INT2:
+#endif
+#ifdef CCTK_INT4
+ case CCTK_VARIABLE_INT4:
+#endif
+#ifdef CCTK_INT8
+ case CCTK_VARIABLE_INT8:
+#endif
+ // This type is not supported, and cannot be.
+ return false;
+
+ default:
+ {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Internal error: encountered variable type %d (%s) for group %d (%s)",
+ type1, CCTK_VarTypeName(type1),
+ group, CCTK_GroupName(group));
+ }
+ }
+
+ // not reached
+ return false;
+ }
+
+
+
+ static operator_type GetTransportOperator (const cGH * const cgh,
+ const int group)
+ {
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ int ierr;
+
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+ // Ignore everything but true grid functions
+ return op_error;
+ }
+
+ const bool can_transfer = CanTransferVariableType (cgh, group);
+
+ cGroup gp;
+ ierr = CCTK_GroupData (group, &gp);
+ assert (!ierr);
+
+ // Get prolongation method
+ char prolong_string[1000];
+ bool have_prolong_string = false;
+ {
+ const int prolong_length = Util_TableGetString
+ (gp.tagstable, sizeof prolong_string, prolong_string, "Prolongation");
+ if (prolong_length >= 0) {
+ have_prolong_string = true;
+ } else if (prolong_length == UTIL_ERROR_TABLE_NO_SUCH_KEY) {
+ // do nothing
+ } else {
+ assert (0);
+ }
+ }
+
+ // Get prolongation parameter name
+ char prolong_param_string[1000];
+ bool have_prolong_param_string = false;
+ {
+ const int prolong_param_length = Util_TableGetString
+ (gp.tagstable, sizeof prolong_param_string, prolong_param_string,
+ "ProlongationParameter");
+ if (prolong_param_length >= 0) {
+ have_prolong_param_string = true;
+ } else if (prolong_param_length == UTIL_ERROR_TABLE_NO_SUCH_KEY) {
+ // do nothing
+ } else {
+ assert (0);
+ }
+ }
+
+ // Complain if both are given
+ if (have_prolong_string && have_prolong_param_string) {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has both the tags \"Prolongation\" and \"ProlongationParameter\". This is not possible.",
+ groupname);
+ free (groupname);
+ }
+
+ // Map the parameter name
+ if (have_prolong_param_string) {
+ char * thorn;
+ char * name;
+ ierr = CCTK_DecomposeName (prolong_param_string, &thorn, &name);
+ if (ierr < 0) {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the \"ProlongationParameter\" tag \"%s\". This is not a valid parameter name.",
+ groupname, prolong_param_string);
+ free (groupname);
+ }
+ int type;
+ char const * const * const value
+ = (static_cast<char const * const *>
+ (CCTK_ParameterGet (name, thorn, &type)));
+ if (! value || ! *value) {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the \"ProlongationParameter\" tag \"%s\". This parameter does not exist.",
+ groupname, prolong_param_string);
+ free (groupname);
+ }
+ if (type != PARAMETER_KEYWORD && type != PARAMETER_STRING) {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the \"ProlongationParameter\" tag \"%s\". This parameter has the wrong type; it must be either KEYWORD or STRING.",
+ groupname, prolong_param_string);
+ free (groupname);
+ }
+ free (thorn);
+ free (name);
+ assert (strlen(*value) < sizeof prolong_string);
+ strcpy (prolong_string, *value);
+ have_prolong_string = true;
+ }
+
+ // Select a default, if necessary
+ if (! have_prolong_string) {
+ if (can_transfer) {
+ // Use the default
+ if (gp.numtimelevels == 1) {
+ // Only one time level: do not prolongate
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has only one time level; therefore it will not be prolongated or restricted.",
+ groupname);
+ free (groupname);
+ return op_none;
+ } else {
+ // Several time levels: use the default
+ return op_Lagrange;
+ }
+ } else {
+ if (gp.grouptype == CCTK_GF) {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the variable type \"%s\" which cannot be prolongated or restricted.",
+ groupname, CCTK_VarTypeName(gp.vartype));
+ free (groupname);
+ return op_none;
+ } else {
+ return op_error;
+ }
+ }
+ }
+
+ // Select the prolongation method
+ assert (have_prolong_string);
+ if (CCTK_Equals(prolong_string, "none")) {
+ return op_none;
+ } else if (CCTK_Equals(prolong_string, "Lagrange")) {
+ return op_Lagrange;
+ } else if (CCTK_Equals(prolong_string, "TVD")) {
+ return op_TVD;
+ } else if (CCTK_Equals(prolong_string, "ENO")) {
+ return op_ENO;
+ } else {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the unknown prolongation method \"%s\".",
+ groupname, prolong_string);
+ free (groupname);
+ return op_error;
+ }
+ return op_error;
+ }
+
+
+
+ void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cgh)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ int ierr;
+
+ assert (cgh->cctk_dim == dim);
+
+ // Not sure what to do with that
+ assert (convLevel==0);
+
+ dist::pseudoinit();
+
+ // Initialise current position
+ mglevel = -1;
+ reflevel = -1;
+ map = -1;
+ component = -1;
+
+
+
+ Waypoint ("Setting up the grid hierarchy");
+
+ // Processor information
+ Output ("Carpet is running on %d processors", CCTK_nProcs(cgh));
+
+ // Multigrid information
+ basemglevel = convergence_level;
+ mglevels = num_convergence_levels;
+ mgfact = convergence_factor;
+ maxmglevelfact = ipow(mgfact, mglevels-1);
+ cgh->cctk_convfac = mgfact;
+
+ // Refinement information
+ maxreflevels = max_refinement_levels;
+ reffact = refinement_factor;
+ maxreflevelfact = ipow(reffact, maxreflevels-1);
+
+ // Map information
+ carpetGH.maps = maps = num_maps;;
+
+
+
+ // Allocate space for groups
+ groupdata.resize(CCTK_NumGroups());
+ arrdata.resize(CCTK_NumGroups());
+
+ vhh.resize(maps);
+ vdd.resize(maps);
+ vtt.resize(maps);
+
+ // Loop over maps
+ for (int m=0; m<maps; ++m) {
+
+ // Get boundary description
+ jjvect nboundaryzones, is_internal, is_staggered, shiftout;
+ ierr = GetBoundarySpecification
+ (2*dim, &nboundaryzones[0][0], &is_internal[0][0],
+ &is_staggered[0][0], &shiftout[0][0]);
+ assert (!ierr);
+
+ {
+ ostringstream buf;
+ buf << "CoordBase boundary specification for map " << m << ":" << endl
+ << " nboundaryzones: " << nboundaryzones << endl
+ << " is_internal : " << is_internal << endl
+ << " is_staggered : " << is_staggered << endl
+ << " shiftout : " << shiftout;
+ Output (buf.str().c_str());
+ }
+
+ // Ghost zones
+ ivect lghosts, ughosts;
+ if (ghost_size == -1) {
+ lghosts = ivect(ghost_size_x, ghost_size_y, ghost_size_z);
+ ughosts = ivect(ghost_size_x, ghost_size_y, ghost_size_z);
+ } else {
+ lghosts = ivect(ghost_size, ghost_size, ghost_size);
+ ughosts = ivect(ghost_size, ghost_size, ghost_size);
+ }
+
+ // Grid size
+ rvect physical_min, physical_max;
+ rvect interior_min, interior_max;
+ rvect exterior_min, exterior_max;
+ rvect base_spacing;
+
+ if (domain_from_coordbase) {
+
+ ierr = GetDomainSpecification
+ (dim, &physical_min[0], &physical_max[0],
+ &interior_min[0], &interior_max[0],
+ &exterior_min[0], &exterior_max[0], &base_spacing[0]);
+ assert (!ierr);
+
+ } else {
+ // Legacy code
+
+ // specify global number of grid points
+ ivect npoints;
+ if (global_nsize == -1) {
+ npoints = ivect(global_nx, global_ny, global_nz);
+ } else {
+ npoints = ivect(global_nsize, global_nsize, global_nsize);
+ }
+ ostringstream buf;
+ buf << "Standard grid specification for map " << m << ":" << endl
+ << " number of grid points: " << npoints;
+ Output (buf.str().c_str());
+
+ // reduce to physical domain
+ exterior_min = 0.0;
+ exterior_max = rvect(npoints - 1);
+ base_spacing = 1.0;
+ ierr = ConvertFromExteriorBoundary
+ (dim, &physical_min[0], &physical_max[0],
+ &interior_min[0], &interior_max[0],
+ &exterior_min[0], &exterior_max[0], &base_spacing[0]);
+ assert (!ierr);
+
+ }
+
+ {
+ ostringstream buf;
+ buf << "CoordBase domain specification for map " << m << ":" << endl
+ << " physical extent: " << physical_min << " : " << physical_max << " (" << physical_max - physical_min << ")" << endl
+ << " interior extent: " << interior_min << " : " << interior_max << " (" << interior_max - interior_min << ")" << endl
+ << " exterior extent: " << exterior_min << " : " << exterior_max << " (" << exterior_max - exterior_min << ")" << endl
+ << " base_spacing : " << base_spacing;
+ Output (buf.str().c_str());
+ }
+
+ // Adapt for convergence level
+ rvect const spacing
+ = base_spacing * pow (CCTK_REAL(convergence_factor), basemglevel);
+
+ // Calculate global number of grid points
+ ierr = ConvertFromPhysicalBoundary
+ (dim, &physical_min[0], &physical_max[0],
+ &interior_min[0], &interior_max[0],
+ &exterior_min[0], &exterior_max[0], &spacing[0]);
+ assert (!ierr);
+
+ {
+ ostringstream buf;
+ buf << "Adapted domain specification for map " << m << ":" << endl
+ << " convergence factor: " << convergence_factor << endl
+ << " convergence level : " << basemglevel << endl
+ << " physical extent : " << physical_min << " : " << physical_max << " (" << physical_max - physical_min << ")" << endl
+ << " interior extent : " << interior_min << " : " << interior_max << " (" << interior_max - interior_min << ")" << endl
+ << " exterior extent : " << exterior_min << " : " << exterior_max << " (" << exterior_max - exterior_min << ")" << endl
+ << " spacing : " << spacing;
+ Output (buf.str().c_str());
+ }
+
+ rvect const real_npoints = (exterior_max - exterior_min) / spacing + 1;
+
+ {
+ ostringstream buf;
+ buf << "Base grid specification for map " << m << ":" << endl
+ << " number of grid points : " << real_npoints << endl
+ << " number of ghost points: " << lghosts;
+ Output (buf.str().c_str());
+ }
+
+ const ivect npoints = floor(real_npoints + 0.5);
+ if (any(abs(rvect(npoints) - real_npoints) > 0.001)) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The domain size for map %d scaled for convergence level %d with convergence factor %d is not integer",
+ m, basemglevel, convergence_factor);
+ }
+
+ // Sanity check
+ // (if this fails, someone requested an insane amount of memory)
+ assert (all(npoints <= INT_MAX));
+ {
+ int max = INT_MAX;
+ for (int d=0; d<dim; ++d) {
+ assert (npoints[d] <= max);
+ max /= npoints[d];
+ }
+ }
+
+
+
+ // Base grid extent
+ const int stride = maxreflevelfact;
+ const ivect str(stride);
+ const ivect lb(0);
+ const ivect ub((npoints - 1) * str);
+ const ibbox baseext(lb, ub, str);
+
+ // Allocate grid hierarchy
+ vhh.at(m) = new gh<dim>(refinement_factor, vertex_centered,
+ convergence_factor, vertex_centered, baseext);
+
+ // Allocate data hierarchy
+ vdd.at(m) = new dh<dim>(*vhh.at(m), lghosts, ughosts,
+ prolongation_order_space, buffer_width);
+
+ // Allocate time hierarchy
+ vtt.at(m) = new th<dim>(*vhh.at(m), 1.0);
+
+ if (max_refinement_levels > 1) {
+ const int prolongation_stencil_size
+ = vdd.at(m)->prolongation_stencil_size();
+ const int min_nghosts
+ = ((prolongation_stencil_size + refinement_factor - 1)
+ / (refinement_factor-1));
+ if (any(min(lghosts,ughosts) < min_nghosts)) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "There are not enough ghost zones for the desired spatial prolongation order on map %d. With Carpet::prolongation_order_space=%d, you need at least %d ghost zones.",
+ m, prolongation_order_space, min_nghosts);
+ }
+
+ }
+
+
+
+ // Set initial refinement structure
+
+ vector<ibbox> bbs;
+ vector<bbvect> obs;
+ if (strcmp(base_extents, "") == 0) {
+
+ // default: one grid component covering everything
+ bbs.push_back (vhh.at(m)->baseextent);
+ obs.push_back (bbvect(true));
+
+ } else {
+
+ // explicit grid components
+ // TODO: invent something for the other convergence levels
+ istringstream ext_str(base_extents);
+ try {
+ ext_str >> bbs;
+ } catch (input_error) {
+ CCTK_WARN (0, "Could not parse parameter \"base_extents\"");
+ }
+ CCTK_VInfo (CCTK_THORNSTRING, "Using %d grid patches", bbs.size());
+ cout << "grid-patches-are " << bbs << endl;
+ if (bbs.size()<=0) {
+ CCTK_WARN (0, "Cannot evolve with 0 grid patches");
+ }
+ istringstream ob_str (base_outerbounds);
+ try {
+ ob_str >> obs;
+ } catch (input_error) {
+ CCTK_WARN (0, "Could not parse parameter \"base_outerbounds\"");
+ }
+ assert (obs.size() == bbs.size());
+
+ }
+
+ // Distribute onto the processors
+ // (TODO: this should be done globally for all maps)
+ vector<int> ps;
+ SplitRegions (cgh, bbs, obs, ps);
+
+ // Create all multigrid levels
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cgh, bbs, obs, bbss);
+
+ // Only one refinement level
+ vector<vector<vector<ibbox> > > bbsss(1);
+ vector<vector<bbvect> > obss(1);
+ vector<vector<int> > pss(1);
+ bbsss.at(0) = bbss;
+ obss.at(0) = obs;
+ pss.at(0) = ps;
+
+ // Check the regions
+ CheckRegions (bbsss, obss, pss);
+
+#if 0
+ // Do this later, because CactusBase/IO might not yet be initialised
+ // Write grid structure to file
+ OutputGridStructure (cgh, m, bbsss, obss, pss);
+#endif
+
+ // Recompose grid hierarchy
+ vhh.at(m)->recompose (bbsss, obss, pss, false);
+
+ CCTK_INFO ("Grid structure (grid points):");
+ const int rl = 0;
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ for (int ml=0; ml<vhh.at(m)->mglevels(rl,c); ++ml) {
+ const ivect lower = vhh.at(m)->extents.at(rl).at(c).at(ml).lower();
+ const ivect upper = vhh.at(m)->extents.at(rl).at(c).at(ml).upper();
+ const int convfact = ipow(mgfact, ml);
+ assert (all(lower % maxreflevelfact == 0));
+ assert (all(upper % maxreflevelfact == 0));
+ assert (all(((upper - lower) / maxreflevelfact) % convfact == 0));
+ cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]"
+ << " exterior extent: " << lower / maxreflevelfact
+ << " : " << upper / maxreflevelfact
+ << " (" << (upper - lower) / maxreflevelfact / convfact + 1
+ << ")" << endl;
+ }
+ }
+
+ } // loop over maps
+
+ reflevels = 1;
+ for (int m=0; m<maps; ++m) {
+ assert (vhh.at(m)->reflevels() == reflevels);
+ }
+
+
+
+ // Allocate space for variables in group (but don't enable storage
+ // yet)
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+
+ cGroup gp;
+ ierr = CCTK_GroupData (group, &gp);
+ assert (!ierr);
+
+ switch (gp.grouptype) {
+
+ case CCTK_GF: {
+ assert (gp.dim == dim);
+ arrdata.at(group).resize(maps);
+ for (int m=0; m<maps; ++m) {
+ arrdata.at(group).at(m).hh = vhh.at(m);
+ arrdata.at(group).at(m).dd = vdd.at(m);
+ arrdata.at(group).at(m).tt = vtt.at(m);
+ }
+ break;
+ }
+
+ case CCTK_SCALAR:
+ case CCTK_ARRAY: {
+
+ arrdata.at(group).resize(1);
+
+ ivect sizes(1), ghostsizes(0);
+
+ switch (gp.grouptype) {
+
+ case CCTK_SCALAR:
+ // treat scalars as DIM=0, DISTRIB=const arrays
+ assert (gp.dim==0);
+ assert (gp.disttype == CCTK_DISTRIB_CONSTANT);
+ break;
+
+ case CCTK_ARRAY: {
+ assert (gp.dim>=1 || gp.dim<=dim);
+ const CCTK_INT * const * const sz = CCTK_GroupSizesI(group);
+ const CCTK_INT * const * const gsz = CCTK_GroupGhostsizesI(group);
+ for (int d=0; d<gp.dim; ++d) {
+ if (sz) sizes[d] = *sz[d];
+ if (gsz) ghostsizes[d] = *gsz[d];
+ }
+ break;
+ }
+
+ default:
+ assert (0);
+ }
+
+ ivect alghosts(0), aughosts(0);
+ for (int d=0; d<gp.dim; ++d) {
+ alghosts[d] = ghostsizes[d];
+ aughosts[d] = ghostsizes[d];
+ }
+
+
+
+ // Adapt array sizes for convergence level
+ jvect convpowers (0);
+ jvect convoffsets (0);
+
+ if (gp.tagstable >= 0) {
+ int status;
+
+ status = Util_TableGetIntArray
+ (gp.tagstable, gp.dim, &convpowers[0], "convergence_power");
+ if (status == UTIL_ERROR_TABLE_NO_SUCH_KEY) {
+ // keep default: independent of convergence level
+ } else if (status == 1) {
+ // a scalar was given
+ convpowers = convpowers[0];
+ } else if (status == gp.dim) {
+ // do nothing
+ } else {
+ char * const groupname = CCTK_GroupName(group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The key \"convergence_power\" in the tags table of group \"%s\" is wrong",
+ groupname);
+ free (groupname);
+ }
+ assert (all (convpowers >= 0));
+
+ status = Util_TableGetIntArray
+ (gp.tagstable, gp.dim, &convoffsets[0], "convergence_offset");
+ if (status == UTIL_ERROR_TABLE_NO_SUCH_KEY) {
+ // keep default: offset is 0
+ } else if (status == 1) {
+ // a scalar was given
+ convoffsets = convoffsets[0];
+ } else if (status == gp.dim) {
+ // do nothing
+ } else {
+ char * const groupname = CCTK_GroupName(group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The key \"convergence_offset\" in the tags table of group \"%s\" is wrong",
+ groupname);
+ free (groupname);
+ }
+
+ } // if there is a group tags table
+
+ rvect real_sizes
+ = ((sizes - convoffsets)
+ / pow(rvect(convergence_factor), convpowers * basemglevel)
+ + convoffsets);
+ for (int d=gp.dim; d<dim; ++d) {
+ real_sizes[d] = sizes[d];
+ }
+ sizes = floor(real_sizes + 0.5);
+ if (any(sizes < 0)) {
+ char * const groupname = CCTK_GroupName(group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The shape of group \"%s\" scaled for convergence level %d with convergence factor %d is negative",
+ groupname, basemglevel, convergence_factor);
+ free (groupname);
+ }
+ if (any(abs(rvect(sizes) - real_sizes) > 0.001)) {
+ char * const groupname = CCTK_GroupName(group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The shape of group \"%s\" scaled for convergence level %d with convergence factor %d is not integer",
+ groupname, basemglevel, convergence_factor);
+ free (groupname);
+ }
+
+
+
+ assert (gp.disttype==CCTK_DISTRIB_CONSTANT
+ || gp.disttype==CCTK_DISTRIB_DEFAULT);
+
+ if (gp.disttype==CCTK_DISTRIB_CONSTANT) {
+ if (! all (ghostsizes == 0)) {
+ char * const groupname = CCTK_GroupName(group);
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The group \"%s\" has DISTRIB=constant, but its ghostsize is not 0",
+ groupname);
+ free (groupname);
+ }
+ assert (all (ghostsizes == 0));
+ const int d = gp.dim==0 ? 0 : gp.dim-1;
+ sizes[d] = (sizes[d] - 2*ghostsizes[d]) * CCTK_nProcs(cgh) + 2*ghostsizes[d];
+ assert (sizes[d] >= 0);
+ }
+
+
+
+ const ivect alb(0);
+ const ivect aub(sizes-1);
+ const ivect astr(1);
+ const ibbox abaseext(alb, aub, astr);
+
+ assert (all(convpowers == convpowers[0]));
+ const int amgfact1 = ipow(mgfact, convpowers[0]);
+
+ arrdata.at(group).at(0).hh
+ = new gh<dim>(refinement_factor, vertex_centered,
+ amgfact1, vertex_centered,
+ abaseext);
+
+ arrdata.at(group).at(0).dd
+ = new dh<dim>(*arrdata.at(group).at(0).hh, alghosts, aughosts, 0, 0);
+
+ arrdata.at(group).at(0).tt
+ = new th<dim>(*arrdata.at(group).at(0).hh, 1.0);
+
+
+
+ // Set refinement structure for scalars and arrays
+ vector<ibbox> bbs;
+ vector<bbvect> obs;
+ bbs.push_back (abaseext);
+ obs.push_back (bbvect(true));
+
+ // Split it into components, one for each processor
+ vector<int> ps;
+ if (gp.disttype==CCTK_DISTRIB_CONSTANT) {
+ SplitRegions_AlongDir (cgh, bbs, obs, ps, gp.dim==0 ? 0 : gp.dim-1);
+ } else {
+ SplitRegions_Automatic (cgh, bbs, obs, ps);
+ }
+
+ // Create all multigrid levels
+ vector<vector<ibbox> > bbss (bbs.size());
+ ivect amgfact;
+ iivect aoffset;
+ for (int d=0; d<dim; ++d) {
+ amgfact[d] = ipow(mgfact, convpowers[d]);
+ aoffset[d][0] = 0;
+ aoffset[d][1] = convoffsets[d];
+ }
+ for (size_t c=0; c<bbs.size(); ++c) {
+ bbss.at(c).resize (mglevels);
+ bbss.at(c).at(0) = bbs.at(c);
+ for (int ml=1; ml<mglevels; ++ml) {
+ // this base
+ ivect const baselo = ivect(0);
+ ivect const baselo1 = baselo;
+ // next finer grid
+ ivect const flo = bbss.at(c).at(ml-1).lower();
+ ivect const fhi = bbss.at(c).at(ml-1).upper();
+ ivect const fstr = bbss.at(c).at(ml-1).stride();
+ // this grid
+ ivect const str = fstr * amgfact;
+ ivect const lo = flo + xpose(obs.at(c))[0].ifthen ( (xpose(aoffset)[0] - amgfact * xpose(aoffset)[0]) * fstr, ivect(0));
+ ivect const hi = fhi + xpose(obs.at(c))[1].ifthen ( - (xpose(aoffset)[1] - amgfact * xpose(aoffset)[1]) * fstr, ivect(0));
+ ivect const lo1 = baselo1 + (lo - baselo1 + str - 1) / str * str;
+ ivect const hi1 = lo1 + (hi - lo1) / str * str;
+ bbss.at(c).at(ml) = ibbox(lo1, hi1, str);
+ }
+ }
+
+ // Only one refinement level
+ vector<vector<vector<ibbox> > > bbsss(1);
+ vector<vector<bbvect> > obss(1);
+ vector<vector<int> > pss(1);
+ bbsss.at(0) = bbss;
+ obss.at(0) = obs;
+ pss.at(0) = ps;
+
+ // Recompose for this map
+ char * const groupname = CCTK_GroupName (group);
+ assert (groupname);
+ Checkpoint ("Recomposing grid array group \"%s\"", groupname);
+ free (groupname);
+ arrdata.at(group).at(0).hh->recompose (bbsss, obss, pss, false);
+
+ break;
+ } // case of scalar or array
+
+ default:
+ assert (0);
+ } // switch on group type
+
+ // Initialise group information
+ groupdata.at(group).info.dim = gp.dim;
+ groupdata.at(group).info.gsh = new int [dim];
+ groupdata.at(group).info.lsh = new int [dim];
+ groupdata.at(group).info.lbnd = new int [dim];
+ groupdata.at(group).info.ubnd = new int [dim];
+ groupdata.at(group).info.bbox = new int [2*dim];
+ groupdata.at(group).info.nghostzones = new int [dim];
+
+ groupdata.at(group).transport_operator = GetTransportOperator (cgh, group);
+
+ // Initialise group variables
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+
+ arrdata.at(group).at(m).data.resize(CCTK_NumVarsInGroupI(group));
+ for (int var=0; var<(int)arrdata.at(group).at(m).data.size(); ++var) {
+ arrdata.at(group).at(m).data.at(var) = 0;
+ }
+
+ }
+
+ } // for group
+
+
+
+ // Allocate level times
+ leveltimes.resize (mglevels);
+ for (int ml=0; ml<mglevels; ++ml) {
+ leveltimes.at(ml).resize (maxreflevels);
+ }
+ origin_space.resize (mglevels);
+
+ // Enable prolongating
+ do_prolongate = true;
+
+
+
+ // Finish initialisation
+ mglevelfact = 1;
+ cgh->cctk_time = 0;
+ cgh->cctk_delta_time = 1.0;
+ for (int d=0; d<dim; ++d) {
+ cgh->cctk_origin_space[d] = 0.0;
+ cgh->cctk_delta_space[d] = 1.0;
+ }
+
+ mglevel = 0;
+ reflevel = 0;
+ map = 0;
+ component = 0;
+
+ leave_local_mode (cgh);
+ leave_singlemap_mode (cgh);
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+
+
+
+ // Some statistics
+ if (verbose || veryverbose) {
+
+ int num_gf_groups = 0;
+ int num_gf_vars = 0;
+ vector<int> num_array_groups(dim+1), num_array_vars(dim+1);
+ for (int d=0; d<=dim; ++d) {
+ num_array_groups.at(d) = 0;
+ num_array_vars.at(d) = 0;
+ }
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+
+ cGroup data;
+ ierr = CCTK_GroupData (group, &data);
+ assert (!ierr);
+
+ switch (data.grouptype) {
+ case CCTK_GF:
+ num_gf_groups += 1;
+ num_gf_vars += data.numvars * data.numtimelevels;
+ break;
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ assert (data.dim<=dim);
+ num_array_groups.at(data.dim) += 1;
+ num_array_vars.at(data.dim) += data.numvars * data.numtimelevels;
+ break;
+ default:
+ assert (0);
+ }
+ }
+ CCTK_INFO ("Group and variable statistics:");
+ CCTK_VInfo (CCTK_THORNSTRING,
+ " There are %d grid functions in %d groups",
+ num_gf_vars, num_gf_groups);
+ CCTK_VInfo (CCTK_THORNSTRING,
+ " There are %d grid scalars in %d groups",
+ num_array_vars.at(0), num_array_groups.at(0));
+ for (int d=1; d<=3; ++d) {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ " There are %d %d-dimensional grid arrays in %d groups",
+ num_array_vars.at(d), d, num_array_groups.at(d));
+ }
+ CCTK_VInfo (CCTK_THORNSTRING,
+ " (The number of variables counts all time levels)");
+ }
+
+
+
+ // Enable storage for all groups if desired
+ if (enable_all_storage) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ char * const groupname = CCTK_GroupName(group);
+ EnableGroupStorage (cgh, groupname);
+ free (groupname);
+ }
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ }
+
+ Waypoint ("Done with setting up the grid hierarchy");
+
+ return &carpetGH;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Shutdown.cc b/Carpet/Carpet/src/Shutdown.cc
new file mode 100644
index 000000000..b4d79ac2d
--- /dev/null
+++ b/Carpet/Carpet/src/Shutdown.cc
@@ -0,0 +1,74 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "dist.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Shutdown.cc,v 1.13 2004/01/25 14:57:27 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Shutdown_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ int Shutdown (tFleshConfig* fc)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ Waypoint ("Starting shutdown");
+
+ const int convlev = 0;
+ cGH* cgh = fc->GH[convlev];
+
+ for (int rl=reflevels-1; rl>=0; --rl) {
+ BEGIN_REVERSE_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Checkpoint ("Shutdown at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Terminate
+ Checkpoint ("Scheduling TERMINATE");
+ CCTK_ScheduleTraverse ("CCTK_TERMINATE", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ } END_REVERSE_MGLEVEL_LOOP;
+ } // for rl
+
+ BEGIN_REVERSE_MGLEVEL_LOOP(cgh) {
+ do_global_mode = true;
+ do_meta_mode = mglevel==mglevels-1;
+
+ // Shutdown
+ Checkpoint ("Scheduling SHUTDOWN");
+ CCTK_ScheduleTraverse ("CCTK_SHUTDOWN", cgh, CallFunction);
+
+ } END_REVERSE_MGLEVEL_LOOP;
+
+ CCTK_PRINTSEPARATOR;
+ printf ("Done.\n");
+
+ // earlier checkpoint before finalising MPI
+ Waypoint ("Done with shutdown");
+
+ dist::finalize();
+
+ return 0;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc
new file mode 100644
index 000000000..16847f077
--- /dev/null
+++ b/Carpet/Carpet/src/Storage.cc
@@ -0,0 +1,251 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "dh.hh"
+#include "gf.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.36 2004/06/02 09:04:43 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Storage_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ int EnableGroupStorage (const cGH* cgh, const char* groupname)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ Checkpoint ("EnableGroupStorage \"%s\"", groupname);
+
+ // TODO: Enabling storage for one refinement level has to enable
+ // it for all other refinement levels as well. Disabling must
+ // wait until all refinement levels have been disabled.
+
+ const int group = CCTK_GroupIndex(groupname);
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ if (CCTK_NumVarsInGroupI(group)==0) return 0;
+
+ const int grouptype = CCTK_GroupTypeI(group);
+
+ // No storage change in local mode
+ if (grouptype == CCTK_GF) {
+ assert ((map == -1 || maps == 1)
+ && (component == -1
+ || vhh.at(0)->local_components(reflevel) == 1));
+ }
+
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+ // storage was enabled previously
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ return num_tl;
+ }
+
+ // There is a difference between the Cactus time levels and the
+ // Carpet time levels. If there are n time levels, then the
+ // Cactus time levels are numbered 0 ... n-1, with the current
+ // time level being 0. In Carpet, the time levels are numbered
+ // -(n-1) ... 0, where the current time level is also 0.
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+ const int tmin = 1 - num_tl;
+ const int tmax = 0;
+
+ if (grouptype == CCTK_GF) {
+ if (max_refinement_levels > 1) {
+ if (groupdata.at(group).transport_operator != op_none) {
+ if (num_tl <= prolongation_order_time) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "There are not enough time levels for the desired temporal prolongation order in the grid function group \"%s\". With Carpet::prolongation_order_time=%d, you need at least %d time levels.",
+ CCTK_GroupName(group),
+ prolongation_order_time, prolongation_order_time+1);
+ }
+ }
+ }
+ }
+
+ cGroup gp;
+ const int ierr = CCTK_GroupData (group, &gp);
+ assert (!ierr);
+ const int vectorlength = gp.vectorgroup ? gp.vectorlength : 1;
+
+ assert (arrdata.at(group).at(0).data.size()==0
+ || arrdata.at(group).at(0).data.at(0) == 0);
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ const int vectorindex = gp.vectorgroup ? var % vectorlength : 0;
+ ggf<dim>* vectorleader
+ = (gp.vectorgroup && vectorindex>0
+ ? arrdata.at(group).at(m).data.at(var - vectorindex)
+ : NULL);
+ const int n = n0 + var;
+ switch (CCTK_VarTypeI(n)) {
+#define TYPECASE(N,T) \
+ case N: \
+ arrdata.at(group).at(m).data.at(var) = new gf<T,dim> \
+ (n, groupdata.at(group).transport_operator, \
+ *arrdata.at(group).at(m).tt, *arrdata.at(group).at(m).dd, \
+ tmin, tmax, prolongation_order_time, \
+ vectorlength, vectorindex, (gf<T,dim>*)vectorleader); \
+ break;
+#include "typecase"
+#undef TYPECASE
+ default:
+ UnsupportedVarType(n);
+ } // switch
+
+ if (grouptype != CCTK_GF) {
+ for (int tl=0; tl<num_tl; ++tl) {
+ assert (m == 0);
+ int const c = CCTK_MyProc(cgh);
+ cgh->data[n][tl] = ((*arrdata.at(group).at(m).data.at(var))
+ (-tl, 0, c, 0)->storage());
+ }
+ }
+
+ } // for
+ } // for
+
+// PoisonGroup (cgh, group, alltimes);
+
+ // storage was not enabled previously
+ return 0;
+ }
+
+
+
+ int DisableGroupStorage (const cGH* cgh, const char* groupname)
+ {
+ Checkpoint ("DisableGroupStorage \"%s\"", groupname);
+
+ const int group = CCTK_GroupIndex(groupname);
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ // No storage change in local mode
+ assert (! (component!=-1 && CCTK_GroupTypeI(group)==CCTK_GF));
+
+ if (! CCTK_QueryGroupStorageI(cgh, group)) {
+ // storage was disabled previously
+ return 0;
+ }
+
+ // TODO
+ CCTK_WARN (2, "Cannot disable storage -- storage management is not yet consistent for FMR");
+ return 1;
+
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
+
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ const int n = n0 + var;
+ switch (CCTK_VarTypeI(n)) {
+#define TYPECASE(N,T) \
+ case N: \
+ assert (arrdata.at(group).at(m).data.at(var)); \
+ delete (gf<T,dim>*)arrdata.at(group).at(m).data.at(var); \
+ arrdata.at(group).at(m).data.at(var) = NULL; \
+ break;
+#include "typecase"
+#undef TYPECASE
+ default:
+ UnsupportedVarType(n);
+ } // switch
+ arrdata.at(group).at(m).data.at(var) = NULL;
+
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[n][tl] = NULL;
+ }
+ }
+
+ } // for
+ } // for
+
+ // storage was enabled previously
+ return 1;
+ }
+
+
+
+ int QueryGroupStorageB (const cGH* cgh, int group, const char* groupname)
+ {
+ if (groupname) {
+ group = CCTK_GroupIndex(groupname);
+ }
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ if (CCTK_NumVarsInGroupI(group)==0) return 0;
+
+ const int n = CCTK_FirstVarIndexI(group);
+ assert (n>=0 && n<CCTK_NumVars());
+ const int var = 0;
+
+ return arrdata.at(group).at(0).data.at(var) != NULL;
+ }
+
+
+
+ const int* ArrayGroupSizeB (const cGH* cgh, int dir, int group,
+ const char* groupname)
+ {
+ static const int zero = 0;
+ static const int error = 0;
+
+ if (groupname) {
+ group = CCTK_GroupIndex(groupname);
+ }
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ if (mglevel == -1) {
+ return &error; // meta mode
+ }
+
+ const int gptype = CCTK_GroupTypeI (group);
+ if (gptype == CCTK_GF && map == -1) {
+ return &error; // global or level mode for a GF
+ }
+
+ const int gpdim = groupdata.at(group).info.dim;
+ assert (dir>=0 && dir<gpdim);
+
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+
+ return &groupdata.at(group).info.lsh[dir];
+
+ } else {
+
+ // no storage
+ return &zero;
+
+ }
+ }
+
+
+
+ int GroupDynamicData (const cGH* cgh, int group, cGroupDynamicData* data)
+ {
+ assert (group>=0 && group<CCTK_NumGroups());
+ *data = groupdata.at(group).info;
+ return 0;
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh
new file mode 100644
index 000000000..00f70396b
--- /dev/null
+++ b/Carpet/Carpet/src/carpet.hh
@@ -0,0 +1,70 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.32 2004/08/19 15:38:20 schnetter Exp $
+
+#ifndef CARPET_HH
+#define CARPET_HH
+
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+
+#include "gh.hh"
+
+#include "carpet_public.hh"
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+ // Scheduled functions
+ extern "C" {
+ void CarpetParamCheck (CCTK_ARGUMENTS);
+ void CarpetStartup (void);
+ }
+
+ // Registered functions
+ void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cgh);
+
+ int Initialise (tFleshConfig* config);
+ int Evolve (tFleshConfig* config);
+ int Shutdown (tFleshConfig* config);
+ int CallFunction (void* function, cFunctionData* attribute, void* data);
+
+ // Other functions
+ bool Regrid (const cGH* cgh, const bool force_recompose, const bool do_init);
+ void CycleTimeLevels (const cGH* cgh);
+ void FlipTimeLevels (const cGH* cgh);
+ void Restrict (const cGH* cgh);
+
+ // Sanity checks
+ enum checktimes { currenttime,
+ currenttimebutnotifonly,
+ previoustime,
+ allbutlasttime,
+ allbutcurrenttime,
+ alltimes };
+
+ int mintl (checktimes where, int num_tl);
+ int maxtl (checktimes where, int num_tl);
+
+ void Poison (const cGH* cgh, checktimes where);
+ void PoisonGroup (const cGH* cgh, int group, checktimes where);
+ void PoisonCheck (const cGH* cgh, checktimes where);
+
+ void CalculateChecksums (const cGH* cgh, checktimes where);
+ void CheckChecksums (const cGH* cgh, checktimes where);
+
+ // Debugging output
+ void Output (const char* fmt, ...);
+ void Waypoint (const char* fmt, ...);
+ void Checkpoint (const char* fmt, ...);
+
+ // Error output
+ void UnsupportedVarType (int vindex);
+
+} // namespace Carpet
+
+#endif // !defined(CARPET_HH)
diff --git a/Carpet/Carpet/src/carpet_public.h b/Carpet/Carpet/src/carpet_public.h
new file mode 100644
index 000000000..87c9130bc
--- /dev/null
+++ b/Carpet/Carpet/src/carpet_public.h
@@ -0,0 +1,113 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.h,v 1.15 2004/06/16 16:36:02 schnetter Exp $ */
+
+#ifndef CARPET_PUBLIC_H
+#define CARPET_PUBLIC_H
+
+#include <mpi.h>
+
+#include "cctk.h"
+
+
+
+/* Tell thorns that the Carpet routines exist */
+#define HAVE_CARPET
+
+
+
+#ifdef __cplusplus
+namespace Carpet {
+ extern "C" {
+#endif
+
+ /* Carpet's GH extension */
+ struct CarpetGH {
+
+#if 0
+ /* Maximum number of refinement levels */
+ int maxreflevels;
+
+ /* Refinement levels */
+ int reflevels;
+
+ /* Refinement factor */
+ int reffact;
+
+ /* Refinement factor on finest possible grid */
+ int maxreflevelfact;
+
+ /* Base multigrid level */
+ int basemglevel;
+
+ /* Multigrid levels */
+ int mglevels;
+
+ /* Multigrid factor */
+ int mgfact;
+
+ /* Multigrid factor on coarsest grid */
+ int maxmglevelfact;
+#endif
+
+ /* Maps */
+ int maps;
+
+
+
+#if 0
+ /* Current position on the grid hierarchy */
+ int reflevel;
+ int mglevel;
+#endif
+ int map;
+#if 0
+ int component;
+
+ /* Current refinement factor */
+ int reflevelfact;
+
+ /* Current multigrid factor */
+ int mglevelfact;
+#endif
+
+ };
+
+ struct CarpetGH const * GetCarpetGH (const cGH * const cgh);
+
+
+
+ /* Prolongation management */
+ CCTK_INT CarpetEnableProlongating (const CCTK_INT flag);
+
+
+
+ /* Call a schedule group */
+ int CallScheduleGroup (cGH * const cgh, const char * const group);
+
+ /* Call a local function */
+ int CallLocalFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh));
+ int CallSinglemapFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh));
+ int CallLevelFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh));
+ int CallGlobalFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh));
+ int CallMetaFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh));
+
+
+
+ /* Helper functions */
+ MPI_Comm CarpetMPIComm (void);
+ MPI_Datatype CarpetMPIDatatype (int vartype);
+ MPI_Datatype CarpetSimpleMPIDatatype (int vartype);
+ int CarpetSimpleMPIDatatypeLength (int vartype);
+
+
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace Carpet */
+#endif
+
+#endif /* !defined(CARPET_PUBLIC_H) */
diff --git a/Carpet/Carpet/src/carpet_public.hh b/Carpet/Carpet/src/carpet_public.hh
new file mode 100644
index 000000000..fbe9d8c0f
--- /dev/null
+++ b/Carpet/Carpet/src/carpet_public.hh
@@ -0,0 +1,15 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.40 2004/01/25 14:57:27 schnetter Exp $
+
+#ifndef CARPET_PUBLIC_HH
+#define CARPET_PUBLIC_HH
+
+// Stuff with C linkage
+#include "carpet_public.h"
+
+// Other declarations
+#include "defines.hh"
+#include "functions.hh"
+#include "modes.hh"
+#include "variables.hh"
+
+#endif // !defined(CARPET_PUBLIC_HH)
diff --git a/Carpet/Carpet/src/defines.hh b/Carpet/Carpet/src/defines.hh
new file mode 100644
index 000000000..006d925f3
--- /dev/null
+++ b/Carpet/Carpet/src/defines.hh
@@ -0,0 +1,33 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/defines.hh,v 1.2 2004/03/02 10:29:54 schnetter Exp $
+
+#ifndef DEFINES_HH
+#define DEFINES_HH
+
+#include "cctk.h"
+
+#include <bbox.hh>
+#include <bboxset.hh>
+#include <vect.hh>
+
+
+
+namespace Carpet {
+
+ const int dim = 3;
+
+ typedef vect<bool,dim> bvect;
+ typedef vect<int,dim> ivect;
+ typedef vect<CCTK_INT,dim> jvect;
+ typedef vect<CCTK_REAL,dim> rvect;
+ typedef bbox<int,dim> ibbox;
+ typedef bbox<CCTK_INT,dim> jbbox;
+ typedef bbox<CCTK_REAL,dim> rbbox;
+ typedef bboxset<int,dim> ibset;
+
+ typedef vect<vect<bool,2>,dim> bbvect;
+ typedef vect<vect<int,2>,dim> iivect;
+ typedef vect<vect<CCTK_INT,2>,dim> jjvect;
+
+} // namespace Carpet
+
+#endif // !defined(DEFINES_HH)
diff --git a/Carpet/Carpet/src/functions.hh b/Carpet/Carpet/src/functions.hh
new file mode 100644
index 000000000..56170dbed
--- /dev/null
+++ b/Carpet/Carpet/src/functions.hh
@@ -0,0 +1,73 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/functions.hh,v 1.4 2004/04/18 13:29:43 schnetter Exp $
+
+#ifndef FUNCTIONS_HH
+#define FUNCTIONS_HH
+
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Schedule.h"
+
+#include "bbox.hh"
+#include "gh.hh"
+#include "vect.hh"
+
+#include "defines.hh"
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+ int SyncGroup (const cGH* cgh, const char* groupname);
+ int EnableGroupStorage (const cGH* cgh, const char* groupname);
+ int DisableGroupStorage (const cGH* cgh, const char* groupname);
+ int EnableGroupComm (const cGH* cgh, const char* groupname);
+ int DisableGroupComm (const cGH* cgh, const char* groupname);
+ int Barrier (const cGH* cgh);
+ int Exit (cGH* cgh, int retval);
+ int Abort (cGH* cgh, int retval);
+ int MyProc (const cGH* cgh);
+ int nProcs (const cGH* cgh);
+ const int* ArrayGroupSizeB (const cGH* cgh, int dir, int group,
+ const char* groupname);
+ int QueryGroupStorageB (const cGH* cgh, int group, const char* groupname);
+ int GroupDynamicData (const cGH* cgh, int group, cGroupDynamicData* data);
+
+
+
+ // Helpers for recomposing the grid hierarchy
+ void CheckRegions (const gh<dim>::rexts & bbsss,
+ const gh<dim>::rbnds & obss,
+ const gh<dim>::rprocs& pss);
+
+ void OutputGrids (const cGH* cgh, const int m, const gh<dim>& hh);
+
+ void OutputGridStructure (const cGH *cgh,
+ const int m,
+ const gh<dim>::rexts & bbsss,
+ const gh<dim>::rbnds & obss,
+ const gh<dim>::rprocs& pss);
+
+
+
+ // Functions for recomposing the grid hierarchy
+ void SplitRegions (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps);
+ void SplitRegions_AlongZ (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps);
+ void SplitRegions_AlongDir (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps,
+ const int dir);
+ void SplitRegions_Automatic (const cGH* cgh, vector<ibbox>& bbs,
+ vector<bbvect>& obs, vector<int>& ps);
+
+ void MakeMultigridBoxes (const cGH* cgh,
+ vector<ibbox> const & bbs,
+ vector<bbvect> const & obs,
+ vector<vector<ibbox> > & bbss);
+
+} // namespace Carpet
+
+#endif // !defined(FUNCTIONS_HH)
diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc
new file mode 100644
index 000000000..70e892b4d
--- /dev/null
+++ b/Carpet/Carpet/src/helpers.cc
@@ -0,0 +1,337 @@
+#include <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <mpi.h>
+
+#include "cctk.h"
+#include "cctk_FortranString.h"
+#include "cctk_Parameters.h"
+
+#include "defs.hh"
+#include "dist.hh"
+#include "ggf.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.49 2004/07/08 12:43:34 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_helpers_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ // Get Carpet's GH extension
+ CarpetGH const * GetCarpetGH (const cGH * const cgh)
+ {
+ assert (cgh);
+ return &carpetGH;
+ }
+
+
+
+ // Enable or disable prolongating
+ CCTK_INT CarpetEnableProlongating (const CCTK_INT flag)
+ {
+ assert (flag==0 || flag==1);
+ do_prolongate = flag;
+ if (do_prolongate) {
+ Checkpoint ("Prolongating enabled");
+ } else {
+ Checkpoint ("Prolongating disabled");
+ }
+ return 0;
+ }
+
+
+
+ // Communication
+
+ int Barrier (const cGH* cgh)
+ {
+ void *dummy = &dummy;
+ dummy = &cgh;
+
+ MPI_Barrier (dist::comm);
+ return 0;
+ }
+
+
+
+ int Exit (cGH* cgh, int retval)
+ {
+ CCTK_Barrier (cgh);
+ dist::finalize();
+ exit (retval);
+ return -999;
+ }
+
+ int Abort (cGH* cgh, int retval)
+ {
+ void *dummy = &dummy;
+ dummy = &cgh;
+
+ MPI_Comm comm = dist::comm;
+ if (comm == MPI_COMM_NULL)
+ {
+ comm = MPI_COMM_WORLD;
+ }
+ MPI_Abort (comm, retval);
+ abort ();
+ return -999;
+ }
+
+
+
+ int MyProc (const cGH* cgh)
+ {
+ // if there is no cgh yet, assume nothing has been initialised
+ // yet, and don't use dist::comm
+ int rank;
+ MPI_Comm_rank (cgh ? dist::comm : MPI_COMM_WORLD, &rank);
+ return rank;
+ }
+
+ int nProcs (const cGH* cgh)
+ {
+ // if there is no cgh yet, assume nothing has been initialised
+ // yet, and don't use dist::comm
+ int size;
+ MPI_Comm_size (cgh ? dist::comm : MPI_COMM_WORLD, &size);
+ return size;
+ }
+
+
+
+ MPI_Comm CarpetMPIComm ()
+ {
+ return dist::comm;
+ }
+
+
+
+ // Datatypes
+
+ MPI_Datatype CarpetMPIDatatype (const int vartype)
+ {
+ switch (vartype) {
+#define TYPECASE(N,T) \
+ case N: { \
+ T dummy; \
+ return dist::datatype(dummy); \
+ }
+#include "typecase"
+#undef TYPECASE
+ default:
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Carpet does not support the variable type %d.", vartype);
+ }
+ // notreached
+ return MPI_CHAR;
+ }
+
+ MPI_Datatype CarpetSimpleMPIDatatype (const int vartype)
+ {
+ switch (vartype) {
+#ifdef CARPET_COMPLEX
+ case CCTK_VARIABLE_COMPLEX:
+ return CarpetMPIDatatype (CCTK_VARIABLE_REAL);
+#endif
+#ifdef CARPET_COMPLEX8
+# ifdef CCTK_REAL4
+ case CCTK_VARIABLE_COMPLEX8:
+ return CarpetMPIDatatype (CCTK_VARIABLE_REAL4);
+# endif
+#endif
+#ifdef CARPET_COMPLEX16
+# ifdef CCTK_REAL8
+ case CCTK_VARIABLE_COMPLEX16:
+ return CarpetMPIDatatype (CCTK_VARIABLE_REAL8);
+# endif
+#endif
+#ifdef CARPET_COMPLEX32
+# ifdef CCTK_REAL16
+ case CCTK_VARIABLE_COMPLEX32:
+ return CarpetMPIDatatype (CCTK_VARIABLE_REAL16);
+# endif
+#endif
+ default:
+ return CarpetMPIDatatype (vartype);
+ }
+ // notreached
+ return MPI_CHAR;
+ }
+
+ int CarpetSimpleMPIDatatypeLength (const int vartype)
+ {
+ switch (vartype) {
+#ifdef CARPET_COMPLEX
+ case CCTK_VARIABLE_COMPLEX:
+#endif
+#ifdef CARPET_COMPLEX8
+# ifdef CCTK_REAL4
+ case CCTK_VARIABLE_COMPLEX8:
+# endif
+#endif
+#ifdef CARPET_COMPLEX16
+# ifdef CCTK_REAL8
+ case CCTK_VARIABLE_COMPLEX16:
+# endif
+#endif
+#ifdef CARPET_COMPLEX32
+# ifdef CCTK_REAL16
+ case CCTK_VARIABLE_COMPLEX32:
+# endif
+#endif
+ return 2;
+ default:
+ return 1;
+ }
+ // notreached
+ return 0;
+ }
+
+
+
+ // Timelevels
+
+ int mintl (const checktimes where, const int num_tl)
+ {
+ assert (num_tl>0);
+ switch (where) {
+ case currenttime:
+ return 0;
+ case currenttimebutnotifonly:
+ // don't include current time if there is only one time level
+ return num_tl>1 ? 0 : 1;
+ case previoustime:
+ return 1;
+ case allbutlasttime:
+ // do include current time if there is only one time level
+ return 0;
+ case allbutcurrenttime:
+ return 1;
+ case alltimes:
+ return 0;
+ default:
+ assert (0);
+ }
+ return -999;
+ }
+
+ int maxtl (const checktimes where, const int num_tl)
+ {
+ assert (num_tl>0);
+ switch (where) {
+ case currenttime:
+ return 0;
+ case currenttimebutnotifonly:
+ return 0;
+ case previoustime:
+ return num_tl>1 ? 1 : 0;
+ case allbutlasttime:
+ return num_tl-2;
+ case allbutcurrenttime:
+ return num_tl-1;
+ case alltimes:
+ return num_tl-1;
+ default:
+ assert (0);
+ }
+ return -999;
+ }
+
+
+
+ // Diagnostic output
+
+ static void prepend_id (char* const msg, size_t const msglen)
+ {
+ if (mglevel!=-1) {
+ snprintf (msg+strlen(msg), msglen-strlen(msg), "[%d]", mglevel);
+ if (reflevel!=-1) {
+ snprintf (msg+strlen(msg), msglen-strlen(msg), "[%d]", reflevel);
+ if (map!=-1) {
+ snprintf (msg+strlen(msg), msglen-strlen(msg), "[%d]", map);
+ if (component!=-1) {
+ snprintf (msg+strlen(msg), msglen-strlen(msg), "[%d]", component);
+ }
+ }
+ }
+ snprintf (msg+strlen(msg), msglen-strlen(msg), " ");
+ }
+ }
+
+ void Output (const char* fmt, ...)
+ {
+ DECLARE_CCTK_PARAMETERS;
+ va_list args;
+ char msg[1000];
+ snprintf (msg, sizeof msg, "%s", "");
+ prepend_id (msg + strlen(msg), sizeof msg - strlen(msg));
+ va_start (args, fmt);
+ vsnprintf (msg + strlen(msg), sizeof msg - strlen(msg), fmt, args);
+ va_end (args);
+ CCTK_INFO (msg);
+ if (barriers) {
+ MPI_Barrier (dist::comm);
+ }
+ }
+
+ void Waypoint (const char* fmt, ...)
+ {
+ DECLARE_CCTK_PARAMETERS;
+ if (verbose || veryverbose) {
+ va_list args;
+ char msg[1000];
+ snprintf (msg, sizeof msg, "%s", "");
+ prepend_id (msg + strlen(msg), sizeof msg - strlen(msg));
+ va_start (args, fmt);
+ vsnprintf (msg + strlen(msg), sizeof msg - strlen(msg), fmt, args);
+ va_end (args);
+ CCTK_INFO (msg);
+ }
+ if (barriers) {
+ MPI_Barrier (dist::comm);
+ }
+ }
+
+ void Checkpoint (const char* fmt, ...)
+ {
+ DECLARE_CCTK_PARAMETERS;
+ if (veryverbose) {
+ va_list args;
+ char msg[1000];
+ snprintf (msg, sizeof msg, "%s", "");
+ prepend_id (msg + strlen(msg), sizeof msg - strlen(msg));
+ va_start (args, fmt);
+ vsnprintf (msg + strlen(msg), sizeof msg - strlen(msg), fmt, args);
+ va_end (args);
+ CCTK_INFO (msg);
+ }
+ if (barriers) {
+ MPI_Barrier (dist::comm);
+ }
+ }
+
+
+
+ void UnsupportedVarType (const int vindex)
+ {
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+ CCTK_VWarn
+ (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Carpet does not support the type of the variable \"%s\".\n"
+ "Either enable support for this type, "
+ "or change the type of this variable.", CCTK_FullName(vindex));
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/make.code.defn b/Carpet/Carpet/src/make.code.defn
new file mode 100644
index 000000000..548da3678
--- /dev/null
+++ b/Carpet/Carpet/src/make.code.defn
@@ -0,0 +1,25 @@
+# Main make.code.defn file for thorn Carpet -*-Makefile-*-
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/make.code.defn,v 1.6 2004/01/25 14:57:28 schnetter Exp $
+
+# Source files in this directory
+SRCS = CallFunction.cc \
+ CarpetParamCheck.cc \
+ CarpetStartup.cc \
+ Checksum.cc \
+ Comm.cc \
+ Cycle.cc \
+ Evolve.cc \
+ Initialise.cc \
+ Poison.cc \
+ Recompose.cc \
+ Restrict.cc \
+ SetupGH.cc \
+ Shutdown.cc \
+ Storage.cc \
+ helpers.cc \
+ modes.cc \
+ variables.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/Carpet/src/modes.cc b/Carpet/Carpet/src/modes.cc
new file mode 100644
index 000000000..e831b2dd8
--- /dev/null
+++ b/Carpet/Carpet/src/modes.cc
@@ -0,0 +1,976 @@
+#include <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "ggf.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/modes.cc,v 1.9 2004/08/07 20:07:27 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_modes_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ //
+ // Mode indicators
+ //
+
+ bool is_meta_mode ()
+ {
+ if (mglevel==-1) assert (reflevel==-1 && map==-1 && component==-1);
+ return mglevel==-1;
+ }
+
+ bool is_global_mode ()
+ {
+ if (mglevel==-1 && reflevel!=-1) assert (map==-1 && component==-1);
+ return mglevel!=-1 && reflevel==-1;
+ }
+
+ bool is_level_mode ()
+ {
+ if (mglevel!=-1 && reflevel!=-1 && map==-1) assert (component==-1);
+ return mglevel!=-1 && reflevel!=-1 && map==-1;
+ }
+
+ bool is_singlemap_mode ()
+ {
+ return mglevel!=-1 && reflevel!=-1 && map!=-1 && component==-1;
+ }
+
+ bool is_local_mode ()
+ {
+ return mglevel!=-1 && reflevel!=-1 && map!=-1 && component!=-1;
+// assert (mglevel>=0 && mglevel<mglevels);
+// assert (reflevel>=0 && reflevel<reflevels);
+// assert (map>=0 && map<maps);
+// assert (vhh.at(map)->local_components(reflevel)==1 || component==-1);
+ }
+
+
+
+ //
+ // Mode setting
+ //
+
+ // Set global mode
+
+ void enter_global_mode (cGH * const cgh, int const ml)
+ {
+ assert (is_meta_mode());
+ assert (ml>=0 && ml<mglevels);
+ Checkpoint ("Entering global mode");
+
+ mglevel = ml;
+ mglevelfact = ipow(mgfact, mglevel);
+ // TODO: this could also just be "mglevel" instead
+ cgh->cctk_convlevel = basemglevel + mglevel;
+
+ // Set time and space delta
+ cgh->cctk_delta_time = delta_time * mglevelfact;
+ for (int d=0; d<dim; ++d) {
+ cgh->cctk_origin_space[d] = origin_space.at(mglevel)[d];
+ cgh->cctk_delta_space[d] = delta_space[d] * mglevelfact;
+ }
+
+ // Set array information
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+
+ const int rl = 0;
+ const int m = 0;
+ const int c = CCTK_MyProc(cgh);
+
+ const ibbox& base = arrdata.at(group).at(m).hh->bases.at(rl).at(ml);
+ const bbvect& obnds = arrdata.at(group).at(m).hh->outer_boundaries.at(rl).at(c);
+ const ibbox& ext = arrdata.at(group).at(m).dd->boxes.at(rl).at(c).at(ml).exterior;
+
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+ = arrdata.at(group).at(m).dd->lghosts;
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ = base.shape() / base.stride();
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ = ext.shape() / ext.stride();
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ = (ext.lower() - base.lower()) / ext.stride();
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ = (ext.upper() - base.lower()) / ext.stride();
+ for (int d=0; d<dim; ++d) {
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] = obnds[d][0];
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] = obnds[d][1];
+ }
+
+ for (int d=0; d<dim; ++d) {
+ assert (groupdata.at(group).info.lsh[d]>=0);
+ assert (groupdata.at(group).info.lsh[d]<=groupdata.at(group).info.gsh[d]);
+ if (d>=groupdata.at(group).info.dim) {
+ assert (groupdata.at(group).info.lsh[d]==1);
+ }
+ assert (groupdata.at(group).info.lbnd[d]>=0);
+ assert (groupdata.at(group).info.lbnd[d]<=groupdata.at(group).info.ubnd[d]+1);
+ assert (groupdata.at(group).info.ubnd[d]<groupdata.at(group).info.gsh[d]);
+ assert (groupdata.at(group).info.lbnd[d] + groupdata.at(group).info.lsh[d] - 1
+ == groupdata.at(group).info.ubnd[d]);
+ assert (groupdata.at(group).info.lbnd[d]<=groupdata.at(group).info.ubnd[d]+1);
+ }
+
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ if (numvars>0) {
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ assert (firstvar>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+ assert (arrdata.at(group).at(m).hh->is_local(rl,c));
+
+ for (int var=0; var<numvars; ++var) {
+ assert (firstvar+var<CCTK_NumVars());
+ for (int tl=0; tl<num_tl; ++tl) {
+ ggf<dim> * const ff = arrdata.at(group).at(m).data.at(var);
+ if (ff) {
+ gdata<dim> * const data = (*ff) (-tl, rl, c, ml);
+ assert (data);
+ cgh->data[firstvar+var][tl] = data->storage();
+ } else {
+ cgh->data[firstvar+var][tl] = 0;
+ }
+ }
+ }
+ }
+
+ } // if grouptype
+ } // for group
+
+ assert (is_global_mode());
+ }
+
+ void leave_global_mode (cGH * const cgh)
+ {
+ assert (is_global_mode() || is_meta_mode());
+ Checkpoint ("Leaving global mode");
+
+ if (mglevel == -1) return; // early return
+
+ // Save and unset time and space delta
+ delta_time = cgh->cctk_delta_time / mglevelfact;
+ cgh->cctk_delta_time = 0.0;
+ for (int d=0; d<dim; ++d) {
+ origin_space.at(mglevel)[d] = cgh->cctk_origin_space[d];
+ delta_space[d] = cgh->cctk_delta_space[d] / mglevelfact;
+ cgh->cctk_origin_space[d] = -424242.0;
+ cgh->cctk_delta_space[d] = 0.0;
+ }
+
+ // Set array information
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+
+ const int m = 0;
+
+// ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+// = 0xdead;
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+ = arrdata.at(group).at(m).dd->lghosts;
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ = 0xdead;
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ = 0xdead;
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ = -0xdead;
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ = 0xdead;
+ for (int d=0; d<dim; ++d) {
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] = 0xdead;
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] = 0xdead;
+ }
+
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ if (numvars>0) {
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ assert (firstvar>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+ assert (group<(int)arrdata.size());
+ for (int var=0; var<numvars; ++var) {
+ assert (firstvar+var<CCTK_NumVars());
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[firstvar+var][tl] = 0;
+ }
+ }
+ }
+
+ } // if grouptype
+ } // for group
+
+ mglevel = -1;
+ mglevelfact = -0xdead;
+ cgh->cctk_convlevel = -0xdead;
+
+ assert (is_meta_mode());
+ }
+
+
+
+ // Set level mode
+
+ void enter_level_mode (cGH * const cgh, int const rl)
+ {
+ assert (is_global_mode());
+ assert (rl>=0 && rl<reflevels);
+ Checkpoint ("Entering level mode");
+
+ reflevel = rl;
+ reflevelfact = ipow(reffact, reflevel);
+ ivect::ref(cgh->cctk_levfac) = reflevelfact;
+ cgh->cctk_timefac = reflevelfact;
+
+ // Set current time
+ assert (mglevel>=0 && mglevel<(int)leveltimes.size());
+ assert (reflevel>=0 && reflevel<(int)leveltimes.at(mglevel).size());
+ cgh->cctk_time = leveltimes.at(mglevel).at(reflevel);
+
+ assert (is_level_mode());
+ }
+
+ void leave_level_mode (cGH * const cgh)
+ {
+ assert (is_level_mode() || is_global_mode());
+ Checkpoint ("Leaving level mode");
+
+ if (reflevel == -1) return; // early return
+
+ // Save and unset current time
+ assert (mglevel>=0 && mglevel<(int)leveltimes.size());
+ assert (reflevel>=0 && reflevel<(int)leveltimes.at(mglevel).size());
+ leveltimes.at(mglevel).at(reflevel) = cgh->cctk_time;
+ cgh->cctk_time = global_time;
+
+ reflevel = -1;
+ reflevelfact = -0xdead;
+ ivect::ref(cgh->cctk_levfac) = -0xdead;
+ cgh->cctk_timefac = -0xdead;
+
+ assert (is_global_mode());
+ }
+
+
+
+ // Set singlemap mode
+
+ void enter_singlemap_mode (cGH * const cgh, int const m)
+ {
+ assert (is_level_mode());
+ assert (m>=0 && m<maps);
+ Checkpoint ("Entering singlemap mode");
+
+ carpetGH.map = map = m;
+
+ // Set grid shape
+ const ibbox& coarseext = vdd.at(map)->bases.at(0 ).at(mglevel).exterior;
+ const ibbox& baseext = vdd.at(map)->bases.at(reflevel).at(mglevel).exterior;
+ assert (all (baseext.lower() % baseext.stride() == 0));
+ assert (all ((baseext.lower() - coarseext.lower()) % baseext.stride() == 0));
+ ivect::ref(cgh->cctk_levoff) = (baseext.lower() - coarseext.lower()) / baseext.stride();
+ ivect::ref(cgh->cctk_levoffdenom) = 1;
+ ivect::ref(cgh->cctk_gsh) = baseext.shape() / baseext.stride();
+ assert (all (vdd.at(map)->lghosts == vdd.at(map)->ughosts));
+ ivect::ref(cgh->cctk_nghostzones) = vdd.at(map)->lghosts;
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ = ivect::ref(cgh->cctk_gsh);
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+ = ivect::ref(cgh->cctk_nghostzones);
+ }
+ }
+
+ assert (is_singlemap_mode());
+ }
+
+ void leave_singlemap_mode (cGH * const cgh)
+ {
+ assert (is_singlemap_mode() || is_level_mode());
+ Checkpoint ("Leaving singlemap mode");
+
+ if (map == -1) return; // early return
+
+ // Unset grid shape
+ ivect::ref(cgh->cctk_levoff) = 0xdead;
+ ivect::ref(cgh->cctk_levoffdenom) = 0;
+ ivect::ref(cgh->cctk_gsh) = 0xdead;
+// ivect::ref(cgh->cctk_nghostzones) = 0xdead;
+ ivect::ref(cgh->cctk_nghostzones) = vdd.at(map)->lghosts;
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ = ivect::ref(cgh->cctk_gsh);
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+ = ivect::ref(cgh->cctk_nghostzones);
+ }
+ }
+
+ carpetGH.map = map = -1;
+
+ assert (is_level_mode());
+ }
+
+
+
+ // Set local mode
+
+ void enter_local_mode (cGH * const cgh, int const c)
+ {
+ assert (is_singlemap_mode());
+ assert (c>=0 && c<vhh.at(map)->components(reflevel));
+ Checkpoint ("Entering local mode");
+
+ component = c;
+
+ // Set cGH fields
+ const ibbox& baseext = vdd.at(map)->bases.at(reflevel).at(mglevel).exterior;
+ const bbvect& obnds = vhh.at(map)->outer_boundaries.at(reflevel).at(component);
+ const ibbox& ext = vdd.at(map)->boxes.at(reflevel).at(component).at(mglevel).exterior;
+
+ ivect::ref(cgh->cctk_lsh) = ext.shape() / ext.stride();
+ ivect::ref(cgh->cctk_lbnd)
+ = (ext.lower() - baseext.lower()) / ext.stride();
+ ivect::ref(cgh->cctk_ubnd)
+ = (ext.upper() - baseext.lower()) / ext.stride();
+
+ for (int d=0; d<dim; ++d) {
+ cgh->cctk_bbox[2*d ] = obnds[d][0];
+ cgh->cctk_bbox[2*d+1] = obnds[d][1];
+ }
+
+ for (int stg=0; stg<CCTK_NSTAGGER; ++stg) {
+ for (int d=0; d<dim; ++d) {
+ // TODO: support staggering
+ cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = cgh->cctk_lsh[d];
+ }
+ }
+
+ for (int d=0; d<dim; ++d) {
+ assert (cgh->cctk_lsh[d] >= 0);
+ assert (cgh->cctk_lsh[d] <= cgh->cctk_gsh[d]);
+ assert (cgh->cctk_lbnd[d] >= 0);
+ assert (cgh->cctk_lbnd[d] <= cgh->cctk_ubnd[d] + 1);
+ assert (cgh->cctk_ubnd[d] < cgh->cctk_gsh[d]);
+ assert (cgh->cctk_lbnd[d] + cgh->cctk_lsh[d] - 1 == cgh->cctk_ubnd[d]);
+ assert (cgh->cctk_lbnd[d] <= cgh->cctk_ubnd[d]+1);
+ }
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ = ivect::ref(cgh->cctk_lsh);
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ = ivect::ref(cgh->cctk_lbnd);
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ = ivect::ref(cgh->cctk_ubnd);
+
+ for (int d=0; d<dim; ++d) {
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d ]
+ = cgh->cctk_bbox[2*d ];
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1]
+ = cgh->cctk_bbox[2*d+1];
+ }
+
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ if (numvars>0) {
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ assert (firstvar>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+// assert (vhh.at(map)->is_local(reflevel,component));
+
+ assert (group<(int)arrdata.size());
+ for (int var=0; var<numvars; ++var) {
+ assert (firstvar+var<CCTK_NumVars());
+ for (int tl=0; tl<num_tl; ++tl) {
+ ggf<dim> * const ff = arrdata.at(group).at(map).data.at(var);
+ if (ff) {
+ gdata<dim> * const data
+ = (*ff) (-tl, reflevel, component, mglevel);
+ assert (data);
+ cgh->data[firstvar+var][tl] = data->storage();
+ } else {
+ cgh->data[firstvar+var][tl] = 0;
+ }
+ }
+ }
+ }
+
+ } // if grouptype
+ } // for group
+
+ assert (is_local_mode());
+ }
+
+ void leave_local_mode (cGH * const cgh)
+ {
+ assert (is_local_mode() || is_singlemap_mode());
+ Checkpoint ("Leaving local mode");
+
+ if (component == -1) return; // early return
+
+ // Unset cGH fields
+ ivect::ref(cgh->cctk_lsh) = 0xdead;
+ ivect::ref(cgh->cctk_lbnd) = -0xdead;
+ ivect::ref(cgh->cctk_ubnd) = 0xdead;
+
+ for (int d=0; d<dim; ++d) {
+ cgh->cctk_bbox[2*d ] = 0xdead;
+ cgh->cctk_bbox[2*d+1] = 0xdead;
+ }
+
+ for (int stg=0; stg<CCTK_NSTAGGER; ++stg) {
+ for (int d=0; d<dim; ++d) {
+ // TODO: support staggering
+ cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = cgh->cctk_lsh[d];
+ }
+ }
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ = ivect::ref(cgh->cctk_lsh);
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ = ivect::ref(cgh->cctk_lbnd);
+ ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ = ivect::ref(cgh->cctk_ubnd);
+
+ for (int d=0; d<dim; ++d) {
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d ]
+ = cgh->cctk_bbox[2*d ];
+ const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1]
+ = cgh->cctk_bbox[2*d+1];
+ }
+
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ if (numvars>0) {
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ assert (firstvar>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+ assert (group<(int)arrdata.size());
+ for (int var=0; var<numvars; ++var) {
+ assert (firstvar+var<CCTK_NumVars());
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[firstvar+var][tl] = 0;
+ }
+ }
+ }
+
+ } // if grouptype
+ } // for group
+
+ component = -1;
+
+ assert (is_singlemap_mode());
+ }
+
+
+
+ //
+ // Mode iterators
+ //
+
+ // mglevel iterator
+
+ mglevel_iterator::mglevel_iterator (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), ml(mglevels-1)
+ {
+ enter_global_mode (cgh, ml);
+ }
+
+ mglevel_iterator::~mglevel_iterator ()
+ {
+ leave_global_mode (cgh);
+ }
+
+ bool mglevel_iterator::done () const
+ {
+ return ml < 0;
+ }
+
+ void mglevel_iterator::step ()
+ {
+ -- ml;
+ if (! done()) {
+ leave_global_mode (cgh);
+ enter_global_mode (cgh, ml);
+ }
+ }
+
+
+
+ // reverse mglevel iterator
+
+ reverse_mglevel_iterator::reverse_mglevel_iterator (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), ml(0)
+ {
+ enter_global_mode (cgh, ml);
+ }
+
+ reverse_mglevel_iterator::~reverse_mglevel_iterator ()
+ {
+ leave_global_mode (cgh);
+ }
+
+ bool reverse_mglevel_iterator::done () const
+ {
+ return ml >= mglevels;
+ }
+
+ void reverse_mglevel_iterator::step ()
+ {
+ ++ ml;
+ if (! done()) {
+ leave_global_mode (cgh);
+ enter_global_mode (cgh, ml);
+ }
+ }
+
+
+
+ // reflevel iterator
+
+ reflevel_iterator::reflevel_iterator (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), rl(0)
+ {
+ enter_level_mode (cgh, rl);
+ }
+
+ reflevel_iterator::~reflevel_iterator ()
+ {
+ leave_level_mode (cgh);
+ }
+
+ bool reflevel_iterator::done () const
+ {
+ return rl >= reflevels;
+ }
+
+ void reflevel_iterator::step ()
+ {
+ ++ rl;
+ if (! done()) {
+ leave_level_mode (cgh);
+ enter_level_mode (cgh, rl);
+ }
+ }
+
+
+
+ // reverse reflevel iterator
+
+ reverse_reflevel_iterator::reverse_reflevel_iterator (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), rl(reflevels-1)
+ {
+ enter_level_mode (cgh, rl);
+ }
+
+ reverse_reflevel_iterator::~reverse_reflevel_iterator ()
+ {
+ leave_level_mode (cgh);
+ }
+
+ bool reverse_reflevel_iterator::done () const
+ {
+ return rl < 0;
+ }
+
+ void reverse_reflevel_iterator::step ()
+ {
+ -- rl;
+ if (! done()) {
+ leave_level_mode (cgh);
+ enter_level_mode (cgh, rl);
+ }
+ }
+
+
+
+ // map iterator
+
+ map_iterator::map_iterator (cGH const * const cgh_,
+ int const grouptype_)
+ : cgh(const_cast<cGH*>(cgh_)), grouptype(grouptype_), m(0)
+ {
+ assert (grouptype == CCTK_GF
+ || grouptype == CCTK_ARRAY || grouptype == CCTK_SCALAR);
+ enter_singlemap_mode (cgh, m);
+ }
+
+ map_iterator::~map_iterator ()
+ {
+ leave_singlemap_mode (cgh);
+ }
+
+ bool map_iterator::done () const
+ {
+ return grouptype == CCTK_GF ? m >= maps : m >= 1;
+ }
+
+ void map_iterator::step ()
+ {
+ ++ m;
+ if (! done()) {
+ leave_singlemap_mode (cgh);
+ enter_singlemap_mode (cgh, m);
+ }
+ }
+
+
+
+ // Local mode iterator
+
+ component_iterator::component_iterator (cGH const * const cgh_,
+ int const grouptype_)
+ : cgh(const_cast<cGH*>(cgh_)), grouptype(grouptype_), c(0)
+ {
+ assert (grouptype == CCTK_GF
+ || grouptype == CCTK_ARRAY || grouptype == CCTK_SCALAR);
+ enter_local_mode (cgh, c);
+ }
+
+ component_iterator::~component_iterator ()
+ {
+ leave_local_mode (cgh);
+ }
+
+ bool component_iterator::done () const
+ {
+ return (grouptype == CCTK_GF
+ ? c >= vhh.at(map)->components(reflevel)
+ : c >= CCTK_nProcs(cgh));
+ }
+
+ void component_iterator::step ()
+ {
+ ++ c;
+ if (! done()) {
+ leave_local_mode (cgh);
+ enter_local_mode (cgh, c);
+ }
+ }
+
+
+
+ // Processor local mode iterator
+
+ local_component_iterator::local_component_iterator (cGH const * const cgh_,
+ int const grouptype_)
+ : cgh(const_cast<cGH*>(cgh_)), grouptype(grouptype_), c(-1)
+ {
+ assert (grouptype == CCTK_GF
+ || grouptype == CCTK_ARRAY || grouptype == CCTK_SCALAR);
+ assert (is_singlemap_mode());
+ step ();
+ }
+
+ local_component_iterator::~local_component_iterator ()
+ {
+ leave_local_mode (cgh);
+ }
+
+ bool local_component_iterator::done () const
+ {
+ return c >= (grouptype == CCTK_GF
+ ? vhh.at(map)->components(reflevel)
+ : CCTK_nProcs(cgh));
+ }
+
+ void local_component_iterator::step ()
+ {
+ do {
+ ++ c;
+ } while (! done() && ! (grouptype == CCTK_GF
+ ? vhh.at(map)->is_local(reflevel, c)
+ : c == CCTK_MyProc(cgh)));
+ if (! done()) {
+ leave_local_mode (cgh);
+ enter_local_mode (cgh, c);
+ }
+ }
+
+
+
+ //
+ // Mode escapes
+ //
+
+ // Singlemap escape
+
+ singlemap_escape::singlemap_escape (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), c(component)
+ {
+ assert (! is_meta_mode());
+ assert (! is_global_mode());
+ assert (! is_level_mode());
+ if (! is_singlemap_mode()) {
+ leave_local_mode (cgh);
+ }
+ }
+
+ singlemap_escape::~singlemap_escape ()
+ {
+ assert (is_singlemap_mode());
+ if (c != -1) {
+ enter_local_mode (cgh, c);
+ }
+ }
+
+
+
+ // Level escape
+
+ level_escape::level_escape (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), m(map), c(component)
+ {
+ assert (! is_meta_mode());
+ assert (! is_global_mode());
+ if (! is_level_mode()) {
+ if (! is_singlemap_mode()) {
+ leave_local_mode (cgh);
+ }
+ leave_singlemap_mode (cgh);
+ }
+ }
+
+ level_escape::~level_escape ()
+ {
+ assert (is_level_mode());
+ if (m != -1) {
+ enter_singlemap_mode (cgh, m);
+ if (c != -1) {
+ enter_local_mode (cgh, c);
+ }
+ }
+ }
+
+
+
+ // Global escape
+
+ global_escape::global_escape (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), rl(reflevel), m(map), c(component)
+ {
+ assert (! is_meta_mode());
+ if (! is_global_mode()) {
+ if (! is_level_mode()) {
+ if (! is_singlemap_mode()) {
+ leave_local_mode (cgh);
+ }
+ leave_singlemap_mode (cgh);
+ }
+ leave_level_mode (cgh);
+ }
+ }
+
+ global_escape::~global_escape ()
+ {
+ assert (is_global_mode());
+ if (rl != -1) {
+ enter_level_mode (cgh, rl);
+ if (m != -1) {
+ enter_singlemap_mode (cgh, m);
+ if (c != -1) {
+ enter_local_mode (cgh, c);
+ }
+ }
+ }
+ }
+
+
+
+ // Meta escape
+
+ meta_escape::meta_escape (cGH const * const cgh_)
+ : cgh(const_cast<cGH*>(cgh_)), ml(mglevel), rl(reflevel), m(map), c(component)
+ {
+ if (! is_meta_mode()) {
+ if (! is_global_mode()) {
+ if (! is_level_mode()) {
+ if (! is_singlemap_mode()) {
+ leave_local_mode (cgh);
+ }
+ leave_singlemap_mode (cgh);
+ }
+ leave_level_mode (cgh);
+ }
+ leave_global_mode (cgh);
+ }
+ }
+
+ meta_escape::~meta_escape ()
+ {
+ assert (is_meta_mode());
+ if (ml != -1) {
+ enter_global_mode (cgh, ml);
+ if (rl != -1) {
+ enter_level_mode (cgh, rl);
+ if (m != -1) {
+ enter_singlemap_mode (cgh, m);
+ if (c != -1) {
+ enter_local_mode (cgh, c);
+ }
+ }
+ }
+ }
+ }
+
+
+
+ //
+ // Call functions in specific modes
+ //
+
+ int CallLocalFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh))
+ {
+ if (is_meta_mode()) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ } else if (is_global_mode()) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } END_REFLEVEL_LOOP;
+ } else if (is_level_mode()) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+ } else if (is_singlemap_mode()) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_LOCAL_COMPONENT_LOOP;
+ } else {
+ function (cgh);
+ }
+ return 0;
+ }
+
+ int CallSinglemapFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh))
+ {
+ if (is_meta_mode()) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_MAP_LOOP;
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ } else if (is_global_mode()) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_MAP_LOOP;
+ } END_REFLEVEL_LOOP;
+ } else if (is_level_mode()) {
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ function (cgh);
+ } END_MAP_LOOP;
+ } else {
+ BEGIN_SINGLEMAP_MODE(cgh) {
+ function (cgh);
+ } END_SINGLEMAP_MODE;
+ }
+ return 0;
+ }
+
+ int CallLevelFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh))
+ {
+ if (is_meta_mode()) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ function (cgh);
+ } END_REFLEVEL_LOOP;
+ } END_MGLEVEL_LOOP;
+ } else if (is_global_mode()) {
+ BEGIN_REFLEVEL_LOOP(cgh) {
+ function (cgh);
+ } END_REFLEVEL_LOOP;
+ } else {
+ BEGIN_LEVEL_MODE(cgh) {
+ function (cgh);
+ } END_LEVEL_MODE;
+ }
+ return 0;
+ }
+
+ int CallGlobalFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh))
+ {
+ if (is_meta_mode()) {
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ function (cgh);
+ } END_MGLEVEL_LOOP;
+ } else {
+ BEGIN_GLOBAL_MODE(cgh) {
+ function (cgh);
+ } END_GLOBAL_MODE;
+ }
+ return 0;
+ }
+
+ int CallMetaFunction (cGH * const cgh,
+ void (* const function) (cGH * const cgh))
+ {
+ BEGIN_META_MODE(cgh) {
+ function (cgh);
+ } END_META_MODE;
+ return 0;
+ }
+
+
+
+ //
+ // Call a scheduling group
+ //
+
+ int CallScheduleGroup (cGH * const cgh, const char * const group)
+ {
+ CCTK_ScheduleTraverse (group, cgh, CallFunction);
+ return 0;
+ }
+
+ extern "C" void CCTK_FCALL CCTK_FNAME(CallScheduleGroup)
+ (int * const ierr, cGH * const * const cgh, ONE_FORTSTRING_ARG)
+ {
+ ONE_FORTSTRING_CREATE (group);
+ *ierr = CallScheduleGroup (*cgh, group);
+ free (group);
+ }
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/modes.hh b/Carpet/Carpet/src/modes.hh
new file mode 100644
index 000000000..b8cf65d92
--- /dev/null
+++ b/Carpet/Carpet/src/modes.hh
@@ -0,0 +1,322 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/modes.hh,v 1.2 2004/06/14 09:42:53 schnetter Exp $
+
+#ifndef MODES_HH
+#define MODES_HH
+
+#include "cctk.h"
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ //
+ // These are the modes:
+ //
+ // meta mode:
+ // global mode: mglevel ("convergence level") is defined
+ // level mode: reflevel is defined
+ // singlemap mode: map ("map index") is defined
+ // local mode: component ("patch index")
+ //
+ // maybe missing:
+ // convtest mode: [rl, map, c]
+ //
+
+
+
+ // Mode indicators
+ bool is_meta_mode ();
+ bool is_global_mode ();
+ bool is_level_mode ();
+ bool is_singlemap_mode ();
+ bool is_local_mode ();
+
+
+
+ // Mode setting
+
+ void enter_global_mode (cGH * const cgh, int const ml);
+ void leave_global_mode (cGH * const cgh);
+
+ void enter_level_mode (cGH * const cgh, int const rl);
+ void leave_level_mode (cGH * const cgh);
+
+ void enter_singlemap_mode (cGH * const cgh, int const m);
+ void leave_singlemap_mode (cGH * const cgh);
+
+ void enter_local_mode (cGH * const cgh, int const c);
+ void leave_local_mode (cGH * const cgh);
+
+
+
+ // Mode iterators
+
+ class mglevel_iterator {
+ cGH * cgh;
+ int ml;
+ public:
+ mglevel_iterator (cGH const * const cgh);
+ ~mglevel_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+ class reverse_mglevel_iterator {
+ cGH * cgh;
+ int ml;
+ public:
+ reverse_mglevel_iterator (cGH const * const cgh);
+ ~reverse_mglevel_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+ class reflevel_iterator {
+ cGH * cgh;
+ int rl;
+ public:
+ reflevel_iterator (cGH const * const cgh);
+ ~reflevel_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+ class reverse_reflevel_iterator {
+ cGH * cgh;
+ int rl;
+ public:
+ reverse_reflevel_iterator (cGH const * const cgh);
+ ~reverse_reflevel_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+ // Loop over all maps. If grouptype is CCTK_GF, then loop over grid
+ // function maps. If grouptype is CCTK_ARRAY (or CCTK_SCALAR), then
+ // loop over grid array (or grid scalar) maps. In the latter case,
+ // map denotes the current grid array map, i.e. it cannot be used to
+ // access grid functions.
+ class map_iterator {
+ cGH * cgh;
+ int grouptype;
+ int m;
+ public:
+ map_iterator (cGH const * const cgh, int const grouptype);
+ ~map_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+ // Loop over all components. If grouptype is CCTK_GF, then loop
+ // over grid function components. If grouptype is CCTK_ARRAY (or
+ // CCTK_SCALAR), then loop over grid array (or grid scalar)
+ // components. In the latter case, component denotes the current
+ // grid array component, i.e. it cannot be used to index grid
+ // functions.
+ class component_iterator {
+ cGH * cgh;
+ int grouptype;
+ int c;
+ public:
+ component_iterator (cGH const * const cgh, int const grouptype);
+ ~component_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+ class local_component_iterator {
+ cGH * cgh;
+ int grouptype;
+ int c;
+ public:
+ local_component_iterator (cGH const * const cgh, int const grouptype);
+ ~local_component_iterator ();
+ bool done () const;
+ void step ();
+ };
+
+
+
+ // Compatibility defines for the mode iterators
+
+#define BEGIN_MGLEVEL_LOOP(cgh) \
+ do { \
+ bool mglevel_loop_ = true; \
+ for (mglevel_iterator mg_iter_(cgh); \
+ !mg_iter_.done(); \
+ mg_iter_.step()) {
+#define END_MGLEVEL_LOOP \
+ } \
+ assert (mglevel_loop_); \
+ mglevel_loop_ = false; \
+ } while (false)
+
+#define BEGIN_REVERSE_MGLEVEL_LOOP(cgh) \
+ do { \
+ bool reverse_mglevel_loop_ = true; \
+ for (reverse_mglevel_iterator mg_iter_(cgh); \
+ !mg_iter_.done(); \
+ mg_iter_.step()) {
+#define END_REVERSE_MGLEVEL_LOOP \
+ } \
+ assert (reverse_mglevel_loop_); \
+ reverse_mglevel_loop_ = false; \
+ } while (false)
+
+#define BEGIN_REFLEVEL_LOOP(cgh) \
+ do { \
+ bool reflevel_loop_ = true; \
+ for (reflevel_iterator ref_iter_(cgh); \
+ !ref_iter_.done(); \
+ ref_iter_.step()) {
+#define END_REFLEVEL_LOOP \
+ } \
+ assert (reflevel_loop_); \
+ reflevel_loop_ = false; \
+ } while (false)
+
+#define BEGIN_REVERSE_REFLEVEL_LOOP(cgh) \
+ do { \
+ bool reverse_reflevel_loop_ = true; \
+ for (reverse_reflevel_iterator ref_iter_(cgh); \
+ !ref_iter_.done(); \
+ ref_iter_.step()) {
+#define END_REVERSE_REFLEVEL_LOOP \
+ } \
+ assert (reverse_reflevel_loop_); \
+ reverse_reflevel_loop_ = false; \
+ } while (false)
+
+#define BEGIN_MAP_LOOP(cgh, grouptype) \
+ do { \
+ bool map_loop_ = true; \
+ for (map_iterator map_iter_(cgh, grouptype); \
+ !map_iter_.done(); \
+ map_iter_.step()) {
+#define END_MAP_LOOP \
+ } \
+ assert (map_loop_); \
+ map_loop_ = false; \
+ } while (false)
+
+#define BEGIN_COMPONENT_LOOP(cgh, grouptype) \
+ do { \
+ bool component_loop_ = true; \
+ for (component_iterator comp_iter_(cgh, grouptype); \
+ !comp_iter_.done(); \
+ comp_iter_.step()) {
+#define END_COMPONENT_LOOP \
+ } \
+ assert (component_loop_); \
+ component_loop_ = false; \
+ } while (false)
+
+#define BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) \
+ do { \
+ bool local_component_loop_ = true; \
+ for (local_component_iterator comp_iter_(cgh, grouptype); \
+ !comp_iter_.done(); \
+ comp_iter_.step()) {
+#define END_LOCAL_COMPONENT_LOOP \
+ } \
+ assert (local_component_loop_); \
+ local_component_loop_ = false; \
+ } while (false)
+
+
+
+ // Mode escapes
+
+ class singlemap_escape {
+ cGH * cgh;
+ int c;
+ public:
+ singlemap_escape (cGH const * const cgh);
+ ~singlemap_escape ();
+ };
+
+ class level_escape {
+ cGH * cgh;
+ int m;
+ int c;
+ public:
+ level_escape (cGH const * const cgh);
+ ~level_escape ();
+ };
+
+ class global_escape {
+ cGH * cgh;
+ int rl;
+ int m;
+ int c;
+ public:
+ global_escape (cGH const * const cgh);
+ ~global_escape ();
+ };
+
+ class meta_escape {
+ cGH * cgh;
+ int ml;
+ int rl;
+ int m;
+ int c;
+ public:
+ meta_escape (cGH const * const cgh);
+ ~meta_escape ();
+ };
+
+
+
+ // Compatibility defines for the mode escapes
+
+#define BEGIN_SINGLEMAP_MODE(cgh) \
+ do { \
+ bool singlemap_mode_ = true; \
+ singlemap_escape esc_(cgh); \
+ {
+#define END_SINGLEMAP_MODE \
+ } \
+ assert (singlemap_mode_); \
+ singlemap_mode_ = false; \
+ } while (false)
+
+#define BEGIN_LEVEL_MODE(cgh) \
+ do { \
+ bool level_mode_ = true; \
+ level_escape esc_(cgh); \
+ {
+#define END_LEVEL_MODE \
+ } \
+ assert (level_mode_); \
+ level_mode_ = false; \
+ } while (false)
+
+#define BEGIN_GLOBAL_MODE(cgh) \
+ do { \
+ bool global_mode_ = true; \
+ global_escape esc_(cgh); \
+ {
+#define END_GLOBAL_MODE \
+ } \
+ assert (global_mode_); \
+ global_mode_ = false; \
+ } while (false)
+
+#define BEGIN_META_MODE(cgh) \
+ do { \
+ bool meta_mode_ = true; \
+ meta_escape esc_(cgh); \
+ {
+#define END_META_MODE \
+ } \
+ assert (meta_mode_); \
+ meta_mode_ = false; \
+ } while (false)
+
+} // namespace Carpet
+
+#endif // !defined(MODES_HH)
diff --git a/Carpet/Carpet/src/typecase b/Carpet/Carpet/src/typecase
new file mode 100644
index 000000000..abb79038d
--- /dev/null
+++ b/Carpet/Carpet/src/typecase
@@ -0,0 +1,187 @@
+// Instantiate type cases for all available types -*-C++-*-
+// (C) 2001 Erik Schnetter <schnetter@uni-tuebingen.de>
+
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/typecase,v 1.9 2004/03/01 21:34:52 schnetter Exp $
+
+// Usage:
+// Define the macro TYPECASE(N,T) to be a typecase for the type T with name N,
+// then include this file,
+// then undefine the macro TYPECASE.
+
+
+
+// Decide which types to typecase
+
+#ifdef CARPET_ALL
+# undef CARPET_BYTE
+# undef CARPET_INT
+# undef CARPET_REAL
+# undef CARPET_COMPLEX
+# define CARPET_BYTE
+# define CARPET_INT
+# define CARPET_REAL
+# define CARPET_COMPLEX
+#endif
+
+#ifdef CARPET_ALL_INT
+# undef CARPET_INT1
+# undef CARPET_INT2
+# undef CARPET_INT4
+# undef CARPET_INT8
+# define CARPET_INT1
+# define CARPET_INT2
+# define CARPET_INT4
+# define CARPET_INT8
+#endif
+
+#ifdef CARPET_ALL_REAL
+# undef CARPET_REAL4
+# undef CARPET_REAL8
+# undef CARPET_REAL16
+# define CARPET_REAL4
+# define CARPET_REAL8
+# define CARPET_REAL16
+#endif
+
+#ifdef CARPET_ALL_COMPLEX
+# undef CARPET_COMPLEX8
+# undef CARPET_COMPLEX16
+# undef CARPET_COMPLEX32
+# define CARPET_COMPLEX8
+# define CARPET_COMPLEX16
+# define CARPET_COMPLEX32
+#endif
+
+#if !defined(CARPET_BYTE) && !defined(CARPET_INT) && !defined(CARPET_INT1) && !defined(CARPET_INT2) && !defined(CARPET_INT4) && !defined(CARPET_INT8) && !defined(CARPET_REAL) && !defined(CARPET_REAL4) && !defined(CARPET_REAL8) && !defined(CARPET_REAL16) && !defined(CARPET_COMPLEX) && !defined(CARPET_COMPLEX8) && !defined(CARPET_COMPLEX16) && !defined(CARPET_COMPLEX32)
+// Assume the user just wants INT, REAL, and COMPLEX
+# undef CARPET_INT
+# define CARPET_INT
+# undef CARPET_REAL
+# define CARPET_REAL
+# undef CARPET_COMPLEX
+# define CARPET_COMPLEX
+#endif
+
+#ifdef CARPET_INT
+# ifdef CCTK_INTEGER_PRECISION_1
+# undef CARPET_INT1
+# define CARPET_INT1
+# endif
+# ifdef CCTK_INTEGER_PRECISION_2
+# undef CARPET_INT2
+# define CARPET_INT2
+# endif
+# ifdef CCTK_INTEGER_PRECISION_4
+# undef CARPET_INT4
+# define CARPET_INT4
+# endif
+# ifdef CCTK_INTEGER_PRECISION_8
+# undef CARPET_INT8
+# define CARPET_INT8
+# endif
+#endif
+#ifdef CARPET_REAL
+# ifdef CCTK_REAL_PRECISION_4
+# undef CARPET_REAL4
+# define CARPET_REAL4
+# endif
+# ifdef CCTK_REAL_PRECISION_8
+# undef CARPET_REAL8
+# define CARPET_REAL8
+# endif
+# ifdef CCTK_REAL_PRECISION_16
+# undef CARPET_REAL16
+# define CARPET_REAL16
+# endif
+#endif
+#ifdef CARPET_COMPLEX
+# ifdef CCTK_REAL_PRECISION_4
+# undef CARPET_COMPLEX8
+# define CARPET_COMPLEX8
+# endif
+# ifdef CCTK_REAL_PRECISION_8
+# undef CARPET_COMPLEX16
+# define CARPET_COMPLEX16
+# endif
+# ifdef CCTK_REAL_PRECISION_16
+# undef CARPET_COMPLEX32
+# define CARPET_COMPLEX32
+# endif
+#endif
+
+
+
+// // Check
+// #if !defined(CARPET_BYTE) && !defined(CARPET_INT1) && !defined(CARPET_INT2) && !defined(CARPET_INT4) && !defined(CARPET_INT8) && !defined(CARPET_REAL4) && !defined(CARPET_REAL8) && !defined(CARPET_REAL16) && !defined(CARPET_COMPLEX8) && !defined(CARPET_COMPLEX16) && !defined(CARPET_COMPLEX32)
+// # error "You have not defined which grid function types to instantiate."
+// #endif
+
+
+
+// Typecase the desired types
+
+#ifdef CARPET_BYTE
+TYPECASE(CCTK_VARIABLE_BYTE, CCTK_BYTE)
+#endif
+
+#ifdef CARPET_INT
+TYPECASE(CCTK_VARIABLE_INT, CCTK_INT)
+#endif
+#ifdef CARPET_INT1
+# ifdef CCTK_INT1
+TYPECASE(CCTK_VARIABLE_INT1, CCTK_INT1)
+# endif
+#endif
+#ifdef CARPET_INT2
+# ifdef CCTK_INT2
+TYPECASE(CCTK_VARIABLE_INT2, CCTK_INT2)
+# endif
+#endif
+#ifdef CARPET_INT4
+# ifdef CCTK_INT4
+TYPECASE(CCTK_VARIABLE_INT4, CCTK_INT4)
+# endif
+#endif
+#ifdef CARPET_INT8
+# ifdef CCTK_INT8
+TYPECASE(CCTK_VARIABLE_INT8, CCTK_INT8)
+# endif
+#endif
+
+#ifdef CARPET_REAL
+TYPECASE(CCTK_VARIABLE_REAL, CCTK_REAL)
+#endif
+#ifdef CARPET_REAL4
+# ifdef CCTK_REAL4
+TYPECASE(CCTK_VARIABLE_REAL4, CCTK_REAL4)
+# endif
+#endif
+#ifdef CARPET_REAL8
+# ifdef CCTK_REAL8
+TYPECASE(CCTK_VARIABLE_REAL8, CCTK_REAL8)
+# endif
+#endif
+#ifdef CARPET_REAL16
+# ifdef CCTK_REAL16
+TYPECASE(CCTK_VARIABLE_REAL16, CCTK_REAL16)
+# endif
+#endif
+
+#ifdef CARPET_COMPLEX
+TYPECASE(CCTK_VARIABLE_COMPLEX, CCTK_COMPLEX)
+#endif
+#ifdef CARPET_COMPLEX8
+# ifdef CCTK_REAL4
+TYPECASE(CCTK_VARIABLE_COMPLEX8, CCTK_COMPLEX8)
+# endif
+#endif
+#ifdef CARPET_COMPLEX16
+# ifdef CCTK_REAL8
+TYPECASE(CCTK_VARIABLE_COMPLEX16, CCTK_COMPLEX16)
+# endif
+#endif
+#ifdef CARPET_COMPLEX32
+# ifdef CCTK_REAL16
+TYPECASE(CCTK_VARIABLE_COMPLEX32, CCTK_COMPLEX32)
+# endif
+#endif
diff --git a/Carpet/Carpet/src/util/plot-bboxes b/Carpet/Carpet/src/util/plot-bboxes
new file mode 100644
index 000000000..0bde21283
--- /dev/null
+++ b/Carpet/Carpet/src/util/plot-bboxes
@@ -0,0 +1 @@
+splot "< awk 'BEGIN { FS=\"[][,]\"; } { print $2,$3,$4; print $6,$3,$4; print $6,$7,$4; print $2,$7,$4; print $2,$3,$4; print \"\"; print $2,$3,$8; print $6,$3,$8; print $6,$7,$8; print $2,$7,$8; print $2,$3,$8; print \"\"; print $2,$3,$4; print $2,$3,$8; print \"\"; print $6,$3,$4; print $6,$3,$8; print \"\"; print $2,$7,$4; print $2,$7,$8; print \"\"; print $6,$7,$4; print $6,$7,$8; print \"\"; }' < /dev/tty" w l
diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc
new file mode 100644
index 000000000..f23c8d3f6
--- /dev/null
+++ b/Carpet/Carpet/src/variables.cc
@@ -0,0 +1,98 @@
+
+#include "variables.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.22 2004/05/21 18:16:23 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_variables_cc);
+}
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ // Handle from CCTK_RegisterGHExtension
+ int GHExtension;
+
+ // Maximum number of refinement levels
+ int maxreflevels;
+
+ // Refinement levels
+ int reflevels;
+
+ // Refinement factor
+ int reffact;
+
+ // Refinement factor on finest grid
+ int maxreflevelfact;
+
+ // Base multigrid level
+ int basemglevel;
+
+ // Multigrid levels
+ int mglevels;
+
+ // Multigrid factor
+ int mgfact;
+
+ // Multigrid factor on coarsest grid
+ int maxmglevelfact;
+
+ // Maps
+ int maps;
+
+
+
+ // Current position on the grid hierarchy
+ int reflevel;
+ int mglevel;
+ int map;
+ int component;
+
+ // refinement factor of current level: ipow(refinement_factor, reflevel)
+ int reflevelfact;
+
+ // multigrid factor of current level: ipow(multigrid_factor, mglevel)
+ int mglevelfact;
+
+
+
+ // Carpet's GH
+ CarpetGH carpetGH;
+
+
+
+ // Times and spaces on the refinement levels
+ CCTK_REAL global_time;
+ vector<vector<CCTK_REAL> > leveltimes; // [mglevel][reflevel]
+ CCTK_REAL delta_time;
+
+ vector<vect<CCTK_REAL,dim> > origin_space; // [mglevel]
+ vect<CCTK_REAL,dim> delta_space;
+
+
+
+ // Is this the time for a global mode call?
+ bool do_meta_mode;
+ bool do_global_mode;
+
+ // Is prolongation enabled?
+ bool do_prolongate;
+
+
+
+ // Data for grid functions
+
+ // The grid hierarchy
+ vector<gh<dim>*> vhh; // [map]
+ vector<dh<dim>*> vdd; // [map]
+ vector<th<dim>*> vtt; // [map]
+
+ // Data for the groups
+ vector<groupdesc> groupdata; // [group]
+
+ // Data for everything
+ vector<vector<arrdesc> > arrdata; // [group][map]
+
+} // namespace Carpet
diff --git a/Carpet/Carpet/src/variables.hh b/Carpet/Carpet/src/variables.hh
new file mode 100644
index 000000000..284f6d1ae
--- /dev/null
+++ b/Carpet/Carpet/src/variables.hh
@@ -0,0 +1,136 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.hh,v 1.5 2004/05/21 18:16:23 schnetter Exp $
+
+// It is assumed that each group has at least one map. All arrays
+// have exactly one map. All maps have the same number of refinement
+// levels.
+
+// It is assumed that each group has at least one component.
+
+// It is assumed that the number of components of all arrays is equal
+// to the number of components of the grid functions, and that their
+// distribution onto the processors is the same, and that all
+// processors own the same number of components.
+
+#ifndef VARIABLES_HH
+#define VARIABLES_HH
+
+#include <vector>
+
+#include "cctk.h"
+
+#include "data.hh"
+#include "dh.hh"
+#include "ggf.hh"
+#include "gh.hh"
+#include "operators.hh"
+#include "th.hh"
+#include "vect.hh"
+
+#include "carpet_public.h"
+#include "defines.hh"
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ // Handle from CCTK_RegisterGHExtension
+ extern int GHExtension;
+
+ // Maximum number of refinement levels
+ extern int maxreflevels;
+
+ // Refinement levels
+ extern int reflevels;
+
+ // Refinement factor
+ extern int reffact;
+
+ // Refinement factor on finest possible grid
+ extern int maxreflevelfact;
+
+ // Base multigrid level
+ extern int basemglevel;
+
+ // Multigrid levels
+ extern int mglevels;
+
+ // Multigrid factor
+ extern int mgfact;
+
+ // Multigrid factor on coarsest grid
+ extern int maxmglevelfact;
+
+ // Maps
+ extern int maps;
+
+
+
+ // Current position on the grid hierarchy
+ extern int reflevel;
+ extern int mglevel;
+ extern int map;
+ extern int component;
+
+ // Current refinement factor
+ extern int reflevelfact;
+
+ // Current multigrid factor
+ extern int mglevelfact;
+
+
+
+ // Carpet's GH
+ extern CarpetGH carpetGH;
+
+
+
+ // Times and spaces on the refinement levels
+ extern CCTK_REAL global_time;
+ extern vector<vector<CCTK_REAL> > leveltimes; // [mglevel][reflevel]
+ extern CCTK_REAL delta_time;
+
+ extern vector<vect<CCTK_REAL,dim> > origin_space; // [mglevel]
+ extern vect<CCTK_REAL,dim> delta_space;
+
+
+
+ // Is this the time for a global mode call?
+ extern bool do_meta_mode;
+ extern bool do_global_mode;
+
+ // Is prolongation enabled?
+ extern bool do_prolongate;
+
+
+
+ // Data for grid functions
+
+ // The grid hierarchy
+ extern vector<gh<dim>*> vhh; // [map]
+ extern vector<dh<dim>*> vdd; // [map]
+ extern vector<th<dim>*> vtt; // [map]
+
+ // Data for the groups
+ struct groupdesc {
+ cGroupDynamicData info;
+ operator_type transport_operator; // prolongation and restriction
+ };
+ extern vector<groupdesc> groupdata; // [group]
+
+ // Data for everything
+ struct arrdesc {
+ // points to hh etc. for GF, and is unique for SCALAR and ARRAY
+ gh<dim>* hh;
+ dh<dim>* dd;
+ th<dim>* tt;
+ vector<ggf<dim>*> data; // [var]
+ };
+ extern vector<vector<arrdesc> > arrdata; // [group][map]
+
+} // namespace Carpet
+
+#endif // !defined(VARIABLES_HH)
diff --git a/Carpet/CarpetIOASCII/COPYING b/Carpet/CarpetIOASCII/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetIOASCII/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetIOASCII/README b/Carpet/CarpetIOASCII/README
new file mode 100644
index 000000000..b47824330
--- /dev/null
+++ b/Carpet/CarpetIOASCII/README
@@ -0,0 +1,8 @@
+Cactus Code Thorn CarpetIOASCII
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/README,v 1.3 2004/01/25 14:57:28 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides ASCII output for Carpet.
diff --git a/Carpet/CarpetIOASCII/configuration.ccl b/Carpet/CarpetIOASCII/configuration.ccl
new file mode 100644
index 000000000..06e1c135d
--- /dev/null
+++ b/Carpet/CarpetIOASCII/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/configuration.ccl,v 1.4 2004/06/08 21:09:25 schnetter Exp $
+
+REQUIRES Carpet CarpetLib IOUtil
+
+REQUIRES THORNS: Carpet CarpetLib IOUtil
diff --git a/Carpet/CarpetIOASCII/doc/documentation.tex b/Carpet/CarpetIOASCII/doc/documentation.tex
new file mode 100644
index 000000000..1472de65a
--- /dev/null
+++ b/Carpet/CarpetIOASCII/doc/documentation.tex
@@ -0,0 +1,154 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/doc/documentation.tex,v 1.1 2002/10/16 12:36:05 schnetter Exp $
+%
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevent thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % STARTx CACTUS THORNGUIDE",
+% except for filling in the title, author, date etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be sparated with a \\ or a comma
+% - You can define your own macros are OK, but they must appear after
+% the STARTx CACTUS THORNGUIDE line, and do not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphix package.
+% More specifically, with the "includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us (later) to create a PDF version of the ThornGuide
+% via pdflatex. |
+% - References should be included with the latex "bibitem" command.
+% - use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/doc/documentation.tex,v 1.1 2002/10/16 12:36:05 schnetter Exp $
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../../doc/ThornGuide/cactus}
+
+\begin{document}
+
+% The author of the documentation
+\author{Erik Schnetter}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{CarpetIOASCII}
+
+% the date your document was last changed, if your document is in CVS,
+% please use:
+\date{$ $Date: 2002/10/16 12:36:05 $ $}
+%\date{}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here
+% \def\mydef etc
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+ This thorn reproduces thorn IOASCII from arrangement CactusBase but
+ is specifically for the driver thorn Carpet.
+\end{abstract}
+
+% The following sections are suggestive only.
+% Remove them or add your own.
+
+\section{Introduction}
+
+This thorn provides ASCII output of data in 1, 2 or 3 dimensions. It
+reproduces most of the functionality of thorn IOASCII from the
+standard CactusBase arrangement. Where possible the names of
+parameters and their use is identical. For most purposes it should be
+sufficient to take a parameter file written for the standard IOASCII
+and just change the active thorn.
+
+However, this thorn outputs considerably more information than the
+standard IOASCII thorn. Information about, e.g., the refinement level
+and the index position of the output are also given. All the output
+can be visualized using gnuplot.
+
+\section{Utilities}
+\label{sec:utils}
+
+For those that prefer other visualization packages than gnuplot there
+are some utilities in the src/util directory. These are
+\begin{itemize}
+\item {\bf carpet2sdf} A program to convert to a format suitable for
+ the {\it ser} program written by M. Choptuik,
+\item {\bf carpet2xgraph} A program to convert to a format suitable
+ for the {\it xgraph} or {\it ygraph} packages of P. Walker and D.
+ Pollney,
+\item {\bf Carpet2ygraph.pl} A perl script to convert to a format
+ suitable for the {\it xgraph} or {\it ygraph} packages of P. Walker
+ and D. Pollney.
+\end{itemize}
+The first two, written by Scott Hawley, are C codes that require the
+Makefile (building using the -utils flag from the main Cactus
+directory currently does not work). Each output one refinement level,
+either to standard output or to a file.
+
+The last script writes all refinement levels from a given file in a
+given direction to a number of different files given a prefix
+filename, where the number in the output filename is given by the
+refinement level.
+
+
+\begin{thebibliography}{9}
+
+\end{thebibliography}
+
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}
diff --git a/Carpet/CarpetIOASCII/interface.ccl b/Carpet/CarpetIOASCII/interface.ccl
new file mode 100644
index 000000000..049da8c86
--- /dev/null
+++ b/Carpet/CarpetIOASCII/interface.ccl
@@ -0,0 +1,22 @@
+# Interface definition for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/interface.ccl,v 1.14 2004/06/21 16:07:19 schnetter Exp $
+
+IMPLEMENTS: IOASCII
+
+uses include header: carpet.hh
+
+uses include header: dist.hh
+
+uses include header: vect.hh
+
+uses include header: data.hh
+uses include header: gdata.hh
+
+uses include header: gf.hh
+uses include header: ggf.hh
+
+
+
+CCTK_INT last_output_iteration[4] TYPE=scalar
+CCTK_REAL last_output_time[4] TYPE=scalar
+CCTK_INT this_iteration[4] TYPE=scalar
diff --git a/Carpet/CarpetIOASCII/param.ccl b/Carpet/CarpetIOASCII/param.ccl
new file mode 100644
index 000000000..9d2586fc4
--- /dev/null
+++ b/Carpet/CarpetIOASCII/param.ccl
@@ -0,0 +1,375 @@
+# Parameter definitions for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/param.ccl,v 1.16 2004/06/23 17:35:11 tradke Exp $
+
+
+
+shares: IO
+
+USES STRING out_dir
+
+USES KEYWORD out_criterion
+USES CCTK_INT out_every
+USES CCTK_REAL out_dt
+
+
+
+USES CCTK_INT out_xline_yi
+USES CCTK_INT out_xline_zi
+USES CCTK_INT out_yline_xi
+USES CCTK_INT out_yline_zi
+USES CCTK_INT out_zline_xi
+USES CCTK_INT out_zline_yi
+
+USES CCTK_REAL out_xline_y
+USES CCTK_REAL out_xline_z
+USES CCTK_REAL out_yline_x
+USES CCTK_REAL out_yline_z
+USES CCTK_REAL out_zline_x
+USES CCTK_REAL out_zline_y
+
+
+
+USES CCTK_INT out_xyplane_zi
+USES CCTK_INT out_xzplane_yi
+USES CCTK_INT out_yzplane_xi
+
+USES CCTK_REAL out_xyplane_z
+USES CCTK_REAL out_xzplane_y
+USES CCTK_REAL out_yzplane_x
+
+
+
+USES BOOLEAN new_filename_scheme
+USES BOOLEAN strict_io_parameter_check
+
+
+
+private:
+
+
+
+BOOLEAN out3D_ghosts "Output ghost zones as well"
+{
+} "yes"
+
+BOOLEAN out3D_outer_ghosts "Output outer boundary ghost zones as well"
+{
+} "yes"
+
+
+
+BOOLEAN output_all_timelevels "Output all timelevels instead of only the current" STEERABLE = ALWAYS
+{
+} "no"
+
+
+
+BOOLEAN separate_grids "Separate grid levels in the output file by additional empty lines"
+{
+} "yes"
+
+BOOLEAN separate_components "Separate grid components in the output file by additional empty lines"
+{
+} "no"
+
+
+
+INT out_precision "How many digits to output floating-point numbers with" STEERABLE = ALWAYS
+{
+ 1:15 :: "Number of precision digits"
+} 15
+
+
+
+CCTK_STRING out0D_dir "Name of 0D ASCII output directory, overrides IO::out_dir" STEERABLE = ALWAYS
+{
+ "^$" :: "Empty: use IO::out_dir"
+ ".+" :: "Not empty: directory name"
+} ""
+
+CCTK_STRING out1D_dir "Name of 1D ASCII output directory, overrides IO::out_dir" STEERABLE = ALWAYS
+{
+ "^$" :: "Empty: use IO::out_dir"
+ ".+" :: "Not empty: directory name"
+} ""
+
+CCTK_STRING out2D_dir "Name of 2D ASCII output directory, overrides IO::out_dir" STEERABLE = ALWAYS
+{
+ "^$" :: "Empty: use IO::out_dir"
+ ".+" :: "Not empty: directory name"
+} ""
+
+CCTK_STRING out3D_dir "Name of 3D ASCII output directory, overrides IO::out_dir" STEERABLE = ALWAYS
+{
+ "^$" :: "Empty: use IO::out_dir"
+ ".+" :: "Not empty: directory name"
+} ""
+
+
+
+CCTK_STRING out0D_vars "Variables to output in 0D ASCII file format" STEERABLE = ALWAYS
+{
+ ".*" :: "List of group or variable names"
+} ""
+
+CCTK_STRING out1D_vars "Variables to output in 1D ASCII file format" STEERABLE = ALWAYS
+{
+ ".*" :: "List of group or variable names"
+} ""
+
+CCTK_STRING out2D_vars "Variables to output in 2D ASCII file format" STEERABLE = ALWAYS
+{
+ ".*" :: "List of group or variable names"
+} ""
+
+CCTK_STRING out3D_vars "Variables to output in 3D ASCII file format" STEERABLE = ALWAYS
+{
+ ".*" :: "List of group or variable names"
+} ""
+
+
+
+KEYWORD out0D_criterion "Criterion to select 0D ASCII output intervals, overrides out_every" STEERABLE = ALWAYS
+{
+ "default" :: "Use IO::out_criterion"
+ "never" :: "Never output"
+ "iteration" :: "Output every so many iterations"
+ "divisor" :: "Output if iteration mod divisor == 0."
+ "time" :: "Output every that much coordinate time"
+} "default"
+
+KEYWORD out1D_criterion "Criterion to select 1D ASCII output intervals, overrides out_every" STEERABLE = ALWAYS
+{
+ "default" :: "Use IO::out_criterion"
+ "never" :: "Never output"
+ "iteration" :: "Output every so many iterations"
+ "divisor" :: "Output if (iteration % out_every) == 0."
+ "time" :: "Output every that much coordinate time"
+} "default"
+
+KEYWORD out2D_criterion "Criterion to select 2D ASCII output intervals, overrides out_every" STEERABLE = ALWAYS
+{
+ "default" :: "Use IO::out_criterion"
+ "never" :: "Never output"
+ "iteration" :: "Output every so many iterations"
+ "divisor" :: "Output if (iteration % out_every) == 0."
+ "time" :: "Output every that much coordinate time"
+} "default"
+
+KEYWORD out3D_criterion "Criterion to select 3D ASCII output intervals, overrides out_every" STEERABLE = ALWAYS
+{
+ "default" :: "Use IO::out_criterion"
+ "never" :: "Never output"
+ "iteration" :: "Output every so many iterations"
+ "divisor" :: "Output if (iteration % out_every) == 0."
+ "time" :: "Output every that much coordinate time"
+} "default"
+
+
+
+CCTK_INT out0D_every "How often to do 0D ASCII output, overrides out_every" STEERABLE = ALWAYS
+{
+ 1:* :: "Output every so many time steps"
+ -1:0 :: "No output"
+ -2 :: "Use IO::out_every"
+} -2
+
+CCTK_INT out1D_every "How often to do 1D ASCII output, overrides out_every" STEERABLE = ALWAYS
+{
+ 1:* :: "Output every so many time steps"
+ -1:0 :: "No output"
+ -2 :: "Use IO::out_every"
+} -2
+
+CCTK_INT out2D_every "How often to do 2D ASCII output, overrides out_every" STEERABLE = ALWAYS
+{
+ 1:* :: "Output every so many time steps"
+ -1:0 :: "No output"
+ -2 :: "Use IO::out_every"
+} -2
+
+CCTK_INT out3D_every "How often to do 3D ASCII output, overrides out_every" STEERABLE = ALWAYS
+{
+ 1:* :: "Output every so many time steps"
+ -1:0 :: "No output"
+ -2 :: "Use IO::out_every"
+} -2
+
+
+
+REAL out0D_dt "How often to do 0D ASCII output, overrides IO::out_dt" STEERABLE = ALWAYS
+{
+ (0:* :: "In intervals of that much coordinate time"
+ 0 :: "As often as possible"
+ -1 :: "Disable output"
+ -2 :: "Default to IO::out_dt"
+} -2
+
+REAL out1D_dt "How often to do 1D ASCII output, overrides IO::out_dt" STEERABLE = ALWAYS
+{
+ (0:* :: "In intervals of that much coordinate time"
+ 0 :: "As often as possible"
+ -1 :: "Disable output"
+ -2 :: "Default to IO::out_dt"
+} -2
+
+REAL out2D_dt "How often to do 2D ASCII output, overrides IO::out_dt" STEERABLE = ALWAYS
+{
+ (0:* :: "In intervals of that much coordinate time"
+ 0 :: "As often as possible"
+ -1 :: "Disable output"
+ -2 :: "Default to IO::out_dt"
+} -2
+
+REAL out3D_dt "How often to do 3D ASCII output, overrides IO::out_dt" STEERABLE = ALWAYS
+{
+ (0:* :: "In intervals of that much coordinate time"
+ 0 :: "As often as possible"
+ -1 :: "Disable output"
+ -2 :: "Default to IO::out_dt"
+} -2
+
+
+
+CCTK_INT out0D_point_xi "x-index (counting from 0) for 0D points" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+CCTK_INT out0D_point_yi "y-index (counting from 0) for 0D points" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+CCTK_INT out0D_point_zi "z-index (counting from 0) for 0D points" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_REAL out0D_point_x "x coordinate for 0D points" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+CCTK_REAL out0D_point_y "y coordinate for 0D points" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+CCTK_REAL out0D_point_z "z coordinate for 0D points" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+
+
+BOOLEAN out1D_x "Do 1D IOASCII output in the x-direction" STEERABLE = ALWAYS
+{
+} "yes"
+BOOLEAN out1D_y "Do 1D IOASCII output in the y-direction" STEERABLE = ALWAYS
+{
+} "yes"
+BOOLEAN out1D_z "Do 1D IOASCII output in the z-direction" STEERABLE = ALWAYS
+{
+} "yes"
+
+CCTK_INT out1D_xline_yi "y-index (counting from 0) for 1D lines in x-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+CCTK_INT out1D_xline_zi "z-index (counting from 0) for 1D lines in x-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_INT out1D_yline_xi "x-index (counting from 0) for 1D lines in y-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+CCTK_INT out1D_yline_zi "z-index (counting from 0) for 1D lines in y-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_INT out1D_zline_xi "x-index (counting from 0) for 1D lines in z-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+CCTK_INT out1D_zline_yi "y-index (counting from 0) for 1D lines in z-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_REAL out1D_xline_y "y coordinate for 1D lines in x-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+CCTK_REAL out1D_xline_z "z coordinate for 1D lines in x-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+CCTK_REAL out1D_yline_x "x coordinate for 1D lines in y-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+CCTK_REAL out1D_yline_z "z coordinate for 1D lines in y-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+CCTK_REAL out1D_zline_x "x coordinate for 1D lines in z-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+CCTK_REAL out1D_zline_y "y coordinate for 1D lines in z-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+
+
+BOOLEAN out2D_xy "Do 2D IOASCII output in the xy-direction" STEERABLE = ALWAYS
+{
+} "yes"
+BOOLEAN out2D_xz "Do 2D IOASCII output in the xz-direction" STEERABLE = ALWAYS
+{
+} "yes"
+BOOLEAN out2D_yz "Do 2D IOASCII output in the yz-direction" STEERABLE = ALWAYS
+{
+} "yes"
+
+CCTK_INT out2D_xyplane_zi "z-index (counting from 0) for 2D planes in xy-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_INT out2D_xzplane_yi "y-index (counting from 0) for 2D planes in xz-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_INT out2D_yzplane_xi "x-index (counting from 0) for 2D planes in yz-direction" STEERABLE = ALWAYS
+{
+ 0:* :: ""
+} 0
+
+CCTK_REAL out2D_xyplane_z "z coordinate for 2D planes in xy-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+CCTK_REAL out2D_xzplane_y "y coordinate for 2D planes in xz-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+CCTK_REAL out2D_yzplane_x "x coordinate for 2D planes in yz-direction" STEERABLE = ALWAYS
+{
+ *:* :: ""
+} 0
+
+
+
+# These parameters are here for historic reasons only.
+# They might go away in the future. Do not use them.
+
+BOOLEAN out1D_d "do not use this parameter" STEERABLE = ALWAYS
+{
+} "yes"
diff --git a/Carpet/CarpetIOASCII/schedule.ccl b/Carpet/CarpetIOASCII/schedule.ccl
new file mode 100644
index 000000000..9cdfdd7b1
--- /dev/null
+++ b/Carpet/CarpetIOASCII/schedule.ccl
@@ -0,0 +1,16 @@
+# Schedule definitions for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/schedule.ccl,v 1.8 2004/06/21 16:07:19 schnetter Exp $
+
+storage: last_output_iteration last_output_time this_iteration
+
+schedule CarpetIOASCIIStartup at STARTUP after IOUtil_Startup
+{
+ LANG: C
+ OPTIONS: global
+} "Startup routine"
+
+schedule CarpetIOASCIIInit at BASEGRID
+{
+ LANG: C
+ OPTIONS: global
+} "Initialisation routine"
diff --git a/Carpet/CarpetIOASCII/src/ioascii.cc b/Carpet/CarpetIOASCII/src/ioascii.cc
new file mode 100644
index 000000000..eb28e27d0
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/ioascii.cc
@@ -0,0 +1,1181 @@
+#include <assert.h>
+#include <limits.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <fstream>
+#include <iomanip>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+
+#include "data.hh"
+#include "dist.hh"
+#include "gdata.hh"
+#include "gf.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "ioascii.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.77 2004/06/23 17:36:41 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetIOASCII_ioascii_cc);
+}
+
+
+
+// That's a hack
+namespace Carpet {
+ void UnsupportedVarType (const int vindex);
+}
+
+
+
+namespace CarpetIOASCII {
+
+ using namespace std;
+ using namespace Carpet;
+
+ void SetFlag (int index, const char* optstring, void* arg);
+
+
+
+ // Special output routines for complex numbers
+
+#ifdef CCTK_REAL4
+ ostream& operator<< (ostream& os, const CCTK_COMPLEX8& val)
+ {
+ return os << CCTK_Cmplx8Real(val) << " " << CCTK_Cmplx8Imag(val);
+ }
+#endif
+
+#ifdef CCTK_REAL8
+ ostream& operator<< (ostream& os, const CCTK_COMPLEX16& val)
+ {
+ return os << CCTK_Cmplx16Real(val) << " " << CCTK_Cmplx16Imag(val);
+ }
+#endif
+
+#ifdef CCTK_REAL16
+ ostream& operator<< (ostream& os, const CCTK_COMPLEX32& val)
+ {
+ return os << CCTK_Cmplx32Real(val) << " " << CCTK_Cmplx32Imag(val);
+ }
+#endif
+
+
+
+ template<int D,int DD>
+ void WriteASCII (ostream& os,
+ const gdata<D>* const gfdata,
+ const bbox<int,D>& gfext,
+ const int vi,
+ const int time,
+ const vect<int,D>& org,
+ const vect<int,DD>& dirs,
+ const int rl,
+ const int ml,
+ const int m,
+ const int c,
+ const int tl,
+ const CCTK_REAL coord_time,
+ const vect<CCTK_REAL,D>& coord_lower,
+ const vect<CCTK_REAL,D>& coord_upper);
+
+
+
+ int CarpetIOASCIIStartup()
+ {
+ IOASCII<0>::Startup();
+ IOASCII<1>::Startup();
+ IOASCII<2>::Startup();
+ IOASCII<3>::Startup();
+ return 0;
+ }
+
+
+
+ void CarpetIOASCIIInit (CCTK_ARGUMENTS)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+
+ for (int d=0; d<4; ++d) {
+ this_iteration[d] = 0;
+ last_output_iteration[d] = 0;
+ last_output_time[d] = cctk_time;
+ }
+ }
+
+
+
+ // Definition of static members
+ template<int outdim> int IOASCII<outdim>::GHExtension;
+ template<int outdim> int IOASCII<outdim>::IOMethod;
+ template<int outdim> vector<bool> IOASCII<outdim>::do_truncate;
+ template<int outdim>
+ vector<vector<vector<int> > > IOASCII<outdim>::last_output;
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>::Startup()
+ {
+ ostringstream msg;
+ msg << "AMR " << outdim << "D ASCII I/O provided by CarpetIOASCII";
+ CCTK_RegisterBanner (msg.str().c_str());
+
+ ostringstream extension_name;
+ extension_name << "CarpetIOASCII_" << outdim << "D";
+ GHExtension = CCTK_RegisterGHExtension(extension_name.str().c_str());
+ CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH);
+
+ ostringstream method_name;
+ method_name << "IOASCII_" << outdim << "D";
+ IOMethod = CCTK_RegisterIOMethod (method_name.str().c_str());
+ CCTK_RegisterIOMethodOutputGH (IOMethod, OutputGH);
+ CCTK_RegisterIOMethodOutputVarAs (IOMethod, OutputVarAs);
+ CCTK_RegisterIOMethodTimeToOutput (IOMethod, TimeToOutput);
+ CCTK_RegisterIOMethodTriggerOutput (IOMethod, TriggerOutput);
+
+ return 0;
+ }
+
+
+
+ template<int outdim>
+ void* IOASCII<outdim>
+ ::SetupGH (tFleshConfig* const fc, const int convLevel, cGH* const cgh)
+ {
+ DECLARE_CCTK_PARAMETERS;
+ const void *dummy;
+
+ dummy = &fc;
+ dummy = &convLevel;
+ dummy = &cgh;
+ dummy = &dummy;
+
+ // Truncate all files if this is not a restart
+ do_truncate.resize(CCTK_NumVars(), true);
+
+ // No iterations have yet been output
+ last_output.resize(mglevels);
+ for (int ml=0; ml<mglevels; ++ml) {
+ last_output.at(ml).resize(maxreflevels);
+ for (int rl=0; rl<maxreflevels; ++rl) {
+ last_output.at(ml).at(rl).resize(CCTK_NumVars(), -1);
+ }
+ }
+
+ // We register only once, ergo we get only one handle. We store
+ // that statically, so there is no need to pass anything to
+ // Cactus.
+ return 0;
+ }
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>
+ ::OutputGH (const cGH* const cgh)
+ {
+ for (int vindex=0; vindex<CCTK_NumVars(); ++vindex) {
+ if (TimeToOutput(cgh, vindex)) {
+ TriggerOutput(cgh, vindex);
+ }
+ }
+ return 0;
+ }
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>
+ ::OutputVarAs (const cGH* const cgh,
+ const char* const varname, const char* const alias)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (is_level_mode());
+
+ const int n = CCTK_VarIndex(varname);
+ if (n<0) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Variable \"%s\" does not exist", varname);
+ return -1;
+ }
+ assert (n>=0 && n<CCTK_NumVars());
+ const int group = CCTK_GroupIndexFromVarI (n);
+ assert (group>=0 && group<(int)Carpet::arrdata.size());
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0 && n0<CCTK_NumVars());
+ const int var = n - n0;
+ assert (var>=0 && var<CCTK_NumVarsInGroupI(group));
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n);
+ assert (num_tl>=1);
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cgh, group)) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot output variable \"%s\" because it has no storage",
+ varname);
+ return 0;
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+ switch (grouptype) {
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ assert (do_global_mode);
+ break;
+ case CCTK_GF:
+ /* do nothing */
+ break;
+ default:
+ assert (0);
+ }
+ const int rl = grouptype == CCTK_GF ? reflevel : 0;
+
+ const int groupdim = CCTK_GroupDimI(group);
+ if (outdim > groupdim) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot produce %dD ASCII output file \"%s\" for variable \"%s\" because it has only %d dimensions", outdim, alias, varname, groupdim);
+ return -1;
+ }
+ assert (outdim <= groupdim);
+
+ // Get grid hierarchy extentsion from IOUtil
+ const ioGH * const iogh = (const ioGH *)CCTK_GHExtension (cgh, "IO");
+ assert (iogh);
+
+ // Create the output directory
+ const char* myoutdir = GetStringParameter("out%dD_dir");
+ if (CCTK_EQUALS(myoutdir, "")) {
+ myoutdir = out_dir;
+ }
+ if (CCTK_MyProc(cgh)==0) {
+ CCTK_CreateDirectory (0755, myoutdir);
+ }
+
+ // Loop over all direction combinations
+ vect<int,outdim> dirs (0);
+
+ bool done;
+ do {
+
+ // Output each combination only once
+ bool ascending = true;
+ for (int d1=0; d1<outdim; ++d1) {
+ for (int d2=d1+1; d2<outdim; ++d2) {
+ ascending = ascending && dirs[d1] < dirs[d2];
+ }
+ }
+
+ // Skip output if the dimensions are not ascending
+ if (ascending) {
+
+ // If this output is desired at all
+ bool desired;
+ switch (outdim) {
+ case 0:
+ // Output is always desired (if switched on)
+ desired = true;
+ break;
+ case 1:
+ switch (dirs[0]) {
+ case 0:
+ desired = out1D_x;
+ break;
+ case 1:
+ desired = out1D_y;
+ break;
+ case 2:
+ desired = out1D_z;
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ case 2:
+ if (dirs[0]==0 && dirs[1]==1) {
+ desired = out2D_xy;
+ } else if (dirs[0]==0 && dirs[1]==2) {
+ desired = out2D_xz;
+ } else if (dirs[0]==1 && dirs[1]==2) {
+ desired = out2D_yz;
+ } else {
+ assert (0);
+ }
+ break;
+ case 3:
+ // Output is always desired (if switched on)
+ desired = true;
+ break;
+ default:
+ assert (0);
+ }
+
+ // Skip output if not desired
+ if (desired) {
+
+ // Traverse all maps on this refinement and multigrid level
+ BEGIN_MAP_LOOP(cgh, grouptype) {
+
+ // Find the output offset
+ ivect offset(0);
+ if (grouptype == CCTK_GF) {
+ switch (outdim) {
+ case 0:
+ offset[0] = GetGridOffset
+ (cgh, 1,
+ "out%dD_point_xi", /*"out_point_xi"*/ NULL,
+ "out%dD_point_x", /*"out_point_x"*/ NULL,
+ /*out_point_x*/ 0.0);
+ offset[1] = GetGridOffset
+ (cgh, 2,
+ "out%dD_point_yi", /*"out_point_yi"*/ NULL,
+ "out%dD_point_y", /*"out_point_y"*/ NULL,
+ /*out_point_y*/ 0.0);
+ offset[2] = GetGridOffset
+ (cgh, 3,
+ "out%dD_point_zi", /*"out_point_zi"*/ NULL,
+ "out%dD_point_z", /*"out_point_z"*/ NULL,
+ /*out_point_z*/ 0.0);
+ break;
+ case 1:
+ switch (dirs[0]) {
+ case 0:
+ offset[1] = GetGridOffset (cgh, 2,
+ "out%dD_xline_yi", "out_xline_yi",
+ "out%dD_xline_y", "out_xline_y",
+ out_xline_y);
+ offset[2] = GetGridOffset (cgh, 3,
+ "out%dD_xline_zi", "out_xline_zi",
+ "out%dD_xline_z", "out_xline_z",
+ out_xline_z);
+ break;
+ case 1:
+ offset[0] = GetGridOffset (cgh, 1,
+ "out%dD_yline_xi", "out_yline_xi",
+ "out%dD_yline_x", "out_yline_x",
+ out_yline_x);
+ offset[2] = GetGridOffset (cgh, 3,
+ "out%dD_yline_zi", "out_yline_zi",
+ "out%dD_yline_z", "out_yline_z",
+ out_yline_z);
+ break;
+ case 2:
+ offset[0] = GetGridOffset (cgh, 1,
+ "out%dD_zline_xi", "out_zline_xi",
+ "out%dD_zline_x", "out_zline_x",
+ out_zline_x);
+ offset[1] = GetGridOffset (cgh, 2,
+ "out%dD_zline_yi", "out_zline_yi",
+ "out%dD_zline_y", "out_zline_y",
+ out_zline_y);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ case 2:
+ if (dirs[0]==0 && dirs[1]==1) {
+ offset[2] = GetGridOffset
+ (cgh, 3,
+ "out%dD_xyplane_zi", "out_xyplane_zi",
+ "out%dD_xyplane_z", "out_xyplane_z",
+ out_xyplane_z);
+ } else if (dirs[0]==0 && dirs[1]==2) {
+ offset[1] = GetGridOffset
+ (cgh, 2,
+ "out%dD_xzplane_yi", "out_xzplane_yi",
+ "out%dD_xzplane_y", "out_xzplane_y",
+ out_xzplane_y);
+ } else if (dirs[0]==1 && dirs[1]==2) {
+ offset[0] = GetGridOffset
+ (cgh, 1,
+ "out%dD_yzplane_xi", "out_yzplane_xi",
+ "out%dD_yzplane_x", "out_yzplane_x",
+ out_yzplane_x);
+ } else {
+ assert (0);
+ }
+ break;
+ case 3:
+ // The offset doesn't matter in this case
+ break;
+ default:
+ assert (0);
+ }
+ } // if grouptype is GF
+
+ ofstream file;
+ if (CCTK_MyProc(cgh)==0) {
+
+ // Invent a file name
+ ostringstream filenamebuf;
+ if (new_filename_scheme) {
+ filenamebuf << myoutdir << "/" << alias << ".";
+ if (maps > 1) {
+ filenamebuf << Carpet::map << ".";
+ }
+ for (int d=0; d<outdim; ++d) {
+ const char* const coords = "xyz";
+ filenamebuf << coords[dirs[d]];
+ }
+// The offsets differ per level
+// for (int dd=0; dd<groupdim; ++dd) {
+// bool print_dir = true;
+// for (int d=0; d<outdim; ++d) {
+// print_dir = print_dir && dirs[d] != dd;
+// }
+// if (print_dir) {
+// filenamebuf << "." << offset[dd];
+// }
+// }
+ filenamebuf << ".asc";
+ } else {
+ filenamebuf << myoutdir << "/" << alias << ".";
+ if (maps > 1) {
+ filenamebuf << Carpet::map << ".";
+ }
+ for (int d=0; d<outdim; ++d) {
+ assert (dirs[d]>=0 && dirs[d]<3);
+ const char* const coords = "xyz";
+ filenamebuf << coords[dirs[d]];
+ }
+ const char* const suffixes = "plpv";
+ filenamebuf << suffixes[outdim];
+ }
+ // we need a persistent temporary here
+ string filenamestr = filenamebuf.str();
+ const char* const filename = filenamestr.c_str();
+
+ // If this is the first time, then write a nice header
+ if (do_truncate.at(n)) {
+ struct stat fileinfo;
+ if (! iogh->recovered
+ || stat(filename, &fileinfo)!=0) {
+ file.open (filename, ios::out | ios::trunc);
+ if (! file.good()) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not open output file \"%s\" for variable \"%s\"",
+ filename, varname);
+ }
+ assert (file.good());
+ file << "# " << varname;
+ for (int d=0; d<outdim; ++d) {
+ file << " " << "xyz"[dirs[d]];
+ }
+ file << " (" << alias << ")" << endl;
+ file << "#" << endl;
+ assert (file.good());
+ }
+ }
+
+ // Open the file
+ if (! file.is_open()) {
+ file.open (filename, ios::out | ios::app);
+ assert (file.good());
+ }
+
+ file << setprecision(out_precision);
+ assert (file.good());
+
+ } // if on the root processor
+
+ // Traverse and components on this multigrid and
+ // refinement level and map
+ BEGIN_COMPONENT_LOOP(cgh, grouptype) {
+
+ const ggf<dim>* ff = 0;
+
+ assert (var < (int)arrdata.at(group).at(Carpet::map).data.size());
+ ff = (ggf<dim>*)arrdata.at(group).at(Carpet::map).data.at(var);
+
+ const int mintl = output_all_timelevels ? 1-num_tl : 0;
+ const int maxtl = 0;
+ for (int tl=mintl; tl<=maxtl; ++tl) {
+
+ const gdata<dim>* const data
+ = (*ff) (tl, rl, component, mglevel);
+ ibbox ext = data->extent();
+
+ ivect lo = ext.lower();
+ ivect hi = ext.upper();
+ ivect str = ext.stride();
+
+ // Ignore ghost zones if desired
+ for (int d=0; d<dim; ++d) {
+ bool output_lower_ghosts
+ = cgh->cctk_bbox[2*d] ? out3D_outer_ghosts : out3D_ghosts;
+ bool output_upper_ghosts
+ = cgh->cctk_bbox[2*d+1] ? out3D_outer_ghosts : out3D_ghosts;
+
+ if (! output_lower_ghosts) {
+ lo[d] += cgh->cctk_nghostzones[d] * str[d];
+ }
+ if (! output_upper_ghosts) {
+ hi[d] -= cgh->cctk_nghostzones[d] * str[d];
+ }
+ }
+ ext = ibbox(lo,hi,str);
+
+ // coordinates
+ const CCTK_REAL coord_time = cgh->cctk_time;
+ rvect global_lower;
+ rvect coord_delta;
+ if (grouptype == CCTK_GF) {
+ for (int d=0; d<dim; ++d) {
+ global_lower[d] = cgh->cctk_origin_space[d];
+ coord_delta[d] = cgh->cctk_delta_space[d] / maxreflevelfact;
+ }
+ } else {
+ for (int d=0; d<dim; ++d) {
+ global_lower[d] = 0.0;
+ coord_delta[d] = 1.0;
+ }
+ }
+ const rvect coord_lower
+ = global_lower + coord_delta * rvect(lo);
+ const rvect coord_upper
+ = global_lower + coord_delta * rvect(hi);
+
+ ivect offset1;
+ if (grouptype == CCTK_GF) {
+ const ibbox& baseext = vdd.at(Carpet::map)->bases.at(0).at(mglevel).exterior;
+ offset1 = baseext.lower() + offset * ext.stride();
+ } else {
+ offset1 = offset * ext.stride();
+ }
+ for (int d=0; d<outdim; ++d) {
+ offset1[dirs[d]] = ext.lower()[dirs[d]];
+ }
+
+ WriteASCII (file, data, ext, n, cgh->cctk_iteration,
+ offset1, dirs,
+ rl, mglevel, Carpet::map, component, tl,
+ coord_time, coord_lower, coord_upper);
+
+ // Append EOL after every component
+ if (CCTK_MyProc(cgh)==0) {
+ if (separate_components) {
+ assert (file.good());
+ file << endl;
+ }
+ }
+ assert (file.good());
+
+ } // for tl
+
+ } END_COMPONENT_LOOP;
+
+ // Append EOL after every complete set of components
+ if (CCTK_MyProc(cgh)==0) {
+ if (separate_grids) {
+ assert (file.good());
+ file << endl;
+ }
+ file.close();
+ assert (file.good());
+ }
+
+ assert (! file.is_open());
+
+ } END_MAP_LOOP;
+
+ } // if (desired)
+
+ } // if (ascending)
+
+ // Next direction combination
+ done = true;
+ for (int d=0; d<outdim; ++d) {
+ ++dirs[d];
+ if (dirs[d]<groupdim) {
+ done = false;
+ break;
+ }
+ dirs[d] = 0;
+ }
+
+ } while (! done); // all directions
+
+ // Don't truncate again
+ do_truncate.at(n) = false;
+
+ return 0;
+ }
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>
+ ::TimeToOutput (const cGH* const cctkGH, const int vindex)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+
+
+
+ const int grouptype = CCTK_GroupTypeFromVarI(vindex);
+ switch (grouptype) {
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ if (! do_global_mode) return 0;
+ break;
+ case CCTK_GF:
+ // do nothing
+ break;
+ default:
+ assert (0);
+ }
+
+
+
+ // check whether to output at this iteration
+ bool output_this_iteration;
+
+ const char* myoutcriterion = GetStringParameter("out%dD_criterion");
+ if (CCTK_EQUALS(myoutcriterion, "default")) {
+ myoutcriterion = out_criterion;
+ }
+
+ if (CCTK_EQUALS (myoutcriterion, "never")) {
+
+ // Never output
+ output_this_iteration = false;
+
+ } else if (CCTK_EQUALS (myoutcriterion, "iteration")) {
+
+ int myoutevery = GetIntParameter("out%dD_every");
+ if (myoutevery == -2) {
+ myoutevery = out_every;
+ }
+ if (myoutevery <= 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (cctk_iteration == this_iteration[outdim]) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else if (cctk_iteration
+ >= last_output_iteration[outdim] + myoutevery) {
+ // it is time for the next output
+ output_this_iteration = true;
+ last_output_iteration[outdim] = cctk_iteration;
+ this_iteration[outdim] = cctk_iteration;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else if (CCTK_EQUALS (myoutcriterion, "divisor")) {
+
+ int myoutevery = GetIntParameter("out%dD_every");
+ if (myoutevery == -2) {
+ myoutevery = out_every;
+ }
+ if (myoutevery <= 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (cctk_iteration % myoutevery == 0) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else if (CCTK_EQUALS (myoutcriterion, "time")) {
+
+ CCTK_REAL myoutdt = GetRealParameter("out%dD_dt");
+ if (myoutdt == -2) {
+ myoutdt = out_dt;
+ }
+ if (myoutdt < 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (myoutdt == 0) {
+ // output all iterations
+ output_this_iteration = true;
+ } else if (cctk_iteration == this_iteration[outdim]) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else if (cctk_time / cctk_delta_time
+ >= (last_output_time[outdim] + myoutdt) / cctk_delta_time - 1.0e-12) {
+ // it is time for the next output
+ output_this_iteration = true;
+ last_output_time[outdim] = cctk_time;
+ this_iteration[outdim] = cctk_iteration;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else {
+
+ assert (0);
+
+ } // select output criterion
+
+ if (! output_this_iteration) return 0;
+
+
+
+ // check which variables to output
+ static vector<bool> output_variables;
+ static int output_variables_iteration = -1;
+
+ if (cctk_iteration > output_variables_iteration) {
+ output_variables.resize (CCTK_NumVars());
+
+ const char* const varlist = GetStringParameter("out%dD_vars");
+ if (CCTK_TraverseString (varlist, SetFlag, &output_variables,
+ CCTK_GROUP_OR_VAR) < 0)
+ {
+ int abort_on_error = output_variables_iteration < 0 &&
+ strict_io_parameter_check;
+ CCTK_VWarn (abort_on_error ? 0 : 1, __LINE__, __FILE__,CCTK_THORNSTRING,
+ "error while parsing parameter 'IOASCII::out%dD_vars'",
+ outdim);
+ }
+
+ output_variables_iteration = cctk_iteration;
+ }
+
+ if (! output_variables.at(vindex)) return 0;
+
+
+
+ if (last_output.at(mglevel).at(reflevel).at(vindex) == cctk_iteration) {
+ // Has already been output during this iteration
+ char* varname = CCTK_FullName(vindex);
+ CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Skipping output for variable \"%s\", because this variable "
+ "has already been output during the current iteration -- "
+ "probably via a trigger during the analysis stage",
+ varname);
+ free (varname);
+ return 0;
+ }
+
+ assert (last_output.at(mglevel).at(reflevel).at(vindex) < cctk_iteration);
+
+ // Should be output during this iteration
+ return 1;
+ }
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>
+ ::TriggerOutput (const cGH* const cgh, const int vindex)
+ {
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+
+ char* varname = CCTK_FullName(vindex);
+ const int retval = OutputVarAs (cgh, varname, CCTK_VarName(vindex));
+ free (varname);
+
+ last_output.at(mglevel).at(reflevel).at(vindex) = cgh->cctk_iteration;
+
+ return retval;
+ }
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>
+ ::GetGridOffset (const cGH* const cgh, const int dir,
+ const char* const itempl, const char* const iglobal,
+ const char* const ctempl, const char* const cglobal,
+ const CCTK_REAL cfallback)
+ {
+ // First choice: explicit coordinate
+ char cparam[1000];
+ snprintf (cparam, sizeof cparam, ctempl, outdim);
+ const int ncparam = CCTK_ParameterQueryTimesSet (cparam, CCTK_THORNSTRING);
+ assert (ncparam >= 0);
+ if (ncparam > 0) {
+ int ptype;
+ const CCTK_REAL* const pcoord
+ = ((const CCTK_REAL*)CCTK_ParameterGet
+ (cparam, CCTK_THORNSTRING, &ptype));
+ assert (pcoord);
+ const CCTK_REAL coord = *pcoord;
+ assert (ptype == PARAMETER_REAL);
+ return CoordToOffset (cgh, dir, coord, 0);
+ }
+
+ // Second choice: explicit index
+ char iparam[1000];
+ snprintf (iparam, sizeof iparam, itempl, outdim);
+ const int niparam = CCTK_ParameterQueryTimesSet (iparam, CCTK_THORNSTRING);
+ assert (niparam >= 0);
+ if (niparam > 0) {
+ int ptype;
+ const int* const pindex
+ = (const int*)CCTK_ParameterGet (iparam, CCTK_THORNSTRING, &ptype);
+ assert (pindex);
+ const int index = *pindex;
+ assert (ptype == PARAMETER_INT);
+ return index;
+ }
+
+ // Third choice: explicit global coordinate
+ const char* iothorn = CCTK_ImplementationThorn ("IO");
+ assert (iothorn);
+ if (cglobal) {
+ const int ncglobal = CCTK_ParameterQueryTimesSet (cglobal, iothorn);
+ assert (ncglobal >= 0);
+ if (ncglobal > 0) {
+ int ptype;
+ const CCTK_REAL* const pcoord
+ = (const CCTK_REAL*)CCTK_ParameterGet (cglobal, iothorn, &ptype);
+ assert (pcoord);
+ const CCTK_REAL coord = *pcoord;
+ assert (ptype == PARAMETER_REAL);
+ return CoordToOffset (cgh, dir, coord, 0);
+ }
+ }
+
+ // Fourth choice: explicit global index
+ if (iglobal) {
+ const int niglobal = CCTK_ParameterQueryTimesSet (iglobal, iothorn);
+ assert (niglobal >= 0);
+ if (niglobal > 0) {
+ int ptype;
+ const int* const pindex
+ = (const int*)CCTK_ParameterGet (iglobal, iothorn, &ptype);
+ assert (pindex);
+ const int index = *pindex;
+ assert (ptype == PARAMETER_INT);
+ return index;
+ }
+ }
+
+ // Fifth choice: default coordinate
+ return CoordToOffset (cgh, dir, cfallback, 0);
+ }
+
+
+
+ template<int outdim>
+ int IOASCII<outdim>
+ ::CoordToOffset (const cGH* cgh, const int dir, const CCTK_REAL coord,
+ const int ifallback)
+ {
+ assert (dir>=1 && dir<=dim);
+
+ assert (mglevel!=-1 && reflevel!=-1 && Carpet::map!=-1);
+
+ const CCTK_REAL delta = cgh->cctk_delta_space[dir-1] / cgh->cctk_levfac[dir-1];
+ const CCTK_REAL lower = cgh->cctk_origin_space[dir-1];
+#if 0
+ const int npoints = cgh->cctk_gsh[dir-1];
+ const CCTK_REAL upper = lower + (npoints-1) * delta;
+#endif
+
+ const CCTK_REAL rindex = (coord - lower) / delta;
+ int cindex = (int)floor(rindex + 0.75);
+
+#if 0
+ if (cindex<0 || cindex>=npoints) {
+ cindex = ifallback;
+
+ assert (dir>=1 && dir<=3);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The specified coordinate value %g for the %c-direction is not within the grid range [%g,%g] on convergence level %d, refinement level %d, map %d; using %g instead",
+ coord, "xyz"[dir-1], lower, upper,
+ mglevel, reflevel, Carpet::map, lower + delta * cindex);
+ }
+
+ assert (cindex>=0 && cindex<npoints);
+#else
+ const void *dummy;
+ dummy = &ifallback;
+ dummy = &dummy;
+#endif
+
+ return cindex;
+ }
+
+
+
+ template<int outdim>
+ const char* IOASCII<outdim>
+ ::GetStringParameter (const char* const parametertemplate)
+ {
+ char parametername[1000];
+ snprintf (parametername, sizeof parametername, parametertemplate, outdim);
+ int ptype;
+ const char* const* const ppval = (const char* const*)CCTK_ParameterGet
+ (parametername, CCTK_THORNSTRING, &ptype);
+ assert (ppval);
+ const char* const pval = *ppval;
+ assert (ptype == PARAMETER_STRING || ptype == PARAMETER_KEYWORD);
+ return pval;
+ }
+
+
+
+ template<int outdim>
+ CCTK_INT IOASCII<outdim>
+ ::GetIntParameter (const char* const parametertemplate)
+ {
+ char parametername[1000];
+ snprintf (parametername, sizeof parametername, parametertemplate, outdim);
+ int ptype;
+ const CCTK_INT* const ppval
+ = (const CCTK_INT*)CCTK_ParameterGet
+ (parametername, CCTK_THORNSTRING, &ptype);
+ assert (ppval);
+ assert (ptype == PARAMETER_INT || ptype == PARAMETER_BOOLEAN);
+ const CCTK_INT pval = *ppval;
+ return pval;
+ }
+
+
+
+ template<int outdim>
+ CCTK_REAL IOASCII<outdim>
+ ::GetRealParameter (const char* const parametertemplate)
+ {
+ char parametername[1000];
+ snprintf (parametername, sizeof parametername, parametertemplate, outdim);
+ int ptype;
+ const CCTK_REAL* const ppval
+ = (const CCTK_REAL*)CCTK_ParameterGet
+ (parametername, CCTK_THORNSTRING, &ptype);
+ assert (ppval);
+ assert (ptype == PARAMETER_REAL);
+ const CCTK_REAL pval = *ppval;
+ return pval;
+ }
+
+
+
+ void SetFlag (int index, const char* optstring, void* arg)
+ {
+ optstring = optstring;
+ vector<bool>& flags = *(vector<bool>*)arg;
+ flags.at(index) = true;
+ }
+
+
+
+ // Output
+ template<int D,int DD>
+ void WriteASCII (ostream& os,
+ const gdata<D>* const gfdata,
+ const bbox<int,D>& gfext,
+ const int vi,
+ const int time,
+ const vect<int,D>& org,
+ const vect<int,DD>& dirs,
+ const int rl,
+ const int ml,
+ const int m,
+ const int c,
+ const int tl,
+ const CCTK_REAL coord_time,
+ const vect<CCTK_REAL,D>& coord_lower,
+ const vect<CCTK_REAL,D>& coord_upper)
+ {
+ assert (DD<=D);
+
+ if (gfdata->proc()==0) {
+ // output on processor 0
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank == 0) {
+
+ assert (os.good());
+
+ os << "# iteration " << time << endl
+ << "# refinement level " << rl
+ << " multigrid level " << ml
+ << " map " << m
+ << " component " << c
+ << " time level " << tl
+ << endl
+ << "# column format: it\ttl rl c ml\t";
+ assert (D>=1 && D<=3);
+ const char* const coords = "xyz";
+ for (int d=0; d<D-1; ++d) os << "i" << coords[d] << " "; os << "i" << coords[D-1];
+ os << "\ttime\t";
+ for (int d=0; d<D-1; ++d) os << coords[d] << " "; os << coords[D-1];
+ os << "\tdata" << endl;
+
+ const vect<int,DD> lo = gfext.lower()[dirs];
+ const vect<int,DD> up = gfext.upper()[dirs];
+ const vect<int,DD> str = gfext.stride()[dirs];
+ const bbox<int,DD> ext(lo,up,str);
+
+ // Check whether the output origin is contained in the extent
+ // of the data that should be output
+ ivect org1(org);
+ for (int d=0; d<DD; ++d) org1[dirs[d]] = ext.lower()[d];
+ if (gfext.contains(org1)) {
+
+ typename bbox<int,DD>::iterator it=ext.begin();
+ do {
+
+ ivect index(org);
+ for (int d=0; d<DD; ++d) index[dirs[d]] = (*it)[d];
+ os << time << "\t" << tl << " " << rl << " " << c << " " << ml
+ << "\t";
+ for (int d=0; d<D-1; ++d) os << index[d] << " "; os << index[D-1];
+ os << "\t" << coord_time << "\t";
+ for (int d=0; d<D; ++d) {
+ assert (gfext.upper()[d] - gfext.lower()[d] >= 0);
+ if (gfext.upper()[d] - gfext.lower()[d] == 0) {
+ os << coord_lower[d];
+ } else {
+ os << (coord_lower[d] + (index[d] - gfext.lower()[d])
+ * (coord_upper[d] - coord_lower[d])
+ / (gfext.upper()[d] - gfext.lower()[d]));
+ }
+ if (d != D-1) os << " ";
+ }
+ os << "\t";
+ switch (CCTK_VarTypeI(vi)) {
+#define TYPECASE(N,T) \
+ case N: \
+ os << (*(const data<T,D>*)gfdata)[index]; \
+ break;
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+ default:
+ UnsupportedVarType(vi);
+ }
+ os << endl;
+
+ ++it;
+
+ for (int d=0; d<DD; ++d) {
+ if ((*it)[d]!=(*ext.end())[d]) break;
+ os << endl;
+ }
+
+ } while (it!=ext.end());
+
+ } else {
+
+ os << "#" << endl;
+
+ } // if ! ext contains org
+
+ assert (os.good());
+
+ }
+
+ } else {
+ // copy to processor 0 and output there
+
+ gdata<D>* const tmp = gfdata->make_typed(vi);
+ tmp->allocate(gfdata->extent(), 0);
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ tmp->copy_from (state, gfdata, gfdata->extent());
+ }
+ WriteASCII (os, tmp, gfext, vi, time, org, dirs, rl, ml, m, c, tl,
+ coord_time, coord_lower, coord_upper);
+ delete tmp;
+
+ }
+ }
+
+
+
+
+
+ // Explicit instantiation for all output dimensions
+ template class IOASCII<0>;
+ template class IOASCII<1>;
+ template class IOASCII<2>;
+ template class IOASCII<3>;
+
+ template
+ void WriteASCII (ostream& os,
+ const gdata<3>* const gfdata,
+ const bbox<int,3>& gfext,
+ const int vi,
+ const int time,
+ const vect<int,3>& org,
+ const vect<int,0>& dirs,
+ const int rl,
+ const int ml,
+ const int m,
+ const int c,
+ const int tl,
+ const CCTK_REAL coord_time,
+ const vect<CCTK_REAL,3>& coord_lower,
+ const vect<CCTK_REAL,3>& coord_upper);
+
+ template
+ void WriteASCII (ostream& os,
+ const gdata<3>* const gfdata,
+ const bbox<int,3>& gfext,
+ const int vi,
+ const int time,
+ const vect<int,3>& org,
+ const vect<int,1>& dirs,
+ const int rl,
+ const int ml,
+ const int m,
+ const int c,
+ const int tl,
+ const CCTK_REAL coord_time,
+ const vect<CCTK_REAL,3>& coord_lower,
+ const vect<CCTK_REAL,3>& coord_upper);
+
+ template
+ void WriteASCII (ostream& os,
+ const gdata<3>* const gfdata,
+ const bbox<int,3>& gfext,
+ const int vi,
+ const int time,
+ const vect<int,3>& org,
+ const vect<int,2>& dirs,
+ const int rl,
+ const int ml,
+ const int m,
+ const int c,
+ const int tl,
+ const CCTK_REAL coord_time,
+ const vect<CCTK_REAL,3>& coord_lower,
+ const vect<CCTK_REAL,3>& coord_upper);
+
+ template
+ void WriteASCII (ostream& os,
+ const gdata<3>* const gfdata,
+ const bbox<int,3>& gfext,
+ const int vi,
+ const int time,
+ const vect<int,3>& org,
+ const vect<int,3>& dirs,
+ const int rl,
+ const int ml,
+ const int m,
+ const int c,
+ const int tl,
+ const CCTK_REAL coord_time,
+ const vect<CCTK_REAL,3>& coord_lower,
+ const vect<CCTK_REAL,3>& coord_upper);
+
+} // namespace CarpetIOASCII
diff --git a/Carpet/CarpetIOASCII/src/ioascii.h b/Carpet/CarpetIOASCII/src/ioascii.h
new file mode 100644
index 000000000..60c8b9e02
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/ioascii.h
@@ -0,0 +1,22 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.h,v 1.7 2004/05/21 18:10:37 schnetter Exp $ */
+
+#ifndef CARPETIOASCII_H
+#define CARPETIOASCII_H
+
+#include "cctk_Arguments.h"
+
+#ifdef __cplusplus
+namespace CarpetIOASCII {
+ extern "C" {
+#endif
+
+ /* Scheduled functions */
+ int CarpetIOASCIIStartup (void);
+ void CarpetIOASCIIInit (CCTK_ARGUMENTS);
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace CarpetIOASCII */
+#endif
+
+#endif /* !defined(CARPETIOASCII_H) */
diff --git a/Carpet/CarpetIOASCII/src/ioascii.hh b/Carpet/CarpetIOASCII/src/ioascii.hh
new file mode 100644
index 000000000..72ea5b97b
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/ioascii.hh
@@ -0,0 +1,73 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.hh,v 1.16 2004/04/03 12:38:12 schnetter Exp $
+
+#ifndef CARPETIOASCII_HH
+#define CARPETIOASCII_HH
+
+#include <vector>
+
+#include "cctk.h"
+
+#include "ioascii.h"
+
+
+
+namespace CarpetIOASCII {
+
+ using namespace std;
+
+
+
+ // Everything is a class template, so that it can easily be
+ // instantiated for all output dimensions.
+
+ template<int outdim>
+ struct IOASCII {
+
+ // handle from CCTK_RegisterGHExtension
+ static int GHExtension;
+
+ // handles from CCTK_RegisterIOMethed
+ static int IOMethod;
+
+
+
+ // Do truncate the output files for a variable
+ static vector<bool> do_truncate;
+
+ // Last iteration on which a refinement level of a variable was
+ // output (INT_MIN for none)
+ static vector<vector<vector<int> > > last_output; // [ml][rl][var]
+
+
+
+ // scheduled functions
+ static int Startup();
+
+
+
+ // registered functions
+
+ static void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cgh);
+
+ static int OutputGH (const cGH* cgh);
+ static int OutputVarAs (const cGH* cgh,
+ const char* varname, const char* alias);
+ static int TimeToOutput (const cGH* cgh, int vindex);
+ static int TriggerOutput (const cGH* cgh, int vindex);
+
+ static int GetGridOffset (const cGH* cgh, int dir,
+ const char* itempl, const char* iglobal,
+ const char* ctempl, const char* cglobal,
+ CCTK_REAL cfallback);
+ static int CoordToOffset (const cGH* cgh, int dir, CCTK_REAL coord,
+ int ifallback);
+
+ static const char* GetStringParameter (const char* parametertemplate);
+ static CCTK_INT GetIntParameter (const char* parametertemplate);
+ static CCTK_REAL GetRealParameter (const char* parametertemplate);
+
+ }; // struct IOASCII
+
+} // namespace CarpetIOASCII
+
+#endif // !defined(CARPETIOASCII_HH)
diff --git a/Carpet/CarpetIOASCII/src/make.code.defn b/Carpet/CarpetIOASCII/src/make.code.defn
new file mode 100644
index 000000000..e9b78bce0
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/make.code.defn,v 1.1 2001/03/01 13:40:10 eschnett Exp $
+
+# Source files in this directory
+SRCS = ioascii.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetIOASCII/src/make.configuration.defn b/Carpet/CarpetIOASCII/src/make.configuration.defn
new file mode 100644
index 000000000..939aee820
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/make.configuration.defn
@@ -0,0 +1,4 @@
+# Main make.configuration.defn file for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/make.configuration.defn,v 1.1 2002/09/30 15:36:28 schnetter Exp $
+
+ALL_UTILS += carpet2sdf carpet2xgraph
diff --git a/Carpet/CarpetIOASCII/src/make.configuration.deps b/Carpet/CarpetIOASCII/src/make.configuration.deps
new file mode 100644
index 000000000..686ad3112
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/make.configuration.deps
@@ -0,0 +1,53 @@
+# Main make.configuration.deps file for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/make.configuration.deps,v 1.1 2002/09/30 15:36:28 schnetter Exp $
+
+
+
+SDF_INCDIRS := $(HOME)/include
+SDF_LIBDIRS := $(HOME)/lib
+SDF_LIBS := rnpl mfhdf df jpeg z vsso sv m
+
+
+
+# Compile
+
+$(BUILD_DIR)$(DIRSEP)CarpetIOASCII$(DIRSEP)%.o: $(PACKAGE_DIR)$(DIRSEP)Carpet$(DIRSEP)CarpetIOASCII$(DIRSEP)src$(DIRSEP)util$(DIRSEP)%.c
+ @echo "Compiling $<"
+ -$(MKDIR) $(MKDIRFLAGS) $(BUILD_DIR)$(DIRSEP)CarpetIOASCII 2> /dev/null
+ $(CC) $< -DCCODE $(CFLAGS) -I$(CONFIG) -I$(BINDINGS_DIR)$(DIRSEP)include -I$(FLESH_DIR)$(DIRSEP)include -I$(CCTK_HOME)$(DIRSEP)arrangement $(CCOMPILEONLY)$(OPTIONSEP)$@
+
+
+
+# Link
+
+$(UTIL_DIR)$(DIRSEP)%: $(BUILD_DIR)$(DIRSEP)CarpetIOASCII$(DIRSEP)%.o
+ @echo "Creating $* in $(UTIL_DIR) from $<"
+ -$(MKDIR) $(MKDIRFLAGS) $(UTIL_DIR) 2> /dev/null
+ $(LD) $(CREATEEXE)$(OPTIONSEP)$@ $(DEBUG_LD) $(LDFLAGS) $(EXTRAFLAGS) $<
+
+
+
+# Special versions for carpet2sdf:
+
+# Compile
+
+$(BUILD_DIR)$(DIRSEP)CarpetIOASCII$(DIRSEP)carpet2sdf.o: $(PACKAGE_DIR)$(DIRSEP)Carpet$(DIRSEP)CarpetIOASCII$(DIRSEP)src$(DIRSEP)util$(DIRSEP)carpet2sdf.c
+ @echo "Compiling carpet2sdf"
+ -$(MKDIR) $(MKDIRFLAGS) $(BUILD_DIR)$(DIRSEP)CarpetIOASCII 2> /dev/null
+ -$(CC) $< -DCCODE $(CFLAGS) -I$(CONFIG) -I$(BINDINGS_DIR)$(DIRSEP)include -I$(FLESH_DIR)$(DIRSEP)include -I$(CCTK_HOME)$(DIRSEP)arrangements -I$(SDF_INCDIRS:%=-I%) $(CCOMPILEONLY)$(OPTIONSEP)$@
+
+
+
+# Link
+
+$(UTIL_DIR)$(DIRSEP)carpet2sdf: $(BUILD_DIR)$(DIRSEP)CarpetIOASCII$(DIRSEP)carpet2sdf.o
+ @echo "Creating $* in $(UTIL_DIR) from $<"
+ -$(MKDIR) $(MKDIRFLAGS) $(UTIL_DIR) 2> /dev/null
+ -$(LD) $(CREATEEXE)$(OPTIONSEP)$@ $(DEBUG_LD) $(LDFLAGS) $(EXTRAFLAGS) $< $(SDF_LIBDIRS:%=-L%) $(SDF_LIBS:%=-l%)
+ @if [ ! -e $(UTIL_DIR)$(DIRSEP)/carpet2sdf ]; then \
+ echo "*************************************"; \
+ echo "Warning: could not install carpet2sdf"; \
+ echo "*************************************"; \
+ echo "echo \"carpet2sdf could not be installed\"" > $@; \
+ chmod a+x $@; \
+ fi
diff --git a/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl b/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl
new file mode 100755
index 000000000..0f49aaf01
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl
@@ -0,0 +1,121 @@
+#! /usr/bin/perl -s
+#
+# Blame Ian Hawke for not checking that Scott had already written a C
+# program to do this add so writing a perl version instead
+#
+# Given an output file in CarpetIOASCII 1d format, strip to ygraph format.
+# The arguments should be direction (x=0,y=1,z=2) and filename.
+# Output is to a file. Only the base name should be given.
+# The base will be appended with _<level>.xg
+#
+# Example:
+#
+# Carpet2ygraph.pl 0 alp.xl alp_x
+#
+# produces alp_x_<d>.xg where <d> is the refinement level.
+#
+# The headers of the Carpet files are just copied with the addition of
+# the correct time for ygraph, and the different comment marker.
+#
+# This script is a much altered version of Tom Goodale's convergence
+# testing scripts.
+#
+
+use FileHandle;
+
+if(@ARGV != 3)
+{
+ print "Usage: $0 direction <Inputfile> <Outputfile> \n";
+ exit;
+}
+
+open(CARPETFILE, "<$ARGV[1]") || die "Unable to find file \"$ARGV[1]\".";
+
+#
+# Open the output file for the base grid.
+#
+
+$file = $ARGV[2]."_0.xg";
+my $fh = new FileHandle(">$file") || die "Unable to open file \"$file\".";
+push(@outputfilelist,$fh);
+
+#
+# Find the correct column for the spatial coordinate; requires a magic number
+#
+
+$direction = $ARGV[0]+9;
+
+$flag = 0;
+$timeset = 0;
+$refinementlevel = 0;
+$componentflag[0] = 0;
+while (<CARPETFILE>)
+{
+ $line = $_;
+
+ if(/^\#/) # The line is a header comment
+ {
+ if ($flag==1) # It's a new level and there is data to output
+ {
+ $fh = $outputfilelist[$refinementlevel];
+ print $fh @outputdata;
+ @outputdata=("\n");
+ $flag = 0;
+ }
+ if ($line =~ /refinement level ([0-9])/) # Line gives ref. level
+ {
+ $refinementlevel = $1;
+ $line =~ /component ([0-9+])/;
+ $componentflag[$refinementlevel] = $1; # Which component?
+
+ #
+ # If no file exists for this refinement level,
+ # open and add filehandle to array
+ #
+
+ if ($refinementlevel > $#outputfilelist)
+ {
+ for ($i = $#outputfileflist+1; $i < $refinementlevel+1; $i++)
+ {
+ $file = $ARGV[2]."_".$i.".xg";
+ my $fh = new FileHandle(">$file") || die "Unable to open file \"$file\".";
+ $outputfilelist[$i]=$fh;
+ }
+ }
+ }
+ # Only output the headers if this is the zero component
+ # FIXME: what happens if component 0 isn't output first?
+ if (0 == $componentflag[$refinementlevel])
+ {
+ push(@outputdata, ("\"",$line)); # Add ygraph comment marker
+ }
+ else
+ {
+ $flag = 1;
+ @outputdata=("");
+ }
+ }
+ else # The line contains real data
+ {
+ @data = split(/ \t]+/,$line);
+ if ($flag== 0) # This is the first line of data
+ {
+ $flag = 1;
+ $timeset = $data[8]; # Magic number gives the Cactus time
+ @outputdata = ("\n\"Time = ",$timeset,@outputdata);
+ }
+ push(@outputdata, $data[$direction], " ", $data[12]);
+ }
+}
+
+#
+# At end of file, so output final data set.
+#
+
+$fh = $outputfilelist[$refinementlevel];
+print $fh @outputdata;
+
+foreach $fh (@outputfilelist)
+{
+ close($fh);
+}
diff --git a/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl b/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl
new file mode 100755
index 000000000..669c8e64b
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl
@@ -0,0 +1,105 @@
+#! /usr/bin/perl -s
+
+use FileHandle;
+
+if(@ARGV != 3)
+{
+ print "Usage: $0 direction <Inputfile> <Outputfile> \n";
+ exit;
+}
+
+open(CARPETFILE, "<$ARGV[1]") || die "Unable to find file \"$ARGV[1]\".";
+
+$file = $ARGV[2].".xg";
+my $fh = new FileHandle(">$file") || die "Unable to open file \"$file\".";
+
+my %data;
+my $time = -1;
+my $new = 0;
+my $currentit = -1;
+my $lastit = -1;
+
+my @datatoprint;
+my $nsets = 1;
+my $maxlength = 0;
+my @lengths;
+
+$lengths[0]=0;
+while (<CARPETFILE>)
+{
+ $line = $_;
+ if ($line =~ "iteration") {
+ @itline = split(/ +/,$line);
+ $currentit = @itline[2];
+ }
+ elsif ($line =~ /^#/)
+ {
+ #Do nothing for headers!
+ }
+ elsif ($line =~ /([0-9+-ed.]+)*/)
+ {
+ @dataline = split(/[ \t]+/,$line);
+ if ($currentit != $lastit)
+ {
+ if ($new)
+ {
+ push(@datatoprint,"\n\n\"Time = ".$time."\n");
+ my @sortedcoords = sort numerically (keys %data);
+ my $localcoord;
+ foreach $localcoord (@sortedcoords)
+ {
+ push(@datatoprint, $localcoord." ".$data{$localcoord});
+ }
+ $maxlength = $maxlength > (scalar @sortedcoords) ? $maxlength : (scalar @sortedcoords);
+ $lengths[$nsets-1]=(scalar @sortedcoords);
+ $nsets++;
+ $lengths[$nsets-1]=0;
+ %data=();
+ }
+ $new++;
+ $time = $dataline[8];
+ $lastit = $currentit;
+ }
+ my $coord = $dataline[9+$ARGV[0]];
+ my $val = $dataline[12];
+ $data{$coord} = $val;
+ }
+}
+push(@datatoprint, "\n\"Time = ",$time,"\n");
+my @sortedcoords = sort numerically (keys %data);
+my $localcoord;
+foreach $localcoord (@sortedcoords)
+{
+ push(@datatoprint, $localcoord." ".$data{$localcoord});
+}
+$maxlength = $maxlength > (scalar @sortedcoords) ? $maxlength : (scalar @sortedcoords);
+$lengths[$nsets-1]=(scalar @sortedcoords);
+$nsets++;
+$lengths[$nsets-1]=0;
+
+my $oldline="";
+$nouts=0;
+my $set=0;
+foreach $line (@datatoprint) {
+ if ($line =~ "Time") {
+ if ($oldline) {
+ for (my $i=$lengths[$set-1]; $i<$maxlength;$i++) {
+ $nouts++;
+ print $fh $oldline;
+ }
+ }
+ $set++;
+ print $fh $line;
+ }
+ else {
+ $nouts++;
+ print $fh $line;
+ $oldline=$line
+ }
+}
+for (my $i=$lengths[$set-1]; $i<$maxlength;$i++) {
+ $nouts++;
+ print $fh $oldline;
+}
+
+sub numerically {$a <=> $b;}
diff --git a/Carpet/CarpetIOASCII/src/util/carpet2sdf.c b/Carpet/CarpetIOASCII/src/util/carpet2sdf.c
new file mode 100644
index 000000000..a8abe71d0
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/util/carpet2sdf.c
@@ -0,0 +1,167 @@
+
+/*******************************************************************
+ * Program: carpet2sdf
+ * Description: Converts from Carpet ASCII file format to SDF format
+ * Author: Scott H. Hawley
+ * Date: June 17, 2002
+ *
+ * Similar to carpet2sdf, except that instead of sending output to
+ * sdtout, it sends it to <infile>.sdf
+ *******************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <bbhutil.h>
+
+
+/*******************************************************************
+ * Function: read_next_set
+ * Supposed to read one time step of data (for one level of refinement)
+ *******************************************************************/
+int read_next_set(FILE *infile, int rlev, int *numelems,
+ double *time,
+ double **coord, double **data, int clip_data, double clip_val)
+{
+ char in_line[200];
+ int it,tl,rl,c,ml,ix,iy,iz;
+ double xval, yval, zval;
+ double coordval, dataval;
+ int hit_first_non_blank = 0;
+ int stop_reading = 0;
+ int retval = 0;
+ int rc = 0;
+
+ *numelems = 0;
+ sprintf(in_line," ");
+
+ /* reads up to first blank line after non-blank lines, or up to
+ * eof */
+ while ((fgets(in_line,200,infile) != NULL) && (!stop_reading) ) {
+
+ if (in_line[0]=='#') {
+ hit_first_non_blank = 1;
+
+ } else if ((strncmp("\n",in_line,2)==0) ||
+ (in_line[0]==' ')) {
+ if (hit_first_non_blank) {
+ stop_reading = 1;
+ }
+
+ } else { /* Assume that we're dealing with a line of numbers */
+ hit_first_non_blank = 1;
+ retval = sscanf(in_line,"%d %d %d %d %d %d %d %d %lg %lg %lg %lg %lg",
+ &it,&tl,&rl,&c,&ml,&ix,&iy,&iz,time,&xval,&yval,&zval,&dataval);
+ coordval = xval;
+
+ /* Only add input to arrays if it's for the right ref. level */
+ if ( (retval == 13) && (rl == rlev)) {
+ (*numelems)++;
+
+ if (coord==NULL) {
+ *coord = (double *)malloc(sizeof(double)* (*numelems));
+ *data = (double *)malloc(sizeof(double)* (*numelems));
+ } else {
+ *coord = (double *)realloc(*coord, sizeof(double)* (*numelems));
+ *data = (double *)realloc(*data, sizeof(double)* (*numelems));
+ }
+ if (coord==NULL) {
+ fprintf(stderr,"Error: malloc/realloc returned NULL\n");
+ exit(1);
+ }
+
+ (*coord)[(*numelems)-1] = coordval;
+
+ /* If desired, "clip" data above a certain value */
+ if (clip_data && (dataval > clip_val)) {
+ (*data)[(*numelems)-1] = clip_val;
+ } else {
+ (*data)[(*numelems)-1] = dataval;
+ }
+
+ }
+
+ }
+
+ }
+ rc = feof(infile);
+
+ return rc;
+}
+
+
+/********************************************************************
+ * Main part of program
+ ********************************************************************/
+int main(int argc, char **argv)
+{
+ char *infilename;
+ FILE *infile;
+
+ char func_name[200];
+ double time;
+ int shape[1];
+ double bounds[2];
+ int rank = 1;
+ int numelems_in_set = 0;
+ int rlev = 0;
+ double *coord, *data;
+ int clip_data = 0;
+ double clip_val;
+
+
+ /*
+ * Parse command-line arguments
+ */
+ if (argc <= 1) {
+ fprintf(stderr,"usage: carpet2sdf <infile> [ref_lev] [clip_data_at]\n");
+ exit(1);
+ }
+ if (argc >= 3) {
+ sscanf(argv[2],"%d",&rlev);
+ }
+ if (argc >= 4) {
+ sscanf(argv[3],"%lf",&clip_val);
+ clip_data = 1;
+ }
+
+ /*
+ * Open the input file
+ */
+ infilename = argv[1];
+ infile = fopen(infilename,"r");
+ if (infile == NULL) {
+ fprintf(stderr,"Error opening file '%s'.\n",infilename);
+ exit(1);
+ }
+
+
+ time = 0;
+ coord = NULL;
+ data = NULL;
+ sprintf(func_name,"%s_%d",infilename,rlev);
+
+ /*
+ * Main loop for reading from input file and writing to output file
+ */
+ while ( read_next_set(infile,rlev,&numelems_in_set,&time,&coord,&data,
+ clip_data, clip_val) == 0 ) {
+ if (numelems_in_set > 0) {
+
+ shape[0] = numelems_in_set;
+ bounds[0] = coord[0];
+ bounds[1] = coord[numelems_in_set-1];
+
+ gft_out_bbox(func_name, time, shape, rank, bounds, data);
+
+ free(coord);
+ free(data);
+ coord = NULL;
+ data = NULL;
+
+ }
+ }
+
+ return 0;
+}
+
diff --git a/Carpet/CarpetIOASCII/src/util/carpet2xgraph.c b/Carpet/CarpetIOASCII/src/util/carpet2xgraph.c
new file mode 100644
index 000000000..61dfa689b
--- /dev/null
+++ b/Carpet/CarpetIOASCII/src/util/carpet2xgraph.c
@@ -0,0 +1,186 @@
+
+/*******************************************************************
+ * Program: carpet2xgraph
+ * Description: Converts from Carpet ASCII file format to Xgraph format
+ * Author: Scott H. Hawley
+ * Date: June 17, 2002
+ *
+ * This will select the data for ONE REFINEMENT LEVEL (default 0)
+ * and send the result to stdout. The "xgraph format" data is
+ * not, however, fully annotated and someone may wish to improve
+ * this.
+ *
+ * The [clip_data_at] command-line argument was added for use with
+ * 1/r data, to replace the infinities at the origin with whatever
+ * value the user specifies.
+ *******************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/*******************************************************************
+ * Function: read_next_set
+ * Supposed to read one time step of data (for one level of refinement)
+ *******************************************************************/
+int read_next_set(FILE *infile, int rlev, int *numelems,
+ double *time,
+ double **coord, double **data, int clip_data, double clip_val)
+{
+ char in_line[200];
+ int it,tl,rl,c,ml,ix,iy,iz;
+ double xval, yval, zval;
+ double coordval, dataval;
+ int hit_first_non_blank = 0;
+ int stop_reading = 0;
+ int retval = 0;
+ int rc = 0;
+
+ *numelems = 0;
+ sprintf(in_line," ");
+
+ /* reads up to first blank line after non-blank lines, or up to
+ * eof */
+ while ((fgets(in_line,200,infile) != NULL) && (!stop_reading) ) {
+
+ if (in_line[0]=='#') {
+ hit_first_non_blank = 1;
+
+ } else if ((strncmp("\n",in_line,2)==0) ||
+ (in_line[0]==' ')) {
+ if (hit_first_non_blank) {
+ stop_reading = 1;
+ }
+
+ } else { /* Assume that we're dealing with a line of numbers */
+ hit_first_non_blank = 1;
+ retval = sscanf(in_line,"%d %d %d %d %d %d %d %d %lg %lg %lg %lg %lg",
+ &it,&tl,&rl,&c,&ml,&ix,&iy,&iz,time,&xval,&yval,&zval,&dataval);
+ coordval = xval;
+
+ /* Only add input to arrays if it's for the right ref. level */
+ if ( (retval == 13) && (rl == rlev)) {
+ (*numelems)++;
+
+ if (coord==NULL) {
+ *coord = (double *)malloc(sizeof(double)* (*numelems));
+ *data = (double *)malloc(sizeof(double)* (*numelems));
+ } else {
+ *coord = (double *)realloc(*coord, sizeof(double)* (*numelems));
+ *data = (double *)realloc(*data, sizeof(double)* (*numelems));
+ }
+ if (coord==NULL) {
+ fprintf(stderr,"Error: malloc/realloc returned NULL\n");
+ exit(1);
+ }
+
+ (*coord)[(*numelems)-1] = coordval;
+
+ /* If desired, "clip" data above a certain value */
+ if (clip_data && (dataval > clip_val)) {
+ (*data)[(*numelems)-1] = clip_val;
+ } else {
+ (*data)[(*numelems)-1] = dataval;
+ }
+
+ }
+
+ }
+
+ }
+ rc = feof(infile);
+
+ return rc;
+}
+
+
+/********************************************************************
+ * Main part of program
+ ********************************************************************/
+int main(int argc, char **argv)
+{
+ char *infilename;
+ FILE *infile;
+
+ char func_name[200];
+ double time;
+ int numelems_in_set = 0;
+ int rlev = 0;
+ double *coord, *data;
+ int clip_data = 0;
+ double clip_val;
+ int i;
+
+
+ /*
+ * Parse command-line arguments
+ */
+ if (argc <= 1) {
+ fprintf(stderr," input from stdin... invoke carpet2xgraph -h for help\n");
+ } else if (strcmp(argv[1],"-h")==0) {
+ fprintf(stderr,"usage: cat file | carpet2xgraph [name_tag] [ref_lev] [clip_data_at]\n");
+ exit(1);
+ }
+
+ if (argc >= 2) {
+ infilename = argv[1];
+ } else {
+ infilename = "stdin";
+ }
+ if (argc >= 3) {
+ sscanf(argv[2],"%d",&rlev);
+ }
+ if (argc >= 4) {
+ sscanf(argv[3],"%lf",&clip_val);
+ clip_data = 1;
+ }
+
+ /*
+ * Open the input file
+ */
+ infile = stdin;
+
+ /*
+ infile = fopen(infilename,"r");
+ if (infile == NULL) {
+ fprintf(stderr,"Error opening file '%s'.\n",infilename);
+ exit(1);
+ }
+ */
+
+
+ time = 0;
+ coord = NULL;
+ data = NULL;
+ sprintf(func_name,"%s_%d",infilename,rlev);
+
+ printf("\"x-label x\n");
+ printf("\"y-label %s\n\n\n",infilename);
+ printf("\"label = %s\n\n\n",infilename);
+
+ /*
+ * Main loop for reading from input file and writing to output file
+ */
+ while ( read_next_set(infile,rlev,&numelems_in_set,&time,&coord,&data,
+ clip_data, clip_val) == 0 ) {
+ if (numelems_in_set > 0) {
+
+ /* xgraph format */
+ printf("\"Time = %g\n",time);
+ for (i=0; i<numelems_in_set; i++) {
+ printf("%g %17.14g\n",coord[i],data[i]);
+ }
+ printf("\n\n");
+
+ free(coord);
+ free(data);
+ coord = NULL;
+ data = NULL;
+
+ }
+ }
+
+ return 0;
+}
+
diff --git a/Carpet/CarpetIOHDF5/COPYING b/Carpet/CarpetIOHDF5/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetIOHDF5/README b/Carpet/CarpetIOHDF5/README
new file mode 100644
index 000000000..64520a2da
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/README
@@ -0,0 +1,8 @@
+Cactus Code Thorn CarpetIOHDF5
+Authors : Erik Schnetter <schnetter@aei.mpg.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/README,v 1.1 2004/03/03 09:44:59 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides HDF5 based file I/O for Carpet.
diff --git a/Carpet/CarpetIOHDF5/configuration.ccl b/Carpet/CarpetIOHDF5/configuration.ccl
new file mode 100644
index 000000000..0323a73bd
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetIOHDF5
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/configuration.ccl,v 1.3 2004/06/08 21:09:25 schnetter Exp $
+
+REQUIRES Carpet CarpetLib IOUtil
+
+REQUIRES THORNS: Carpet CarpetLib IOUtil
diff --git a/Carpet/CarpetIOHDF5/doc/documentation.tex b/Carpet/CarpetIOHDF5/doc/documentation.tex
new file mode 100644
index 000000000..b07dd73d1
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/doc/documentation.tex
@@ -0,0 +1,314 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/doc/documentation.tex,v 1.4 2004/06/22 11:56:20 tradke Exp $
+%
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevent thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % START CACTUS THORNGUIDE",
+% except for filling in the title, author, date etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be sparated with a \\ or a comma
+% - You can define your own macros are OK, but they must appear after
+% the START CACTUS THORNGUIDE line, and do not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphix package.
+% More specifically, with the "includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us (later) to create a PDF version of the ThornGuide
+% via pdflatex. |
+% - References should be included with the latex "bibitem" command.
+% - use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/doc/documentation.tex,v 1.4 2004/06/22 11:56:20 tradke Exp $
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../../doc/ThornGuide/cactus}
+
+\begin{document}
+
+% The author of the documentation
+\author{Erik Schnetter $<$schnetter@uni-tuebingen.de$>$, Christian D. Ott $<$cott@aei.mpg.de$>$}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{CarpetIOHDF5}
+
+% the date your document was last changed, if your document is in CVS,
+% please use:
+% \date{$ $Date: 2004/06/22 11:56:20 $ $}
+\date{March 18, 2004}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here
+% \def\mydef etc
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+CarpetIOHDF5 provides HDF5 based 3-D output to the Cactus mesh refinement driver Carpet.
+This document explains CarpetIOHDF5's usage and contains a specification of the
+CarpetIOHDF5 file format that was adapted from John Shalf's FlexIO library.
+\end{abstract}
+
+% The following sections are suggestive only.
+% Remove them or add your own.
+
+\section{Introduction}
+
+Having encountered various problems with CarpetIOFlexIO and the underlying FlexIO library,
+Erik Schnetter decided to create CarpetIOHDF5. CarpetIOHDF5 provides 3-D output for the
+Carpet Mesh Refinement driver within the Cactus Code. Christian D. Ott added
+file reader (analogous to Erik Schnetter's implementation present in CarpetIOFlexIO)
+and checkpoint/recovery features to CarpetIOHDF5.
+
+Right now, CarpetIOHDF5 only uses serial I/O - all data are copied to processor 0 for I/O.
+
+This document aims at giving the user a first handle on how to use
+CarpetIOHDF5. It also documents the HDF5 file layout used.
+
+
+\section{Using This Thorn}
+
+
+\subsection{Obtaining This Thorn}
+
+You can get a checkout from
+
+{\tt cvs.carpetcode.org:/home/cvs Carpet/CarpetIOHDF5}
+
+\subsection{Basic Usage}
+
+First, you have to activate the thorn in your Cactus parameter file:
+
+{\tt ActiveThorns = "CarpetIOHDF5"}
+
+\subsubsection{3-D Output}
+
+\begin{itemize}
+ \item {\tt iohdf5::out3D\_vars = "your list of Cactus grid functions to output"}
+ \item {\tt iohdf5::out3D\_every = n} : Output every {\tt n} time steps
+ \item {\tt iohdf5::out3D\_dir = "your preferred 3-D output directory"}
+ \item {\tt IO::out\_single\_precision = "yes/no (output double-precision data in single precision)"}
+\end{itemize}
+
+\subsubsection{3-D Input}
+
+There are two ways to use the 3-D input capabilities:
+
+\begin{enumerate}
+ \item For evolutions using ADMBase, one may use the thorn IDFileADM and the following parameter settings:
+ \begin{itemize}
+ \item {\tt ADMBase::initial\_data = "read from file"}
+ \item {\tt IO::filereader\_ID\_files = "space separated list of files containing the ADM variables"}
+ \item {\tt IO::filereader\_ID\_vars = "space separated list of variables to be read in"}
+ \end{itemize}
+ \item For evolutions not using ADMBase one may try to read in data by setting
+ \begin{itemize}
+ \item {\tt iohdf5::in3D\_dir = "directory from where to read data"}
+ \item {\tt iohdf5::in3D\_vars = "space separated list of variables to be read in"}
+ \end{itemize}
+\end{enumerate}
+
+
+\subsubsection{Checkpointing}
+
+CarpetIOHDF5 uses the Cactus checkpoint/recovery infrastructure provided by
+CactusBase/IOUtil.
+
+\begin{itemize}
+ \item {\tt iohdf5::checkpoint = "yes"} : Turns on checkpointing
+ \item {\tt iohdf5::checkpoint\_every = n} : Checkpointing every {\tt n} time steps
+ \item {\tt iohdf5::checkpoint\_ID = "yes"} : Turns on checkpointing after initial data
+ \item {\tt io::checkpoint\_dir = "your preferred checkpoint directory"}
+ \item {\tt iohdf5::checkpoint\_keep = n} : Keep {\tt n} checkpoint files around
+\end{itemize}
+
+
+\subsubsection{Recover}
+
+CarpetIOHDF5 uses the Cactus checkpoint/recovery infrastructure provided by
+CactusBase/IOUtil. Currently all the checkpoint information is copied onto processor 0 and
+ written into a single file whose name is invented by IOUtil. Unfortunately, single cpu
+checkpoint files have a different name (a missing \_file\_0 tag) than checkpoint
+files from multi-cpu runs. Somebody should tweek IOBase...
+
+In principle, CarpetIOHDF5 is able to restart on any number
+of cpus from a checkpoint file of a run using any (other or same) number of cpus.
+
+\begin{itemize}
+ \item {\tt iohdf5::recover = "auto"} : Recover from the most recent Checkpoint file. This bombs,
+ if no checkpoint file is found.
+ \item {\tt iohdf5::recover = "autoprobe"} : Recover from the most recent Checkpoint file. This continues
+ without recovering if no checkpoint file is found.
+ \item {\tt iohdf5::recover\_dir = "directory containing the checkpoint file"}
+ \item {\tt iohdf5::recover = "manual"} : Recover from a file specified by {\tt iohdf5::recover\_file}. This
+ bombs if the file is not found.
+ \item {\tt iohdf5::recover\_file = "file you want to recover from"} : Only needs to be set if
+ {\tt iohdf5::recover = "manual"}.
+
+\end{itemize}
+
+
+
+\subsection{Special Behaviour}
+
+\begin{itemize}
+ \item {\tt iohdf5::h5verbose = "yes"} : Makes CarpetIOHDF5 very talkative.
+\end{itemize}
+
+
+\section{CarpetIOHDF5's HDF5 file layout}
+
+The HDF5 file layout of CarpetIOHDF5 is quite simple. There are no groups besides the
+standard HDF5 root data object group:
+
+\begin{itemize}
+ \item Each dataset is named according to this template: \\
+ {\tt \small [Full Variable Name] it=[Iteration] tl=[Timelevel] ml=[mglevel] rl=[reflevel] m=[map] c=[component]}
+
+ \item Each dataset has the following (largely redundant!) attributes associated with it:
+
+ \begin{itemize}
+ \item {\tt level} : Carpet::reflevel
+ \item {\tt origin} : 1-D array of length Carpet::dim. \\ origin[d]=CCTK\_ORIGIN\_SPACE(d) +
+ cctk\_lbnd[d] * delta[d]
+ \item {\tt delta} : 1-D array of length Carpet::dim. \\ delta[d] = CCTK\_DELTA\_SPACE(d)
+ \item {\tt min\_ext} : 1-D array of length Carpet::dim. \\ min\_ext[d] = delta[d]
+ \item {\tt max\_ext} : 1-D array of length Carpet::dim. \\ origin[d] + cctk\_lsh[d] * delta[d]
+ \item {\tt time} : cctk\_time
+ \item {\tt timestep} : cctk\_iteration
+ \item {\tt level\_timestep} : cctk\_iteration / Carpet::reflevelfact
+ \item {\tt persistence} : cctk\_iteration / Carpet::reflevelfact
+ \item {\tt time\_refinement} : Carpet::time\_refinement
+ \item {\tt spatial\_refinement} : 1-D array of length Carpet::dim. \\ spatial\_refinement[d] = Carpet::reflevelfact
+ \item {\tt grid\_placement\_refinement} : 1-D array of length Carpet::dim. \\ grid\_placement\_refinement[d] = Carpet::reflevelfact
+ \item {\tt iorigin} : 1-D array of length Carpet::dim. \\ iorigin[d] = (Carpet::ext.lower() / Carpet::ext.stride())[d]
+ \item {\tt name} : CCTK\_FullName(variable index)
+ \item {\tt group\_version} : 1
+ \item {\tt group\_fullname} : CCTK\_FullName(variable index)
+ \item {\tt group\_varname} : CCTK\_VarName(variable index)
+ \item {\tt group\_groupname} : CCTK\_GroupName(group index)
+ \item {\tt group\_grouptype} : CCTK\_GF, CCTK\_ARRAY or CCTK\_SCALAR
+ \item {\tt group\_dim} : CCTK\_GroupDimI(group index)
+ \item {\tt group\_timelevel} : tl (current timelevel)
+ \item {\tt group\_numtimelevels} : CCTK\_NumTimeLevelsI(group index)
+ \item {\tt cctk\_version} : 1
+ \item {\tt cctk\_dim} : cctk\_dim
+ \item {\tt cctk\_iteration} : cctk\_iteration
+ \item {\tt cctk\_gsh} : 1-D array of length Carpet::dim. cctk\_gsh
+ \item {\tt cctk\_lsh} : 1-D array of length Carpet::dim. cctk\_lsh
+ \item {\tt cctk\_lbnd} : 1-D array of length Carpet::dim. cctk\_lbnd
+ \item {\tt cctk\_delta\_time} : 1-D array of length Carpet::dim. cctk\_delta\_time
+ \item {\tt cctk\_delta\_space} : 1-D array of length Carpet::dim. cctk\_delta\_space
+ \item {\tt cctk\_origin\_space} : 1-D array of length Carpet::dim. cctk\_origin\_space
+ \item {\tt cctk\_bbox} : 1-D array of length 2*Carpet::dim. cctk\_box
+ \item {\tt cctk\_levfac} : 1-D array of length Carpet::dim. cctk\_levfac
+ \item {\tt cctk\_levoff} : 1-D array of length Carpet::dim. cctk\_levoff
+ \item {\tt cctk\_levoffdenom} : 1-D array of length Carpet::dim. cctk\_levoffdenom
+ \item {\tt cctk\_timefac} : cctk\_timefac
+ \item {\tt cctk\_convlevel} : cctk\_convlevel
+ \item {\tt cctk\_convfac} : cctk\_convfac
+ \item {\tt cctk\_nghostzones} : 1-D array of length Carpet::dim. cctk\_nghostzones
+ \item {\tt cctk\_time} : cctk\_time
+ \item {\tt carpet\_version} : 1
+ \item {\tt carpet\_dim} : Carpet::dim
+ \item {\tt carpet\_basemglevel} : Carpet::basemglevel
+ \item {\tt carpet\_mglevel} : Carpet::mglevel
+ \item {\tt carpet\_mglevels} : Carpet::mglevels
+ \item {\tt carpet\_mgface} : Carpet::mgfact
+ \item {\tt carpet\_reflevel} : Carpet::reflevel
+ \item {\tt carpet\_reflevels} : Carpet::reflevels
+ \item {\tt carpet\_reffact} : Carpet::reffact
+ \item {\tt carpet\_map} : Carpet::map
+ \item {\tt carpet\_maps} : Carpet::maps
+ \item {\tt carpet\_component} : Carpet::component
+ \item {\tt carpet\_components} : Carpet::vhh.at(Carpet::map)->components(reflevel))
+
+ \end{itemize}
+\end{itemize}
+
+\subsection{Attributes needed by the file reader}
+
+The number of attributes needed by the CarpetIOHDF5 file reader is much smaller then the total
+number of attributes attached to each dataset:
+
+\begin{itemize}
+ \item {\tt name}
+ \item {\tt level}
+ \item {\tt iorigin}
+\end{itemize}
+
+
+%\subsection{Interaction With Other Thorns}
+%
+%\subsection{Support and Feedback}
+%
+%\section{History}
+%
+%\subsection{Thorn Source Code}
+%
+%\subsection{Thorn Documentation}
+%
+%\subsection{Acknowledgements}
+%
+%
+%\begin{thebibliography}{9}
+%
+%\end{thebibliography}
+%
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}
diff --git a/Carpet/CarpetIOHDF5/interface.ccl b/Carpet/CarpetIOHDF5/interface.ccl
new file mode 100644
index 000000000..b8d6a5da8
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/interface.ccl
@@ -0,0 +1,20 @@
+# Interface definition for thorn CarpetIOHDF5
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/interface.ccl,v 1.5 2004/06/08 21:09:25 schnetter Exp $
+
+IMPLEMENTS: IOHDF5
+
+uses include header: carpet.hh
+
+uses include header: bbox.hh
+uses include header: vect.hh
+
+uses include header: data.hh
+uses include header: gdata.hh
+
+uses include header: ggf.hh
+
+
+
+CCTK_INT next_output_iteration TYPE=scalar
+CCTK_REAL next_output_time TYPE=scalar
+CCTK_INT this_iteration TYPE=scalar
diff --git a/Carpet/CarpetIOHDF5/par/CarpetWaveToyCheckpointTest.par b/Carpet/CarpetIOHDF5/par/CarpetWaveToyCheckpointTest.par
new file mode 100644
index 000000000..57cf0e59b
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/par/CarpetWaveToyCheckpointTest.par
@@ -0,0 +1,43 @@
+ActiveThorns = "Boundary CoordBase CartGrid3D SymBase Time Carpet CarpetReduce CarpetSlab CarpetLib CarpetRegrid IOUtil IOBasic CarpetIOASCII CarpetIOHDF5 IDScalarWaveC WaveToyC"
+
+
+Cactus::cctk_itlast = 12
+
+Time::dtfac = 0.5
+
+IDScalarWave::initial_data = "gaussian"
+IDScalarWave::sigma = 2.8
+IDScalarWave::radius = 0.0
+
+Grid::avoid_origin = "no"
+Grid::type = "byrange"
+Grid::dxyz = 1
+
+Driver::global_nsize = 20
+Driver::ghost_size = 2
+
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+Carpet::init_each_timelevel = "yes"
+Carpet::buffer_width = 6
+Carpet::max_refinement_levels = 2
+
+CarpetRegrid::refinement_levels = 2
+
+# Output
+IO::out_dir = $parfile
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_vars = "wavetoy::phi"
+
+IOASCII::out1D_vars = "wavetoy::phi"
+IOASCII::out1D_every = 12
+IOASCII::out3D_vars = "wavetoy::phi"
+IOASCII::out3D_every = 12
+
+# Checkpoint
+IO::checkpoint_every = 12
+IO::checkpoint_keep = 2
+
+IOHDF5::checkpoint = "yes"
+IOHDF5::verbose = "yes"
diff --git a/Carpet/CarpetIOHDF5/par/CarpetWaveToyRecoverTest.par b/Carpet/CarpetIOHDF5/par/CarpetWaveToyRecoverTest.par
new file mode 100644
index 000000000..5972c76d8
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/par/CarpetWaveToyRecoverTest.par
@@ -0,0 +1,12 @@
+ActiveThorns = "Boundary CoordBase CartGrid3D SymBase Time Carpet CarpetReduce CarpetSlab CarpetLib CarpetRegrid IOUtil IOBasic CarpetIOASCII CarpetIOHDF5 IDScalarWaveC WaveToyC"
+
+
+Cactus::cctk_itlast = 24
+
+# Output
+IO::out_dir = $parfile
+
+# Recovery
+IO::recover = "auto"
+
+IOHDF5::checkpoint = "no"
diff --git a/Carpet/CarpetIOHDF5/param.ccl b/Carpet/CarpetIOHDF5/param.ccl
new file mode 100644
index 000000000..c80b383c5
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/param.ccl
@@ -0,0 +1,113 @@
+# Parameter definitions for thorn CarpetIOHDF5
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/param.ccl,v 1.15 2004/06/25 12:54:30 schnetter Exp $
+
+
+
+shares: IO
+
+USES STRING out_dir
+USES BOOLEAN out_single_precision
+
+USES KEYWORD out_criterion
+USES CCTK_INT out_every
+USES CCTK_REAL out_dt
+
+USES INT checkpoint_every
+USES INT checkpoint_keep
+USES BOOLEAN checkpoint_ID
+USES BOOLEAN recover_and_remove
+USES BOOLEAN checkpoint_on_terminate
+USES BOOLEAN strict_io_parameter_check
+USES KEYWORD recover
+USES STRING checkpoint_dir
+USES STRING checkpoint_ID_file
+USES STRING checkpoint_file
+USES STRING recover_dir
+USES STRING recover_file
+
+
+shares: Cactus
+
+USES CCTK_REAL cctk_initial_time
+
+
+private:
+
+
+
+BOOLEAN verbose "Produce log output" STEERABLE = ALWAYS
+{
+} "no"
+
+
+
+CCTK_STRING out3D_dir "Name of 3D CarpetIOHDF5 output directory, overrides IO::out_dir" STEERABLE = ALWAYS
+{
+ "^$" :: "Empty: use IO::out_dir"
+ ".+" :: "Not empty: directory name"
+} ""
+
+CCTK_STRING out3D_vars "Variables to output in 3D CarpetIOHDF5 file format" STEERABLE = ALWAYS
+{
+ .* :: "List of group and variable names"
+} ""
+
+CCTK_STRING out3D_extension "File extension to use for 3D CarpetIOHDF5 output" STEERABLE = ALWAYS
+{
+ ".*" :: "File extension (including a leading dot, if desired)"
+} ".h5"
+
+KEYWORD out3D_criterion "Criterion to select 3D CarpetIOHDF5 output intervals, overrides out_every" STEERABLE = ALWAYS
+{
+ "default" :: "Use IO::out_criterion"
+ "never" :: "Never output"
+ "iteration" :: "Output every so many iterations"
+ "divisor" :: "Output if (iteration % out_every) == 0."
+ "time" :: "Output every that much coordinate time"
+} "default"
+
+CCTK_INT out3D_every "How often to do 3D CarpetIOHDF5 output, overrides out_every" STEERABLE = ALWAYS
+{
+ 1:* :: "Output every so many time steps"
+ -1:0 :: "No output"
+ -2 :: "Use IO::out_every"
+} -2
+
+REAL out3D_dt "How often to do 3D CarpetIOHDF5 output, overrides IO::out_dt" STEERABLE = ALWAYS
+{
+ (0:* :: "In intervals of that much coordinate time"
+ 0 :: "As often as possible"
+ -1 :: "Disable output"
+ -2 :: "Default to IO::out_dt"
+} -2
+
+
+
+CCTK_STRING in3D_dir "Name of 3D CarpetIOHDF5 input directory" STEERABLE = ALWAYS
+{
+ ".+" :: "Directory name"
+} "."
+
+CCTK_STRING in3D_vars "Variables to input in 3D CarpetIOHDF5 file format" STEERABLE = ALWAYS
+{
+ .* :: "List of group and variable names"
+} ""
+
+CCTK_STRING in3D_extension "File extension to use for 3D CarpetIOHDF5 input" STEERABLE = ALWAYS
+{
+ ".*" :: "File extension (including a leading dot, if desired)"
+} ".h5"
+
+
+BOOLEAN checkpoint "Do checkpointing with CarpetIOHDF5" STEERABLE = ALWAYS
+{
+} "no"
+
+BOOLEAN checkpoint_next "Checkpoint at next iteration" STEERABLE = ALWAYS
+{
+} "no"
+
+
+BOOLEAN use_reflevels_from_checkpoint "Use CarpetRegrid::refinement_levels from the checkpoint file rather than from the parameter file." STEERABLE = ALWAYS
+{
+} "no"
diff --git a/Carpet/CarpetIOHDF5/schedule.ccl b/Carpet/CarpetIOHDF5/schedule.ccl
new file mode 100644
index 000000000..fc3f69751
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/schedule.ccl
@@ -0,0 +1,63 @@
+# Schedule definitions for thorn CarpetIOHDF5
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/schedule.ccl,v 1.12 2004/08/18 16:02:56 tradke Exp $
+
+storage: next_output_iteration next_output_time this_iteration
+
+schedule CarpetIOHDF5Startup at STARTUP after IOUtil_Startup
+{
+ LANG: C
+} "Startup routine"
+
+schedule CarpetIOHDF5Init at BASEGRID
+{
+ LANG: C
+ OPTIONS: global
+} "Initialisation routine"
+
+schedule CarpetIOHDF5ReadData at INITIAL
+{
+ LANG: C
+ OPTIONS: level
+} "Read initial data from file"
+
+if (checkpoint && checkpoint_ID)
+{
+ schedule CarpetIOHDF5_InitialDataCheckpoint at CPINITIAL
+ {
+ LANG: C
+ OPTIONS: meta
+ } "Initial data checkpoint routine"
+}
+
+schedule CarpetIOHDF5_EvolutionCheckpoint at CHECKPOINT
+{
+ LANG: C
+ OPTIONS: meta
+} "Evolution checkpoint routine"
+
+schedule CarpetIOHDF5_TerminationCheckpoint at TERMINATE
+{
+ LANG: C
+ OPTIONS: meta
+} "Termination checkpoint routine"
+
+schedule CarpetIOHDF5_CloseFile at POSTINITIAL
+{
+ LANG: C
+ OPTIONS: global
+} "Close an input file opened by the filereader"
+
+if (! CCTK_Equals (recover, "no") && *recover_file)
+{
+ schedule CarpetIOHDF5_RecoverParameters at RECOVER_PARAMETERS
+ {
+ LANG:C
+ OPTIONS: meta
+ } "Parameter recovery routine"
+
+ schedule CarpetIOHDF5_CloseFile at POST_RECOVER_VARIABLES
+ {
+ LANG: C
+ OPTIONS: global
+ } "Close an initial data checkpoint file"
+}
diff --git a/Carpet/CarpetIOHDF5/src/Checkpoint.cc b/Carpet/CarpetIOHDF5/src/Checkpoint.cc
new file mode 100644
index 000000000..04483c18a
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/Checkpoint.cc
@@ -0,0 +1,437 @@
+#include <assert.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <algorithm>
+#include <fstream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <hdf5.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Version.h"
+
+extern "C" {
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/Checkpoint.cc,v 1.2 2004/08/18 16:02:56 tradke Exp $";
+CCTK_FILEVERSION(Carpet_CarpetIOHDF5_Checkpoint_cc);
+}
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
+
+#include "bbox.hh"
+#include "data.hh"
+#include "gdata.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "iohdf5.hh"
+#include "iohdf5GH.h"
+
+
+namespace CarpetIOHDF5
+{
+
+using namespace std;
+using namespace Carpet;
+
+// when was the last checkpoint written ?
+static int last_checkpoint_iteration = -1;
+
+
+static int Checkpoint (const cGH* const cctkGH, int called_from);
+static int DumpParametersGHExtentions (const cGH *cctkGH, int all, hid_t writer);
+
+
+int CarpetIOHDF5_InitialDataCheckpoint (const cGH* const cctkGH)
+{
+ CCTK_INFO ("---------------------------------------------------------");
+ CCTK_INFO ("Dumping initial data checkpoint");
+ CCTK_INFO ("---------------------------------------------------------");
+
+ int retval = Checkpoint (cctkGH, CP_INITIAL_DATA);
+
+ return (retval);
+}
+
+
+int CarpetIOHDF5_EvolutionCheckpoint (const cGH* const cctkGH)
+{
+ int retval = 0;
+ DECLARE_CCTK_PARAMETERS
+
+ // Test checkpoint_every, and adjust it. This is necessary until
+ // recovery is more flexible.
+ int every_full = 1 << (maxreflevels-1);
+ if (checkpoint_every > 0 && (checkpoint_every % every_full) != 0)
+ {
+ char new_checkpoint_every[32];
+
+ snprintf (new_checkpoint_every, sizeof (new_checkpoint_every), "%d",
+ (checkpoint_every / every_full + 1) * every_full);
+ CCTK_ParameterSet ("checkpoint_every", "IOUtil", new_checkpoint_every);
+ CCTK_VInfo (CCTK_THORNSTRING,"I have adjusted your checkpoint_every to %s.",
+ new_checkpoint_every);
+ }
+
+ if (checkpoint &&
+ ((checkpoint_every > 0 && cctkGH->cctk_iteration % checkpoint_every == 0) ||
+ checkpoint_next))
+ {
+ CCTK_INFO ("---------------------------------------------------------");
+ CCTK_VInfo (CCTK_THORNSTRING, "Dumping periodic checkpoint at "
+ "iteration %d", cctkGH->cctk_iteration);
+ CCTK_INFO ("---------------------------------------------------------");
+
+ retval = Checkpoint (cctkGH, CP_EVOLUTION_DATA);
+
+ if (checkpoint_next)
+ {
+ CCTK_ParameterSet ("checkpoint_next", CCTK_THORNSTRING, "no");
+ }
+ }
+
+ return (retval);
+}
+
+
+int CarpetIOHDF5_TerminationCheckpoint (const cGH *const GH)
+{
+ int retval = 0;
+ DECLARE_CCTK_PARAMETERS
+
+
+ if (checkpoint && checkpoint_on_terminate)
+ {
+ if (last_checkpoint_iteration < GH->cctk_iteration)
+ {
+ CCTK_INFO ("---------------------------------------------------------");
+ CCTK_VInfo (CCTK_THORNSTRING, "Dumping termination checkpoint at "
+ "iteration %d", GH->cctk_iteration);
+ CCTK_INFO ("---------------------------------------------------------");
+
+ retval = Checkpoint (GH, CP_EVOLUTION_DATA);
+ }
+ else if (verbose)
+ {
+ CCTK_INFO ("---------------------------------------------------------");
+ CCTK_VInfo (CCTK_THORNSTRING, "Termination checkpoint already dumped "
+ "as last evolution checkpoint at iteration %d",
+ last_checkpoint_iteration);
+ CCTK_INFO ("---------------------------------------------------------");
+ }
+ }
+
+ return (retval);
+}
+
+
+static int Checkpoint (const cGH* const cctkGH, int called_from)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ int retval = 0;
+
+ ioRequest *request;
+
+ CarpetIOHDF5GH *myGH = (CarpetIOHDF5GH *) CCTK_GHExtension (cctkGH,
+ "CarpetIOHDF5");
+
+ // check if CarpetIOHDF5 was registered as I/O method
+ if (myGH == NULL)
+ {
+ CCTK_WARN (0, "No CarpetIOHDF5 I/O methods registered");
+ return -1;
+ }
+
+ int const myproc = CCTK_MyProc (cctkGH);
+
+
+ /* get the filenames for both the temporary and real checkpoint file */
+ char *filename = IOUtil_AssembleFilename (cctkGH, NULL, "", ".h5",
+ called_from, 0, 1);
+ char *tempname = IOUtil_AssembleFilename (cctkGH, NULL, ".tmp", ".h5",
+ called_from, 0, 1);
+
+ hid_t writer = -1;
+
+ if (myproc == 0)
+ {
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, "Creating temporary checkpoint file '%s'",
+ tempname);
+ }
+
+ HDF5_ERROR (writer = H5Fcreate (tempname, H5F_ACC_TRUNC, H5P_DEFAULT,
+ H5P_DEFAULT));
+
+ // Dump all parameters and GHExtentions
+ retval = DumpParametersGHExtentions (cctkGH, 1, writer);
+
+ }
+
+ // now dump the grid variables on all mglevels, reflevels, maps and components
+ BEGIN_MGLEVEL_LOOP (cctkGH)
+ {
+ BEGIN_REFLEVEL_LOOP (cctkGH)
+ {
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Dumping grid variables on mglevel %d reflevel %d ...",
+ mglevel, reflevel);
+ }
+
+ for (int group = CCTK_NumGroups () - 1; group >= 0; group--)
+ {
+ /* only dump groups which have storage assigned */
+ if (CCTK_QueryGroupStorageI (cctkGH, group) <= 0)
+ {
+ continue;
+ }
+
+ const int grouptype = CCTK_GroupTypeI (group);
+
+ // scalars and grid arrays only have one reflevel
+ if (grouptype != CCTK_GF && reflevel > 0)
+ {
+ continue;
+ }
+
+ // now check if there is any memory allocated
+ // for GFs and GAs. GSs should always have
+ // memory allocated and there is at this point
+ // no CCTK function to check this :/
+ if (grouptype == CCTK_GF || grouptype == CCTK_ARRAY)
+ {
+ const int gpdim = CCTK_GroupDimI (group);
+ int gtotalsize = 1;
+ vector<int> tlsh (gpdim);
+ assert(!CCTK_GrouplshGI(cctkGH,gpdim,&tlsh[0],group));
+ for(int i=0;i<gpdim;i++)
+ {
+ gtotalsize=tlsh[i];
+ }
+ if(gtotalsize == 0)
+ {
+ if (verbose)
+ {
+ CCTK_VInfo(CCTK_THORNSTRING, "Group '%s' is zero-sized. "
+ "No checkpoint info written", CCTK_GroupName (group));
+ }
+ continue;
+ }
+ }
+
+ /* get the number of allocated timelevels */
+ cGroup gdata;
+ CCTK_GroupData (group, &gdata);
+ gdata.numtimelevels = 0;
+ gdata.numtimelevels = CCTK_GroupStorageIncrease (cctkGH, 1, &group,
+ &gdata.numtimelevels,NULL);
+
+ int first_vindex = CCTK_FirstVarIndexI (group);
+
+ /* get the default I/O request for this group */
+ request = IOUtil_DefaultIORequest (cctkGH, first_vindex, 1);
+
+ /* disable checking for old data objects, disable datatype conversion
+ and downsampling */
+ request->check_exist = 0;
+ request->hdatatype = gdata.vartype;
+ for (request->hdim = 0; request->hdim < request->vdim; request->hdim++)
+ {
+ request->downsample[request->hdim] = 1;
+ }
+
+ /* loop over all variables in this group */
+ for (request->vindex = first_vindex;
+ request->vindex < first_vindex + gdata.numvars;
+ request->vindex++)
+ {
+ char *fullname = CCTK_FullName (request->vindex);
+
+ /* loop over all timelevels of this variable */
+ for (request->timelevel = 0;
+ request->timelevel < gdata.numtimelevels;
+ request->timelevel++)
+ {
+ if (verbose)
+ {
+ if (fullname != NULL)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, " %s (timelevel %d)",
+ fullname, request->timelevel);
+ }
+ else
+ {
+ CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Invalid variable with varindex %d", request->vindex);
+ }
+ }
+ // write the var
+
+ if (grouptype == CCTK_ARRAY || grouptype == CCTK_GF || grouptype == CCTK_SCALAR)
+ {
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,"%s: reflevel: %d map: %d component: %d grouptype: %d ",
+ fullname,reflevel,Carpet::map,component,grouptype);
+ }
+ retval += WriteVar(cctkGH,writer,request,1);
+ }
+ else
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Invalid group type %d for variable '%s'", grouptype, fullname);
+ retval = -1;
+ }
+ }
+ free(fullname);
+ } /* end of loop over all variables */
+ } /* end of loop over all groups */
+ } END_REFLEVEL_LOOP;
+
+ } END_MGLEVEL_LOOP;
+
+
+ // Close the file
+ if (writer >= 0)
+ {
+ HDF5_ERROR (H5Fclose(writer));
+ }
+
+ if (retval == 0 && myproc == 0)
+ {
+ if (rename (tempname, filename))
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not rename temporary checkpoint file '%s' to '%s'",
+ tempname, filename);
+ retval = -1;
+ }
+ else
+ {
+ if (myGH->cp_filename_list[myGH->cp_filename_index])
+ {
+ if (checkpoint_keep > 0)
+ {
+ remove (myGH->cp_filename_list[myGH->cp_filename_index]);
+ }
+ free (myGH->cp_filename_list[myGH->cp_filename_index]);
+ }
+ myGH->cp_filename_list[myGH->cp_filename_index] = strdup (filename);
+ myGH->cp_filename_index = (myGH->cp_filename_index+1) % abs (checkpoint_keep);
+ }
+ }
+
+ // save the iteration number of this checkpoint
+ last_checkpoint_iteration = cctkGH->cctk_iteration;
+
+ // free allocated resources
+ free (tempname);
+ free (filename);
+
+ return retval;
+
+} // Checkpoint
+
+
+static int DumpParametersGHExtentions (const cGH *cctkGH, int all, hid_t writer)
+{
+ // large parts of this routine were taken from
+ // Thomas Radke's IOHDF5Util. Thanks Thomas!
+
+ DECLARE_CCTK_PARAMETERS;
+
+ char *parameters;
+ hid_t group, dspace, dset;
+ hsize_t size;
+
+ int itmp;
+ double dtmp;
+ const char *version;
+ const ioGH *ioUtilGH;
+
+ if (verbose)
+ {
+ CCTK_INFO ("Dumping Parameters and GH Extentions...");
+ }
+
+ /* get the parameter string buffer */
+ parameters = IOUtil_GetAllParameters (cctkGH, all);
+ if (parameters)
+ {
+ size = strlen (parameters) + 1;
+ HDF5_ERROR (group = H5Gcreate (writer, METADATA_GROUP, 0));
+ HDF5_ERROR (dspace = H5Screate_simple (1, &size, NULL));
+ HDF5_ERROR (dset = H5Dcreate (group, ALL_PARAMETERS, H5T_NATIVE_UCHAR,
+ dspace, H5P_DEFAULT));
+ HDF5_ERROR (H5Dwrite (dset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL,
+ H5P_DEFAULT, parameters));
+
+ // now dump the GH Extentions
+
+ /* get the handle for IOUtil extensions */
+ ioUtilGH = (const ioGH *) CCTK_GHExtension (cctkGH, "IO");
+
+ itmp = CCTK_MainLoopIndex ();
+ WriteAttribute(dset,"main loop index",itmp);
+
+ itmp = cctkGH->cctk_iteration;
+ WriteAttribute(dset,"GH$iteration",itmp);
+
+ itmp = ioUtilGH->ioproc_every;
+ WriteAttribute(dset,"GH$ioproc_every",itmp);
+
+ itmp = CCTK_nProcs (cctkGH);
+ WriteAttribute(dset,"GH$nprocs",itmp);
+
+ dtmp = cctkGH->cctk_time;
+ WriteAttribute(dset,"GH$time", dtmp);
+
+ dtmp = global_time;
+ WriteAttribute(dset,"carpet_global_time", dtmp);
+
+ itmp = reflevels;
+ WriteAttribute(dset,"carpet_reflevels", itmp);
+
+ dtmp = delta_time;
+ WriteAttribute(dset,"carpet_delta_time", dtmp);
+
+ version = CCTK_FullVersion();
+ WriteAttribute(dset,"Cactus version", version);
+
+ /* finally, we need all the times on the individual refinement levels */
+
+ const int numberofmgtimes=mglevels;
+ WriteAttribute(dset,"numberofmgtimes",numberofmgtimes);
+ for(int i=0;i < numberofmgtimes;i++)
+ {
+ char buffer[100];
+ snprintf (buffer, sizeof (buffer), "mgleveltimes %d", i);
+ WriteAttribute(dset,buffer,(double *) &leveltimes.at(i).at(0), reflevels);
+ }
+
+ HDF5_ERROR (H5Dclose (dset));
+ HDF5_ERROR (H5Sclose (dspace));
+ HDF5_ERROR (H5Gclose (group));
+
+ free (parameters);
+ }
+
+ return 0;
+} // DumpParametersGHExtentions
+
+} // namespace CarpetIOHDF5
diff --git a/Carpet/CarpetIOHDF5/src/Recover.cc b/Carpet/CarpetIOHDF5/src/Recover.cc
new file mode 100644
index 000000000..0f5349bb8
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/Recover.cc
@@ -0,0 +1,523 @@
+#include <assert.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <algorithm>
+#include <fstream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <hdf5.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Version.h"
+
+extern "C" {
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/Recover.cc,v 1.2 2004/07/09 15:38:18 tradke Exp $";
+CCTK_FILEVERSION(Carpet_CarpetIOHDF5_iohdf5chckpt_recover_cc);
+}
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
+
+#include "bbox.hh"
+#include "data.hh"
+#include "gdata.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "iohdf5.hh"
+#include "iohdf5GH.h"
+
+/* some macros for HDF5 group names */
+#define METADATA_GROUP "Parameters and Global Attributes"
+#define ALL_PARAMETERS "All Parameters"
+
+
+
+namespace CarpetIOHDF5
+{
+
+using namespace std;
+using namespace Carpet;
+
+// structure describing a single dataset of an HDF5 file to read from
+typedef struct
+{
+ char *datasetname;
+
+ int vindex;
+ int timelevel;
+ int mglevel;
+ int reflevel;
+ int rank;
+ int *shape; // [rank]
+ int *iorigin; // [rank]
+} dataset_t;
+
+// structure describing the contents of an HDF5 file to read from
+typedef struct
+{
+ int num_mglevels;
+ int num_reflevels;
+ int parameter_len;
+ int cctk_iteration;
+ int main_loop_index;
+ double global_time;
+ double delta_time;
+ double *mgleveltimes; // [num_mglevels*num_reflevels]
+
+ char *filename;
+ hid_t file;
+ int num_datasets;
+ list<dataset_t> datasets; // [num_datasets]
+ int num_ints; // total number of integers in datasets[]
+} file_t;
+
+static file_t infile = {0, 0, 0, 0, 0, 0, 0, NULL, NULL, -1, -1,
+ list<dataset_t> (), 0};
+
+
+static int OpenFile (const char *basefilename, file_t *file, int called_from);
+static int RecoverVariables (cGH* cctkGH, file_t *file);
+static herr_t ReadMetadata (hid_t group, const char *objectname, void *arg);
+
+
+// Register with the Cactus Recovery Interface
+int CarpetIOHDF5_RecoverParameters (void)
+{
+ int retval = IOUtil_RecoverParameters (Recover, ".h5", "HDF5");
+
+ return (retval);
+}
+
+
+// close a checkpoint/filereader file after recovering grid variables
+int CarpetIOHDF5_CloseFile (void)
+{
+ DECLARE_CCTK_PARAMETERS
+
+
+ if (infile.num_datasets <= 0)
+ {
+ return (0);
+ }
+ infile.num_datasets = -1;
+
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, "closing file '%s' after recovery",
+ infile.filename);
+ }
+
+ if (infile.file >= 0)
+ {
+ HDF5_ERROR (H5Fclose (infile.file));
+ infile.file = -1;
+ }
+ free (infile.filename);
+ delete[] infile.mgleveltimes;
+
+ for (list<dataset_t>::iterator dataset = infile.datasets.begin ();
+ dataset != infile.datasets.end ();
+ dataset++)
+ {
+ delete[] dataset->shape;
+ delete[] dataset->iorigin;
+ }
+ infile.datasets.clear ();
+
+ return (0);
+}
+
+static int OpenFile (const char *basefilename, file_t *file, int called_from)
+{
+ hid_t dset = -1;
+ const int myproc = CCTK_MyProc (NULL);
+ DECLARE_CCTK_PARAMETERS
+
+
+ // generate filename for an unchunked checkpoint file */
+ file->filename = IOUtil_AssembleFilename (NULL, basefilename, "", ".h5",
+ called_from, 0, 1);
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, "opening %s file '%s'",
+ called_from == CP_RECOVER_PARAMETERS ? "checkpoint" : "input",
+ file->filename);
+ }
+
+ if (myproc == 0)
+ {
+ // try to open the file (prevent HDF5 error messages if it fails)
+ H5E_BEGIN_TRY
+ {
+ file->file = H5Fopen (file->filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+ } H5E_END_TRY;
+
+ if (file->file >= 0)
+ {
+ if (called_from == CP_RECOVER_PARAMETERS)
+ {
+ HDF5_ERROR (dset = H5Dopen (file->file,
+ METADATA_GROUP"/"ALL_PARAMETERS));
+ ReadAttribute (dset, "carpet_reflevels", file->num_reflevels);
+ ReadAttribute (dset, "numberofmgtimes", file->num_mglevels);
+ ReadAttribute (dset, "GH$iteration", file->cctk_iteration);
+ ReadAttribute (dset, "main loop index", file->main_loop_index);
+ ReadAttribute (dset, "carpet_global_time", file->global_time);
+ ReadAttribute (dset, "carpet_delta_time", file->delta_time);
+ file->parameter_len = H5Dget_storage_size (dset) + 1;
+ assert (file->parameter_len > 1);
+ }
+
+ file->num_ints = 0;
+ HDF5_ERROR (H5Giterate (file->file, "/", NULL, ReadMetadata, file));
+ }
+ file->num_datasets = file->datasets.size ();
+ if (file->num_datasets <= 0)
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "No valid HDF5 file '%s' found", file->filename);
+ free (file->filename);
+ }
+ }
+
+ // broadcast integer variables
+ int *intbuffer = new int[7];
+ intbuffer[0] = file->num_datasets;
+ intbuffer[1] = file->num_mglevels;
+ intbuffer[2] = file->num_reflevels;
+ intbuffer[3] = file->cctk_iteration;
+ intbuffer[4] = file->main_loop_index;
+ intbuffer[5] = file->parameter_len;
+ intbuffer[6] = file->num_ints;
+ MPI_Bcast (intbuffer, 7, MPI_INT, 0, MPI_COMM_WORLD);
+ file->num_datasets = intbuffer[0];
+ file->num_mglevels = intbuffer[1];
+ file->num_reflevels = intbuffer[2];
+ file->cctk_iteration = intbuffer[3];
+ file->main_loop_index = intbuffer[4];
+ file->parameter_len = intbuffer[5];
+ file->num_ints = intbuffer[6];
+ delete[] intbuffer;
+
+ // return if no valid checkpoint could be found
+ if (file->num_datasets <= 0)
+ {
+ return (-1);
+ }
+
+ // serialize the dataset list metadata into a single MPI_INT buffer
+ intbuffer = new int[file->num_ints];
+ if (myproc == 0)
+ {
+ for (list<dataset_t>::iterator dataset = file->datasets.begin ();
+ dataset != file->datasets.end ();
+ dataset++)
+ {
+ *intbuffer++ = dataset->vindex;
+ *intbuffer++ = dataset->timelevel;
+ *intbuffer++ = dataset->mglevel;
+ *intbuffer++ = dataset->reflevel;
+ *intbuffer++ = dataset->rank;
+
+ for (int i = 0; i < dataset->rank; i++)
+ {
+ *intbuffer++ = dataset->shape[i];
+ *intbuffer++ = dataset->iorigin[i];
+ }
+ }
+ intbuffer -= file->num_ints;
+ }
+
+ // broadcast the serialized dataset list metadata
+ MPI_Bcast (intbuffer, file->num_ints, MPI_INT, 0, MPI_COMM_WORLD);
+
+ // build the dataset list on non-I/O processors
+ if (myproc != 0)
+ {
+ for (int i = 0; i < file->num_datasets; i++)
+ {
+ dataset_t dataset;
+
+
+ dataset.vindex = *intbuffer++;
+ dataset.timelevel = *intbuffer++;
+ dataset.mglevel = *intbuffer++;
+ dataset.reflevel = *intbuffer++;
+ dataset.rank = *intbuffer++;
+
+ dataset.shape = new int[dataset.rank];
+ dataset.iorigin = new int[dataset.rank];
+ for (int j = 0; j < dataset.rank; j++)
+ {
+ dataset.shape[j] = *intbuffer++;
+ dataset.iorigin[j] = *intbuffer++;
+ }
+
+ file->datasets.push_back (dataset);
+ }
+ intbuffer -= file->num_ints;
+ }
+ delete[] intbuffer;
+
+ if (called_from == FILEREADER_DATA)
+ {
+ return (0);
+ }
+
+ // Use refinement levels parameter from checkpointing file ?
+ if (use_reflevels_from_checkpoint)
+ {
+ char buffer[32];
+
+ snprintf (buffer, sizeof (buffer), "%d", file->num_reflevels);
+ CCTK_ParameterSet ("refinement_levels", "CarpetRegrid", buffer);
+
+ CCTK_VInfo (CCTK_THORNSTRING, "Using %i reflevels read from checkpoint "
+ "file. Ignoring value in parameter file.", file->num_reflevels);
+ }
+
+ // leave space at the end for global_time and delta_time
+ // so that all double variables can be broadcasted in one go
+ int num_times = file->num_mglevels*file->num_reflevels + 2;
+ file->mgleveltimes = new double[num_times];
+ if (myproc == 0)
+ {
+ // FIXME: should store all mgleveltimes in a single contiguous array
+ // to get rid of this loop and save some attributes
+ for (int i = 0; i < file->num_mglevels; i++)
+ {
+ char buffer[32];
+
+ snprintf (buffer, sizeof (buffer), "mgleveltimes %d", i);
+ ReadAttribute (dset, buffer, file->mgleveltimes + i*file->num_reflevels,
+ file->num_reflevels);
+ }
+ }
+
+ // broadcast double variables
+ file->mgleveltimes[num_times - 2] = file->global_time;
+ file->mgleveltimes[num_times - 1] = file->delta_time;
+ MPI_Bcast (file->mgleveltimes, num_times, MPI_DOUBLE, 0, MPI_COMM_WORLD);
+ file->global_time = file->mgleveltimes[num_times - 2];
+ file->delta_time = file->mgleveltimes[num_times - 1];
+
+ char *parameters = new char[file->parameter_len];
+ if (myproc == 0)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, "Recovering parameters from checkpoint");
+
+ HDF5_ERROR (H5Dread (dset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+ parameters));
+ }
+ if (dset >= 0)
+ {
+ HDF5_ERROR (H5Dclose (dset));
+ }
+
+ // broadcast char variables
+ MPI_Bcast (parameters, file->parameter_len, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+ // recover parameters
+ IOUtil_SetAllParameters (parameters);
+ delete[] parameters;
+
+ return (0);
+}
+
+
+int Recover (cGH* cctkGH, const char *basefilename, int called_from)
+{
+ DECLARE_CCTK_PARAMETERS
+ int retval = 0;
+
+
+ assert (called_from == CP_RECOVER_PARAMETERS ||
+ called_from == CP_RECOVER_DATA ||
+ called_from == FILEREADER_DATA);
+
+ if (called_from == CP_RECOVER_PARAMETERS ||
+ called_from == FILEREADER_DATA)
+ {
+ // open the file, read and broadcast its metadata information
+ // for CP_RECOVER_PARAMETERS: also recover all parameters
+ retval = OpenFile (basefilename, &infile, called_from);
+
+ if (called_from == CP_RECOVER_PARAMETERS || retval)
+ {
+ return (retval == 0 ? 1 : -1);
+ }
+ }
+
+ // can only proceed with a valid checkpoint file from here on
+ assert (infile.num_datasets > 0);
+
+ // set global Cactus/Carpet variables
+ if (called_from == CP_RECOVER_DATA)
+ {
+ global_time = infile.global_time;
+ delta_time = infile.delta_time;
+ CCTK_SetMainLoopIndex (infile.main_loop_index);
+
+ cctkGH->cctk_iteration = infile.cctk_iteration;
+ cctkGH->cctk_time = infile.mgleveltimes[mglevel*infile.num_reflevels +
+ reflevel];
+ }
+
+ // now recover all grid variables on current mglevel and reflevel
+ retval = RecoverVariables (cctkGH, &infile);
+
+ if (called_from == CP_RECOVER_DATA)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "restarting simulation at iteration %d (physical time %g)",
+ cctkGH->cctk_iteration, (double) cctkGH->cctk_time);
+ }
+ else
+ {
+ // FIXME: keep filereader input file open for all mglevels, reflevels
+ // this doesn't work now because we don't know the number of
+ // mglevels and reflevels
+ // also: there may be multiple files to be read in, and they
+ // must not share the same data structures
+ CarpetIOHDF5_CloseFile ();
+ }
+
+ return (retval);
+}
+
+
+static herr_t ReadMetadata (hid_t group, const char *objectname, void *arg)
+{
+ file_t *file = (file_t *) arg;
+ dataset_t dataset;
+ hid_t dset, dspace;
+ H5G_stat_t object_info;
+
+
+ // we are interested only in datasets
+ HDF5_ERROR (H5Gget_objinfo (group, objectname, 0, &object_info));
+ if (object_info.type != H5G_DATASET)
+ {
+ return (0);
+ }
+
+ dataset.datasetname = strdup (objectname);
+ assert (dataset.datasetname);
+
+ HDF5_ERROR (dset = H5Dopen (group, objectname));
+ char *varname = NULL;
+ ReadAttribute (dset, "name", varname);
+ dataset.vindex = CCTK_VarIndex (varname);
+ free (varname);
+ ReadAttribute (dset, "name", varname);
+ ReadAttribute (dset, "level", dataset.timelevel);
+ ReadAttribute (dset, "carpet_mglevel", dataset.mglevel);
+ ReadAttribute (dset, "carpet_reflevel", dataset.reflevel);
+ HDF5_ERROR (dspace = H5Dget_space (dset));
+ HDF5_ERROR (dataset.rank = H5Sget_simple_extent_ndims (dspace));
+ dataset.iorigin = new int[dataset.rank];
+ ReadAttribute (dset, "iorigin", dataset.iorigin, dataset.rank);
+ hsize_t *shape = new hsize_t[dataset.rank];
+ HDF5_ERROR (H5Sget_simple_extent_dims (dspace, shape, NULL));
+ dataset.shape = new int[dataset.rank];
+ for (int i = 0; i < dataset.rank; i++)
+ {
+ dataset.shape[i] = shape[i];
+ }
+ HDF5_ERROR (H5Sclose (dspace));
+ HDF5_ERROR (H5Dclose (dset));
+
+ // add this dataset to our list and count the number of int elements
+ file->datasets.push_back (dataset);
+ file->num_ints += 5 + 2*dataset.rank;
+
+ return (0);
+}
+
+
+static int RecoverVariables (cGH* cctkGH, file_t *file)
+{
+ DECLARE_CCTK_PARAMETERS
+ int myproc = CCTK_MyProc (cctkGH);
+ hid_t dset = -1;
+
+
+#if 0
+ double leveltime = MPI_Wtime();
+ double comparetime = MPI_Wtime();
+ static double totaltime;
+ if (reflevel == 0) totaltime = 0;
+
+ comparetime = MPI_Wtime() - comparetime;
+ // cout << "Time for string comparison: " << comparetime << endl;
+ // cout << "I have for this reflevel " << refleveldatasetnamelist.size() << endl;
+#endif
+
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "reading grid variables on mglevel %d reflevel %d",
+ mglevel, reflevel);
+
+ int num_vars = CCTK_NumVars ();
+ for (list<dataset_t>::iterator dataset = file->datasets.begin ();
+ dataset != file->datasets.end ();
+ dataset++)
+ {
+ // only recover grid variables for the current mglevel/reflevel
+ if (dataset->mglevel != mglevel || dataset->reflevel != reflevel)
+ {
+ continue;
+ }
+
+ if (dataset->vindex < 0 || dataset->vindex >= num_vars)
+ {
+ if (myproc == 0)
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Ignoring dataset '%s' (invalid variable name)",
+ dataset->datasetname);
+ }
+ continue;
+ }
+
+ if (myproc == 0)
+ {
+ HDF5_ERROR (dset = H5Dopen (file->file, dataset->datasetname));
+ assert (dset >= 0);
+ }
+
+ vector<ibset> regions_read (Carpet::maps);
+ int did_read_something = ReadVar (cctkGH, dataset->vindex, dset,
+ regions_read, 1);
+ MPI_Bcast (&did_read_something, 1, MPI_INT, 0, dist::comm);
+
+ if (dset >= 0)
+ {
+ HDF5_ERROR (H5Dclose (dset));
+ }
+
+ }
+
+#if 0
+ leveltime = MPI_Wtime() - leveltime;
+ totaltime += leveltime;
+
+ if (verbose)
+ cout << "Timers: leveltime: " << leveltime << " totaltime: " << totaltime << endl;
+#endif
+
+ return (0);
+}
+
+
+} // namespace CarpetIOHDF5
diff --git a/Carpet/CarpetIOHDF5/src/iohdf5.cc b/Carpet/CarpetIOHDF5/src/iohdf5.cc
new file mode 100644
index 000000000..6a7ba3b46
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/iohdf5.cc
@@ -0,0 +1,1181 @@
+#include <assert.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <algorithm>
+#include <fstream>
+#include <sstream>
+#include <vector>
+
+#include <hdf5.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5.cc,v 1.41 2004/07/09 15:38:18 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetIOHDF5_iohdf5_cc);
+}
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
+
+#include "bbox.hh"
+#include "data.hh"
+#include "gdata.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "iohdf5.hh"
+#include "iohdf5GH.h"
+
+
+namespace CarpetIOHDF5 {
+
+using namespace std;
+using namespace Carpet;
+
+
+// Variable definitions
+vector<bool> do_truncate; // [var]
+vector<vector<vector<int> > > last_output; // [ml][rl][var]
+
+
+void CarpetIOHDF5Startup (void)
+{
+ DECLARE_CCTK_PARAMETERS
+
+
+ CCTK_RegisterBanner ("AMR 3D HDF5 I/O provided by CarpetIOHDF5");
+
+ int GHExtension = CCTK_RegisterGHExtension ("CarpetIOHDF5");
+ CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH);
+
+ int IOMethod = CCTK_RegisterIOMethod ("IOHDF5");
+ CCTK_RegisterIOMethodOutputGH (IOMethod, OutputGH);
+ CCTK_RegisterIOMethodOutputVarAs (IOMethod, OutputVarAs);
+ CCTK_RegisterIOMethodTimeToOutput (IOMethod, TimeToOutput);
+ CCTK_RegisterIOMethodTriggerOutput (IOMethod, TriggerOutput);
+
+ /* initial I/O parameter check */
+ int numvars = CCTK_NumVars ();
+ vector<bool> flags(numvars);
+
+ if (CCTK_TraverseString (out3D_vars, SetFlag, &flags,CCTK_GROUP_OR_VAR) < 0)
+ {
+ CCTK_VWarn (strict_io_parameter_check ? 0 : 1,
+ __LINE__, __FILE__, CCTK_THORNSTRING,
+ "error while parsing parameter 'IOHDF5::out3D_vars'");
+ }
+
+#if 0
+ // Christian's Recovery routine
+ if ( !(CCTK_Equals(recover,"no")) ) {
+ ierr = IOUtil_RegisterRecover ("CarpetIOHDF5 recovery", Recover);
+ assert (! ierr);
+ } else {
+ // Erik's Recovery routine
+ ierr = IOUtil_RegisterRecover ("CarpetIOHDF5", Recover);
+ assert (! ierr);
+ }
+#else
+ if (IOUtil_RegisterRecover ("CarpetIOHDF5 recovery", Recover) < 0)
+ {
+ CCTK_WARN (1, "Failed to register IOFlexIO recovery routine");
+ }
+#endif
+}
+
+
+
+int CarpetIOHDF5Init (const cGH* const cctkGH)
+{
+ DECLARE_CCTK_ARGUMENTS;
+
+ *this_iteration = -1;
+ *next_output_iteration = 0;
+ *next_output_time = cctk_time;
+
+ return (0);
+}
+
+
+
+void* SetupGH (tFleshConfig* const fc,
+ const int convLevel, cGH* const cctkGH)
+{
+ DECLARE_CCTK_PARAMETERS;
+
+ CarpetIOHDF5GH* myGH;
+
+ const void *dummy;
+ dummy = &fc;
+ dummy = &convLevel;
+ dummy = &cctkGH;
+ dummy = &dummy;
+
+ // Truncate all files if this is not a restart
+ do_truncate.resize(CCTK_NumVars(), true);
+
+ // No iterations have yet been output
+ last_output.resize(mglevels);
+ for (int ml=0; ml<mglevels; ++ml) {
+ last_output.at(ml).resize(maxreflevels);
+ for (int rl=0; rl<maxreflevels; ++rl) {
+ last_output.at(ml).at(rl).resize(CCTK_NumVars(), INT_MIN);
+ }
+ }
+
+ // We register only once, ergo we get only one handle. We store
+ // that statically, so there is no need to pass anything to
+ // Cactus.
+
+ /* allocate a new GH extension structure */
+
+ CCTK_INT numvars = CCTK_NumVars ();
+
+ myGH = (CarpetIOHDF5GH*) malloc (sizeof (CarpetIOHDF5GH));
+ myGH->out_last = (int *) malloc (numvars * sizeof (int));
+ myGH->requests = (ioRequest **) calloc (numvars, sizeof (ioRequest *));
+ myGH->cp_filename_list = (char **) calloc (abs (checkpoint_keep), sizeof (char *));
+ myGH->cp_filename_index = 0;
+ myGH->out_vars = strdup ("");
+ myGH->out_every_default = out_every - 1;
+
+ for (int i = 0; i < numvars; i++)
+ {
+ myGH->out_last [i] = -1;
+ }
+
+ myGH->open_output_files = NULL;
+
+ // Now set hdf5 complex datatypes
+ // Stolen from Thomas Radke
+ HDF5_ERROR (myGH->HDF5_COMPLEX =
+ H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX)));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX, "real",
+ offsetof (CCTK_COMPLEX, Re), HDF5_REAL));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX, "imag",
+ offsetof (CCTK_COMPLEX, Im), HDF5_REAL));
+#ifdef CCTK_REAL4
+ HDF5_ERROR (myGH->HDF5_COMPLEX8 =
+ H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX8)));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX8, "real",
+ offsetof (CCTK_COMPLEX8, Re), HDF5_REAL4));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX8, "imag",
+ offsetof (CCTK_COMPLEX8, Im), HDF5_REAL4));
+#endif
+#ifdef CCTK_REAL8
+ HDF5_ERROR (myGH->HDF5_COMPLEX16 =
+ H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX16)));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX16, "real",
+ offsetof (CCTK_COMPLEX16, Re), HDF5_REAL8));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX16, "imag",
+ offsetof (CCTK_COMPLEX16, Im), HDF5_REAL8));
+#endif
+#ifdef CCTK_REAL16
+ HDF5_ERROR (myGH->HDF5_COMPLEX32 =
+ H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX32)));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX32, "real",
+ offsetof (CCTK_COMPLEX32, Re), HDF5_REAL16));
+ HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX32, "imag",
+ offsetof (CCTK_COMPLEX32, Im), HDF5_REAL16));
+#endif
+ return (myGH);
+}
+
+int OutputGH (const cGH* const cctkGH) {
+ for (int vindex=0; vindex<CCTK_NumVars(); ++vindex) {
+ if (TimeToOutput(cctkGH, vindex)) {
+ TriggerOutput(cctkGH, vindex);
+ }
+ }
+ return 0;
+}
+
+
+
+int OutputVarAs (const cGH* const cctkGH, const char* const varname,
+ const char* const alias)
+{
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+
+ int numvars = CCTK_NumVars ();
+ vector<bool> flags (numvars);
+
+ if (CCTK_TraverseString (varname, SetFlag, &flags, CCTK_VAR) < 0)
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "error while parsing variable name '%s' (alias name '%s')",
+ varname, alias);
+ return (-1);
+ }
+
+ int vindex = 0;
+ while (! flags.at (vindex) && vindex < numvars) vindex++;
+ if (vindex >= numvars)
+ {
+ return (-1);
+ }
+
+ const int group = CCTK_GroupIndexFromVarI (vindex);
+ assert (group>=0 && group<(int)Carpet::arrdata.size());
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cctkGH, group))
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot output variable '%s' because it has no storage",
+ varname);
+ return (0);
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+ if (grouptype == CCTK_SCALAR || grouptype == CCTK_ARRAY)
+ {
+ assert (do_global_mode);
+ }
+
+ /* get the default I/O request for this variable */
+ ioRequest* request = IOUtil_DefaultIORequest (cctkGH, vindex, 1);
+
+ // Get grid hierarchy extentsion from IOUtil
+ const ioGH * const iogh = (const ioGH *)CCTK_GHExtension (cctkGH, "IO");
+ assert (iogh);
+
+ // Create the output directory
+ const char* myoutdir = out3D_dir;
+ if (CCTK_EQUALS(myoutdir, "")) {
+ myoutdir = out_dir;
+ }
+ if (CCTK_MyProc(cctkGH)==0) {
+ CCTK_CreateDirectory (0755, myoutdir);
+ }
+
+ // Invent a file name
+ ostringstream filenamebuf;
+ filenamebuf << myoutdir << "/" << alias << out3D_extension;
+ string filenamestr = filenamebuf.str();
+ const char * const filename = filenamestr.c_str();
+
+ hid_t writer = -1;
+
+ // Write the file only on the root processor
+ if (CCTK_MyProc (cctkGH) == 0)
+ {
+
+ // If this is the first time, then create and truncate the file
+ if (do_truncate.at(vindex))
+ {
+ struct stat fileinfo;
+ if (! iogh->recovered || stat(filename, &fileinfo)!=0)
+ {
+ HDF5_ERROR (writer = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT,
+ H5P_DEFAULT));
+ assert (writer>=0);
+ HDF5_ERROR (H5Fclose (writer));
+ writer = -1;
+ }
+ }
+
+ // Open the file
+ HDF5_ERROR (writer = H5Fopen (filename, H5F_ACC_RDWR, H5P_DEFAULT));
+ }
+
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Writing variable '%s' on mglevel %d reflevel %d",
+ varname, mglevel, reflevel);
+ }
+ WriteVar (cctkGH, writer, request, 0);
+
+ // Close the file
+ if (writer >= 0)
+ {
+ HDF5_ERROR (H5Fclose (writer));
+ }
+
+ // Don't truncate again
+ do_truncate.at(vindex) = false;
+
+ return (0);
+}
+
+int WriteVar (const cGH* const cctkGH, const hid_t writer, const ioRequest* request,
+ const int called_from_checkpoint) {
+
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ void * h5data=NULL;
+
+ const int n = request->vindex;
+ assert (n>=0 && n<CCTK_NumVars());
+ const char * varname = CCTK_FullName(n);
+ const int group = CCTK_GroupIndexFromVarI (n);
+ assert (group>=0 && group<(int)Carpet::arrdata.size());
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0 && n0<CCTK_NumVars());
+ const int var = n - n0;
+ assert (var>=0 && var<CCTK_NumVars());
+ int tl = 0;
+
+ const int gpdim = CCTK_GroupDimI(group);
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cctkGH, group)) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot output variable \"%s\" because it has no storage",
+ varname);
+ return 0;
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+ switch (grouptype) {
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ assert (do_global_mode);
+ break;
+ case CCTK_GF:
+ /* do nothing */
+ break;
+ default:
+ assert (0);
+ }
+ const int rl = grouptype==CCTK_GF ? reflevel : 0;
+
+ cGroup cgdata;
+ int ierr = CCTK_GroupData(group,&cgdata);
+ assert(ierr==0);
+
+ // Select memory (source) and file (destination) datatypes
+ int cctkDataType = CCTK_VarTypeI(n);
+ const hid_t memdatatype = h5DataType(cctkGH, cctkDataType);
+ assert(memdatatype >= 0);
+ if (out_single_precision && ! called_from_checkpoint)
+ {
+ if (cctkDataType == CCTK_VARIABLE_REAL)
+ {
+ cctkDataType = CCTK_VARIABLE_REAL4;
+ }
+ else if (cctkDataType == CCTK_VARIABLE_COMPLEX)
+ {
+ cctkDataType = CCTK_VARIABLE_COMPLEX8;
+ }
+#ifdef CCTK_INT2
+ else if (cctkDataType == CCTK_VARIABLE_INT)
+ {
+ cctkDataType = CCTK_VARIABLE_INT2;
+ }
+#endif
+ }
+ const hid_t filedatatype = h5DataType(cctkGH, cctkDataType);
+ assert(filedatatype >= 0);
+
+ // let's get the correct Carpet time level (which is the (-1) * Cactus timelevel):
+ tl = - request->timelevel;
+
+ // Traverse all components
+ BEGIN_MAP_LOOP(cctkGH, grouptype) {
+ BEGIN_COMPONENT_LOOP(cctkGH, grouptype) {
+
+ const ggf<dim>* ff = 0;
+
+ ff = (ggf<dim>*)arrdata.at(group).at(Carpet::map).data.at(var);
+
+ const gdata<dim>* const data = (*ff) (tl, rl, component, mglevel);
+
+ // Make temporary copy on processor 0
+ const ibbox ext = data->extent();
+// vect<int,dim> lo = ext.lower();
+// vect<int,dim> hi = ext.upper();
+// vect<int,dim> str = ext.stride();
+
+ gdata<dim>* const tmp = data->make_typed (n);
+ tmp->allocate (ext, 0);
+
+ if ( !((cgdata.disttype == CCTK_DISTRIB_CONSTANT) &&
+ (arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component)!=0))) {
+
+ if (cgdata.disttype == CCTK_DISTRIB_CONSTANT) {
+ assert(grouptype == CCTK_ARRAY || grouptype == CCTK_SCALAR);
+ if(component!=0) goto skip;
+ h5data = CCTK_VarDataPtrI(cctkGH,tl,n);
+ } else {
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ tmp->copy_from (state, data, ext);
+ }
+ }
+ // Write data
+ if (CCTK_MyProc(cctkGH)==0) {
+
+ int ldim=0;
+ if ( grouptype==CCTK_SCALAR ) {
+ ldim = 1;
+ } else {
+ ldim = gpdim;
+ }
+
+ // hsize_t shape[ldim];
+
+ vector<hsize_t> shape(ldim);
+
+ for (int d=0; d<ldim; ++d) {
+ shape[ldim-1-d] = (ext.shape() / ext.stride())[d];
+ }
+ hid_t dataspace;
+ HDF5_ERROR (dataspace = H5Screate_simple (ldim, &shape[0], NULL));
+ assert (dataspace>=0);
+
+
+ ostringstream datasetnamebuf;
+ datasetnamebuf << varname
+ << " it=" << cctk_iteration
+ << " tl=" << tl
+ << " ml=" << mglevel
+ << " rl=" << rl
+ << " m=" << Carpet::map
+ << " c=" << component;
+ string datasetnamestr = datasetnamebuf.str();
+ assert (datasetnamestr.size() <= 256); // limit dataset name size
+ const char * const datasetname = datasetnamestr.c_str();
+ hid_t dataset;
+ HDF5_ERROR (dataset = H5Dcreate (writer, datasetname, filedatatype, dataspace, H5P_DEFAULT));
+
+ if (dataset>=0) {
+
+ if (cgdata.disttype != CCTK_DISTRIB_CONSTANT) {
+ h5data = (void*)tmp->storage();
+ }
+
+ HDF5_ERROR (H5Dwrite (dataset, memdatatype, H5S_ALL, H5S_ALL, H5P_DEFAULT, h5data));
+
+ // Write FlexIO attributes
+ WriteAttribute (dataset, "level", rl);
+ {
+ CCTK_REAL origin[dim], delta[dim];
+ CCTK_REAL min_ext[dim], max_ext[dim];
+ for (int d=0; d<dim; ++d) {
+ origin[d] = CCTK_ORIGIN_SPACE(d);
+ delta[d] = CCTK_DELTA_SPACE(d);
+ min_ext[d] = origin[d] + cctk_lbnd[d] * delta[d];
+ max_ext[d] = origin[d] + cctk_ubnd[d] * delta[d];
+ }
+ WriteAttribute (dataset, "origin", min_ext, dim);
+ WriteAttribute (dataset, "delta", delta, dim);
+ WriteAttribute (dataset, "min_ext", min_ext, dim);
+ WriteAttribute (dataset, "max_ext", max_ext, dim);
+ }
+ WriteAttribute (dataset, "time", cctk_time);
+ WriteAttribute (dataset, "timestep", cctk_iteration);
+ WriteAttribute (dataset, "level_timestep", cctk_iteration / reflevelfact);
+ WriteAttribute (dataset, "persistence", maxreflevelfact / reflevelfact);
+ {
+ int time_refinement=0;
+ int spatial_refinement[dim];
+ int grid_placement_refinement[dim];
+ time_refinement = reflevelfact;
+ for (int d=0; d<dim; ++d) {
+ spatial_refinement[d] = reflevelfact;
+ grid_placement_refinement[d] = reflevelfact;
+ }
+ WriteAttribute (dataset, "time_refinement", time_refinement);
+ WriteAttribute (dataset, "spatial_refinement", spatial_refinement, dim);
+ WriteAttribute (dataset, "grid_placement_refinement", grid_placement_refinement, dim);
+ }
+ {
+ int iorigin[dim];
+ for (int d=0; d<dim; ++d) {
+ iorigin[d] = (ext.lower() / ext.stride())[d];
+ }
+ WriteAttribute (dataset, "iorigin", iorigin, dim);
+ }
+
+ // Write some additional attributes
+
+ // Legacy arguments
+ {
+ char * fullname = CCTK_FullName(n);
+ assert (fullname);
+ WriteAttribute (dataset, "name", fullname);
+ free (fullname);
+ }
+
+ // Group arguments
+ WriteAttribute (dataset, "group_version", 1);
+ {
+ char * fullname = CCTK_FullName(n);
+ assert (fullname);
+ WriteAttribute (dataset, "group_fullname", fullname);
+ free (fullname);
+ }
+ WriteAttribute (dataset, "group_varname", CCTK_VarName(n));
+ {
+ char * groupname = CCTK_GroupName(group);
+ assert (groupname);
+ WriteAttribute (dataset, "group_groupname", groupname);
+ free (groupname);
+ }
+ switch (grouptype) {
+ case CCTK_GF:
+ WriteAttribute (dataset, "group_grouptype", "CCTK_GF");
+ break;
+ case CCTK_ARRAY:
+ WriteAttribute (dataset, "group_grouptype", "CCTK_ARRAY");
+ break;
+ case CCTK_SCALAR:
+ WriteAttribute (dataset, "group_grouptype", "CCTK_SCALAR");
+ break;
+ default:
+ assert (0);
+ }
+ WriteAttribute (dataset, "group_dim", CCTK_GroupDimI(group));
+ WriteAttribute (dataset, "group_timelevel", tl);
+ WriteAttribute (dataset, "group_numtimelevels", CCTK_NumTimeLevelsI(group));
+
+ // Cactus arguments
+ WriteAttribute (dataset, "cctk_version", 1);
+ WriteAttribute (dataset, "cctk_dim", cctk_dim);
+ WriteAttribute (dataset, "cctk_iteration", cctk_iteration);
+ WriteAttribute (dataset, "cctk_gsh", cctk_gsh, dim);
+ WriteAttribute (dataset, "cctk_lsh", cctk_lsh, dim);
+ WriteAttribute (dataset, "cctk_lbnd", cctk_lbnd, dim);
+ WriteAttribute (dataset, "cctk_delta_time", cctk_delta_time);
+ WriteAttribute (dataset, "cctk_delta_space", cctk_delta_space, dim);
+ WriteAttribute (dataset, "cctk_origin_space", cctk_origin_space, dim);
+ WriteAttribute (dataset, "cctk_bbox", cctk_bbox, 2*dim);
+ WriteAttribute (dataset, "cctk_levfac", cctk_levfac, dim);
+ WriteAttribute (dataset, "cctk_levoff", cctk_levoff, dim);
+ WriteAttribute (dataset, "cctk_levoffdenom", cctk_levoffdenom, dim);
+ WriteAttribute (dataset, "cctk_timefac", cctk_timefac);
+ WriteAttribute (dataset, "cctk_convlevel", cctk_convlevel);
+ WriteAttribute (dataset, "cctk_convfac", cctk_convfac);
+ WriteAttribute (dataset, "cctk_nghostzones", cctk_nghostzones, dim);
+ WriteAttribute (dataset, "cctk_time", cctk_time);
+
+ // Carpet arguments
+ WriteAttribute (dataset, "carpet_version", 1);
+ WriteAttribute (dataset, "carpet_dim", dim);
+ WriteAttribute (dataset, "carpet_basemglevel", basemglevel);
+ WriteAttribute (dataset, "carpet_mglevel", mglevel);
+ WriteAttribute (dataset, "carpet_mglevels", mglevels);
+ WriteAttribute (dataset, "carpet_mgface", mgfact);
+ WriteAttribute (dataset, "carpet_reflevel", reflevel);
+ WriteAttribute (dataset, "carpet_reflevels", reflevels);
+ WriteAttribute (dataset, "carpet_reffact", reffact);
+ WriteAttribute (dataset, "carpet_map", Carpet::map);
+ WriteAttribute (dataset, "carpet_maps", maps);
+ WriteAttribute (dataset, "carpet_component", component);
+ WriteAttribute (dataset, "carpet_components", vhh.at(Carpet::map)->components(reflevel));
+
+ HDF5_ERROR (H5Dclose (dataset));
+ }
+
+ HDF5_ERROR (H5Sclose (dataspace));
+
+ } // if on root processor
+ } // if ! CCTK_DISTRIB_BLAH
+
+ skip:
+ // Delete temporary copy
+ delete tmp;
+
+ } END_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+
+ return 0;
+}
+
+
+
+int TimeToOutput (const cGH* const cctkGH, const int vindex)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+
+
+
+ const int grouptype = CCTK_GroupTypeFromVarI(vindex);
+ switch (grouptype) {
+ case CCTK_SCALAR:
+ case CCTK_ARRAY:
+ if (! do_global_mode) return 0;
+ break;
+ case CCTK_GF:
+ // do nothing
+ break;
+ default:
+ assert (0);
+ }
+
+
+
+ // check whether to output at this iteration
+ bool output_this_iteration;
+
+ const char* myoutcriterion = out3D_criterion;
+ if (CCTK_EQUALS(myoutcriterion, "default")) {
+ myoutcriterion = out_criterion;
+ }
+
+ if (CCTK_EQUALS (myoutcriterion, "never")) {
+
+ // Never output
+ output_this_iteration = false;
+
+ } else if (CCTK_EQUALS (myoutcriterion, "iteration")) {
+
+ int myoutevery = out3D_every;
+ if (myoutevery == -2) {
+ myoutevery = out_every;
+ }
+ if (myoutevery <= 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (cctk_iteration == *this_iteration) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else if (cctk_iteration >= *next_output_iteration) {
+ // it is time for the next output
+ output_this_iteration = true;
+ *next_output_iteration = cctk_iteration + myoutevery;
+ *this_iteration = cctk_iteration;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else if (CCTK_EQUALS (myoutcriterion, "divisor")) {
+
+ int myoutevery = out3D_every;
+ if (myoutevery == -2) {
+ myoutevery = out_every;
+ }
+ if (myoutevery <= 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if ((cctk_iteration % myoutevery) == 0) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else if (CCTK_EQUALS (myoutcriterion, "time")) {
+
+ CCTK_REAL myoutdt = out3D_dt;
+ if (myoutdt == -2) {
+ myoutdt = out_dt;
+ }
+ if (myoutdt < 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (myoutdt == 0) {
+ // output all iterations
+ output_this_iteration = true;
+ } else if (cctk_iteration == *this_iteration) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else if (cctk_time / cctk_delta_time
+ >= *next_output_time / cctk_delta_time - 1.0e-12) {
+ // it is time for the next output
+ output_this_iteration = true;
+ *next_output_time = cctk_time + myoutdt;
+ *this_iteration = cctk_iteration;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else {
+
+ assert (0);
+
+ } // select output criterion
+
+ if (! output_this_iteration) return 0;
+
+
+
+ if (! CheckForVariable(out3D_vars, vindex)) {
+ // This variable should not be output
+ return 0;
+ }
+
+
+
+ if (last_output.at(mglevel).at(reflevel).at(vindex) == cctk_iteration) {
+ // Has already been output during this iteration
+ char* varname = CCTK_FullName(vindex);
+ CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Skipping output for variable \"%s\", because this variable "
+ "has already been output during the current iteration -- "
+ "probably via a trigger during the analysis stage",
+ varname);
+ free (varname);
+ return 0;
+ }
+
+ assert (last_output.at(mglevel).at(reflevel).at(vindex) < cctk_iteration);
+
+ // Should be output during this iteration
+ return 1;
+}
+
+
+
+int TriggerOutput (const cGH* const cctkGH, const int vindex) {
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+
+ char* varname = CCTK_FullName(vindex);
+ const int retval = OutputVarAs (cctkGH, varname, CCTK_VarName(vindex));
+ free (varname);
+
+ last_output.at(mglevel).at(reflevel).at(vindex) = cctkGH->cctk_iteration;
+
+ return retval;
+}
+
+
+
+
+int ReadVar (const cGH* const cctkGH, const int vindex,
+ const hid_t dataset, vector<ibset> &regions_read,
+ const int called_from_recovery)
+{
+
+ DECLARE_CCTK_PARAMETERS;
+
+ const int group = CCTK_GroupIndexFromVarI (vindex);
+ assert (group>=0 && group<(int)Carpet::arrdata.size());
+ char *fullname = CCTK_FullName (vindex);
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0 && n0<CCTK_NumVars());
+ const int var = vindex - n0;
+ assert (var>=0 && var<CCTK_NumVars());
+ int tl = 0;
+
+ bool did_read_something = false;
+
+ // Stuff needed for Recovery
+
+ void *h5data = NULL;
+
+ if (verbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING, " reading '%s'", fullname);
+ }
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cctkGH, group))
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot input variable \"%s\" because it has no storage",
+ fullname);
+ free (fullname);
+ return 0;
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+ if ((grouptype == CCTK_SCALAR || grouptype == CCTK_ARRAY) && reflevel > 0)
+ {
+ free (fullname);
+ return 0;
+ }
+
+ const int gpdim = CCTK_GroupDimI(group);
+
+
+ int intbuffer[2 + 2*dim];
+ int &group_timelevel = intbuffer[0],
+ &amr_level = intbuffer[1];
+ int *amr_origin = &intbuffer[2],
+ *amr_dims = &intbuffer[2+dim];
+
+ if (CCTK_MyProc(cctkGH)==0)
+ {
+ // get dataset dimensions
+ hid_t dataspace;
+ HDF5_ERROR (dataspace = H5Dget_space (dataset));
+ int rank = (int) H5Sget_simple_extent_ndims (dataspace);
+ assert (0 < rank && rank <= dim);
+ assert ((grouptype == CCTK_SCALAR ? gpdim+1 : gpdim) == rank);
+ vector<hsize_t> shape(rank);
+ HDF5_ERROR (H5Sget_simple_extent_dims (dataspace, &shape[0], NULL));
+ HDF5_ERROR (H5Sclose (dataspace));
+
+ for (int i = 0; i < dim; i++)
+ {
+ amr_dims[i] = 1;
+ amr_origin[i] = 0;
+ }
+ int datalength = 1;
+ for (int i = 0; i < rank; i++)
+ {
+ datalength *= shape[i];
+ amr_dims[i] = shape[rank-i-1];
+ }
+
+ const int cctkDataType = CCTK_VarTypeI(vindex);
+ const hid_t datatype = h5DataType(cctkGH,cctkDataType);
+
+ //cout << "datalength: " << datalength << " rank: " << rank << "\n";
+ //cout << shape[0] << " " << shape[1] << " " << shape[2] << "\n";
+
+ // to do: read in an allocate with correct datatype
+
+ h5data = malloc (CCTK_VarTypeSize (cctkDataType) * datalength);
+ HDF5_ERROR (H5Dread (dataset, datatype, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+ h5data));
+
+ ReadAttribute (dataset, "level", amr_level);
+ ReadAttribute (dataset, "iorigin", amr_origin, rank);
+
+ if(called_from_recovery)
+ {
+ ReadAttribute(dataset,"group_timelevel", group_timelevel);
+ }
+ } // MyProc == 0
+
+ MPI_Bcast (intbuffer, sizeof (intbuffer) / sizeof (*intbuffer), MPI_INT, 0, dist::comm);
+
+#ifdef CARPETIOHDF5_DEBUG
+ cout << "amr_level: " << amr_level << " reflevel: " << reflevel << endl;
+#endif
+
+ if (amr_level == reflevel)
+ {
+ // Traverse all components on all levels
+ BEGIN_MAP_LOOP(cctkGH, grouptype)
+ {
+ BEGIN_COMPONENT_LOOP(cctkGH, grouptype)
+ {
+ did_read_something = true;
+
+ ggf<dim>* ff = 0;
+
+ assert (var < (int)arrdata.at(group).at(Carpet::map).data.size());
+ ff = (ggf<dim>*)arrdata.at(group).at(Carpet::map).data.at(var);
+
+ if(called_from_recovery) tl = group_timelevel;
+
+ gdata<dim>* const data = (*ff) (tl, reflevel, component, mglevel);
+
+ // Create temporary data storage on processor 0
+ vect<int,dim> str = vect<int,dim>(maxreflevelfact/reflevelfact);
+
+ if(grouptype == CCTK_SCALAR || grouptype == CCTK_ARRAY)
+ str = vect<int,dim> (1);
+
+ vect<int,dim> lb = vect<int,dim>::ref(amr_origin) * str;
+ vect<int,dim> ub
+ = lb + (vect<int,dim>::ref(amr_dims) - 1) * str;
+
+ gdata<dim>* const tmp = data->make_typed (vindex);
+
+
+ cGroup cgdata;
+ int ierr = CCTK_GroupData(group,&cgdata);
+ assert(ierr==0);
+ //cout << "lb_before: " << lb << endl;
+ //cout << "ub_before: " << ub << endl;
+ if (cgdata.disttype == CCTK_DISTRIB_CONSTANT) {
+#ifdef CARPETIOHDF5_DEBUG
+ cout << "CCTK_DISTRIB_CONSTANT: " << fullname << endl;
+#endif
+ assert(grouptype == CCTK_ARRAY || grouptype == CCTK_SCALAR);
+ if (grouptype == CCTK_SCALAR) {
+ lb[0] = arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component);
+ ub[0] = arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component);
+ for(int i=1;i<dim;i++) {
+ lb[i]=0;
+ ub[i]=0;
+ }
+ } else {
+ const int newlb = lb[gpdim-1] +
+ (ub[gpdim-1]-lb[gpdim-1]+1)*
+ (arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component));
+ const int newub = ub[gpdim-1] +
+ (ub[gpdim-1]-lb[gpdim-1]+1)*
+ (arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component));
+ lb[gpdim-1] = newlb;
+ ub[gpdim-1] = newub;
+ }
+#ifdef CARPETIOHDF5_DEBUG
+ cout << "lb: " << lb << endl;
+ cout << "ub: " << ub << endl;
+#endif
+ }
+ const bbox<int,dim> ext(lb,ub,str);
+
+#ifdef CARPETIOHDF5_DEBUG
+ cout << "ext: " << ext << endl;
+#endif
+
+ if (CCTK_MyProc(cctkGH)==0) {
+ tmp->allocate (ext, 0, h5data);
+ } else {
+ tmp->allocate (ext, 0);
+ }
+
+ // Initialise with what is found in the file -- this does
+ // not guarantee that everything is initialised.
+ const bbox<int,dim> overlap = tmp->extent() & data->extent();
+ regions_read.at(Carpet::map) |= overlap;
+
+#ifdef CARPETIOHDF5_DEBUG
+ cout << "working on component: " << component << endl;
+ cout << "tmp->extent " << tmp->extent() << endl;
+ cout << "data->extent " << data->extent() << endl;
+ cout << "overlap " << overlap << endl;
+ cout << "-----------------------------------------------------" << endl;
+#endif
+
+ // FIXME: is this barrier really necessary ??
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ // Copy into grid function
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ data->copy_from (state, tmp, overlap);
+ }
+
+
+ // Delete temporary copy
+ delete tmp;
+
+
+ } END_COMPONENT_LOOP;
+
+ if (called_from_recovery) {
+ arrdata.at(group).at(Carpet::map).tt->set_time(reflevel,mglevel,
+ (CCTK_REAL) ((cctkGH->cctk_time - cctk_initial_time)
+ / (delta_time * mglevelfact)) );
+ }
+
+
+ } END_MAP_LOOP;
+
+ } // if amr_level == reflevel
+
+ free (h5data);
+ free (fullname);
+
+ return did_read_something;
+}
+
+
+
+static int InputVarAs (const cGH* const cctkGH, const int vindex,
+ const char* const alias)
+{
+ DECLARE_CCTK_PARAMETERS;
+
+ char *fullname = CCTK_FullName (vindex);
+ const int group = CCTK_GroupIndexFromVarI (vindex);
+ assert (group>=0 && group<(int)Carpet::arrdata.size());
+
+ int want_dataset = 0;
+ bool did_read_something = false;
+ int ndatasets = 0;
+ hid_t dataset = 0;
+
+ char datasetname[1024];
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cctkGH, group)) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot input variable \"%s\" because it has no storage",
+ fullname);
+ free (fullname);
+ return 0;
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+ const int rl = grouptype==CCTK_GF ? reflevel : 0;
+ //cout << "want level " << rl << " reflevel " << reflevel << endl;
+
+ // Find the input directory
+ const char* const myindir = in3D_dir;
+
+ // Invent a file name
+ ostringstream filenamebuf;
+ filenamebuf << myindir << "/" << alias << in3D_extension;
+ string filenamestr = filenamebuf.str();
+ const char * const filename = filenamestr.c_str();
+
+ hid_t reader = -1;
+
+ // Read the file only on the root processor
+ if (CCTK_MyProc(cctkGH)==0) {
+
+ // Open the file
+ if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Opening file \"%s\"", filename);
+ reader = H5Fopen (filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+ if (reader<0) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not open file \"%s\" for reading", filename);
+ }
+ assert (reader>=0);
+ // get the number of datasets in the file
+ ndatasets=GetnDatasets(reader);
+ }
+
+ vector<ibset> regions_read(Carpet::maps);
+
+ // Broadcast number of datasets
+ MPI_Bcast (&ndatasets, 1, MPI_INT, 0, dist::comm);
+ assert (ndatasets>=0);
+
+
+ for (int datasetid=0; datasetid<ndatasets; ++datasetid) {
+ if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Handling dataset #%d", datasetid);
+
+
+ // Read data
+ if (CCTK_MyProc(cctkGH)==0) {
+ GetDatasetName(reader,datasetid,datasetname);
+ // cout << datasetname << "\n";
+
+ HDF5_ERROR (dataset = H5Dopen (reader, datasetname));
+ }
+
+
+#if 0
+ int amr_level;
+ int amr_origin[dim];
+ int amr_dims[dim];
+#endif
+
+ if (CCTK_MyProc(cctkGH)==0) {
+
+ // Read data
+ char * name;
+ ReadAttribute (dataset, "name", name);
+ // cout << "dataset name is " << name << endl;
+ if (verbose && name) {
+ CCTK_VInfo (CCTK_THORNSTRING, "Dataset name is \"%s\"", name);
+ }
+ want_dataset = name && CCTK_EQUALS(name, fullname);
+ free (name);
+ } // myproc == 0
+
+ MPI_Bcast (&want_dataset, 1, MPI_INT, 0, dist::comm);
+
+ if(want_dataset) {
+ did_read_something = ReadVar(cctkGH,vindex,dataset,regions_read,0);
+ } // want_dataset
+
+ } // loop over datasets
+
+ // Close the file
+ if (CCTK_MyProc(cctkGH)==0) {
+ if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Closing file");
+ HDF5_ERROR (H5Fclose(reader));
+ reader=-1;
+ }
+
+ // Was everything initialised?
+ if (did_read_something) {
+ for (int m=0; m<Carpet::maps; ++m) {
+ dh<dim>& thedd = *arrdata.at(group).at(m).dd;
+ ibset all_exterior;
+ for (size_t c=0; c<thedd.boxes.at(rl).size(); ++c) {
+ all_exterior |= thedd.boxes.at(rl).at(c).at(mglevel).exterior;
+ }
+ if (regions_read.at(m) != all_exterior) {
+#ifdef CARPETIOHDF5_DEBUG
+ cout << "read: " << regions_read.at(m) << endl
+ << "want: " << all_exterior << endl;
+#endif
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Variable \"%s\" could not be initialised from file -- the file may be missing data",
+ fullname);
+ }
+ }
+ } // if did_read_something
+ // CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,"stop!");
+
+ return did_read_something ? 0 : -1;
+
+}
+
+
+int CarpetIOHDF5ReadData (const cGH* const cctkGH)
+{
+ int retval = 0;
+ DECLARE_CCTK_PARAMETERS
+
+
+ int numvars = CCTK_NumVars ();
+ vector<bool> flags (numvars);
+
+ if (CCTK_TraverseString (in3D_vars, SetFlag, &flags, CCTK_GROUP_OR_VAR) < 0)
+ {
+ CCTK_VWarn (strict_io_parameter_check ? 0 : 1,
+ __LINE__, __FILE__, CCTK_THORNSTRING,
+ "error while parsing parameter 'IOHDF5::in3D_vars'");
+ }
+
+ for (int vindex = 0; vindex < numvars; vindex++)
+ {
+ if (flags.at (vindex))
+ {
+ retval = InputVarAs (cctkGH, vindex, CCTK_VarName (vindex));
+ if (retval)
+ {
+ break;
+ }
+ }
+ }
+
+ return (retval);
+}
+
+
+
+#if 0
+/** returns the number of recovered variables */
+int Recover (cGH* const cctkGH, const char *basefilename,
+ const int called_from)
+{
+ assert (cctkGH);
+ assert (basefilename);
+ assert (called_from == CP_INITIAL_DATA
+ || called_from == CP_EVOLUTION_DATA
+ || called_from == CP_RECOVER_PARAMETERS
+ || called_from == CP_RECOVER_DATA
+ || called_from == FILEREADER_DATA);
+
+ // the other modes are not supported yet
+ assert (called_from == FILEREADER_DATA);
+
+ const ioGH * const iogh = (const ioGH *) CCTK_GHExtension (cctkGH, "IO");
+ assert (iogh);
+
+ int num_vars_read = 0;
+ assert (iogh->do_inVars);
+ for (int n=0; n<CCTK_NumVars(); ++n) {
+ if (iogh->do_inVars[n]) {
+ const int ierr = InputVarAs (cctkGH, vindex, basefilename);
+ if (! ierr) {
+ ++ num_vars_read;
+ }
+ }
+ }
+
+ return num_vars_read;
+}
+#endif
+
+} // namespace CarpetIOHDF5
diff --git a/Carpet/CarpetIOHDF5/src/iohdf5.h b/Carpet/CarpetIOHDF5/src/iohdf5.h
new file mode 100644
index 000000000..17ea9d98a
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/iohdf5.h
@@ -0,0 +1,44 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5.h,v 1.7 2004/08/18 16:02:56 tradke Exp $ */
+
+#ifndef CARPETIOHDF5_H
+#define CARPETIOHDF5_H
+
+#ifdef __cplusplus
+namespace CarpetIOHDF5 {
+ extern "C" {
+#endif
+
+#ifdef USE_CHRISTIANS_ROUTINES
+#include "cctk_Arguments.h"
+
+int CarpetIOHDF5Startup (void);
+void CarpetIOHDF5Init (CCTK_ARGUMENTS);
+void CarpetIOHDF5ReadData (CCTK_ARGUMENTS);
+void CarpetIOHDF5_EvolutionCheckpoint (const cGH*);
+void CarpetIOHDF5_InitialDataCheckpoint (const cGH*);
+
+#else
+
+/* Scheduled functions */
+void CarpetIOHDF5Startup (void);
+int CarpetIOHDF5Init (const cGH* const);
+int CarpetIOHDF5ReadData (const cGH* const);
+int CarpetIOHDF5_InitialDataCheckpoint (const cGH* const);
+int CarpetIOHDF5_EvolutionCheckpoint (const cGH* const);
+int CarpetIOHDF5_TerminationCheckpoint (const cGH* const);
+void CarpetIOHDF5EvolutionCheckpoint (const cGH* const);
+void CarpetIOHDF5InitialDataCheckpoint (const cGH* const);
+
+#endif
+
+int CarpetIOHDF5_Recover (cGH* cgh, const char *basefilename, int called_from);
+
+int CarpetIOHDF5_RecoverParameters (void);
+int CarpetIOHDF5_CloseFile (void);
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace CarpetIOHDF5 */
+#endif
+
+#endif /* !defined(CARPETIOHDF5_H) */
diff --git a/Carpet/CarpetIOHDF5/src/iohdf5.hh b/Carpet/CarpetIOHDF5/src/iohdf5.hh
new file mode 100644
index 000000000..bfb49386b
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/iohdf5.hh
@@ -0,0 +1,198 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5.hh,v 1.12 2004/07/09 15:38:18 tradke Exp $
+
+#ifndef CARPETIOHDF5_HH
+#define CARPETIOHDF5_HH
+
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+
+#include "carpet.hh"
+
+#include "iohdf5.h"
+#include "CactusBase/IOUtil/src/ioutil_Utils.h"
+
+/* some macros for HDF5 group names */
+#define METADATA_GROUP "Parameters and Global Attributes"
+#define ALL_PARAMETERS "All Parameters"
+
+// Some MPI Datatypes we need for Recovery
+// Originally written by Thomas Radke.
+
+#ifdef CCTK_INT4
+#define CARPET_MPI_INT4 (sizeof (CCTK_INT4) == sizeof (int) ? MPI_INT : \
+ sizeof (CCTK_INT4) == sizeof (short) ? MPI_SHORT : \
+ MPI_DATATYPE_NULL)
+#endif
+
+#define CARPET_MPI_CHAR MPI_CHAR
+
+/* floating point types are architecture-independent,
+ ie. a float has always 4 bytes, and a double has 8 bytes
+
+ PUGH_MPI_REAL is used for communicating reals of the generic CCTK_REAL type
+ PUGH_MPI_REALn is used to explicitely communicate n-byte reals */
+#ifdef CCTK_REAL4
+#define CARPET_MPI_REAL4 MPI_FLOAT
+#endif
+#ifdef CCTK_REAL8
+#define CARPET_MPI_REAL8 MPI_DOUBLE
+#endif
+#ifdef CCTK_REAL16
+#define CARPET_MPI_REAL16 (sizeof (CCTK_REAL16) == sizeof (long double) ? \
+ MPI_LONG_DOUBLE : MPI_DATATYPE_NULL)
+#endif
+
+
+#ifdef CCTK_REAL_PRECISION_16
+#define CARPET_MPI_REAL CARPET_MPI_REAL16
+#elif CCTK_REAL_PRECISION_8
+#define CARPET_MPI_REAL CARPET_MPI_REAL8
+#elif CCTK_REAL_PRECISION_4
+#define CARPET_MPI_REAL CARPET_MPI_REAL4
+#endif
+
+
+/*** Define the different datatypes used for HDF5 I/O
+ NOTE: the complex datatype SHOULD be [is] defined dynamically at runtime in Startup.c
+ 100% of the definitions below were taken from Thomas Radke's IOHDF5Util thorn for PUGH
+ ***/
+/* char type is easy */
+#define HDF5_CHAR H5T_NATIVE_CHAR
+
+/* floating point types are architecture-independent,
+ ie. a float has always 4 bytes, and a double has 8 bytes
+ HDF5_REAL is used for storing reals of the generic CCTK_REAL type
+ HDF5_REALn is used to explicitely store n-byte reals */
+#ifdef CCTK_REAL4
+#define HDF5_REAL4 H5T_NATIVE_FLOAT
+#endif
+#ifdef CCTK_REAL8
+#define HDF5_REAL8 H5T_NATIVE_DOUBLE
+#endif
+#ifdef CCTK_REAL16
+#define HDF5_REAL16 (sizeof (CCTK_REAL16) == sizeof (long double) ? \
+ H5T_NATIVE_LDOUBLE : -1)
+#endif
+
+
+#ifdef CCTK_REAL_PRECISION_16
+#define HDF5_REAL HDF5_REAL16
+#elif CCTK_REAL_PRECISION_8
+#define HDF5_REAL HDF5_REAL8
+#elif CCTK_REAL_PRECISION_4
+#define HDF5_REAL HDF5_REAL4
+#endif
+
+
+/* integer types are architecture-dependent:
+ HDF5_INT is used for communicating integers of the generic CCTK_INT type
+ HDF5_INTn is used to explicitely communicate n-byte integers */
+#ifdef CCTK_INT8
+#define HDF5_INT8 (sizeof (CCTK_INT8) == sizeof (int) ? H5T_NATIVE_INT : \
+ sizeof (CCTK_INT8) == sizeof (long) ? H5T_NATIVE_LONG : \
+ sizeof (CCTK_INT8) == sizeof (long long) ? \
+ H5T_NATIVE_LLONG : -1)
+#endif
+
+#ifdef CCTK_INT4
+#define HDF5_INT4 (sizeof (CCTK_INT4) == sizeof (int) ? H5T_NATIVE_INT : \
+ sizeof (CCTK_INT4) == sizeof (short) ? \
+ H5T_NATIVE_SHORT : -1)
+#endif
+
+#ifdef CCTK_INT2
+#define HDF5_INT2 (sizeof (CCTK_INT2) == sizeof (short) ? \
+ H5T_NATIVE_SHORT : -1)
+#endif
+
+#ifdef CCTK_INT1
+#define HDF5_INT1 H5T_NATIVE_CHAR
+#endif
+
+#ifdef CCTK_INTEGER_PRECISION_8
+#define HDF5_INT HDF5_INT8
+#elif CCTK_INTEGER_PRECISION_4
+#define HDF5_INT HDF5_INT4
+#elif CCTK_INTEGER_PRECISION_2
+#define HDF5_INT HDF5_INT2
+#elif CCTK_INTEGER_PRECISION_1
+#define HDF5_INT HDF5_INT1
+#endif
+
+/* Nice error handling. Stolen from Thomas Radke */
+/* check return code of HDF5 call and print a warning in case of an error */
+#define HDF5_ERROR(fn_call) \
+ { \
+ int _error_code = fn_call; \
+ \
+ \
+ if (_error_code < 0) \
+ { \
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, \
+ "HDF5 call '%s' returned error code %d", \
+ #fn_call, _error_code); \
+ } \
+ }
+
+
+
+
+namespace CarpetIOHDF5 {
+
+ using namespace std;
+ using namespace Carpet;
+
+ // Variable definitions
+ extern vector<bool> do_truncate; // [var]
+ extern vector<vector<vector<int> > > last_output; // [ml][rl][var]
+
+ void* SetupGH (tFleshConfig* const fc,
+ const int convLevel, cGH* const cctkGH);
+
+ int OutputGH (const cGH* const cctkGH);
+ int WriteVar (const cGH* const cctkGH, const hid_t writer, const ioRequest* request,
+ const int called_from_checkpoint);
+ int OutputVarAs (const cGH* const cctkGH, const char* const varname,
+ const char* const alias);
+
+ int TimeToOutput (const cGH* const cctkGH, const int vindex);
+ int TriggerOutput (const cGH* const cctkGH, const int vindex);
+
+ int InputGH (const cGH* const cctkGH);
+ int ReadVar (const cGH* const cctkGH, const int vindex,
+ const hid_t currdataset, vector<ibset> &regions_read,
+ const int called_from_recovery);
+
+ int Recover (cGH* cgh, const char *basefilename, int called_from);
+
+ // auxiliary functions defined in iohdf5utils.cc
+
+ bool CheckForVariable (const char* const varlist, const int vindex);
+ void SetFlag (int index, const char* optstring, void* arg);
+
+ void WriteAttribute (const hid_t dataset, const char* name, int value);
+ void WriteAttribute (const hid_t dataset, const char* name, const int* values, int nvalues);
+ void WriteAttribute (const hid_t dataset, const char* name, double value);
+ void WriteAttribute (const hid_t dataset, const char* name, const double* values, int nvalues);
+ void WriteAttribute (const hid_t dataset, const char* name, char value);
+ void WriteAttribute (const hid_t dataset, const char* name, const char* values);
+ void WriteAttribute (const hid_t dataset, const char* name, const char* values, int nvalues);
+
+ int ReadAttribute (const hid_t dataset, const char* name, int& value);
+ int ReadAttribute (const hid_t dataset, const char* name, int* values, int nvalues);
+ int ReadAttribute (const hid_t dataset, const char* name, double& value);
+ int ReadAttribute (const hid_t dataset, const char* name, double* values, int nvalues);
+ int ReadAttribute (const hid_t dataset, const char* name, char& value);
+ int ReadAttribute (const hid_t dataset, const char* name, char*& values);
+ int ReadAttribute (const hid_t dataset, const char* name, char* values, int nvalues);
+
+ int GetnDatasets (const hid_t reader);
+ void GetDatasetName (const hid_t reader, const int _index, char* name);
+
+ hid_t h5DataType(const cGH* const cctkGH, int cctk_type);
+
+} // namespace CarpetIOHDF5
+
+#endif // !defined(CARPETIOHDF5_HH)
diff --git a/Carpet/CarpetIOHDF5/src/iohdf5GH.h b/Carpet/CarpetIOHDF5/src/iohdf5GH.h
new file mode 100644
index 000000000..0516201c2
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/iohdf5GH.h
@@ -0,0 +1,56 @@
+// This was adopted from Thomas Radke's IOHDF5 thorn.
+// Thanks, Thomas!
+
+#ifndef _CARPETIOHDF5_IOHDF5GH_H_
+#define _CARPETIOHDF5_IOHDF5GH_H_ 1
+
+#include "StoreNamedData.h"
+
+/* I took basically everything in this file from Thomas' IOHDF5; much of
+ below is still unused.. */
+
+/* CARPET IOHDF5 GH extension structure */
+typedef struct
+{
+ /* default number of times to output */
+ int out_every_default;
+
+ /* number of times to output for each variable */
+ CCTK_INT *out_every;
+
+ /* the last iteration output for each variable */
+ int *out_last;
+
+ /* list of variables to output */
+ char *out_vars;
+
+ /* I/O request description list (for all variables) */
+ ioRequest **requests;
+
+ /* directory in which to output */
+ char *out_dir;
+
+ /* filename database for opened files */
+ pNamedData *open_output_files;
+
+ /* timer array for checkpointing/recovery */
+ // int timers[IOHDF5_NUM_TIMERS];
+
+ /* flag to indicate request for timer output */
+ // int print_timing_info;
+
+ /* ring buffer for list of successfully created cp files */
+ int cp_filename_index;
+ char **cp_filename_list;
+
+ /* iteration number of the last checkpoint */
+ int last_checkpoint_iteration;
+
+ /* hdf5 datatype for stupid complex variables; to be set at run time */
+ hid_t HDF5_COMPLEX, HDF5_COMPLEX8, HDF5_COMPLEX16, HDF5_COMPLEX32;
+
+
+} CarpetIOHDF5GH;
+
+
+#endif
diff --git a/Carpet/CarpetIOHDF5/src/iohdf5chckpt_recover.cc b/Carpet/CarpetIOHDF5/src/iohdf5chckpt_recover.cc
new file mode 100644
index 000000000..f8e6b9a3d
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/iohdf5chckpt_recover.cc
@@ -0,0 +1,914 @@
+#include <assert.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <algorithm>
+#include <fstream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <hdf5.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Version.h"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5chckpt_recover.cc,v 1.36 2004/07/07 11:01:05 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetIOHDF5_iohdf5chckpt_recover_cc);
+}
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
+
+#include "bbox.hh"
+#include "data.hh"
+#include "gdata.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "iohdf5.hh"
+#include "iohdf5GH.h"
+
+/* some macros for HDF5 group names */
+#define PARAMETERS_GLOBAL_ATTRIBUTES_GROUP "Parameters and Global Attributes"
+#define ALL_PARAMETERS "All Parameters"
+
+
+
+namespace CarpetIOHDF5 {
+
+ using namespace std;
+ using namespace Carpet;
+
+ // linked list for reading in the checkpoint file
+
+ list<string> datasetnamelist;
+
+ int Checkpoint (const cGH* const cctkGH, int called_from);
+ int DumpParametersGHExtentions (const cGH *cctkGH, int all, hid_t writer);
+
+ int RecoverParameters (hid_t reader);
+ int RecoverGHextensions (cGH* cctkGH, hid_t reader);
+ int RecoverVariables (cGH* cctkGH, hid_t reader);
+
+ void CarpetIOHDF5InitialDataCheckpoint( const cGH* const cgh){
+
+ DECLARE_CCTK_PARAMETERS;
+
+ if (checkpoint && checkpoint_ID)
+ {
+ CCTK_INFO ("---------------------------------------------------------");
+ CCTK_INFO ("Dumping initial data checkpoint");
+ CCTK_INFO ("---------------------------------------------------------");
+
+ Checkpoint (cgh, CP_INITIAL_DATA);
+ }
+ } // CarpetIOHDF5_InitialDataCheckpoint
+
+
+ void CarpetIOHDF5EvolutionCheckpoint( const cGH* const cgh){
+
+ DECLARE_CCTK_PARAMETERS;
+
+ // Test checkpoint_every, and adjust it. This is necessary until
+ // recovery is more flexible.
+ int every_full = pow(2.0,maxreflevels-1);
+ if (checkpoint_every>0 && (checkpoint_every % every_full) != 0) {
+ int every = (checkpoint_every / every_full + 1) * every_full;
+ ostringstream outevery;
+ outevery << every;
+ CCTK_ParameterSet("checkpoint_every","IOUtil",
+ outevery.str().c_str());
+ CCTK_VInfo (CCTK_THORNSTRING,"I have adjusted your checkpoint_every to %i.",every);
+
+ }
+
+ if (checkpoint &&
+ ((checkpoint_every > 0 && cgh->cctk_iteration % checkpoint_every == 0) ||
+ checkpoint_next))
+ {
+ CCTK_INFO ("---------------------------------------------------------");
+ CCTK_VInfo (CCTK_THORNSTRING, "Dumping periodic checkpoint at "
+ "iteration %d", cgh->cctk_iteration);
+ CCTK_INFO ("---------------------------------------------------------");
+
+ Checkpoint (cgh, CP_EVOLUTION_DATA);
+
+ if (checkpoint_next)
+ {
+ CCTK_ParameterSet ("checkpoint_next", CCTK_THORNSTRING, "no");
+ }
+ }
+ } // CarpetIOHDF5_EvolutionCheckpoint
+
+
+ int CarpetIOHDF5RecoverParameters(void){
+ // Register with the Cactus Recovery Interface
+ return (IOUtil_RecoverParameters (CarpetIOHDF5_Recover, ".h5", "HDF5"));
+ }
+
+ int CarpetIOHDF5_Recover (cGH* cctkGH, const char *basefilename, int called_from) {
+
+ DECLARE_CCTK_PARAMETERS;
+
+ int result=0;
+ int myproc=-1;
+
+ CarpetIOHDF5GH *myGH;
+
+
+ static hid_t reader=0; //this thing absolutely needs to be static!!!
+
+ myGH = NULL;
+
+ myproc = CCTK_MyProc (cctkGH);
+
+
+ if (called_from == CP_RECOVER_PARAMETERS) {
+ // Okay, let's see what we can do about the parameters
+
+ // Invent a file name
+ ostringstream filenamebuf;
+
+ // if(CCTK_nProcs(cctkGH) == 1)
+ filenamebuf << recover_dir << "/" << basefilename << ".h5";
+ //else
+ // filenamebuf << recover_dir << "/" << basefilename << ".file_0.h5";
+
+ string filenamestr = filenamebuf.str();
+ const char * const filename = filenamestr.c_str();
+
+ if (myproc == 0) {
+ // First, open the file
+ if (verbose)
+ CCTK_VInfo(CCTK_THORNSTRING, "Opening Checkpoint file %s for recovery",filename);
+ reader = H5Fopen (filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+ if (reader<0) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not recover from \"%s\"", filename);
+ }
+ } // myproc == 0
+ }
+ else {
+ /* This is the case for CP_RECOVER_DATA.
+ CCTK_RECOVER_PARAMETERS must have been called before
+ and set up the file info structure. */
+ if (myproc == 0) {
+ assert(reader>=0);
+ }
+ }
+
+ if (called_from == CP_RECOVER_PARAMETERS)
+ {
+ return (RecoverParameters (reader));
+ }
+
+ if (called_from == CP_RECOVER_DATA) {
+ CCTK_INT4 numberofmgtimes=0;
+
+ CCTK_VInfo(CCTK_THORNSTRING,"Starting to recover data on reflevel %d!!!",reflevel);
+
+ if (myproc == 0) {
+
+ // Use refinement levels parameter from checkpointing file?
+ if (use_reflevels_from_checkpoint && reflevel==0) {
+
+ herr_t herr;
+
+ hid_t group = H5Gopen (reader, PARAMETERS_GLOBAL_ATTRIBUTES_GROUP);
+ assert(group >= 0);
+ hid_t dataset = H5Dopen (group, ALL_PARAMETERS);
+ assert(dataset>= 0);
+
+ int reflevels_chkpt;
+
+ ReadAttribute (dataset, "carpet_reflevels", reflevels_chkpt);
+
+ herr = H5Dclose(dataset);
+ assert(!herr);
+ herr = H5Gclose(group);
+ assert(!herr);
+
+ ostringstream reflevels_str;
+ reflevels_str << reflevels_chkpt;
+ CCTK_ParameterSet ("refinement_levels","CarpetRegrid",reflevels_str.str().c_str());
+
+ CCTK_VInfo (CCTK_THORNSTRING, "Using %i reflevels read from checkpoint file. Ignoring value in parameter file.", reflevels_chkpt);
+
+ }
+
+ /* we need all the times on the individual levels */
+ // these are a bit messy to extract
+
+ // Actually, we do have to do this only once
+
+ hid_t group = H5Gopen (reader, PARAMETERS_GLOBAL_ATTRIBUTES_GROUP);
+ assert(group>=0);
+ hid_t dataset = H5Dopen (group, ALL_PARAMETERS);
+ assert(dataset >= 0);
+ hid_t attr = H5Aopen_name (dataset, "numberofmgtimes");
+ assert(attr >= 0);
+ hid_t atype = H5Aget_type (attr);
+ if(H5Tequal(atype, H5T_NATIVE_INT)) {
+ herr_t herr = H5Aread(attr, atype, &numberofmgtimes);
+ assert(!herr);
+ herr = H5Aclose(attr);
+ assert(numberofmgtimes==mglevels);
+ char buffer[100];
+ for(int lcv=0;lcv<numberofmgtimes;lcv++) {
+ sprintf(buffer,"mgleveltimes %d",lcv);
+ attr = H5Aopen_name(dataset, buffer);
+ assert (attr>=0);
+ atype = H5Aget_type (attr);
+ assert (atype>=0);
+ herr = H5Aread (attr, atype, &leveltimes.at(lcv).at(0));
+ assert(!herr);
+ herr = H5Aclose(attr);
+ assert(!herr);
+ }
+ herr = H5Dclose(dataset);
+ assert(!herr);
+ herr = H5Gclose(group);
+ assert(!herr);
+ } else {
+ CCTK_WARN(0,"BAD BAD BAD! Can't read leveltimes!!");
+ }
+
+ } // myproc == 0
+
+
+ // communicate the time on all the mglevels and reflevels
+
+ int mpierr = MPI_Bcast (&numberofmgtimes, 1, CARPET_MPI_INT4, 0,MPI_COMM_WORLD);
+ assert(!mpierr);
+
+
+ for(int i=0;i<numberofmgtimes;i++) {
+ mpierr = MPI_Bcast (&(leveltimes.at(i).at(0)), reflevels, CARPET_MPI_REAL, 0, MPI_COMM_WORLD);
+ assert(!mpierr);
+ }
+
+ if (verbose) {
+ cout << "leveltimes: " << leveltimes << endl;
+ }
+
+ cctkGH->cctk_time = leveltimes.at(mglevel).at(reflevel);
+
+ result += RecoverGHextensions(cctkGH,reader);
+
+
+ if (verbose) {
+ cout << "reflevel: " << reflevel << endl;
+ }
+
+ result += RecoverVariables (cctkGH,reader);
+
+
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Restarting simulation at iteration %d (physical time %g)",
+ cctkGH->cctk_iteration, (double) cctkGH->cctk_time);
+
+ } // called_from == CP_RECOVER_DATA
+
+ if (reflevel==maxreflevels) {
+ if(myproc == 0) {
+ H5Fclose(reader);
+ }
+ }
+
+ return (result);
+ } // CarpetIOHDF5_Recover
+
+
+ int RecoverVariables (cGH* cctkGH, hid_t reader) {
+
+ DECLARE_CCTK_PARAMETERS;
+
+ int retval = 0;
+ int myproc = CCTK_MyProc (cctkGH);
+ char * name;
+
+ int ndatasets;
+
+ int varindex;
+
+ double datasettime;
+ double leveltime;
+ static double totaltime;
+
+ hid_t dataset;
+ herr_t herr;
+
+ list<string> refleveldatasetnamelist;
+
+ if (reflevel==0) {
+ totaltime = 0;
+ }
+
+ leveltime = MPI_Wtime();
+
+
+ if(myproc==0) {
+ ndatasets=GetnDatasets(reader);
+ assert (ndatasets>=0);
+ }
+
+ // Broadcast number of datasets
+ MPI_Bcast (&ndatasets, 1, MPI_INT, 0, dist::comm);
+
+ assert ((ndatasets)>=0);
+
+ //if (verbose && reflevel==0) cout << "ndatasets: " << ndatasets << endl;
+ if ( reflevel == 0) {
+ cout << "ndatasets: " << ndatasets << endl;
+ }
+
+ if (reflevel==0) {
+ for (int currdataset=0;currdataset<ndatasets+1;currdataset++){
+ char datasetname[256];
+ if (myproc==0) {
+ GetDatasetName(reader,currdataset,datasetname);
+ datasetnamelist.push_back(datasetname);
+ } //myproc = 0
+ else {
+ datasetnamelist.push_back("blah");
+ }
+ }
+ }
+
+ cout << "I have " << datasetnamelist.size() << endl;
+
+ double comparetime = MPI_Wtime();
+
+ if(myproc==0) {
+ // for(currdataset=datasetnamelist.begin();
+ // currdataset!=datasetnamelist.end();
+ // ++currdataset) {
+
+ list<string>::iterator currdataset;
+ currdataset=datasetnamelist.begin();
+ while(currdataset!=datasetnamelist.end()) {
+ char tempstr[10];
+ sprintf(tempstr,"rl=%d m=",reflevel);
+ if ( (*currdataset).find(tempstr) < (*currdataset).size() ) {
+ refleveldatasetnamelist.push_back((*currdataset).c_str());
+ currdataset = datasetnamelist.erase(currdataset);
+ } else {
+ ++currdataset;
+ } // if ...
+ } // while ...
+ } // if(myproc==0)
+
+
+
+
+ static long reflevelnamenum; // static keeps this thing local
+
+ if(myproc==0) {
+ reflevelnamenum=refleveldatasetnamelist.size();
+ }
+
+ MPI_Bcast (&reflevelnamenum, 1, MPI_LONG, 0, dist::comm);
+ assert ((reflevelnamenum)>=0);
+
+ // fill bogus namelist for non-IO cpus
+ if(myproc !=0) {
+ for(long i=0;i < reflevelnamenum;i++) {
+ refleveldatasetnamelist.push_back("blah");
+ }
+ }
+
+ comparetime = MPI_Wtime() - comparetime;
+ cout << "Time for string comparison: " << comparetime << endl;
+ cout << "I have for this reflevel " << refleveldatasetnamelist.size() << endl;
+
+ list<string>::iterator currdataset;
+
+ currdataset=refleveldatasetnamelist.begin();
+
+ while(currdataset!=refleveldatasetnamelist.end()) {
+
+ // cout << "name: " << (*currdataset).c_str() << endl;
+
+ if (myproc==0) {
+ dataset = H5Dopen (reader, (*currdataset).c_str());
+ assert(dataset);
+ // Read data
+ ReadAttribute (dataset, "name", name);
+ varindex = CCTK_VarIndex(name);
+ }
+
+ MPI_Bcast (&varindex, 1, MPI_INT, 0, dist::comm);
+
+ name = CCTK_FullName(varindex);
+
+ if (verbose) {
+ cout << name << " rl: " << reflevel << endl;
+ }
+ vector<ibset> regions_read(Carpet::maps);
+
+ assert (varindex>=0 && varindex<CCTK_NumVars());
+ const int group = CCTK_GroupIndexFromVarI (varindex);
+ const int grouptype = CCTK_GroupTypeI(group);
+
+ int did_read_something = ReadVar(cctkGH,name,dataset,regions_read,1);
+
+ MPI_Bcast (&did_read_something, 1, MPI_INT, 0, dist::comm);
+
+ if (did_read_something) {
+ currdataset = refleveldatasetnamelist.erase(currdataset);
+ } else {
+ ++currdataset;
+ }
+
+ if(myproc==0) {
+ herr = H5Dclose(dataset);
+ assert(!herr);
+ }
+ free(name);
+
+ } // for (currdataset ... )
+ leveltime = MPI_Wtime() - leveltime;
+ totaltime = totaltime + leveltime;
+
+ cout << "Timers: leveltime: " << leveltime << " totaltime: " << totaltime << endl;
+
+ return retval;
+ }
+
+
+ int RecoverGHextensions (cGH *cctkGH, hid_t reader)
+ {
+ const int myproc = CCTK_MyProc(cctkGH);
+ CCTK_INT4 int4Buffer[3];
+ CCTK_REAL realBuffer;
+ CCTK_REAL realBuffer2;
+ CCTK_INT4 intbuffer;
+
+ int mpierr = 0;
+
+ if (myproc==0)
+ {
+
+ // First open group and dataset
+ hid_t group = H5Gopen (reader, PARAMETERS_GLOBAL_ATTRIBUTES_GROUP);
+ assert(group>=0);
+ hid_t dataset = H5Dopen (group, ALL_PARAMETERS);
+ assert(dataset >= 0);
+
+ ReadAttribute(dataset,"GH$iteration",int4Buffer[0]);
+ ReadAttribute(dataset,"main loop index",int4Buffer[1]);
+ ReadAttribute(dataset,"carpet_global_time",realBuffer);
+ // ReadAttribute(dataset,"carpet_reflevels",int4Buffer[2]);
+ ReadAttribute(dataset,"carpet_delta_time",realBuffer2);
+
+ herr_t herr = H5Dclose(dataset);
+ assert(!herr);
+ herr = H5Gclose(group);
+ assert(!herr);
+
+ }
+ /* Broadcast the GH extensions to all processors */
+ /* NOTE: We have to use MPI_COMM_WORLD here
+ because PUGH_COMM_WORLD is not yet set up at parameter recovery time.
+ We also assume that PUGH_MPI_INT4 is a compile-time defined datatype. */
+
+ mpierr = MPI_Bcast (int4Buffer, 3, CARPET_MPI_INT4, 0,MPI_COMM_WORLD);
+ assert(!mpierr);
+ mpierr = MPI_Bcast (int4Buffer, 3, CARPET_MPI_INT4, 0,MPI_COMM_WORLD);
+ assert(!mpierr);
+ mpierr = MPI_Bcast (&realBuffer, 1, CARPET_MPI_REAL,0,MPI_COMM_WORLD);
+ assert(!mpierr);
+ mpierr = MPI_Bcast (&realBuffer2, 1, CARPET_MPI_REAL,0,MPI_COMM_WORLD);
+ assert(!mpierr);
+
+ global_time = (CCTK_REAL) realBuffer;
+ delta_time = (CCTK_REAL) realBuffer2;
+ // reflevels = (int) int4Buffer[2];
+ cctkGH->cctk_iteration = (int) int4Buffer[0];
+ CCTK_SetMainLoopIndex ((int) int4Buffer[1]);
+
+
+ return (0);
+
+ } // RecoverGHExtensions
+
+ int RecoverParameters(hid_t reader){
+
+ DECLARE_CCTK_PARAMETERS;
+
+ int myproc, retval;
+ char *parameters;
+ CCTK_INT4 parameterSize;
+
+ hid_t group,dataset;
+ herr_t herr;
+
+ int mpierr;
+
+ myproc = CCTK_MyProc (NULL);
+
+ if (myproc == 0){
+ CCTK_VInfo (CCTK_THORNSTRING, "Recovering parameters from checkpoint ");
+
+ group = H5Gopen (reader, PARAMETERS_GLOBAL_ATTRIBUTES_GROUP);
+ assert(group >= 0);
+ dataset = H5Dopen (group, ALL_PARAMETERS);
+ assert(dataset>= 0);
+
+ parameterSize = H5Dget_storage_size (dataset);
+ parameters = (char *) malloc (parameterSize);
+ herr = H5Dread (dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL,
+ H5P_DEFAULT, parameters);
+ assert(!herr);
+ herr = H5Dclose(dataset);
+ assert(!herr);
+ herr = H5Gclose(group);
+ assert(!herr);
+
+ if(verbose) {
+ CCTK_VInfo (CCTK_THORNSTRING, "\n%s\n",parameters);
+ }
+
+ CCTK_VInfo(CCTK_THORNSTRING, "Successfully recovered parameters!");
+ } // myproc == 0
+
+ /* Broadcast the parameter buffer size to all processors */
+ /* NOTE: We have to use MPI_COMM_WORLD here
+ because CARPET_COMM_WORLD is not yet set up at parameter recovery time.
+ We also assume that CARPET_MPI_INT4 is a compile-time defined datatype. */
+ mpierr = MPI_Bcast (&parameterSize, 1, CARPET_MPI_INT4, 0,
+ MPI_COMM_WORLD);
+ assert(!mpierr);
+
+ if (parameterSize > 0) {
+ if (myproc) {
+ parameters = (char*) malloc (parameterSize + 1);
+ }
+
+ mpierr = MPI_Bcast (parameters, parameterSize + 1, CARPET_MPI_CHAR,
+ 0,MPI_COMM_WORLD);
+ assert(!mpierr);
+
+ IOUtil_SetAllParameters (parameters);
+
+ free (parameters);
+ }
+
+ /* return positive value for success otherwise negative */
+ retval = (parameterSize > 0 ? 1 : -1);
+
+ return (retval);
+
+ } // RecoverParameters
+
+
+
+ int Checkpoint (const cGH* const cctkGH, int called_from)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ herr_t herr;
+
+ int retval = 0;
+
+ const ioGH *ioUtilGH;
+
+ ioRequest *request;
+
+ CarpetIOHDF5GH *myGH;
+ myGH = (CarpetIOHDF5GH *) CCTK_GHExtension (cctkGH, "CarpetIOHDF5");
+
+ // check if CarpetIOHDF5 was registered as I/O method
+ if (myGH == NULL) {
+ CCTK_WARN (0, "No CarpetIOHDF5 I/O methods registered");
+ return -1;
+ }
+
+ int const myproc = CCTK_MyProc (cctkGH);
+
+
+
+ // Invent a file name
+ ostringstream cp_tempname_buf;
+ ostringstream cp_filename_buf;
+
+ switch (called_from)
+ {
+ case CP_INITIAL_DATA:
+ cp_tempname_buf << checkpoint_dir << "/tmp_" << checkpoint_ID_file << ".it_" << cctkGH->cctk_iteration << ".h5";
+ cp_filename_buf << checkpoint_dir << "/" << checkpoint_ID_file << ".it_" << cctkGH->cctk_iteration << ".h5";
+ break;
+
+ case CP_EVOLUTION_DATA:
+ cp_tempname_buf << checkpoint_dir << "/tmp_" << checkpoint_file << ".it_" << cctkGH->cctk_iteration << ".h5";
+ cp_filename_buf << checkpoint_dir << "/" << checkpoint_file << ".it_" << cctkGH->cctk_iteration << ".h5";
+ break;
+
+ case CP_RECOVER_DATA:
+ case CP_RECOVER_PARAMETERS:
+ case FILEREADER_DATA:
+ cp_tempname_buf << recover_dir << "/tmp_" << recover_file << ".h5";
+ cp_filename_buf << recover_dir << "/" << recover_file << ".h5";
+ break;
+
+ default:
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "IOUtil_PrepareFilename: Unknown calling mode %d",
+ called_from);
+ break;
+ }
+
+ string const cp_tempname_str = cp_tempname_buf.str();
+ string const cp_filename_str = cp_filename_buf.str();
+ char const * const cp_tempname = cp_tempname_str.c_str();
+ char const * const cp_filename = cp_filename_str.c_str();
+
+
+
+ hid_t writer = -1;
+
+ if (myproc == 0) {
+
+ if (verbose) {
+ CCTK_VInfo (CCTK_THORNSTRING, "Creating temporary checkpoint file '%s'", cp_tempname);
+ }
+
+ CCTK_VInfo (CCTK_THORNSTRING, "Creating temporary checkpoint file '%s'", cp_tempname);
+
+ CCTK_VInfo (CCTK_THORNSTRING, "Verbose = %d", verbose);
+
+ writer = H5Fcreate (cp_tempname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert (writer>=0);
+ herr = H5Fclose (writer);
+ assert (!herr);
+ writer = -1;
+
+ // Now open the file
+
+ writer = H5Fopen (cp_tempname, H5F_ACC_RDWR, H5P_DEFAULT);
+ assert (writer>=0);
+
+ // Dump all parameters and GHExtentions
+ retval += DumpParametersGHExtentions (cctkGH, 1, writer);
+ assert(!retval);
+
+ } // myproc == 0
+
+
+ // now dump the grid variables on all mglevels, reflevels, maps and components
+ BEGIN_MGLEVEL_LOOP(cctkGH) {
+
+ BEGIN_REFLEVEL_LOOP(cctkGH) {
+
+ if (verbose)
+ {
+ CCTK_INFO ("Dumping Grid Variables ...");
+ }
+ for (int group = CCTK_NumGroups () - 1; group >= 0; group--)
+ {
+ /* only dump groups which have storage assigned */
+
+ if (CCTK_QueryGroupStorageI (cctkGH, group) <= 0)
+ {
+ continue;
+ }
+
+ const int grouptype = CCTK_GroupTypeI(group);
+
+ /* scalars and grid arrays only have 1 reflevel: */
+ if ( (grouptype != CCTK_GF) && (reflevel != 0) ) {
+ continue;
+ }
+ /* now check if there is any memory allocated
+ for GFs and GAs. GSs should always have
+ memory allocated and there is at this point
+ no CCTK function to check this :/
+ */
+
+ if ( (grouptype == CCTK_GF) || (grouptype == CCTK_ARRAY)){
+ const int gpdim = CCTK_GroupDimI(group);
+ int gtotalsize=1;
+ vector<int> tlsh(gpdim);
+ assert(!CCTK_GrouplshGI(cctkGH,gpdim,&tlsh[0],group));
+ for(int i=0;i<gpdim;i++) {
+ gtotalsize=tlsh[i];
+ }
+ if(gtotalsize == 0){
+ if (verbose) CCTK_VInfo(CCTK_THORNSTRING,
+ "Group %s is zero-sized. No checkpoint info written",CCTK_GroupName(group));
+ continue;
+ }
+ }
+
+ /* get the number of allocated timelevels */
+ cGroup gdata;
+ CCTK_GroupData (group, &gdata);
+ gdata.numtimelevels = 0;
+ gdata.numtimelevels = CCTK_GroupStorageIncrease (cctkGH, 1, &group,
+ &gdata.numtimelevels,NULL);
+
+ int first_vindex = CCTK_FirstVarIndexI (group);
+
+ /* get the default I/O request for this group */
+ request = IOUtil_DefaultIORequest (cctkGH, first_vindex, 1);
+
+ /* disable checking for old data objects, disable datatype conversion
+ and downsampling */
+ request->check_exist = 0;
+ request->hdatatype = gdata.vartype;
+ for (request->hdim = 0; request->hdim < request->vdim; request->hdim++)
+ {
+ request->downsample[request->hdim] = 1;
+ }
+
+ /* loop over all variables in this group */
+ for (request->vindex = first_vindex;
+ request->vindex < first_vindex + gdata.numvars;
+ request->vindex++)
+ {
+ /* loop over all timelevels of this variable */
+ for (request->timelevel = 0;
+ request->timelevel < gdata.numtimelevels;
+ request->timelevel++)
+ {
+ if (verbose)
+ {
+ char *fullname = CCTK_FullName (request->vindex);
+ if (fullname != NULL) {
+ CCTK_VInfo (CCTK_THORNSTRING, " %s (timelevel %d)",
+ fullname, request->timelevel);
+ free (fullname);
+ }
+ else {
+ CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Invalid variable with varindex %d", request->vindex);
+ }
+ }
+ // write the var
+
+ if (grouptype == CCTK_ARRAY || grouptype == CCTK_GF || grouptype == CCTK_SCALAR)
+ {
+ char* fullname = CCTK_FullName (request->vindex);
+ if (verbose)
+ CCTK_VInfo (CCTK_THORNSTRING,"%s: reflevel: %d map: %d component: %d grouptype: %d ",
+ fullname,reflevel,Carpet::map,component,grouptype);
+ free(fullname);
+ retval += WriteVar(cctkGH,writer,request,1);
+ }
+ else
+ {
+ char *fullname = CCTK_FullName (request->vindex);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Invalid group type %d for variable '%s'", grouptype, fullname);
+ free(fullname);
+ retval = -1;
+ }
+
+ }
+ } /* end of loop over all variables */
+ } /* end of loop over all groups */
+ } END_REFLEVEL_LOOP;
+
+ } END_MGLEVEL_LOOP;
+
+
+ if (myproc==0) {
+ // Close the file
+ herr = H5Fclose(writer);
+ assert(!herr);
+ }
+
+ if (retval == 0) {
+ if (myproc==0) {
+ if (rename (cp_tempname, cp_filename))
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not rename temporary checkpoint file '%s' to '%s'",
+ cp_tempname, cp_filename);
+ retval = -1;
+ }
+ else {
+ if (myGH->cp_filename_list[myGH->cp_filename_index]) {
+ if (checkpoint_keep > 0) {
+ remove (myGH->cp_filename_list[myGH->cp_filename_index]);
+ }
+ free (myGH->cp_filename_list[myGH->cp_filename_index]);
+ }
+ myGH->cp_filename_list[myGH->cp_filename_index] = strdup (cp_filename);
+ myGH->cp_filename_index = (myGH->cp_filename_index+1) % abs (checkpoint_keep);
+ } // else
+ } // myproc == 0
+ } // retval == 0
+
+ return retval;
+
+ } // Checkpoint
+
+
+ int DumpParametersGHExtentions (const cGH *cctkGH, int all, hid_t writer)
+ {
+ // large parts of this routine were taken from
+ // Thomas Radke's IOHDF5Util. Thanks Thomas!
+
+ DECLARE_CCTK_PARAMETERS;
+
+ char *parameters;
+ hid_t group, dataspace, dataset;
+ hsize_t size;
+ herr_t herr;
+
+ CCTK_INT4 itmp;
+ CCTK_REAL dtmp;
+ const char *version;
+ ioGH *ioUtilGH;
+
+ if (verbose) {
+ CCTK_INFO ("Dumping Parameters and GH Extentions...");
+ }
+
+ /* get the parameter string buffer */
+ parameters = IOUtil_GetAllParameters (cctkGH, all);
+
+ if (parameters)
+ {
+ size = strlen (parameters) + 1;
+ group = H5Gcreate (writer, PARAMETERS_GLOBAL_ATTRIBUTES_GROUP, 0);
+ assert(group>=0);
+ dataspace = H5Screate_simple (1, &size, NULL);
+ assert(dataspace>=0);
+ dataset = H5Dcreate (group, ALL_PARAMETERS, H5T_NATIVE_UCHAR,
+ dataspace, H5P_DEFAULT);
+ assert(dataset>=0);
+ herr = H5Dwrite (dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL,
+ H5P_DEFAULT, parameters);
+ assert(!herr);
+
+ // now dump the GH Extentions
+
+ /* get the handle for IOUtil extensions */
+ ioUtilGH = (ioGH *) CCTK_GHExtension (cctkGH, "IO");
+
+ itmp = CCTK_MainLoopIndex ();
+ WriteAttribute(dataset,"main loop index",itmp);
+
+ itmp = cctkGH->cctk_iteration;
+ WriteAttribute(dataset,"GH$iteration",itmp);
+
+ itmp = ioUtilGH->ioproc_every;
+ WriteAttribute(dataset,"GH$ioproc_every",itmp);
+
+ itmp = CCTK_nProcs (cctkGH);
+ WriteAttribute(dataset,"GH$nprocs",itmp);
+
+ dtmp = cctkGH->cctk_time;
+ WriteAttribute(dataset,"GH$time", dtmp);
+
+ dtmp = global_time;
+ WriteAttribute(dataset,"carpet_global_time", dtmp);
+
+ itmp = reflevels;
+ WriteAttribute(dataset,"carpet_reflevels", itmp);
+
+ dtmp = delta_time;
+ WriteAttribute(dataset,"carpet_delta_time", dtmp);
+
+ version = CCTK_FullVersion();
+ WriteAttribute(dataset,"Cactus version", version);
+
+ /* finally, we need all the times on the individual refinement levels */
+
+ const int numberofmgtimes=mglevels;
+ WriteAttribute(dataset,"numberofmgtimes",numberofmgtimes);
+ for(int i=0;i < numberofmgtimes;i++) {
+ char buffer[100];
+ sprintf(buffer,"mgleveltimes %d",i);
+ WriteAttribute(dataset,buffer,(double *) &leveltimes.at(i).at(0), reflevels);
+ }
+
+ herr = H5Dclose (dataset);
+ assert(!herr);
+ herr = H5Sclose (dataspace);
+ assert(!herr);
+ herr = H5Gclose (group);
+ assert(!herr);
+
+ free (parameters);
+ }
+
+ return 0;
+ } // DumpParametersGHExtentions
+
+
+
+
+} // namespace CarpetIOHDF5
diff --git a/Carpet/CarpetIOHDF5/src/iohdf5utils.cc b/Carpet/CarpetIOHDF5/src/iohdf5utils.cc
new file mode 100644
index 000000000..5545a3563
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/iohdf5utils.cc
@@ -0,0 +1,521 @@
+#include <assert.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <algorithm>
+#include <fstream>
+#include <sstream>
+#include <vector>
+
+#include <hdf5.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5utils.cc,v 1.8 2004/07/07 17:09:17 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetIOHDF5_iohdf5utils_cc);
+}
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h"
+
+#include "bbox.hh"
+#include "data.hh"
+#include "gdata.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "iohdf5.hh"
+#include "iohdf5GH.h"
+
+
+
+namespace CarpetIOHDF5 {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ bool CheckForVariable (const char* const varlist, const int vindex)
+ {
+ const int numvars = CCTK_NumVars();
+ assert (vindex>=0 && vindex<numvars);
+
+ vector<bool> flags(numvars);
+
+ CCTK_TraverseString (varlist, SetFlag, &flags, CCTK_GROUP_OR_VAR);
+
+ return flags.at(vindex);
+ }
+
+ void SetFlag (int vindex, const char* optstring, void* arg)
+ {
+ if (optstring)
+ {
+ char *fullname = CCTK_FullName (vindex);
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Option string '%s' will be ignored for HDF5 output of "
+ "variable '%s'", optstring, fullname);
+ free (fullname);
+ }
+ vector<bool>& flags = *(vector<bool>*)arg;
+ flags.at(vindex) = true;
+ }
+
+
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const int value)
+ {
+ WriteAttribute (dataset, name, &value, 1);
+ }
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const int* const values, const int nvalues)
+ {
+ assert (dataset>=0);
+ assert (name);
+ assert (values);
+ assert (nvalues>=0);
+
+ herr_t herr;
+
+ hsize_t shape[1];
+ shape[0] = nvalues;
+ const hid_t dataspace = nvalues==1 ? H5Screate (H5S_SCALAR) : H5Screate_simple (1, shape, NULL);
+ assert (dataspace>=0);
+
+ const hid_t datatype = H5T_NATIVE_INT;
+
+ const hid_t attribute = H5Acreate (dataset, name, datatype, dataspace, H5P_DEFAULT);
+ assert (attribute>=0);
+ herr = H5Awrite (attribute, datatype, values);
+ assert (!herr);
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+ }
+
+
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const double value)
+ {
+ WriteAttribute (dataset, name, &value, 1);
+ }
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const double* const values, const int nvalues)
+ {
+ assert (dataset>=0);
+ assert (name);
+ assert (values);
+ assert (nvalues>=0);
+
+ herr_t herr;
+
+ hsize_t shape[1];
+ shape[0] = nvalues;
+ const hid_t dataspace = nvalues==1 ? H5Screate (H5S_SCALAR) : H5Screate_simple (1, shape, NULL);
+ assert (dataspace>=0);
+
+ const hid_t datatype = H5T_NATIVE_DOUBLE;
+
+ const hid_t attribute = H5Acreate (dataset, name, datatype, dataspace, H5P_DEFAULT);
+ assert (attribute>=0);
+ herr = H5Awrite (attribute, datatype, values);
+ assert (!herr);
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+ }
+
+
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const char value)
+ {
+ WriteAttribute (dataset, name, &value, 1);
+ }
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const char* const values)
+ {
+ WriteAttribute (dataset, name, values, strlen(values));
+ }
+
+ void WriteAttribute (const hid_t dataset, const char* const name, const char* const values, const int nvalues)
+ {
+ assert (dataset>=0);
+ assert (name);
+ assert (values);
+ assert (nvalues>=0);
+
+ herr_t herr;
+
+ const hid_t dataspace = H5Screate (H5S_SCALAR);
+ assert (dataspace>=0);
+
+ const hid_t datatype = H5Tcopy (H5T_C_S1);
+ assert (datatype>=0);
+ herr = H5Tset_size (datatype, nvalues);
+ assert (!herr);
+
+ const hid_t attribute = H5Acreate (dataset, name, datatype, dataspace, H5P_DEFAULT);
+ assert (attribute>=0);
+ herr = H5Awrite (attribute, datatype, values);
+ assert (!herr);
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ herr = H5Tclose (datatype);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+ }
+
+
+
+ int ReadAttribute (const hid_t dataset, const char* const name, int& value)
+ {
+ return ReadAttribute (dataset, name, &value, 1);
+ }
+
+ int ReadAttribute (const hid_t dataset, const char* name, int* const values, const int nvalues)
+ {
+ assert (dataset>=0);
+ assert (name);
+ assert (values);
+ assert (nvalues>=0);
+
+ herr_t herr;
+
+ const hid_t attribute = H5Aopen_name (dataset, name);
+ if (attribute<0) return attribute;
+
+ const hid_t dataspace = H5Aget_space (attribute);
+ assert (dataspace>=0);
+
+ // cout << "reading int attribute " << name << endl;
+
+ hsize_t rank = H5Sget_simple_extent_ndims (dataspace);
+ hsize_t shape[1];
+ if (rank==0) {
+ shape[0] = 1;
+ } else if (rank==1) {
+ herr = H5Sget_simple_extent_dims (dataspace, shape, NULL);
+ assert (herr >= 0);
+ } else {
+ assert (0);
+ }
+ const int length = shape[0];
+
+ const hid_t datatype = H5Aget_type (attribute);
+ assert (datatype>=0);
+
+ assert(H5Tequal(datatype, H5T_NATIVE_INT));
+
+ vector<int> values1(length);
+
+ herr = H5Aread (attribute, datatype, &values1.at(0));
+ assert (!herr);
+
+ for (int i=0; i<min(length, nvalues); ++i) {
+ values[i] = values1[i];
+ }
+
+ herr = H5Tclose (datatype);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ return length;
+ }
+
+
+
+ int ReadAttribute (const hid_t dataset, const char* const name, double& value)
+ {
+ return ReadAttribute (dataset, name, &value, 1);
+ }
+
+ int ReadAttribute (const hid_t dataset, const char* const name, double* const values, const int nvalues)
+ {
+ assert (dataset>=0);
+ assert (name);
+ assert (values);
+ assert (nvalues>=0);
+
+ herr_t herr;
+
+ const hid_t attribute = H5Aopen_name (dataset, name);
+ if (attribute<0) return attribute;
+
+ const hid_t dataspace = H5Aget_space (attribute);
+ assert (dataspace>=0);
+
+ hsize_t rank = H5Sget_simple_extent_ndims (dataspace);
+ hsize_t shape[1];
+ if (rank==0) {
+ shape[0] = 1;
+ } else if (rank==1) {
+ rank = H5Sget_simple_extent_dims (dataspace, shape, NULL);
+ assert (rank == 1);
+ } else {
+ assert (0);
+ }
+ const int length = shape[0];
+
+ const hid_t datatype = H5Aget_type (attribute);
+ assert (datatype>=0);
+ assert(H5Tequal(datatype, H5T_NATIVE_DOUBLE));
+
+ vector<double> values1(length);
+
+ herr = H5Aread (attribute, datatype, &values1.at(0));
+ assert (!herr);
+
+ for (int i=0; i<min(length, nvalues); ++i) {
+ values[i] = values1[i];
+ }
+
+ herr = H5Tclose (datatype);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ return length;
+ }
+
+
+
+ int ReadAttribute (const hid_t dataset, const char* const name, char& value)
+ {
+ return ReadAttribute (dataset, name, &value, 1);
+ }
+
+ int ReadAttribute (const hid_t dataset, const char* const name, char*& values)
+ {
+ assert (dataset>=0);
+ assert (name);
+
+ herr_t herr;
+
+ const hid_t attribute = H5Aopen_name (dataset, name);
+ if (attribute<0) return attribute;
+
+ const hid_t dataspace = H5Aget_space (attribute);
+ assert (dataspace>=0);
+
+ hsize_t rank = H5Sget_simple_extent_ndims (dataspace);
+ assert (rank==0);
+
+ const hid_t datatype = H5Aget_type (attribute);
+ assert (datatype>=0);
+ assert (H5Tget_class (datatype) == H5T_STRING);
+ const int length = H5Tget_size (datatype);
+ assert (length>=0);
+
+ values = (char*) malloc (length+1);
+ assert (values);
+
+ herr = H5Aread (attribute, datatype, values);
+ assert (!herr);
+ values[length] = '\0';
+
+ herr = H5Tclose (datatype);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ return length;
+ }
+
+ int ReadAttribute (const hid_t dataset, const char* const name, char* const values, const int nvalues)
+ {
+ assert (dataset>=0);
+ assert (name);
+ assert (values);
+ assert (nvalues>=0);
+
+ herr_t herr;
+
+ const hid_t attribute = H5Aopen_name (dataset, name);
+ if (attribute<0) return attribute;
+
+ const hid_t dataspace = H5Aget_space (attribute);
+ assert (dataspace>=0);
+
+ hsize_t rank = H5Sget_simple_extent_ndims (dataspace);
+ assert (rank==0);
+
+ const hid_t datatype = H5Aget_type (attribute);
+ assert (datatype>=0);
+ assert(H5Tget_class (datatype) == H5T_STRING);
+ const int length = H5Tget_size (datatype);
+ assert (length>=0);
+
+ vector<char> values1(length);
+
+ herr = H5Aread (attribute, datatype, &values1.at(0));
+ assert (!herr);
+
+ for (int i=0; i<min(length, nvalues); ++i) {
+ values[i] = values1[i];
+ }
+
+ herr = H5Tclose (datatype);
+ assert (!herr);
+
+ herr = H5Sclose (dataspace);
+ assert (!herr);
+
+ herr = H5Aclose (attribute);
+ assert (!herr);
+
+ return length;
+ }
+
+ herr_t DatasetCounter(hid_t group_id, const char *member_name, void *operator_data)
+ /* Counts datasets. Used by GetnDatasets; straight from John Shalf's FlexIO library */
+ {
+ int *count = (int*)operator_data;
+ H5G_stat_t objinfo;
+ // request info about the type of objects in root group
+ if(H5Gget_objinfo(group_id,member_name,1 /* follow links */,&objinfo)<0) {
+ return 0;
+ }
+ // only count objects that are datasets (not subgroups)
+ if(objinfo.type==H5G_DATASET) {
+ (*count)++;
+ }
+ return 0;
+ }
+
+
+ int GetnDatasets(const hid_t reader)
+ {
+ //this is straight from John Shalf's FlexIO library
+
+ int count=0;
+ int idx=0;
+ while(H5Giterate(reader, /* hid_t loc_id, */
+ "/", /*const char *name, */
+ &idx, /* int *idx, */
+ DatasetCounter,
+ &count)<0){}
+ return count;
+ }
+
+ struct H5IO_getname_t {
+ //this is straight from John Shalf's FlexIO library
+ int index,count;
+ char *name;
+ };
+
+
+ herr_t GetName(hid_t group_id, const char *member_name, void *operator_data)
+ {
+ //this is straight from John Shalf's FlexIO library
+ H5IO_getname_t *getn = (H5IO_getname_t*)operator_data;
+ // check type first (only respond if it is a dataset)
+ H5G_stat_t objinfo;
+ // request info about the type of objects in root group
+ if(H5Gget_objinfo(group_id,
+ member_name,
+ 1 /* follow links */,
+ &objinfo)<0) return 0; // error (probably bad symlink)
+ // only count objects that are datasets (not subgroups)
+ if(objinfo.type!=H5G_DATASET)
+ return 0; // do not increment count if it isn't a dataset.
+ if(getn->index==getn->count){
+ strcpy(getn->name,member_name);
+ return 1; // success
+ }
+ getn->count++;
+ return 0;
+ }
+
+
+ void GetDatasetName(const hid_t reader, const int _index, char *name) {
+ //this is straight from John Shalf's FlexIO library
+ H5IO_getname_t getn;
+ int idx=_index;
+ getn.index=_index; getn.name=name; getn.count=_index;
+ while(H5Giterate(reader, /* hid_t loc_id, */
+ "/", /*const char *name, */
+ &idx, /* int *idx, */
+ GetName,
+ &getn)<0){}
+ }
+
+ hid_t h5DataType (const cGH* const cctkGH, int cctk_type) {
+
+ hid_t retval;
+
+ CarpetIOHDF5GH *myGH;
+ myGH = (CarpetIOHDF5GH *) CCTK_GHExtension (cctkGH, "CarpetIOHDF5");
+
+ // this is adapted from Thomas Radke's IOHDF5Util. Thanks, Thomas!
+
+ switch (cctk_type)
+ {
+ case CCTK_VARIABLE_CHAR: retval = HDF5_CHAR; break;
+ case CCTK_VARIABLE_INT: retval = HDF5_INT; break;
+ case CCTK_VARIABLE_REAL: retval = HDF5_REAL; break;
+ case CCTK_VARIABLE_COMPLEX: retval = myGH->HDF5_COMPLEX; break;
+#ifdef CCTK_INT1
+ case CCTK_VARIABLE_INT1: retval = HDF5_INT1; break;
+#endif
+#ifdef CCTK_INT2
+ case CCTK_VARIABLE_INT2: retval = HDF5_INT2; break;
+#endif
+#ifdef CCTK_INT4
+ case CCTK_VARIABLE_INT4: retval = HDF5_INT4; break;
+#endif
+#ifdef CCTK_INT8
+ case CCTK_VARIABLE_INT8: retval = HDF5_INT8; break;
+#endif
+#ifdef CCTK_REAL4
+ case CCTK_VARIABLE_REAL4: retval = HDF5_REAL4; break;
+ case CCTK_VARIABLE_COMPLEX8: retval = myGH->HDF5_COMPLEX8; break;
+#endif
+#ifdef CCTK_REAL8
+ case CCTK_VARIABLE_REAL8: retval = HDF5_REAL8; break;
+ case CCTK_VARIABLE_COMPLEX16: retval = myGH->HDF5_COMPLEX16; break;
+#endif
+#ifdef CCTK_REAL16
+ case CCTK_VARIABLE_REAL16: retval = HDF5_REAL16; break;
+ case CCTK_VARIABLE_COMPLEX32: retval = myGH->HDF5_COMPLEX32; break;
+#endif
+
+ default: CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Unsupported CCTK variable datatype %d", cctk_type);
+ retval = -1;
+ }
+
+ return (retval);
+ }
+
+
+
+} // namespace CarpetIOHDF5
diff --git a/Carpet/CarpetIOHDF5/src/make.code.defn b/Carpet/CarpetIOHDF5/src/make.code.defn
new file mode 100644
index 000000000..a8600e812
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/make.code.defn
@@ -0,0 +1,5 @@
+# Main make.code.defn file for thorn CarpetIOHDF5
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/make.code.defn,v 1.5 2004/07/09 15:38:18 tradke Exp $
+
+# Source files in this directory
+SRCS = iohdf5.cc iohdf5utils.cc Checkpoint.cc Recover.cc
diff --git a/Carpet/CarpetIOHDF5/src/make.configuration.defn b/Carpet/CarpetIOHDF5/src/make.configuration.defn
new file mode 100644
index 000000000..3de9eea95
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/src/make.configuration.defn
@@ -0,0 +1,7 @@
+# Main make.configuration.defn file for thorn CarpetIOHDF5 -*-Makefile-*-
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/make.configuration.defn,v 1.1 2004/05/04 22:08:37 schnetter Exp $
+
+# Ensure that MPI is available
+ifeq ($(strip $(HAVE_HDF5)), )
+ $(error Configuration error: The CarpetIOHDF5 thorn requires HDF5. Please configure with HDF5, or remove the CarpetIOHDF5 thorn from the ThornList.)
+endif
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.it_64.h5 b/Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.it_64.h5
new file mode 100644
index 000000000..bed1b5bb5
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.it_64.h5
Binary files differ
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.parfile b/Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.parfile
new file mode 100644
index 000000000..f5d898aa1
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyCheckpoint_test.parfile
@@ -0,0 +1,44 @@
+ActiveThorns = "Boundary CartGrid3D Time CoordBase SymBase Carpet CarpetLib CarpetRegrid CarpetReduce CarpetSlab IOUtil IOBasic CarpetIOASCII CarpetIOHDF5 IDScalarWaveC WaveToyC"
+
+
+Cactus::cctk_itlast = 64
+
+Time::dtfac = 0.5
+
+Grid::avoid_origin = "no"
+Grid::type = "byrange"
+Grid::dxyz = 1
+
+IDScalarWave::initial_data = "gaussian"
+IDScalarWave::sigma = 2.8
+IDScalarWave::radius = 0.0
+
+Driver::global_nsize = 10
+Driver::ghost_size = 2
+
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+Carpet::init_each_timelevel = "yes"
+Carpet::buffer_width = 6
+Carpet::max_refinement_levels = 4
+CarpetRegrid::refinement_levels = 4
+
+# Output
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+IO::parfile_write = "no"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_vars = "wavetoy::phi"
+IOBasic::outScalar_every = 32
+IOBasic::outScalar_vars = "wavetoy::phi"
+
+IOASCII::out1D_vars = "wavetoy::phi"
+IOASCII::out1D_every = 32
+
+# Checkpointing
+IO::checkpoint_file = $parfile
+IO::checkpoint_every = 32
+
+IOHDF5::checkpoint = "yes"
+IOHDF5::verbose = "yes"
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc.par b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc.par
new file mode 100644
index 000000000..cb72b9b60
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc.par
@@ -0,0 +1,14 @@
+ActiveThorns = "Boundary CartGrid3D Time CoordBase SymBase Carpet CarpetLib CarpetRegrid CarpetReduce CarpetSlab IOUtil IOBasic CarpetIOASCII CarpetIOHDF5 IDScalarWaveC WaveToyC"
+
+
+Cactus::cctk_itlast = 128
+
+# Output
+IO::out_dir = $parfile
+
+# Recovery
+IO::recover_dir = "../../../arrangements/Carpet/CarpetIOHDF5/test"
+IO::recover = "manual"
+IO::recover_file = "CarpetWaveToyCheckpoint_test.it_64"
+
+IOHDF5::checkpoint = "no"
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.x.asc b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.x.asc
new file mode 100644
index 000000000..05526bfeb
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.x.asc
@@ -0,0 +1,227 @@
+# WAVETOY::phi x (phi)
+#
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 0 0 0 40 40 0.888888888888889 -1 0.111111111111111 0.111111111111111 0.873700996777018
+64 0 0 0 0 8 40 40 0.888888888888889 -0.777777777777778 0.111111111111111 0.111111111111111 0.807676282684182
+64 0 0 0 0 16 40 40 0.888888888888889 -0.555555555555556 0.111111111111111 0.111111111111111 0.756699260944861
+64 0 0 0 0 24 40 40 0.888888888888889 -0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 0 0 32 40 40 0.888888888888889 -0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 48 40 40 0.888888888888889 0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 0 0 56 40 40 0.888888888888889 0.555555555555556 0.111111111111111 0.111111111111111 0.756699260944861
+64 0 0 0 0 64 40 40 0.888888888888889 0.777777777777778 0.111111111111111 0.111111111111111 0.807676282684182
+64 0 0 0 0 72 40 40 0.888888888888889 1 0.111111111111111 0.111111111111111 0.873700996777018
+
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 0 0 8 36 36 0.888888888888889 -0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.808379332677938
+64 0 1 0 0 12 36 36 0.888888888888889 -0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.779665123251561
+64 0 1 0 0 16 36 36 0.888888888888889 -0.555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.756097245006156
+64 0 1 0 0 20 36 36 0.888888888888889 -0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.739694852518638
+64 0 1 0 0 24 36 36 0.888888888888889 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.729218296316213
+64 0 1 0 0 28 36 36 0.888888888888889 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+64 0 1 0 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 1 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 0 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 1 0 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+64 0 1 0 0 48 36 36 0.888888888888889 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.729218296316213
+64 0 1 0 0 52 36 36 0.888888888888889 0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.739694852518638
+64 0 1 0 0 56 36 36 0.888888888888889 0.555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.756097245006155
+64 0 1 0 0 60 36 36 0.888888888888889 0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.779665123251561
+64 0 1 0 0 64 36 36 0.888888888888889 0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.808379332677938
+
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 0 0 22 36 36 0.888888888888889 -0.388888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.733688776948746
+64 0 2 0 0 24 36 36 0.888888888888889 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.729218296316213
+64 0 2 0 0 26 36 36 0.888888888888889 -0.277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.726552055334392
+64 0 2 0 0 28 36 36 0.888888888888889 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+64 0 2 0 0 30 36 36 0.888888888888889 -0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.724502518106703
+64 0 2 0 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 2 0 0 34 36 36 0.888888888888889 -0.0555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.72395273727097
+64 0 2 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 2 0 0 38 36 36 0.888888888888889 0.0555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.72395273727097
+64 0 2 0 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 2 0 0 42 36 36 0.888888888888889 0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.724502518106703
+64 0 2 0 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+64 0 2 0 0 46 36 36 0.888888888888889 0.277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.726552055334392
+64 0 2 0 0 48 36 36 0.888888888888889 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.729218296316213
+64 0 2 0 0 50 36 36 0.888888888888889 0.388888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.733688776948745
+
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 0 0 29 36 36 0.888888888888889 -0.194444444444445 -5.55111512312578e-17 -5.55111512312578e-17 0.724720854915558
+64 0 3 0 0 30 36 36 0.888888888888889 -0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.724502518106703
+64 0 3 0 0 31 36 36 0.888888888888889 -0.138888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.724409709543024
+64 0 3 0 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 3 0 0 33 36 36 0.888888888888889 -0.0833333333333334 -5.55111512312578e-17 -5.55111512312578e-17 0.724151545837958
+64 0 3 0 0 34 36 36 0.888888888888889 -0.0555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.72395273727097
+64 0 3 0 0 35 36 36 0.888888888888889 -0.0277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.723805016719017
+64 0 3 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 3 0 0 37 36 36 0.888888888888889 0.0277777777777777 -5.55111512312578e-17 -5.55111512312578e-17 0.723805016719017
+64 0 3 0 0 38 36 36 0.888888888888889 0.0555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.72395273727097
+64 0 3 0 0 39 36 36 0.888888888888889 0.0833333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.724151545837958
+64 0 3 0 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 3 0 0 41 36 36 0.888888888888889 0.138888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.724409709543024
+64 0 3 0 0 42 36 36 0.888888888888889 0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.724502518106703
+64 0 3 0 0 43 36 36 0.888888888888889 0.194444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.724720854915558
+
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 0 0 0 40 40 1.33333333333333 -1 0.111111111111111 0.111111111111111 0.877480603359996
+96 0 0 0 0 8 40 40 1.33333333333333 -0.777777777777778 0.111111111111111 0.111111111111111 0.798008089475601
+96 0 0 0 0 16 40 40 1.33333333333333 -0.555555555555556 0.111111111111111 0.111111111111111 0.735090597558599
+96 0 0 0 0 24 40 40 1.33333333333333 -0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 0 0 32 40 40 1.33333333333333 -0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 48 40 40 1.33333333333333 0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 0 0 56 40 40 1.33333333333333 0.555555555555556 0.111111111111111 0.111111111111111 0.735090597558599
+96 0 0 0 0 64 40 40 1.33333333333333 0.777777777777778 0.111111111111111 0.111111111111111 0.798008089475601
+96 0 0 0 0 72 40 40 1.33333333333333 1 0.111111111111111 0.111111111111111 0.877480603359996
+
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 0 0 8 36 36 1.33333333333333 -0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.796688784792057
+96 0 1 0 0 12 36 36 1.33333333333333 -0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.76190136189151
+96 0 1 0 0 16 36 36 1.33333333333333 -0.555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.729928937348657
+96 0 1 0 0 20 36 36 1.33333333333333 -0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.698215010923196
+96 0 1 0 0 24 36 36 1.33333333333333 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.668908746807157
+96 0 1 0 0 28 36 36 1.33333333333333 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+96 0 1 0 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839124
+96 0 1 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 0 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839125
+96 0 1 0 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+96 0 1 0 0 48 36 36 1.33333333333333 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.668908746807157
+96 0 1 0 0 52 36 36 1.33333333333333 0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.698215010923196
+96 0 1 0 0 56 36 36 1.33333333333333 0.555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.729928937348657
+96 0 1 0 0 60 36 36 1.33333333333333 0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.76190136189151
+96 0 1 0 0 64 36 36 1.33333333333333 0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.796688784792057
+
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 0 0 22 36 36 1.33333333333333 -0.388888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.683302448238139
+96 0 2 0 0 24 36 36 1.33333333333333 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.668908746807157
+96 0 2 0 0 26 36 36 1.33333333333333 -0.277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.654541556639422
+96 0 2 0 0 28 36 36 1.33333333333333 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+96 0 2 0 0 30 36 36 1.33333333333333 -0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.630026346765969
+96 0 2 0 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839124
+96 0 2 0 0 34 36 36 1.33333333333333 -0.0555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.616824486578861
+96 0 2 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 2 0 0 38 36 36 1.33333333333333 0.0555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.616824486578861
+96 0 2 0 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839125
+96 0 2 0 0 42 36 36 1.33333333333333 0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.63002634676597
+96 0 2 0 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+96 0 2 0 0 46 36 36 1.33333333333333 0.277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.654541556639422
+96 0 2 0 0 48 36 36 1.33333333333333 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.668908746807157
+96 0 2 0 0 50 36 36 1.33333333333333 0.388888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.683302448238139
+
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 0 0 29 36 36 1.33333333333333 -0.194444444444445 -5.55111512312578e-17 -5.55111512312578e-17 0.63539979750899
+96 0 3 0 0 30 36 36 1.33333333333333 -0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.630026346765969
+96 0 3 0 0 31 36 36 1.33333333333333 -0.138888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.625297419028293
+96 0 3 0 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839124
+96 0 3 0 0 33 36 36 1.33333333333333 -0.0833333333333334 -5.55111512312578e-17 -5.55111512312578e-17 0.618663308361111
+96 0 3 0 0 34 36 36 1.33333333333333 -0.0555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.616824486578861
+96 0 3 0 0 35 36 36 1.33333333333333 -0.0277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.615777600484678
+96 0 3 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 3 0 0 37 36 36 1.33333333333333 0.0277777777777777 -5.55111512312578e-17 -5.55111512312578e-17 0.615777600484678
+96 0 3 0 0 38 36 36 1.33333333333333 0.0555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.616824486578861
+96 0 3 0 0 39 36 36 1.33333333333333 0.0833333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.618663308361111
+96 0 3 0 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839125
+96 0 3 0 0 41 36 36 1.33333333333333 0.138888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.625297419028293
+96 0 3 0 0 42 36 36 1.33333333333333 0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.63002634676597
+96 0 3 0 0 43 36 36 1.33333333333333 0.194444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.63539979750899
+
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 0 0 0 40 40 1.77777777777778 -1 0.111111111111111 0.111111111111111 0.873700996777018
+128 0 0 0 0 8 40 40 1.77777777777778 -0.777777777777778 0.111111111111111 0.111111111111111 0.859471717622308
+128 0 0 0 0 16 40 40 1.77777777777778 -0.555555555555556 0.111111111111111 0.111111111111111 0.863004424640887
+128 0 0 0 0 24 40 40 1.77777777777778 -0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 0 0 32 40 40 1.77777777777778 -0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 48 40 40 1.77777777777778 0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 0 0 56 40 40 1.77777777777778 0.555555555555556 0.111111111111111 0.111111111111111 0.863004424640887
+128 0 0 0 0 64 40 40 1.77777777777778 0.777777777777778 0.111111111111111 0.111111111111111 0.859471717622308
+128 0 0 0 0 72 40 40 1.77777777777778 1 0.111111111111111 0.111111111111111 0.873700996777018
+
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 0 0 8 36 36 1.77777777777778 -0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.862653663591007
+128 0 1 0 0 12 36 36 1.77777777777778 -0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.862560028606905
+128 0 1 0 0 16 36 36 1.77777777777778 -0.555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.866965759785718
+128 0 1 0 0 20 36 36 1.77777777777778 -0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.876167092595071
+128 0 1 0 0 24 36 36 1.77777777777778 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.889185421864397
+128 0 1 0 0 28 36 36 1.77777777777778 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.907998184681559
+128 0 1 0 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 1 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 0 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 1 0 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.90799818468156
+128 0 1 0 0 48 36 36 1.77777777777778 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.889185421864397
+128 0 1 0 0 52 36 36 1.77777777777778 0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.876167092595071
+128 0 1 0 0 56 36 36 1.77777777777778 0.555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.866965759785718
+128 0 1 0 0 60 36 36 1.77777777777778 0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.862560028606905
+128 0 1 0 0 64 36 36 1.77777777777778 0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.862653663591007
+
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 0 0 22 36 36 1.77777777777778 -0.388888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.882075542854246
+128 0 2 0 0 24 36 36 1.77777777777778 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.889185421864397
+128 0 2 0 0 26 36 36 1.77777777777778 -0.277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.898403242286228
+128 0 2 0 0 28 36 36 1.77777777777778 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.907998184681559
+128 0 2 0 0 30 36 36 1.77777777777778 -0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.916919384356027
+128 0 2 0 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 2 0 0 34 36 36 1.77777777777778 -0.0555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.927485951077396
+128 0 2 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 2 0 0 38 36 36 1.77777777777778 0.0555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.927485951077396
+128 0 2 0 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 2 0 0 42 36 36 1.77777777777778 0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.916919384356027
+128 0 2 0 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.90799818468156
+128 0 2 0 0 46 36 36 1.77777777777778 0.277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.898403242286228
+128 0 2 0 0 48 36 36 1.77777777777778 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.889185421864397
+128 0 2 0 0 50 36 36 1.77777777777778 0.388888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.882075542854246
+
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 0 0 29 36 36 1.77777777777778 -0.194444444444445 -5.55111512312578e-17 -5.55111512312578e-17 0.912613836832073
+128 0 3 0 0 30 36 36 1.77777777777778 -0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.916919384356027
+128 0 3 0 0 31 36 36 1.77777777777778 -0.138888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.920818233193455
+128 0 3 0 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 3 0 0 33 36 36 1.77777777777778 -0.0833333333333334 -5.55111512312578e-17 -5.55111512312578e-17 0.926147880297958
+128 0 3 0 0 34 36 36 1.77777777777778 -0.0555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.927485951077396
+128 0 3 0 0 35 36 36 1.77777777777778 -0.0277777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.928209975180567
+128 0 3 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 3 0 0 37 36 36 1.77777777777778 0.0277777777777777 -5.55111512312578e-17 -5.55111512312578e-17 0.928209975180567
+128 0 3 0 0 38 36 36 1.77777777777778 0.0555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.927485951077396
+128 0 3 0 0 39 36 36 1.77777777777778 0.0833333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.926147880297958
+128 0 3 0 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 3 0 0 41 36 36 1.77777777777778 0.138888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.920818233193455
+128 0 3 0 0 42 36 36 1.77777777777778 0.166666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.916919384356027
+128 0 3 0 0 43 36 36 1.77777777777778 0.194444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.912613836832073
+
+
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.y.asc b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.y.asc
new file mode 100644
index 000000000..305349452
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.y.asc
@@ -0,0 +1,227 @@
+# WAVETOY::phi y (phi)
+#
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 0 0 40 0 40 0.888888888888889 0.111111111111111 -1 0.111111111111111 0.873700996777018
+64 0 0 0 0 40 8 40 0.888888888888889 0.111111111111111 -0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 0 0 40 16 40 0.888888888888889 0.111111111111111 -0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 0 0 40 24 40 0.888888888888889 0.111111111111111 -0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 0 0 40 32 40 0.888888888888889 0.111111111111111 -0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 48 40 0.888888888888889 0.111111111111111 0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 0 0 40 56 40 0.888888888888889 0.111111111111111 0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 0 0 40 64 40 0.888888888888889 0.111111111111111 0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 0 0 40 72 40 0.888888888888889 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 0 0 36 8 36 0.888888888888889 -5.55111512312578e-17 -0.777777777777778 -5.55111512312578e-17 0.808379332677938
+64 0 1 0 0 36 12 36 0.888888888888889 -5.55111512312578e-17 -0.666666666666667 -5.55111512312578e-17 0.779665123251562
+64 0 1 0 0 36 16 36 0.888888888888889 -5.55111512312578e-17 -0.555555555555556 -5.55111512312578e-17 0.756097245006156
+64 0 1 0 0 36 20 36 0.888888888888889 -5.55111512312578e-17 -0.444444444444444 -5.55111512312578e-17 0.739694852518638
+64 0 1 0 0 36 24 36 0.888888888888889 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 1 0 0 36 28 36 0.888888888888889 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.725100663327575
+64 0 1 0 0 36 32 36 0.888888888888889 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 1 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 0 0 36 40 36 0.888888888888889 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 1 0 0 36 44 36 0.888888888888889 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.725100663327574
+64 0 1 0 0 36 48 36 0.888888888888889 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 1 0 0 36 52 36 0.888888888888889 -5.55111512312578e-17 0.444444444444444 -5.55111512312578e-17 0.739694852518638
+64 0 1 0 0 36 56 36 0.888888888888889 -5.55111512312578e-17 0.555555555555555 -5.55111512312578e-17 0.756097245006155
+64 0 1 0 0 36 60 36 0.888888888888889 -5.55111512312578e-17 0.666666666666667 -5.55111512312578e-17 0.779665123251561
+64 0 1 0 0 36 64 36 0.888888888888889 -5.55111512312578e-17 0.777777777777778 -5.55111512312578e-17 0.808379332677938
+
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 0 0 36 22 36 0.888888888888889 -5.55111512312578e-17 -0.388888888888889 -5.55111512312578e-17 0.733688776948746
+64 0 2 0 0 36 24 36 0.888888888888889 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 2 0 0 36 26 36 0.888888888888889 -5.55111512312578e-17 -0.277777777777778 -5.55111512312578e-17 0.726552055334392
+64 0 2 0 0 36 28 36 0.888888888888889 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.725100663327575
+64 0 2 0 0 36 30 36 0.888888888888889 -5.55111512312578e-17 -0.166666666666667 -5.55111512312578e-17 0.724502518106703
+64 0 2 0 0 36 32 36 0.888888888888889 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 2 0 0 36 34 36 0.888888888888889 -5.55111512312578e-17 -0.0555555555555556 -5.55111512312578e-17 0.72395273727097
+64 0 2 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 2 0 0 36 38 36 0.888888888888889 -5.55111512312578e-17 0.0555555555555555 -5.55111512312578e-17 0.72395273727097
+64 0 2 0 0 36 40 36 0.888888888888889 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 2 0 0 36 42 36 0.888888888888889 -5.55111512312578e-17 0.166666666666667 -5.55111512312578e-17 0.724502518106703
+64 0 2 0 0 36 44 36 0.888888888888889 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.725100663327574
+64 0 2 0 0 36 46 36 0.888888888888889 -5.55111512312578e-17 0.277777777777778 -5.55111512312578e-17 0.726552055334392
+64 0 2 0 0 36 48 36 0.888888888888889 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 2 0 0 36 50 36 0.888888888888889 -5.55111512312578e-17 0.388888888888889 -5.55111512312578e-17 0.733688776948745
+
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 0 0 36 29 36 0.888888888888889 -5.55111512312578e-17 -0.194444444444445 -5.55111512312578e-17 0.724720854915558
+64 0 3 0 0 36 30 36 0.888888888888889 -5.55111512312578e-17 -0.166666666666667 -5.55111512312578e-17 0.724502518106703
+64 0 3 0 0 36 31 36 0.888888888888889 -5.55111512312578e-17 -0.138888888888889 -5.55111512312578e-17 0.724409709543024
+64 0 3 0 0 36 32 36 0.888888888888889 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 3 0 0 36 33 36 0.888888888888889 -5.55111512312578e-17 -0.0833333333333334 -5.55111512312578e-17 0.724151545837958
+64 0 3 0 0 36 34 36 0.888888888888889 -5.55111512312578e-17 -0.0555555555555556 -5.55111512312578e-17 0.72395273727097
+64 0 3 0 0 36 35 36 0.888888888888889 -5.55111512312578e-17 -0.0277777777777778 -5.55111512312578e-17 0.723805016719017
+64 0 3 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 3 0 0 36 37 36 0.888888888888889 -5.55111512312578e-17 0.0277777777777777 -5.55111512312578e-17 0.723805016719017
+64 0 3 0 0 36 38 36 0.888888888888889 -5.55111512312578e-17 0.0555555555555555 -5.55111512312578e-17 0.72395273727097
+64 0 3 0 0 36 39 36 0.888888888888889 -5.55111512312578e-17 0.0833333333333333 -5.55111512312578e-17 0.724151545837958
+64 0 3 0 0 36 40 36 0.888888888888889 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 3 0 0 36 41 36 0.888888888888889 -5.55111512312578e-17 0.138888888888889 -5.55111512312578e-17 0.724409709543024
+64 0 3 0 0 36 42 36 0.888888888888889 -5.55111512312578e-17 0.166666666666667 -5.55111512312578e-17 0.724502518106703
+64 0 3 0 0 36 43 36 0.888888888888889 -5.55111512312578e-17 0.194444444444444 -5.55111512312578e-17 0.724720854915558
+
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 0 0 40 0 40 1.33333333333333 0.111111111111111 -1 0.111111111111111 0.877480603359996
+96 0 0 0 0 40 8 40 1.33333333333333 0.111111111111111 -0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 0 0 40 16 40 1.33333333333333 0.111111111111111 -0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 0 0 40 24 40 1.33333333333333 0.111111111111111 -0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 0 0 40 32 40 1.33333333333333 0.111111111111111 -0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 48 40 1.33333333333333 0.111111111111111 0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 0 0 40 56 40 1.33333333333333 0.111111111111111 0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 0 0 40 64 40 1.33333333333333 0.111111111111111 0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 0 0 40 72 40 1.33333333333333 0.111111111111111 1 0.111111111111111 0.877480603359996
+
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 0 0 36 8 36 1.33333333333333 -5.55111512312578e-17 -0.777777777777778 -5.55111512312578e-17 0.796688784792057
+96 0 1 0 0 36 12 36 1.33333333333333 -5.55111512312578e-17 -0.666666666666667 -5.55111512312578e-17 0.76190136189151
+96 0 1 0 0 36 16 36 1.33333333333333 -5.55111512312578e-17 -0.555555555555556 -5.55111512312578e-17 0.729928937348657
+96 0 1 0 0 36 20 36 1.33333333333333 -5.55111512312578e-17 -0.444444444444444 -5.55111512312578e-17 0.698215010923196
+96 0 1 0 0 36 24 36 1.33333333333333 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 1 0 0 36 28 36 1.33333333333333 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.641345710414296
+96 0 1 0 0 36 32 36 1.33333333333333 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.621410197839124
+96 0 1 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 0 0 36 40 36 1.33333333333333 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.621410197839125
+96 0 1 0 0 36 44 36 1.33333333333333 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.641345710414297
+96 0 1 0 0 36 48 36 1.33333333333333 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 1 0 0 36 52 36 1.33333333333333 -5.55111512312578e-17 0.444444444444444 -5.55111512312578e-17 0.698215010923196
+96 0 1 0 0 36 56 36 1.33333333333333 -5.55111512312578e-17 0.555555555555555 -5.55111512312578e-17 0.729928937348657
+96 0 1 0 0 36 60 36 1.33333333333333 -5.55111512312578e-17 0.666666666666667 -5.55111512312578e-17 0.76190136189151
+96 0 1 0 0 36 64 36 1.33333333333333 -5.55111512312578e-17 0.777777777777778 -5.55111512312578e-17 0.796688784792057
+
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 0 0 36 22 36 1.33333333333333 -5.55111512312578e-17 -0.388888888888889 -5.55111512312578e-17 0.683302448238139
+96 0 2 0 0 36 24 36 1.33333333333333 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 2 0 0 36 26 36 1.33333333333333 -5.55111512312578e-17 -0.277777777777778 -5.55111512312578e-17 0.654541556639422
+96 0 2 0 0 36 28 36 1.33333333333333 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.641345710414296
+96 0 2 0 0 36 30 36 1.33333333333333 -5.55111512312578e-17 -0.166666666666667 -5.55111512312578e-17 0.630026346765969
+96 0 2 0 0 36 32 36 1.33333333333333 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.621410197839124
+96 0 2 0 0 36 34 36 1.33333333333333 -5.55111512312578e-17 -0.0555555555555556 -5.55111512312578e-17 0.616824486578861
+96 0 2 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 2 0 0 36 38 36 1.33333333333333 -5.55111512312578e-17 0.0555555555555555 -5.55111512312578e-17 0.616824486578861
+96 0 2 0 0 36 40 36 1.33333333333333 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.621410197839125
+96 0 2 0 0 36 42 36 1.33333333333333 -5.55111512312578e-17 0.166666666666667 -5.55111512312578e-17 0.63002634676597
+96 0 2 0 0 36 44 36 1.33333333333333 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.641345710414297
+96 0 2 0 0 36 46 36 1.33333333333333 -5.55111512312578e-17 0.277777777777778 -5.55111512312578e-17 0.654541556639422
+96 0 2 0 0 36 48 36 1.33333333333333 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 2 0 0 36 50 36 1.33333333333333 -5.55111512312578e-17 0.388888888888889 -5.55111512312578e-17 0.683302448238139
+
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 0 0 36 29 36 1.33333333333333 -5.55111512312578e-17 -0.194444444444445 -5.55111512312578e-17 0.63539979750899
+96 0 3 0 0 36 30 36 1.33333333333333 -5.55111512312578e-17 -0.166666666666667 -5.55111512312578e-17 0.630026346765969
+96 0 3 0 0 36 31 36 1.33333333333333 -5.55111512312578e-17 -0.138888888888889 -5.55111512312578e-17 0.625297419028293
+96 0 3 0 0 36 32 36 1.33333333333333 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.621410197839124
+96 0 3 0 0 36 33 36 1.33333333333333 -5.55111512312578e-17 -0.0833333333333334 -5.55111512312578e-17 0.618663308361111
+96 0 3 0 0 36 34 36 1.33333333333333 -5.55111512312578e-17 -0.0555555555555556 -5.55111512312578e-17 0.616824486578861
+96 0 3 0 0 36 35 36 1.33333333333333 -5.55111512312578e-17 -0.0277777777777778 -5.55111512312578e-17 0.615777600484678
+96 0 3 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 3 0 0 36 37 36 1.33333333333333 -5.55111512312578e-17 0.0277777777777777 -5.55111512312578e-17 0.615777600484678
+96 0 3 0 0 36 38 36 1.33333333333333 -5.55111512312578e-17 0.0555555555555555 -5.55111512312578e-17 0.616824486578861
+96 0 3 0 0 36 39 36 1.33333333333333 -5.55111512312578e-17 0.0833333333333333 -5.55111512312578e-17 0.618663308361111
+96 0 3 0 0 36 40 36 1.33333333333333 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.621410197839125
+96 0 3 0 0 36 41 36 1.33333333333333 -5.55111512312578e-17 0.138888888888889 -5.55111512312578e-17 0.625297419028293
+96 0 3 0 0 36 42 36 1.33333333333333 -5.55111512312578e-17 0.166666666666667 -5.55111512312578e-17 0.63002634676597
+96 0 3 0 0 36 43 36 1.33333333333333 -5.55111512312578e-17 0.194444444444444 -5.55111512312578e-17 0.63539979750899
+
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 0 0 40 0 40 1.77777777777778 0.111111111111111 -1 0.111111111111111 0.873700996777018
+128 0 0 0 0 40 8 40 1.77777777777778 0.111111111111111 -0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 0 0 40 16 40 1.77777777777778 0.111111111111111 -0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 0 0 40 24 40 1.77777777777778 0.111111111111111 -0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 0 0 40 32 40 1.77777777777778 0.111111111111111 -0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 48 40 1.77777777777778 0.111111111111111 0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 0 0 40 56 40 1.77777777777778 0.111111111111111 0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 0 0 40 64 40 1.77777777777778 0.111111111111111 0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 0 0 40 72 40 1.77777777777778 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 0 0 36 8 36 1.77777777777778 -5.55111512312578e-17 -0.777777777777778 -5.55111512312578e-17 0.862653663591007
+128 0 1 0 0 36 12 36 1.77777777777778 -5.55111512312578e-17 -0.666666666666667 -5.55111512312578e-17 0.862560028606905
+128 0 1 0 0 36 16 36 1.77777777777778 -5.55111512312578e-17 -0.555555555555556 -5.55111512312578e-17 0.866965759785718
+128 0 1 0 0 36 20 36 1.77777777777778 -5.55111512312578e-17 -0.444444444444444 -5.55111512312578e-17 0.876167092595071
+128 0 1 0 0 36 24 36 1.77777777777778 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 1 0 0 36 28 36 1.77777777777778 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 1 0 0 36 32 36 1.77777777777778 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 1 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 0 0 36 40 36 1.77777777777778 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 1 0 0 36 44 36 1.77777777777778 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 1 0 0 36 48 36 1.77777777777778 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 1 0 0 36 52 36 1.77777777777778 -5.55111512312578e-17 0.444444444444444 -5.55111512312578e-17 0.876167092595071
+128 0 1 0 0 36 56 36 1.77777777777778 -5.55111512312578e-17 0.555555555555555 -5.55111512312578e-17 0.866965759785718
+128 0 1 0 0 36 60 36 1.77777777777778 -5.55111512312578e-17 0.666666666666667 -5.55111512312578e-17 0.862560028606905
+128 0 1 0 0 36 64 36 1.77777777777778 -5.55111512312578e-17 0.777777777777778 -5.55111512312578e-17 0.862653663591007
+
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 0 0 36 22 36 1.77777777777778 -5.55111512312578e-17 -0.388888888888889 -5.55111512312578e-17 0.882075542854246
+128 0 2 0 0 36 24 36 1.77777777777778 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 2 0 0 36 26 36 1.77777777777778 -5.55111512312578e-17 -0.277777777777778 -5.55111512312578e-17 0.898403242286228
+128 0 2 0 0 36 28 36 1.77777777777778 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 2 0 0 36 30 36 1.77777777777778 -5.55111512312578e-17 -0.166666666666667 -5.55111512312578e-17 0.916919384356027
+128 0 2 0 0 36 32 36 1.77777777777778 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 2 0 0 36 34 36 1.77777777777778 -5.55111512312578e-17 -0.0555555555555556 -5.55111512312578e-17 0.927485951077396
+128 0 2 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 2 0 0 36 38 36 1.77777777777778 -5.55111512312578e-17 0.0555555555555555 -5.55111512312578e-17 0.927485951077396
+128 0 2 0 0 36 40 36 1.77777777777778 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 2 0 0 36 42 36 1.77777777777778 -5.55111512312578e-17 0.166666666666667 -5.55111512312578e-17 0.916919384356027
+128 0 2 0 0 36 44 36 1.77777777777778 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 2 0 0 36 46 36 1.77777777777778 -5.55111512312578e-17 0.277777777777778 -5.55111512312578e-17 0.898403242286228
+128 0 2 0 0 36 48 36 1.77777777777778 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 2 0 0 36 50 36 1.77777777777778 -5.55111512312578e-17 0.388888888888889 -5.55111512312578e-17 0.882075542854246
+
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 0 0 36 29 36 1.77777777777778 -5.55111512312578e-17 -0.194444444444445 -5.55111512312578e-17 0.912613836832073
+128 0 3 0 0 36 30 36 1.77777777777778 -5.55111512312578e-17 -0.166666666666667 -5.55111512312578e-17 0.916919384356027
+128 0 3 0 0 36 31 36 1.77777777777778 -5.55111512312578e-17 -0.138888888888889 -5.55111512312578e-17 0.920818233193455
+128 0 3 0 0 36 32 36 1.77777777777778 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 3 0 0 36 33 36 1.77777777777778 -5.55111512312578e-17 -0.0833333333333334 -5.55111512312578e-17 0.926147880297958
+128 0 3 0 0 36 34 36 1.77777777777778 -5.55111512312578e-17 -0.0555555555555556 -5.55111512312578e-17 0.927485951077396
+128 0 3 0 0 36 35 36 1.77777777777778 -5.55111512312578e-17 -0.0277777777777778 -5.55111512312578e-17 0.928209975180567
+128 0 3 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 3 0 0 36 37 36 1.77777777777778 -5.55111512312578e-17 0.0277777777777777 -5.55111512312578e-17 0.928209975180567
+128 0 3 0 0 36 38 36 1.77777777777778 -5.55111512312578e-17 0.0555555555555555 -5.55111512312578e-17 0.927485951077396
+128 0 3 0 0 36 39 36 1.77777777777778 -5.55111512312578e-17 0.0833333333333333 -5.55111512312578e-17 0.926147880297958
+128 0 3 0 0 36 40 36 1.77777777777778 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 3 0 0 36 41 36 1.77777777777778 -5.55111512312578e-17 0.138888888888889 -5.55111512312578e-17 0.920818233193455
+128 0 3 0 0 36 42 36 1.77777777777778 -5.55111512312578e-17 0.166666666666667 -5.55111512312578e-17 0.916919384356027
+128 0 3 0 0 36 43 36 1.77777777777778 -5.55111512312578e-17 0.194444444444444 -5.55111512312578e-17 0.912613836832073
+
+
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.z.asc b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.z.asc
new file mode 100644
index 000000000..8868db22c
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi.z.asc
@@ -0,0 +1,227 @@
+# WAVETOY::phi z (phi)
+#
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 0 0 40 40 0 0.888888888888889 0.111111111111111 0.111111111111111 -1 0.873700996777018
+64 0 0 0 0 40 40 8 0.888888888888889 0.111111111111111 0.111111111111111 -0.777777777777778 0.807676282684182
+64 0 0 0 0 40 40 16 0.888888888888889 0.111111111111111 0.111111111111111 -0.555555555555556 0.756699260944861
+64 0 0 0 0 40 40 24 0.888888888888889 0.111111111111111 0.111111111111111 -0.333333333333333 0.730294733882952
+64 0 0 0 0 40 40 32 0.888888888888889 0.111111111111111 0.111111111111111 -0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 48 0.888888888888889 0.111111111111111 0.111111111111111 0.333333333333333 0.730294733882952
+64 0 0 0 0 40 40 56 0.888888888888889 0.111111111111111 0.111111111111111 0.555555555555556 0.756699260944861
+64 0 0 0 0 40 40 64 0.888888888888889 0.111111111111111 0.111111111111111 0.777777777777778 0.807676282684182
+64 0 0 0 0 40 40 72 0.888888888888889 0.111111111111111 0.111111111111111 1 0.873700996777018
+
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 0 0 36 36 8 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.777777777777778 0.808379332677938
+64 0 1 0 0 36 36 12 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.666666666666667 0.779665123251562
+64 0 1 0 0 36 36 16 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.555555555555556 0.756097245006156
+64 0 1 0 0 36 36 20 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.444444444444444 0.739694852518638
+64 0 1 0 0 36 36 24 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.729218296316213
+64 0 1 0 0 36 36 28 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.725100663327574
+64 0 1 0 0 36 36 32 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 1 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 0 0 36 36 40 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 1 0 0 36 36 44 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+64 0 1 0 0 36 36 48 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.729218296316213
+64 0 1 0 0 36 36 52 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.444444444444444 0.739694852518638
+64 0 1 0 0 36 36 56 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.555555555555555 0.756097245006155
+64 0 1 0 0 36 36 60 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.666666666666667 0.779665123251561
+64 0 1 0 0 36 36 64 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.777777777777778 0.808379332677938
+
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 0 0 36 36 22 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.388888888888889 0.733688776948746
+64 0 2 0 0 36 36 24 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.729218296316213
+64 0 2 0 0 36 36 26 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.277777777777778 0.726552055334392
+64 0 2 0 0 36 36 28 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.725100663327574
+64 0 2 0 0 36 36 30 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.166666666666667 0.724502518106703
+64 0 2 0 0 36 36 32 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 2 0 0 36 36 34 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.0555555555555556 0.72395273727097
+64 0 2 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 2 0 0 36 36 38 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.0555555555555555 0.72395273727097
+64 0 2 0 0 36 36 40 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 2 0 0 36 36 42 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.166666666666667 0.724502518106703
+64 0 2 0 0 36 36 44 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+64 0 2 0 0 36 36 46 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.277777777777778 0.726552055334391
+64 0 2 0 0 36 36 48 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.729218296316213
+64 0 2 0 0 36 36 50 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.388888888888889 0.733688776948745
+
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 0 0 36 36 29 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.194444444444445 0.724720854915558
+64 0 3 0 0 36 36 30 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.166666666666667 0.724502518106703
+64 0 3 0 0 36 36 31 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.138888888888889 0.724409709543024
+64 0 3 0 0 36 36 32 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 3 0 0 36 36 33 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.0833333333333334 0.724151545837958
+64 0 3 0 0 36 36 34 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.0555555555555556 0.72395273727097
+64 0 3 0 0 36 36 35 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.0277777777777778 0.723805016719017
+64 0 3 0 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 3 0 0 36 36 37 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.0277777777777777 0.723805016719017
+64 0 3 0 0 36 36 38 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.0555555555555555 0.72395273727097
+64 0 3 0 0 36 36 39 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.0833333333333333 0.724151545837958
+64 0 3 0 0 36 36 40 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 3 0 0 36 36 41 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.138888888888889 0.724409709543024
+64 0 3 0 0 36 36 42 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.166666666666667 0.724502518106703
+64 0 3 0 0 36 36 43 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.194444444444444 0.724720854915557
+
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 0 0 40 40 0 1.33333333333333 0.111111111111111 0.111111111111111 -1 0.877480603359996
+96 0 0 0 0 40 40 8 1.33333333333333 0.111111111111111 0.111111111111111 -0.777777777777778 0.798008089475601
+96 0 0 0 0 40 40 16 1.33333333333333 0.111111111111111 0.111111111111111 -0.555555555555556 0.735090597558599
+96 0 0 0 0 40 40 24 1.33333333333333 0.111111111111111 0.111111111111111 -0.333333333333333 0.677899959110667
+96 0 0 0 0 40 40 32 1.33333333333333 0.111111111111111 0.111111111111111 -0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 48 1.33333333333333 0.111111111111111 0.111111111111111 0.333333333333333 0.677899959110667
+96 0 0 0 0 40 40 56 1.33333333333333 0.111111111111111 0.111111111111111 0.555555555555556 0.735090597558599
+96 0 0 0 0 40 40 64 1.33333333333333 0.111111111111111 0.111111111111111 0.777777777777778 0.798008089475601
+96 0 0 0 0 40 40 72 1.33333333333333 0.111111111111111 0.111111111111111 1 0.877480603359996
+
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 0 0 36 36 8 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.777777777777778 0.796688784792057
+96 0 1 0 0 36 36 12 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.666666666666667 0.76190136189151
+96 0 1 0 0 36 36 16 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.555555555555556 0.729928937348657
+96 0 1 0 0 36 36 20 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.444444444444444 0.698215010923196
+96 0 1 0 0 36 36 24 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.668908746807157
+96 0 1 0 0 36 36 28 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.641345710414296
+96 0 1 0 0 36 36 32 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 1 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 0 0 36 36 40 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 1 0 0 36 36 44 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+96 0 1 0 0 36 36 48 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.668908746807157
+96 0 1 0 0 36 36 52 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.444444444444444 0.698215010923196
+96 0 1 0 0 36 36 56 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.555555555555555 0.729928937348657
+96 0 1 0 0 36 36 60 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.666666666666667 0.76190136189151
+96 0 1 0 0 36 36 64 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.777777777777778 0.796688784792057
+
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 0 0 36 36 22 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.388888888888889 0.683302448238139
+96 0 2 0 0 36 36 24 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.668908746807157
+96 0 2 0 0 36 36 26 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.277777777777778 0.654541556639422
+96 0 2 0 0 36 36 28 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.641345710414296
+96 0 2 0 0 36 36 30 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.166666666666667 0.630026346765969
+96 0 2 0 0 36 36 32 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 2 0 0 36 36 34 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.0555555555555556 0.616824486578861
+96 0 2 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 2 0 0 36 36 38 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.0555555555555555 0.616824486578861
+96 0 2 0 0 36 36 40 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 2 0 0 36 36 42 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.166666666666667 0.63002634676597
+96 0 2 0 0 36 36 44 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+96 0 2 0 0 36 36 46 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.277777777777778 0.654541556639422
+96 0 2 0 0 36 36 48 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.668908746807157
+96 0 2 0 0 36 36 50 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.388888888888889 0.683302448238139
+
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 0 0 36 36 29 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.194444444444445 0.63539979750899
+96 0 3 0 0 36 36 30 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.166666666666667 0.630026346765969
+96 0 3 0 0 36 36 31 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.138888888888889 0.625297419028293
+96 0 3 0 0 36 36 32 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 3 0 0 36 36 33 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.0833333333333334 0.618663308361111
+96 0 3 0 0 36 36 34 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.0555555555555556 0.616824486578861
+96 0 3 0 0 36 36 35 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.0277777777777778 0.615777600484678
+96 0 3 0 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 3 0 0 36 36 37 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.0277777777777777 0.615777600484678
+96 0 3 0 0 36 36 38 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.0555555555555555 0.616824486578861
+96 0 3 0 0 36 36 39 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.0833333333333333 0.618663308361111
+96 0 3 0 0 36 36 40 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 3 0 0 36 36 41 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.138888888888889 0.625297419028293
+96 0 3 0 0 36 36 42 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.166666666666667 0.63002634676597
+96 0 3 0 0 36 36 43 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.194444444444444 0.63539979750899
+
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 0 0 40 40 0 1.77777777777778 0.111111111111111 0.111111111111111 -1 0.873700996777018
+128 0 0 0 0 40 40 8 1.77777777777778 0.111111111111111 0.111111111111111 -0.777777777777778 0.859471717622308
+128 0 0 0 0 40 40 16 1.77777777777778 0.111111111111111 0.111111111111111 -0.555555555555556 0.863004424640887
+128 0 0 0 0 40 40 24 1.77777777777778 0.111111111111111 0.111111111111111 -0.333333333333333 0.883486952153519
+128 0 0 0 0 40 40 32 1.77777777777778 0.111111111111111 0.111111111111111 -0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 48 1.77777777777778 0.111111111111111 0.111111111111111 0.333333333333333 0.883486952153519
+128 0 0 0 0 40 40 56 1.77777777777778 0.111111111111111 0.111111111111111 0.555555555555556 0.863004424640887
+128 0 0 0 0 40 40 64 1.77777777777778 0.111111111111111 0.111111111111111 0.777777777777778 0.859471717622308
+128 0 0 0 0 40 40 72 1.77777777777778 0.111111111111111 0.111111111111111 1 0.873700996777018
+
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 0 0 36 36 8 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.777777777777778 0.862653663591007
+128 0 1 0 0 36 36 12 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.666666666666667 0.862560028606905
+128 0 1 0 0 36 36 16 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.555555555555556 0.866965759785718
+128 0 1 0 0 36 36 20 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.444444444444444 0.876167092595071
+128 0 1 0 0 36 36 24 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.889185421864397
+128 0 1 0 0 36 36 28 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.90799818468156
+128 0 1 0 0 36 36 32 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 1 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 0 0 36 36 40 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 1 0 0 36 36 44 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+128 0 1 0 0 36 36 48 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.889185421864397
+128 0 1 0 0 36 36 52 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.444444444444444 0.876167092595071
+128 0 1 0 0 36 36 56 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.555555555555555 0.866965759785718
+128 0 1 0 0 36 36 60 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.666666666666667 0.862560028606905
+128 0 1 0 0 36 36 64 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.777777777777778 0.862653663591007
+
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 0 0 36 36 22 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.388888888888889 0.882075542854246
+128 0 2 0 0 36 36 24 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.889185421864397
+128 0 2 0 0 36 36 26 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.277777777777778 0.898403242286228
+128 0 2 0 0 36 36 28 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.90799818468156
+128 0 2 0 0 36 36 30 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.166666666666667 0.916919384356027
+128 0 2 0 0 36 36 32 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 2 0 0 36 36 34 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.0555555555555556 0.927485951077396
+128 0 2 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 2 0 0 36 36 38 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.0555555555555555 0.927485951077396
+128 0 2 0 0 36 36 40 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 2 0 0 36 36 42 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.166666666666667 0.916919384356027
+128 0 2 0 0 36 36 44 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+128 0 2 0 0 36 36 46 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.277777777777778 0.898403242286228
+128 0 2 0 0 36 36 48 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.889185421864397
+128 0 2 0 0 36 36 50 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.388888888888889 0.882075542854246
+
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 0 0 36 36 29 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.194444444444445 0.912613836832073
+128 0 3 0 0 36 36 30 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.166666666666667 0.916919384356027
+128 0 3 0 0 36 36 31 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.138888888888889 0.920818233193455
+128 0 3 0 0 36 36 32 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 3 0 0 36 36 33 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.0833333333333334 0.926147880297958
+128 0 3 0 0 36 36 34 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.0555555555555556 0.927485951077396
+128 0 3 0 0 36 36 35 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.0277777777777778 0.928209975180567
+128 0 3 0 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 3 0 0 36 36 37 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.0277777777777777 0.928209975180567
+128 0 3 0 0 36 36 38 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.0555555555555555 0.927485951077396
+128 0 3 0 0 36 36 39 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.0833333333333333 0.926147880297958
+128 0 3 0 0 36 36 40 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 3 0 0 36 36 41 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.138888888888889 0.920818233193455
+128 0 3 0 0 36 36 42 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.166666666666667 0.916919384356027
+128 0 3 0 0 36 36 43 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.194444444444444 0.912613836832073
+
+
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_maximum.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_maximum.xg
new file mode 100644
index 000000000..e25d17d43
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_maximum.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.8737009967770
+1.3333333333333 0.8774806033600
+1.7777777777778 0.9157991357717
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_minimum.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_minimum.xg
new file mode 100644
index 000000000..973172b6d
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_minimum.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.6796516032334
+1.3333333333333 0.6328288136667
+1.7777777777778 0.6796516032334
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm1.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm1.xg
new file mode 100644
index 000000000..6e8792bca
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm1.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.7927895664365
+1.3333333333333 0.7914772512610
+1.7777777777778 0.8208628581415
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm2.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm2.xg
new file mode 100644
index 000000000..124c22eda
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_1proc/phi_norm2.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.7937177688028
+1.3333333333333 0.7927587735574
+1.7777777777778 0.8218200985038
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc.par b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc.par
new file mode 100644
index 000000000..cb72b9b60
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc.par
@@ -0,0 +1,14 @@
+ActiveThorns = "Boundary CartGrid3D Time CoordBase SymBase Carpet CarpetLib CarpetRegrid CarpetReduce CarpetSlab IOUtil IOBasic CarpetIOASCII CarpetIOHDF5 IDScalarWaveC WaveToyC"
+
+
+Cactus::cctk_itlast = 128
+
+# Output
+IO::out_dir = $parfile
+
+# Recovery
+IO::recover_dir = "../../../arrangements/Carpet/CarpetIOHDF5/test"
+IO::recover = "manual"
+IO::recover_file = "CarpetWaveToyCheckpoint_test.it_64"
+
+IOHDF5::checkpoint = "no"
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.x.asc b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.x.asc
new file mode 100644
index 000000000..f0d2110bb
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.x.asc
@@ -0,0 +1,632 @@
+# WAVETOY::phi x (phi)
+#
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 0 0 0 40 40 0.888888888888889 -1 0.111111111111111 0.111111111111111 0.873700996777018
+64 0 0 0 0 8 40 40 0.888888888888889 -0.777777777777778 0.111111111111111 0.111111111111111 0.807676282684182
+64 0 0 0 0 16 40 40 0.888888888888889 -0.555555555555556 0.111111111111111 0.111111111111111 0.756699260944861
+64 0 0 0 0 24 40 40 0.888888888888889 -0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 0 0 32 40 40 0.888888888888889 -0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 48 40 40 0.888888888888889 0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 1 0 24 40 40 0.888888888888889 -0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 1 0 32 40 40 0.888888888888889 -0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 1 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 1 0 48 40 40 0.888888888888889 0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 1 0 56 40 40 0.888888888888889 0.555555555555556 0.111111111111111 0.111111111111111 0.756699260944861
+64 0 0 1 0 64 40 40 0.888888888888889 0.777777777777778 0.111111111111111 0.111111111111111 0.807676282684182
+64 0 0 1 0 72 40 40 0.888888888888889 1 0.111111111111111 0.111111111111111 0.873700996777018
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 2 0 0 40 40 0.888888888888889 -1 0.111111111111111 0.111111111111111 0.873700996777018
+64 0 0 2 0 8 40 40 0.888888888888889 -0.777777777777778 0.111111111111111 0.111111111111111 0.807676282684182
+64 0 0 2 0 16 40 40 0.888888888888889 -0.555555555555556 0.111111111111111 0.111111111111111 0.756699260944861
+64 0 0 2 0 24 40 40 0.888888888888889 -0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 2 0 32 40 40 0.888888888888889 -0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 2 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 2 0 48 40 40 0.888888888888889 0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 3 0 24 40 40 0.888888888888889 -0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 3 0 32 40 40 0.888888888888889 -0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 3 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 3 0 48 40 40 0.888888888888889 0.333333333333333 0.111111111111111 0.111111111111111 0.730294733882952
+64 0 0 3 0 56 40 40 0.888888888888889 0.555555555555556 0.111111111111111 0.111111111111111 0.756699260944861
+64 0 0 3 0 64 40 40 0.888888888888889 0.777777777777778 0.111111111111111 0.111111111111111 0.807676282684182
+64 0 0 3 0 72 40 40 0.888888888888889 1 0.111111111111111 0.111111111111111 0.873700996777018
+
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 0 0 8 36 36 0.888888888888889 -0.777777777777778 -5.55111512312578e-17 -9.86623976961809e-17 0.808379332677938
+64 0 1 0 0 12 36 36 0.888888888888889 -0.666666666666667 -5.55111512312578e-17 -9.86623976961809e-17 0.779665123251561
+64 0 1 0 0 16 36 36 0.888888888888889 -0.555555555555556 -5.55111512312578e-17 -9.86623976961809e-17 0.756097245006156
+64 0 1 0 0 20 36 36 0.888888888888889 -0.444444444444444 -5.55111512312578e-17 -9.86623976961809e-17 0.739694852518638
+64 0 1 0 0 24 36 36 0.888888888888889 -0.333333333333333 -5.55111512312578e-17 -9.86623976961809e-17 0.729218296316213
+64 0 1 0 0 28 36 36 0.888888888888889 -0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.725100663327574
+64 0 1 0 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.724342898925177
+64 0 1 0 0 36 36 36 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.723733474251298
+64 0 1 0 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.724342898925177
+64 0 1 0 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.725100663327574
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 1 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.724342898925177
+64 0 1 1 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.723733474251298
+64 0 1 1 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.724342898925177
+64 0 1 1 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.725100663327574
+64 0 1 1 0 48 36 36 0.888888888888889 0.333333333333333 -5.55111512312578e-17 -9.86623976961809e-17 0.729218296316213
+64 0 1 1 0 52 36 36 0.888888888888889 0.444444444444444 -5.55111512312578e-17 -9.86623976961809e-17 0.739694852518638
+64 0 1 1 0 56 36 36 0.888888888888889 0.555555555555555 -5.55111512312578e-17 -9.86623976961809e-17 0.756097245006155
+64 0 1 1 0 60 36 36 0.888888888888889 0.666666666666667 -5.55111512312578e-17 -9.86623976961809e-17 0.779665123251561
+64 0 1 1 0 64 36 36 0.888888888888889 0.777777777777778 -5.55111512312578e-17 -9.86623976961809e-17 0.808379332677938
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 2 0 8 36 36 0.888888888888889 -0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.808379332677938
+64 0 1 2 0 12 36 36 0.888888888888889 -0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.779665123251561
+64 0 1 2 0 16 36 36 0.888888888888889 -0.555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.756097245006156
+64 0 1 2 0 20 36 36 0.888888888888889 -0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.739694852518638
+64 0 1 2 0 24 36 36 0.888888888888889 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.729218296316213
+64 0 1 2 0 28 36 36 0.888888888888889 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+64 0 1 2 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 1 2 0 36 36 36 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 2 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 1 2 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 3 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 1 3 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 3 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.724342898925177
+64 0 1 3 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.725100663327574
+64 0 1 3 0 48 36 36 0.888888888888889 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.729218296316213
+64 0 1 3 0 52 36 36 0.888888888888889 0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.739694852518638
+64 0 1 3 0 56 36 36 0.888888888888889 0.555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.756097245006155
+64 0 1 3 0 60 36 36 0.888888888888889 0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.779665123251561
+64 0 1 3 0 64 36 36 0.888888888888889 0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.808379332677938
+
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 0 0 22 36 36 0.888888888888889 -0.388888888888889 -5.55111512312578e-17 2.46655994240452e-17 0.733688776948746
+64 0 2 0 0 24 36 36 0.888888888888889 -0.333333333333333 -5.55111512312578e-17 2.46655994240452e-17 0.729218296316213
+64 0 2 0 0 26 36 36 0.888888888888889 -0.277777777777778 -5.55111512312578e-17 2.46655994240452e-17 0.726552055334392
+64 0 2 0 0 28 36 36 0.888888888888889 -0.222222222222222 -5.55111512312578e-17 2.46655994240452e-17 0.725100663327574
+64 0 2 0 0 30 36 36 0.888888888888889 -0.166666666666667 -5.55111512312578e-17 2.46655994240452e-17 0.724502518106703
+64 0 2 0 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.724342898925177
+64 0 2 0 0 34 36 36 0.888888888888889 -0.0555555555555555 -5.55111512312578e-17 2.46655994240452e-17 0.72395273727097
+64 0 2 0 0 36 36 36 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.723733474251298
+64 0 2 0 0 38 36 36 0.888888888888889 0.0555555555555556 -5.55111512312578e-17 2.46655994240452e-17 0.72395273727097
+64 0 2 0 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.724342898925177
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 1 0 34 36 36 0.888888888888889 -0.0555555555555556 -5.55111512312578e-17 2.46655994240452e-17 0.72395273727097
+64 0 2 1 0 36 36 36 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.723733474251298
+64 0 2 1 0 38 36 36 0.888888888888889 0.0555555555555555 -5.55111512312578e-17 2.46655994240452e-17 0.72395273727097
+64 0 2 1 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.724342898925177
+64 0 2 1 0 42 36 36 0.888888888888889 0.166666666666667 -5.55111512312578e-17 2.46655994240452e-17 0.724502518106703
+64 0 2 1 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 2.46655994240452e-17 0.725100663327574
+64 0 2 1 0 46 36 36 0.888888888888889 0.277777777777778 -5.55111512312578e-17 2.46655994240452e-17 0.726552055334392
+64 0 2 1 0 48 36 36 0.888888888888889 0.333333333333333 -5.55111512312578e-17 2.46655994240452e-17 0.729218296316213
+64 0 2 1 0 50 36 36 0.888888888888889 0.388888888888889 -5.55111512312578e-17 2.46655994240452e-17 0.733688776948745
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 2 0 22 36 36 0.888888888888889 -0.388888888888889 -5.55111512312578e-17 -2.77555756156289e-17 0.733688776948746
+64 0 2 2 0 24 36 36 0.888888888888889 -0.333333333333333 -5.55111512312578e-17 -2.77555756156289e-17 0.729218296316213
+64 0 2 2 0 26 36 36 0.888888888888889 -0.277777777777778 -5.55111512312578e-17 -2.77555756156289e-17 0.726552055334392
+64 0 2 2 0 28 36 36 0.888888888888889 -0.222222222222222 -5.55111512312578e-17 -2.77555756156289e-17 0.725100663327574
+64 0 2 2 0 30 36 36 0.888888888888889 -0.166666666666667 -5.55111512312578e-17 -2.77555756156289e-17 0.724502518106703
+64 0 2 2 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.724342898925177
+64 0 2 2 0 34 36 36 0.888888888888889 -0.0555555555555555 -5.55111512312578e-17 -2.77555756156289e-17 0.72395273727097
+64 0 2 2 0 36 36 36 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.723733474251298
+64 0 2 2 0 38 36 36 0.888888888888889 0.0555555555555556 -5.55111512312578e-17 -2.77555756156289e-17 0.72395273727097
+64 0 2 2 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.724342898925177
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 3 0 34 36 36 0.888888888888889 -0.0555555555555556 -5.55111512312578e-17 -2.77555756156289e-17 0.72395273727097
+64 0 2 3 0 36 36 36 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.723733474251298
+64 0 2 3 0 38 36 36 0.888888888888889 0.0555555555555555 -5.55111512312578e-17 -2.77555756156289e-17 0.72395273727097
+64 0 2 3 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.724342898925177
+64 0 2 3 0 42 36 36 0.888888888888889 0.166666666666667 -5.55111512312578e-17 -2.77555756156289e-17 0.724502518106703
+64 0 2 3 0 44 36 36 0.888888888888889 0.222222222222222 -5.55111512312578e-17 -2.77555756156289e-17 0.725100663327574
+64 0 2 3 0 46 36 36 0.888888888888889 0.277777777777778 -5.55111512312578e-17 -2.77555756156289e-17 0.726552055334392
+64 0 2 3 0 48 36 36 0.888888888888889 0.333333333333333 -5.55111512312578e-17 -2.77555756156289e-17 0.729218296316213
+64 0 2 3 0 50 36 36 0.888888888888889 0.388888888888889 -5.55111512312578e-17 -2.77555756156289e-17 0.733688776948745
+
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 0 0 29 36 36 0.888888888888889 -0.194444444444445 -5.55111512312578e-17 0 0.724720854915558
+64 0 3 0 0 30 36 36 0.888888888888889 -0.166666666666667 -5.55111512312578e-17 0 0.724502518106703
+64 0 3 0 0 31 36 36 0.888888888888889 -0.138888888888889 -5.55111512312578e-17 0 0.724409709543024
+64 0 3 0 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 0 0.724342898925177
+64 0 3 0 0 33 36 36 0.888888888888889 -0.0833333333333334 -5.55111512312578e-17 0 0.724151545837958
+64 0 3 0 0 34 36 36 0.888888888888889 -0.0555555555555556 -5.55111512312578e-17 0 0.72395273727097
+64 0 3 0 0 35 36 36 0.888888888888889 -0.0277777777777778 -5.55111512312578e-17 0 0.723805016719017
+64 0 3 0 0 36 36 36 0.888888888888889 0 -5.55111512312578e-17 0 0.723733474251298
+64 0 3 0 0 37 36 36 0.888888888888889 0.0277777777777778 -5.55111512312578e-17 0 0.723805016719017
+64 0 3 0 0 38 36 36 0.888888888888889 0.0555555555555556 -5.55111512312578e-17 0 0.72395273727097
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 1 0 35 36 36 0.888888888888889 -0.0277777777777778 -5.55111512312578e-17 0 0.723805016719017
+64 0 3 1 0 36 36 36 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0 0.723733474251298
+64 0 3 1 0 37 36 36 0.888888888888889 0.0277777777777778 -5.55111512312578e-17 0 0.723805016719017
+64 0 3 1 0 38 36 36 0.888888888888889 0.0555555555555555 -5.55111512312578e-17 0 0.72395273727097
+64 0 3 1 0 39 36 36 0.888888888888889 0.0833333333333333 -5.55111512312578e-17 0 0.724151545837958
+64 0 3 1 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 0 0.724342898925177
+64 0 3 1 0 41 36 36 0.888888888888889 0.138888888888889 -5.55111512312578e-17 0 0.724409709543024
+64 0 3 1 0 42 36 36 0.888888888888889 0.166666666666667 -5.55111512312578e-17 0 0.724502518106703
+64 0 3 1 0 43 36 36 0.888888888888889 0.194444444444444 -5.55111512312578e-17 0 0.724720854915558
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 2 0 29 36 36 0.888888888888889 -0.194444444444445 -5.55111512312578e-17 -1.38777878078145e-17 0.724720854915558
+64 0 3 2 0 30 36 36 0.888888888888889 -0.166666666666667 -5.55111512312578e-17 -1.38777878078145e-17 0.724502518106703
+64 0 3 2 0 31 36 36 0.888888888888889 -0.138888888888889 -5.55111512312578e-17 -1.38777878078145e-17 0.724409709543024
+64 0 3 2 0 32 36 36 0.888888888888889 -0.111111111111111 -5.55111512312578e-17 -1.38777878078145e-17 0.724342898925177
+64 0 3 2 0 33 36 36 0.888888888888889 -0.0833333333333334 -5.55111512312578e-17 -1.38777878078145e-17 0.724151545837958
+64 0 3 2 0 34 36 36 0.888888888888889 -0.0555555555555556 -5.55111512312578e-17 -1.38777878078145e-17 0.72395273727097
+64 0 3 2 0 35 36 36 0.888888888888889 -0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.723805016719017
+64 0 3 2 0 36 36 36 0.888888888888889 0 -5.55111512312578e-17 -1.38777878078145e-17 0.723733474251298
+64 0 3 2 0 37 36 36 0.888888888888889 0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.723805016719017
+64 0 3 2 0 38 36 36 0.888888888888889 0.0555555555555556 -5.55111512312578e-17 -1.38777878078145e-17 0.72395273727097
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 3 0 35 36 36 0.888888888888889 -0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.723805016719017
+64 0 3 3 0 36 36 36 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.723733474251298
+64 0 3 3 0 37 36 36 0.888888888888889 0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.723805016719017
+64 0 3 3 0 38 36 36 0.888888888888889 0.0555555555555555 -5.55111512312578e-17 -1.38777878078145e-17 0.72395273727097
+64 0 3 3 0 39 36 36 0.888888888888889 0.0833333333333333 -5.55111512312578e-17 -1.38777878078145e-17 0.724151545837958
+64 0 3 3 0 40 36 36 0.888888888888889 0.111111111111111 -5.55111512312578e-17 -1.38777878078145e-17 0.724342898925177
+64 0 3 3 0 41 36 36 0.888888888888889 0.138888888888889 -5.55111512312578e-17 -1.38777878078145e-17 0.724409709543024
+64 0 3 3 0 42 36 36 0.888888888888889 0.166666666666667 -5.55111512312578e-17 -1.38777878078145e-17 0.724502518106703
+64 0 3 3 0 43 36 36 0.888888888888889 0.194444444444444 -5.55111512312578e-17 -1.38777878078145e-17 0.724720854915558
+
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 0 0 0 40 40 1.33333333333333 -1 0.111111111111111 0.111111111111111 0.877480603359996
+96 0 0 0 0 8 40 40 1.33333333333333 -0.777777777777778 0.111111111111111 0.111111111111111 0.798008089475601
+96 0 0 0 0 16 40 40 1.33333333333333 -0.555555555555556 0.111111111111111 0.111111111111111 0.735090597558599
+96 0 0 0 0 24 40 40 1.33333333333333 -0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 0 0 32 40 40 1.33333333333333 -0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 48 40 40 1.33333333333333 0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 1 0 24 40 40 1.33333333333333 -0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 1 0 32 40 40 1.33333333333333 -0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 1 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 1 0 48 40 40 1.33333333333333 0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 1 0 56 40 40 1.33333333333333 0.555555555555556 0.111111111111111 0.111111111111111 0.735090597558599
+96 0 0 1 0 64 40 40 1.33333333333333 0.777777777777778 0.111111111111111 0.111111111111111 0.798008089475601
+96 0 0 1 0 72 40 40 1.33333333333333 1 0.111111111111111 0.111111111111111 0.877480603359996
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 2 0 0 40 40 1.33333333333333 -1 0.111111111111111 0.111111111111111 0.877480603359996
+96 0 0 2 0 8 40 40 1.33333333333333 -0.777777777777778 0.111111111111111 0.111111111111111 0.798008089475601
+96 0 0 2 0 16 40 40 1.33333333333333 -0.555555555555556 0.111111111111111 0.111111111111111 0.735090597558599
+96 0 0 2 0 24 40 40 1.33333333333333 -0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 2 0 32 40 40 1.33333333333333 -0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 2 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 2 0 48 40 40 1.33333333333333 0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 3 0 24 40 40 1.33333333333333 -0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 3 0 32 40 40 1.33333333333333 -0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 3 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 3 0 48 40 40 1.33333333333333 0.333333333333333 0.111111111111111 0.111111111111111 0.677899959110667
+96 0 0 3 0 56 40 40 1.33333333333333 0.555555555555556 0.111111111111111 0.111111111111111 0.735090597558599
+96 0 0 3 0 64 40 40 1.33333333333333 0.777777777777778 0.111111111111111 0.111111111111111 0.798008089475601
+96 0 0 3 0 72 40 40 1.33333333333333 1 0.111111111111111 0.111111111111111 0.877480603359996
+
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 0 0 8 36 36 1.33333333333333 -0.777777777777778 -5.55111512312578e-17 -9.86623976961809e-17 0.796688784792057
+96 0 1 0 0 12 36 36 1.33333333333333 -0.666666666666667 -5.55111512312578e-17 -9.86623976961809e-17 0.76190136189151
+96 0 1 0 0 16 36 36 1.33333333333333 -0.555555555555556 -5.55111512312578e-17 -9.86623976961809e-17 0.729928937348657
+96 0 1 0 0 20 36 36 1.33333333333333 -0.444444444444444 -5.55111512312578e-17 -9.86623976961809e-17 0.698215010923196
+96 0 1 0 0 24 36 36 1.33333333333333 -0.333333333333333 -5.55111512312578e-17 -9.86623976961809e-17 0.668908746807157
+96 0 1 0 0 28 36 36 1.33333333333333 -0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.641345710414296
+96 0 1 0 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.621410197839124
+96 0 1 0 0 36 36 36 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.61547287921812
+96 0 1 0 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.621410197839125
+96 0 1 0 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.641345710414296
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 1 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.621410197839124
+96 0 1 1 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.61547287921812
+96 0 1 1 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.621410197839125
+96 0 1 1 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.641345710414296
+96 0 1 1 0 48 36 36 1.33333333333333 0.333333333333333 -5.55111512312578e-17 -9.86623976961809e-17 0.668908746807157
+96 0 1 1 0 52 36 36 1.33333333333333 0.444444444444444 -5.55111512312578e-17 -9.86623976961809e-17 0.698215010923196
+96 0 1 1 0 56 36 36 1.33333333333333 0.555555555555555 -5.55111512312578e-17 -9.86623976961809e-17 0.729928937348657
+96 0 1 1 0 60 36 36 1.33333333333333 0.666666666666667 -5.55111512312578e-17 -9.86623976961809e-17 0.76190136189151
+96 0 1 1 0 64 36 36 1.33333333333333 0.777777777777778 -5.55111512312578e-17 -9.86623976961809e-17 0.796688784792057
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 2 0 8 36 36 1.33333333333333 -0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.796688784792057
+96 0 1 2 0 12 36 36 1.33333333333333 -0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.76190136189151
+96 0 1 2 0 16 36 36 1.33333333333333 -0.555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.729928937348657
+96 0 1 2 0 20 36 36 1.33333333333333 -0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.698215010923196
+96 0 1 2 0 24 36 36 1.33333333333333 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.668908746807157
+96 0 1 2 0 28 36 36 1.33333333333333 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+96 0 1 2 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839124
+96 0 1 2 0 36 36 36 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 2 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839125
+96 0 1 2 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 3 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839124
+96 0 1 3 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 3 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.621410197839125
+96 0 1 3 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.641345710414296
+96 0 1 3 0 48 36 36 1.33333333333333 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.668908746807157
+96 0 1 3 0 52 36 36 1.33333333333333 0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.698215010923196
+96 0 1 3 0 56 36 36 1.33333333333333 0.555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.729928937348657
+96 0 1 3 0 60 36 36 1.33333333333333 0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.76190136189151
+96 0 1 3 0 64 36 36 1.33333333333333 0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.796688784792057
+
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 0 0 22 36 36 1.33333333333333 -0.388888888888889 -5.55111512312578e-17 2.46655994240452e-17 0.683302448238139
+96 0 2 0 0 24 36 36 1.33333333333333 -0.333333333333333 -5.55111512312578e-17 2.46655994240452e-17 0.668908746807157
+96 0 2 0 0 26 36 36 1.33333333333333 -0.277777777777778 -5.55111512312578e-17 2.46655994240452e-17 0.654541556639422
+96 0 2 0 0 28 36 36 1.33333333333333 -0.222222222222222 -5.55111512312578e-17 2.46655994240452e-17 0.641345710414296
+96 0 2 0 0 30 36 36 1.33333333333333 -0.166666666666667 -5.55111512312578e-17 2.46655994240452e-17 0.630026346765969
+96 0 2 0 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.621410197839124
+96 0 2 0 0 34 36 36 1.33333333333333 -0.0555555555555555 -5.55111512312578e-17 2.46655994240452e-17 0.616824486578861
+96 0 2 0 0 36 36 36 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.61547287921812
+96 0 2 0 0 38 36 36 1.33333333333333 0.0555555555555556 -5.55111512312578e-17 2.46655994240452e-17 0.616824486578861
+96 0 2 0 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.621410197839125
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 1 0 34 36 36 1.33333333333333 -0.0555555555555556 -5.55111512312578e-17 2.46655994240452e-17 0.616824486578861
+96 0 2 1 0 36 36 36 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.61547287921812
+96 0 2 1 0 38 36 36 1.33333333333333 0.0555555555555555 -5.55111512312578e-17 2.46655994240452e-17 0.616824486578861
+96 0 2 1 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.621410197839125
+96 0 2 1 0 42 36 36 1.33333333333333 0.166666666666667 -5.55111512312578e-17 2.46655994240452e-17 0.63002634676597
+96 0 2 1 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 2.46655994240452e-17 0.641345710414296
+96 0 2 1 0 46 36 36 1.33333333333333 0.277777777777778 -5.55111512312578e-17 2.46655994240452e-17 0.654541556639422
+96 0 2 1 0 48 36 36 1.33333333333333 0.333333333333333 -5.55111512312578e-17 2.46655994240452e-17 0.668908746807157
+96 0 2 1 0 50 36 36 1.33333333333333 0.388888888888889 -5.55111512312578e-17 2.46655994240452e-17 0.683302448238139
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 2 0 22 36 36 1.33333333333333 -0.388888888888889 -5.55111512312578e-17 -2.77555756156289e-17 0.683302448238139
+96 0 2 2 0 24 36 36 1.33333333333333 -0.333333333333333 -5.55111512312578e-17 -2.77555756156289e-17 0.668908746807157
+96 0 2 2 0 26 36 36 1.33333333333333 -0.277777777777778 -5.55111512312578e-17 -2.77555756156289e-17 0.654541556639422
+96 0 2 2 0 28 36 36 1.33333333333333 -0.222222222222222 -5.55111512312578e-17 -2.77555756156289e-17 0.641345710414296
+96 0 2 2 0 30 36 36 1.33333333333333 -0.166666666666667 -5.55111512312578e-17 -2.77555756156289e-17 0.630026346765969
+96 0 2 2 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.621410197839124
+96 0 2 2 0 34 36 36 1.33333333333333 -0.0555555555555555 -5.55111512312578e-17 -2.77555756156289e-17 0.616824486578861
+96 0 2 2 0 36 36 36 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.61547287921812
+96 0 2 2 0 38 36 36 1.33333333333333 0.0555555555555556 -5.55111512312578e-17 -2.77555756156289e-17 0.616824486578861
+96 0 2 2 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.621410197839125
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 3 0 34 36 36 1.33333333333333 -0.0555555555555556 -5.55111512312578e-17 -2.77555756156289e-17 0.616824486578861
+96 0 2 3 0 36 36 36 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.61547287921812
+96 0 2 3 0 38 36 36 1.33333333333333 0.0555555555555555 -5.55111512312578e-17 -2.77555756156289e-17 0.616824486578861
+96 0 2 3 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.621410197839125
+96 0 2 3 0 42 36 36 1.33333333333333 0.166666666666667 -5.55111512312578e-17 -2.77555756156289e-17 0.63002634676597
+96 0 2 3 0 44 36 36 1.33333333333333 0.222222222222222 -5.55111512312578e-17 -2.77555756156289e-17 0.641345710414296
+96 0 2 3 0 46 36 36 1.33333333333333 0.277777777777778 -5.55111512312578e-17 -2.77555756156289e-17 0.654541556639422
+96 0 2 3 0 48 36 36 1.33333333333333 0.333333333333333 -5.55111512312578e-17 -2.77555756156289e-17 0.668908746807157
+96 0 2 3 0 50 36 36 1.33333333333333 0.388888888888889 -5.55111512312578e-17 -2.77555756156289e-17 0.683302448238139
+
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 0 0 29 36 36 1.33333333333333 -0.194444444444445 -5.55111512312578e-17 0 0.63539979750899
+96 0 3 0 0 30 36 36 1.33333333333333 -0.166666666666667 -5.55111512312578e-17 0 0.630026346765969
+96 0 3 0 0 31 36 36 1.33333333333333 -0.138888888888889 -5.55111512312578e-17 0 0.625297419028293
+96 0 3 0 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 0 0.621410197839124
+96 0 3 0 0 33 36 36 1.33333333333333 -0.0833333333333334 -5.55111512312578e-17 0 0.618663308361111
+96 0 3 0 0 34 36 36 1.33333333333333 -0.0555555555555556 -5.55111512312578e-17 0 0.616824486578861
+96 0 3 0 0 35 36 36 1.33333333333333 -0.0277777777777778 -5.55111512312578e-17 0 0.615777600484678
+96 0 3 0 0 36 36 36 1.33333333333333 0 -5.55111512312578e-17 0 0.61547287921812
+96 0 3 0 0 37 36 36 1.33333333333333 0.0277777777777778 -5.55111512312578e-17 0 0.615777600484678
+96 0 3 0 0 38 36 36 1.33333333333333 0.0555555555555556 -5.55111512312578e-17 0 0.616824486578861
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 1 0 35 36 36 1.33333333333333 -0.0277777777777778 -5.55111512312578e-17 0 0.615777600484678
+96 0 3 1 0 36 36 36 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0 0.61547287921812
+96 0 3 1 0 37 36 36 1.33333333333333 0.0277777777777778 -5.55111512312578e-17 0 0.615777600484678
+96 0 3 1 0 38 36 36 1.33333333333333 0.0555555555555555 -5.55111512312578e-17 0 0.616824486578861
+96 0 3 1 0 39 36 36 1.33333333333333 0.0833333333333333 -5.55111512312578e-17 0 0.618663308361111
+96 0 3 1 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 0 0.621410197839125
+96 0 3 1 0 41 36 36 1.33333333333333 0.138888888888889 -5.55111512312578e-17 0 0.625297419028293
+96 0 3 1 0 42 36 36 1.33333333333333 0.166666666666667 -5.55111512312578e-17 0 0.63002634676597
+96 0 3 1 0 43 36 36 1.33333333333333 0.194444444444444 -5.55111512312578e-17 0 0.63539979750899
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 2 0 29 36 36 1.33333333333333 -0.194444444444445 -5.55111512312578e-17 -1.38777878078145e-17 0.63539979750899
+96 0 3 2 0 30 36 36 1.33333333333333 -0.166666666666667 -5.55111512312578e-17 -1.38777878078145e-17 0.630026346765969
+96 0 3 2 0 31 36 36 1.33333333333333 -0.138888888888889 -5.55111512312578e-17 -1.38777878078145e-17 0.625297419028293
+96 0 3 2 0 32 36 36 1.33333333333333 -0.111111111111111 -5.55111512312578e-17 -1.38777878078145e-17 0.621410197839124
+96 0 3 2 0 33 36 36 1.33333333333333 -0.0833333333333334 -5.55111512312578e-17 -1.38777878078145e-17 0.618663308361111
+96 0 3 2 0 34 36 36 1.33333333333333 -0.0555555555555556 -5.55111512312578e-17 -1.38777878078145e-17 0.616824486578861
+96 0 3 2 0 35 36 36 1.33333333333333 -0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.615777600484678
+96 0 3 2 0 36 36 36 1.33333333333333 0 -5.55111512312578e-17 -1.38777878078145e-17 0.61547287921812
+96 0 3 2 0 37 36 36 1.33333333333333 0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.615777600484678
+96 0 3 2 0 38 36 36 1.33333333333333 0.0555555555555556 -5.55111512312578e-17 -1.38777878078145e-17 0.616824486578861
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 3 0 35 36 36 1.33333333333333 -0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.615777600484678
+96 0 3 3 0 36 36 36 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.61547287921812
+96 0 3 3 0 37 36 36 1.33333333333333 0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.615777600484678
+96 0 3 3 0 38 36 36 1.33333333333333 0.0555555555555555 -5.55111512312578e-17 -1.38777878078145e-17 0.616824486578861
+96 0 3 3 0 39 36 36 1.33333333333333 0.0833333333333333 -5.55111512312578e-17 -1.38777878078145e-17 0.618663308361111
+96 0 3 3 0 40 36 36 1.33333333333333 0.111111111111111 -5.55111512312578e-17 -1.38777878078145e-17 0.621410197839125
+96 0 3 3 0 41 36 36 1.33333333333333 0.138888888888889 -5.55111512312578e-17 -1.38777878078145e-17 0.625297419028293
+96 0 3 3 0 42 36 36 1.33333333333333 0.166666666666667 -5.55111512312578e-17 -1.38777878078145e-17 0.63002634676597
+96 0 3 3 0 43 36 36 1.33333333333333 0.194444444444444 -5.55111512312578e-17 -1.38777878078145e-17 0.63539979750899
+
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 0 0 0 40 40 1.77777777777778 -1 0.111111111111111 0.111111111111111 0.873700996777018
+128 0 0 0 0 8 40 40 1.77777777777778 -0.777777777777778 0.111111111111111 0.111111111111111 0.859471717622308
+128 0 0 0 0 16 40 40 1.77777777777778 -0.555555555555556 0.111111111111111 0.111111111111111 0.863004424640887
+128 0 0 0 0 24 40 40 1.77777777777778 -0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 0 0 32 40 40 1.77777777777778 -0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 48 40 40 1.77777777777778 0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 1 0 24 40 40 1.77777777777778 -0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 1 0 32 40 40 1.77777777777778 -0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 1 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 1 0 48 40 40 1.77777777777778 0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 1 0 56 40 40 1.77777777777778 0.555555555555556 0.111111111111111 0.111111111111111 0.863004424640887
+128 0 0 1 0 64 40 40 1.77777777777778 0.777777777777778 0.111111111111111 0.111111111111111 0.859471717622308
+128 0 0 1 0 72 40 40 1.77777777777778 1 0.111111111111111 0.111111111111111 0.873700996777018
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 2 0 0 40 40 1.77777777777778 -1 0.111111111111111 0.111111111111111 0.873700996777018
+128 0 0 2 0 8 40 40 1.77777777777778 -0.777777777777778 0.111111111111111 0.111111111111111 0.859471717622308
+128 0 0 2 0 16 40 40 1.77777777777778 -0.555555555555556 0.111111111111111 0.111111111111111 0.863004424640887
+128 0 0 2 0 24 40 40 1.77777777777778 -0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 2 0 32 40 40 1.77777777777778 -0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 2 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 2 0 48 40 40 1.77777777777778 0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 3 0 24 40 40 1.77777777777778 -0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 3 0 32 40 40 1.77777777777778 -0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 3 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 3 0 48 40 40 1.77777777777778 0.333333333333333 0.111111111111111 0.111111111111111 0.883486952153519
+128 0 0 3 0 56 40 40 1.77777777777778 0.555555555555556 0.111111111111111 0.111111111111111 0.863004424640887
+128 0 0 3 0 64 40 40 1.77777777777778 0.777777777777778 0.111111111111111 0.111111111111111 0.859471717622308
+128 0 0 3 0 72 40 40 1.77777777777778 1 0.111111111111111 0.111111111111111 0.873700996777018
+
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 0 0 8 36 36 1.77777777777778 -0.777777777777778 -5.55111512312578e-17 -9.86623976961809e-17 0.862653663591007
+128 0 1 0 0 12 36 36 1.77777777777778 -0.666666666666667 -5.55111512312578e-17 -9.86623976961809e-17 0.862560028606905
+128 0 1 0 0 16 36 36 1.77777777777778 -0.555555555555556 -5.55111512312578e-17 -9.86623976961809e-17 0.866965759785718
+128 0 1 0 0 20 36 36 1.77777777777778 -0.444444444444444 -5.55111512312578e-17 -9.86623976961809e-17 0.876167092595071
+128 0 1 0 0 24 36 36 1.77777777777778 -0.333333333333333 -5.55111512312578e-17 -9.86623976961809e-17 0.889185421864397
+128 0 1 0 0 28 36 36 1.77777777777778 -0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.907998184681559
+128 0 1 0 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.924033489738888
+128 0 1 0 0 36 36 36 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.928389498223199
+128 0 1 0 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.924033489738888
+128 0 1 0 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.90799818468156
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 1 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.924033489738888
+128 0 1 1 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.928389498223199
+128 0 1 1 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -9.86623976961809e-17 0.924033489738888
+128 0 1 1 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -9.86623976961809e-17 0.90799818468156
+128 0 1 1 0 48 36 36 1.77777777777778 0.333333333333333 -5.55111512312578e-17 -9.86623976961809e-17 0.889185421864397
+128 0 1 1 0 52 36 36 1.77777777777778 0.444444444444444 -5.55111512312578e-17 -9.86623976961809e-17 0.876167092595071
+128 0 1 1 0 56 36 36 1.77777777777778 0.555555555555555 -5.55111512312578e-17 -9.86623976961809e-17 0.866965759785718
+128 0 1 1 0 60 36 36 1.77777777777778 0.666666666666667 -5.55111512312578e-17 -9.86623976961809e-17 0.862560028606905
+128 0 1 1 0 64 36 36 1.77777777777778 0.777777777777778 -5.55111512312578e-17 -9.86623976961809e-17 0.862653663591007
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 2 0 8 36 36 1.77777777777778 -0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.862653663591007
+128 0 1 2 0 12 36 36 1.77777777777778 -0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.862560028606905
+128 0 1 2 0 16 36 36 1.77777777777778 -0.555555555555556 -5.55111512312578e-17 -5.55111512312578e-17 0.866965759785718
+128 0 1 2 0 20 36 36 1.77777777777778 -0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.876167092595071
+128 0 1 2 0 24 36 36 1.77777777777778 -0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.889185421864397
+128 0 1 2 0 28 36 36 1.77777777777778 -0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.907998184681559
+128 0 1 2 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 1 2 0 36 36 36 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 2 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 1 2 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.90799818468156
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 3 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 1 3 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 3 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -5.55111512312578e-17 0.924033489738888
+128 0 1 3 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -5.55111512312578e-17 0.90799818468156
+128 0 1 3 0 48 36 36 1.77777777777778 0.333333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.889185421864397
+128 0 1 3 0 52 36 36 1.77777777777778 0.444444444444444 -5.55111512312578e-17 -5.55111512312578e-17 0.876167092595071
+128 0 1 3 0 56 36 36 1.77777777777778 0.555555555555555 -5.55111512312578e-17 -5.55111512312578e-17 0.866965759785718
+128 0 1 3 0 60 36 36 1.77777777777778 0.666666666666667 -5.55111512312578e-17 -5.55111512312578e-17 0.862560028606905
+128 0 1 3 0 64 36 36 1.77777777777778 0.777777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.862653663591007
+
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 0 0 22 36 36 1.77777777777778 -0.388888888888889 -5.55111512312578e-17 2.46655994240452e-17 0.882075542854246
+128 0 2 0 0 24 36 36 1.77777777777778 -0.333333333333333 -5.55111512312578e-17 2.46655994240452e-17 0.889185421864397
+128 0 2 0 0 26 36 36 1.77777777777778 -0.277777777777778 -5.55111512312578e-17 2.46655994240452e-17 0.898403242286228
+128 0 2 0 0 28 36 36 1.77777777777778 -0.222222222222222 -5.55111512312578e-17 2.46655994240452e-17 0.907998184681559
+128 0 2 0 0 30 36 36 1.77777777777778 -0.166666666666667 -5.55111512312578e-17 2.46655994240452e-17 0.916919384356027
+128 0 2 0 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.924033489738888
+128 0 2 0 0 34 36 36 1.77777777777778 -0.0555555555555555 -5.55111512312578e-17 2.46655994240452e-17 0.927485951077396
+128 0 2 0 0 36 36 36 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.928389498223199
+128 0 2 0 0 38 36 36 1.77777777777778 0.0555555555555556 -5.55111512312578e-17 2.46655994240452e-17 0.927485951077396
+128 0 2 0 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.924033489738888
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 1 0 34 36 36 1.77777777777778 -0.0555555555555556 -5.55111512312578e-17 2.46655994240452e-17 0.927485951077396
+128 0 2 1 0 36 36 36 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.928389498223199
+128 0 2 1 0 38 36 36 1.77777777777778 0.0555555555555555 -5.55111512312578e-17 2.46655994240452e-17 0.927485951077396
+128 0 2 1 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 2.46655994240452e-17 0.924033489738888
+128 0 2 1 0 42 36 36 1.77777777777778 0.166666666666667 -5.55111512312578e-17 2.46655994240452e-17 0.916919384356027
+128 0 2 1 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 2.46655994240452e-17 0.90799818468156
+128 0 2 1 0 46 36 36 1.77777777777778 0.277777777777778 -5.55111512312578e-17 2.46655994240452e-17 0.898403242286228
+128 0 2 1 0 48 36 36 1.77777777777778 0.333333333333333 -5.55111512312578e-17 2.46655994240452e-17 0.889185421864397
+128 0 2 1 0 50 36 36 1.77777777777778 0.388888888888889 -5.55111512312578e-17 2.46655994240452e-17 0.882075542854246
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 2 0 22 36 36 1.77777777777778 -0.388888888888889 -5.55111512312578e-17 -2.77555756156289e-17 0.882075542854246
+128 0 2 2 0 24 36 36 1.77777777777778 -0.333333333333333 -5.55111512312578e-17 -2.77555756156289e-17 0.889185421864397
+128 0 2 2 0 26 36 36 1.77777777777778 -0.277777777777778 -5.55111512312578e-17 -2.77555756156289e-17 0.898403242286228
+128 0 2 2 0 28 36 36 1.77777777777778 -0.222222222222222 -5.55111512312578e-17 -2.77555756156289e-17 0.907998184681559
+128 0 2 2 0 30 36 36 1.77777777777778 -0.166666666666667 -5.55111512312578e-17 -2.77555756156289e-17 0.916919384356027
+128 0 2 2 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.924033489738888
+128 0 2 2 0 34 36 36 1.77777777777778 -0.0555555555555555 -5.55111512312578e-17 -2.77555756156289e-17 0.927485951077396
+128 0 2 2 0 36 36 36 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.928389498223199
+128 0 2 2 0 38 36 36 1.77777777777778 0.0555555555555556 -5.55111512312578e-17 -2.77555756156289e-17 0.927485951077396
+128 0 2 2 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.924033489738888
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 3 0 34 36 36 1.77777777777778 -0.0555555555555556 -5.55111512312578e-17 -2.77555756156289e-17 0.927485951077396
+128 0 2 3 0 36 36 36 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.928389498223199
+128 0 2 3 0 38 36 36 1.77777777777778 0.0555555555555555 -5.55111512312578e-17 -2.77555756156289e-17 0.927485951077396
+128 0 2 3 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -2.77555756156289e-17 0.924033489738888
+128 0 2 3 0 42 36 36 1.77777777777778 0.166666666666667 -5.55111512312578e-17 -2.77555756156289e-17 0.916919384356027
+128 0 2 3 0 44 36 36 1.77777777777778 0.222222222222222 -5.55111512312578e-17 -2.77555756156289e-17 0.90799818468156
+128 0 2 3 0 46 36 36 1.77777777777778 0.277777777777778 -5.55111512312578e-17 -2.77555756156289e-17 0.898403242286228
+128 0 2 3 0 48 36 36 1.77777777777778 0.333333333333333 -5.55111512312578e-17 -2.77555756156289e-17 0.889185421864397
+128 0 2 3 0 50 36 36 1.77777777777778 0.388888888888889 -5.55111512312578e-17 -2.77555756156289e-17 0.882075542854246
+
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 0 0 29 36 36 1.77777777777778 -0.194444444444445 -5.55111512312578e-17 0 0.912613836832073
+128 0 3 0 0 30 36 36 1.77777777777778 -0.166666666666667 -5.55111512312578e-17 0 0.916919384356027
+128 0 3 0 0 31 36 36 1.77777777777778 -0.138888888888889 -5.55111512312578e-17 0 0.920818233193455
+128 0 3 0 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 0 0.924033489738888
+128 0 3 0 0 33 36 36 1.77777777777778 -0.0833333333333334 -5.55111512312578e-17 0 0.926147880297958
+128 0 3 0 0 34 36 36 1.77777777777778 -0.0555555555555556 -5.55111512312578e-17 0 0.927485951077396
+128 0 3 0 0 35 36 36 1.77777777777778 -0.0277777777777778 -5.55111512312578e-17 0 0.928209975180567
+128 0 3 0 0 36 36 36 1.77777777777778 0 -5.55111512312578e-17 0 0.928389498223199
+128 0 3 0 0 37 36 36 1.77777777777778 0.0277777777777778 -5.55111512312578e-17 0 0.928209975180567
+128 0 3 0 0 38 36 36 1.77777777777778 0.0555555555555556 -5.55111512312578e-17 0 0.927485951077396
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 1 0 35 36 36 1.77777777777778 -0.0277777777777778 -5.55111512312578e-17 0 0.928209975180567
+128 0 3 1 0 36 36 36 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0 0.928389498223199
+128 0 3 1 0 37 36 36 1.77777777777778 0.0277777777777778 -5.55111512312578e-17 0 0.928209975180567
+128 0 3 1 0 38 36 36 1.77777777777778 0.0555555555555555 -5.55111512312578e-17 0 0.927485951077396
+128 0 3 1 0 39 36 36 1.77777777777778 0.0833333333333333 -5.55111512312578e-17 0 0.926147880297958
+128 0 3 1 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 0 0.924033489738888
+128 0 3 1 0 41 36 36 1.77777777777778 0.138888888888889 -5.55111512312578e-17 0 0.920818233193455
+128 0 3 1 0 42 36 36 1.77777777777778 0.166666666666667 -5.55111512312578e-17 0 0.916919384356027
+128 0 3 1 0 43 36 36 1.77777777777778 0.194444444444444 -5.55111512312578e-17 0 0.912613836832073
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 2 0 29 36 36 1.77777777777778 -0.194444444444445 -5.55111512312578e-17 -1.38777878078145e-17 0.912613836832073
+128 0 3 2 0 30 36 36 1.77777777777778 -0.166666666666667 -5.55111512312578e-17 -1.38777878078145e-17 0.916919384356027
+128 0 3 2 0 31 36 36 1.77777777777778 -0.138888888888889 -5.55111512312578e-17 -1.38777878078145e-17 0.920818233193455
+128 0 3 2 0 32 36 36 1.77777777777778 -0.111111111111111 -5.55111512312578e-17 -1.38777878078145e-17 0.924033489738888
+128 0 3 2 0 33 36 36 1.77777777777778 -0.0833333333333334 -5.55111512312578e-17 -1.38777878078145e-17 0.926147880297958
+128 0 3 2 0 34 36 36 1.77777777777778 -0.0555555555555556 -5.55111512312578e-17 -1.38777878078145e-17 0.927485951077396
+128 0 3 2 0 35 36 36 1.77777777777778 -0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.928209975180567
+128 0 3 2 0 36 36 36 1.77777777777778 0 -5.55111512312578e-17 -1.38777878078145e-17 0.928389498223199
+128 0 3 2 0 37 36 36 1.77777777777778 0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.928209975180567
+128 0 3 2 0 38 36 36 1.77777777777778 0.0555555555555556 -5.55111512312578e-17 -1.38777878078145e-17 0.927485951077396
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 3 0 35 36 36 1.77777777777778 -0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.928209975180567
+128 0 3 3 0 36 36 36 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.928389498223199
+128 0 3 3 0 37 36 36 1.77777777777778 0.0277777777777778 -5.55111512312578e-17 -1.38777878078145e-17 0.928209975180567
+128 0 3 3 0 38 36 36 1.77777777777778 0.0555555555555555 -5.55111512312578e-17 -1.38777878078145e-17 0.927485951077396
+128 0 3 3 0 39 36 36 1.77777777777778 0.0833333333333333 -5.55111512312578e-17 -1.38777878078145e-17 0.926147880297958
+128 0 3 3 0 40 36 36 1.77777777777778 0.111111111111111 -5.55111512312578e-17 -1.38777878078145e-17 0.924033489738888
+128 0 3 3 0 41 36 36 1.77777777777778 0.138888888888889 -5.55111512312578e-17 -1.38777878078145e-17 0.920818233193455
+128 0 3 3 0 42 36 36 1.77777777777778 0.166666666666667 -5.55111512312578e-17 -1.38777878078145e-17 0.916919384356027
+128 0 3 3 0 43 36 36 1.77777777777778 0.194444444444444 -5.55111512312578e-17 -1.38777878078145e-17 0.912613836832073
+
+
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.y.asc b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.y.asc
new file mode 100644
index 000000000..acc2fbf34
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.y.asc
@@ -0,0 +1,866 @@
+# WAVETOY::phi y (phi)
+#
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 0 0 40 0 40 0.888888888888889 0.111111111111111 -1 0.111111111111111 0.873700996777018
+64 0 0 0 0 40 8 40 0.888888888888889 0.111111111111111 -0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 0 0 40 16 40 0.888888888888889 0.111111111111111 -0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 0 0 40 24 40 0.888888888888889 0.111111111111111 -0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 0 0 40 32 40 0.888888888888889 0.111111111111111 -0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 48 40 0.888888888888889 0.111111111111111 0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 0 0 40 56 40 0.888888888888889 0.111111111111111 0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 0 0 40 64 40 0.888888888888889 0.111111111111111 0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 0 0 40 72 40 0.888888888888889 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 1 0 40 0 40 0.888888888888889 0.111111111111111 -1 0.111111111111111 0.873700996777018
+64 0 0 1 0 40 8 40 0.888888888888889 0.111111111111111 -0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 1 0 40 16 40 0.888888888888889 0.111111111111111 -0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 1 0 40 24 40 0.888888888888889 0.111111111111111 -0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 1 0 40 32 40 0.888888888888889 0.111111111111111 -0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 1 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 1 0 40 48 40 0.888888888888889 0.111111111111111 0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 1 0 40 56 40 0.888888888888889 0.111111111111111 0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 1 0 40 64 40 0.888888888888889 0.111111111111111 0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 1 0 40 72 40 0.888888888888889 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 2 0 40 0 40 0.888888888888889 0.111111111111111 -1 0.111111111111111 0.873700996777018
+64 0 0 2 0 40 8 40 0.888888888888889 0.111111111111111 -0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 2 0 40 16 40 0.888888888888889 0.111111111111111 -0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 2 0 40 24 40 0.888888888888889 0.111111111111111 -0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 2 0 40 32 40 0.888888888888889 0.111111111111111 -0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 2 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 2 0 40 48 40 0.888888888888889 0.111111111111111 0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 2 0 40 56 40 0.888888888888889 0.111111111111111 0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 2 0 40 64 40 0.888888888888889 0.111111111111111 0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 2 0 40 72 40 0.888888888888889 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 3 0 40 0 40 0.888888888888889 0.111111111111111 -1 0.111111111111111 0.873700996777018
+64 0 0 3 0 40 8 40 0.888888888888889 0.111111111111111 -0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 3 0 40 16 40 0.888888888888889 0.111111111111111 -0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 3 0 40 24 40 0.888888888888889 0.111111111111111 -0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 3 0 40 32 40 0.888888888888889 0.111111111111111 -0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 3 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 3 0 40 48 40 0.888888888888889 0.111111111111111 0.333333333333333 0.111111111111111 0.730294733882952
+64 0 0 3 0 40 56 40 0.888888888888889 0.111111111111111 0.555555555555556 0.111111111111111 0.756699260944861
+64 0 0 3 0 40 64 40 0.888888888888889 0.111111111111111 0.777777777777778 0.111111111111111 0.807676282684182
+64 0 0 3 0 40 72 40 0.888888888888889 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 0 0 36 8 36 0.888888888888889 -9.86623976961809e-17 -0.777777777777778 -9.86623976961809e-17 0.808379332677938
+64 0 1 0 0 36 12 36 0.888888888888889 -9.86623976961809e-17 -0.666666666666667 -9.86623976961809e-17 0.779665123251562
+64 0 1 0 0 36 16 36 0.888888888888889 -9.86623976961809e-17 -0.555555555555556 -9.86623976961809e-17 0.756097245006156
+64 0 1 0 0 36 20 36 0.888888888888889 -9.86623976961809e-17 -0.444444444444444 -9.86623976961809e-17 0.739694852518638
+64 0 1 0 0 36 24 36 0.888888888888889 -9.86623976961809e-17 -0.333333333333333 -9.86623976961809e-17 0.729218296316213
+64 0 1 0 0 36 28 36 0.888888888888889 -9.86623976961809e-17 -0.222222222222222 -9.86623976961809e-17 0.725100663327575
+64 0 1 0 0 36 32 36 0.888888888888889 -9.86623976961809e-17 -0.111111111111111 -9.86623976961809e-17 0.724342898925177
+64 0 1 0 0 36 36 36 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.723733474251298
+64 0 1 0 0 36 40 36 0.888888888888889 -9.86623976961809e-17 0.111111111111111 -9.86623976961809e-17 0.724342898925177
+64 0 1 0 0 36 44 36 0.888888888888889 -9.86623976961809e-17 0.222222222222222 -9.86623976961809e-17 0.725100663327574
+64 0 1 0 0 36 48 36 0.888888888888889 -9.86623976961809e-17 0.333333333333333 -9.86623976961809e-17 0.729218296316213
+64 0 1 0 0 36 52 36 0.888888888888889 -9.86623976961809e-17 0.444444444444444 -9.86623976961809e-17 0.739694852518638
+64 0 1 0 0 36 56 36 0.888888888888889 -9.86623976961809e-17 0.555555555555555 -9.86623976961809e-17 0.756097245006155
+64 0 1 0 0 36 60 36 0.888888888888889 -9.86623976961809e-17 0.666666666666667 -9.86623976961809e-17 0.779665123251561
+64 0 1 0 0 36 64 36 0.888888888888889 -9.86623976961809e-17 0.777777777777778 -9.86623976961809e-17 0.808379332677938
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 1 0 36 8 36 0.888888888888889 -5.55111512312578e-17 -0.777777777777778 -9.86623976961809e-17 0.808379332677938
+64 0 1 1 0 36 12 36 0.888888888888889 -5.55111512312578e-17 -0.666666666666667 -9.86623976961809e-17 0.779665123251562
+64 0 1 1 0 36 16 36 0.888888888888889 -5.55111512312578e-17 -0.555555555555556 -9.86623976961809e-17 0.756097245006156
+64 0 1 1 0 36 20 36 0.888888888888889 -5.55111512312578e-17 -0.444444444444444 -9.86623976961809e-17 0.739694852518638
+64 0 1 1 0 36 24 36 0.888888888888889 -5.55111512312578e-17 -0.333333333333333 -9.86623976961809e-17 0.729218296316213
+64 0 1 1 0 36 28 36 0.888888888888889 -5.55111512312578e-17 -0.222222222222222 -9.86623976961809e-17 0.725100663327575
+64 0 1 1 0 36 32 36 0.888888888888889 -5.55111512312578e-17 -0.111111111111111 -9.86623976961809e-17 0.724342898925177
+64 0 1 1 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.723733474251298
+64 0 1 1 0 36 40 36 0.888888888888889 -5.55111512312578e-17 0.111111111111111 -9.86623976961809e-17 0.724342898925177
+64 0 1 1 0 36 44 36 0.888888888888889 -5.55111512312578e-17 0.222222222222222 -9.86623976961809e-17 0.725100663327574
+64 0 1 1 0 36 48 36 0.888888888888889 -5.55111512312578e-17 0.333333333333333 -9.86623976961809e-17 0.729218296316213
+64 0 1 1 0 36 52 36 0.888888888888889 -5.55111512312578e-17 0.444444444444444 -9.86623976961809e-17 0.739694852518638
+64 0 1 1 0 36 56 36 0.888888888888889 -5.55111512312578e-17 0.555555555555555 -9.86623976961809e-17 0.756097245006155
+64 0 1 1 0 36 60 36 0.888888888888889 -5.55111512312578e-17 0.666666666666667 -9.86623976961809e-17 0.779665123251561
+64 0 1 1 0 36 64 36 0.888888888888889 -5.55111512312578e-17 0.777777777777778 -9.86623976961809e-17 0.808379332677938
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 2 0 36 8 36 0.888888888888889 -9.86623976961809e-17 -0.777777777777778 -5.55111512312578e-17 0.808379332677938
+64 0 1 2 0 36 12 36 0.888888888888889 -9.86623976961809e-17 -0.666666666666667 -5.55111512312578e-17 0.779665123251562
+64 0 1 2 0 36 16 36 0.888888888888889 -9.86623976961809e-17 -0.555555555555556 -5.55111512312578e-17 0.756097245006156
+64 0 1 2 0 36 20 36 0.888888888888889 -9.86623976961809e-17 -0.444444444444444 -5.55111512312578e-17 0.739694852518638
+64 0 1 2 0 36 24 36 0.888888888888889 -9.86623976961809e-17 -0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 1 2 0 36 28 36 0.888888888888889 -9.86623976961809e-17 -0.222222222222222 -5.55111512312578e-17 0.725100663327575
+64 0 1 2 0 36 32 36 0.888888888888889 -9.86623976961809e-17 -0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 1 2 0 36 36 36 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 2 0 36 40 36 0.888888888888889 -9.86623976961809e-17 0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 1 2 0 36 44 36 0.888888888888889 -9.86623976961809e-17 0.222222222222222 -5.55111512312578e-17 0.725100663327574
+64 0 1 2 0 36 48 36 0.888888888888889 -9.86623976961809e-17 0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 1 2 0 36 52 36 0.888888888888889 -9.86623976961809e-17 0.444444444444444 -5.55111512312578e-17 0.739694852518638
+64 0 1 2 0 36 56 36 0.888888888888889 -9.86623976961809e-17 0.555555555555555 -5.55111512312578e-17 0.756097245006155
+64 0 1 2 0 36 60 36 0.888888888888889 -9.86623976961809e-17 0.666666666666667 -5.55111512312578e-17 0.779665123251561
+64 0 1 2 0 36 64 36 0.888888888888889 -9.86623976961809e-17 0.777777777777778 -5.55111512312578e-17 0.808379332677938
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 3 0 36 8 36 0.888888888888889 -5.55111512312578e-17 -0.777777777777778 -5.55111512312578e-17 0.808379332677938
+64 0 1 3 0 36 12 36 0.888888888888889 -5.55111512312578e-17 -0.666666666666667 -5.55111512312578e-17 0.779665123251562
+64 0 1 3 0 36 16 36 0.888888888888889 -5.55111512312578e-17 -0.555555555555556 -5.55111512312578e-17 0.756097245006156
+64 0 1 3 0 36 20 36 0.888888888888889 -5.55111512312578e-17 -0.444444444444444 -5.55111512312578e-17 0.739694852518638
+64 0 1 3 0 36 24 36 0.888888888888889 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 1 3 0 36 28 36 0.888888888888889 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.725100663327575
+64 0 1 3 0 36 32 36 0.888888888888889 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 1 3 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 3 0 36 40 36 0.888888888888889 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.724342898925177
+64 0 1 3 0 36 44 36 0.888888888888889 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.725100663327574
+64 0 1 3 0 36 48 36 0.888888888888889 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.729218296316213
+64 0 1 3 0 36 52 36 0.888888888888889 -5.55111512312578e-17 0.444444444444444 -5.55111512312578e-17 0.739694852518638
+64 0 1 3 0 36 56 36 0.888888888888889 -5.55111512312578e-17 0.555555555555555 -5.55111512312578e-17 0.756097245006155
+64 0 1 3 0 36 60 36 0.888888888888889 -5.55111512312578e-17 0.666666666666667 -5.55111512312578e-17 0.779665123251561
+64 0 1 3 0 36 64 36 0.888888888888889 -5.55111512312578e-17 0.777777777777778 -5.55111512312578e-17 0.808379332677938
+
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 0 0 36 22 36 0.888888888888889 2.46655994240452e-17 -0.388888888888889 2.46655994240452e-17 0.733688776948746
+64 0 2 0 0 36 24 36 0.888888888888889 2.46655994240452e-17 -0.333333333333333 2.46655994240452e-17 0.729218296316213
+64 0 2 0 0 36 26 36 0.888888888888889 2.46655994240452e-17 -0.277777777777778 2.46655994240452e-17 0.726552055334392
+64 0 2 0 0 36 28 36 0.888888888888889 2.46655994240452e-17 -0.222222222222222 2.46655994240452e-17 0.725100663327575
+64 0 2 0 0 36 30 36 0.888888888888889 2.46655994240452e-17 -0.166666666666667 2.46655994240452e-17 0.724502518106703
+64 0 2 0 0 36 32 36 0.888888888888889 2.46655994240452e-17 -0.111111111111111 2.46655994240452e-17 0.724342898925177
+64 0 2 0 0 36 34 36 0.888888888888889 2.46655994240452e-17 -0.0555555555555556 2.46655994240452e-17 0.72395273727097
+64 0 2 0 0 36 36 36 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.723733474251298
+64 0 2 0 0 36 38 36 0.888888888888889 2.46655994240452e-17 0.0555555555555555 2.46655994240452e-17 0.72395273727097
+64 0 2 0 0 36 40 36 0.888888888888889 2.46655994240452e-17 0.111111111111111 2.46655994240452e-17 0.724342898925177
+64 0 2 0 0 36 42 36 0.888888888888889 2.46655994240452e-17 0.166666666666667 2.46655994240452e-17 0.724502518106703
+64 0 2 0 0 36 44 36 0.888888888888889 2.46655994240452e-17 0.222222222222222 2.46655994240452e-17 0.725100663327574
+64 0 2 0 0 36 46 36 0.888888888888889 2.46655994240452e-17 0.277777777777778 2.46655994240452e-17 0.726552055334392
+64 0 2 0 0 36 48 36 0.888888888888889 2.46655994240452e-17 0.333333333333333 2.46655994240452e-17 0.729218296316213
+64 0 2 0 0 36 50 36 0.888888888888889 2.46655994240452e-17 0.388888888888889 2.46655994240452e-17 0.733688776948745
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 1 0 36 22 36 0.888888888888889 -2.77555756156289e-17 -0.388888888888889 2.46655994240452e-17 0.733688776948746
+64 0 2 1 0 36 24 36 0.888888888888889 -2.77555756156289e-17 -0.333333333333333 2.46655994240452e-17 0.729218296316213
+64 0 2 1 0 36 26 36 0.888888888888889 -2.77555756156289e-17 -0.277777777777778 2.46655994240452e-17 0.726552055334392
+64 0 2 1 0 36 28 36 0.888888888888889 -2.77555756156289e-17 -0.222222222222222 2.46655994240452e-17 0.725100663327575
+64 0 2 1 0 36 30 36 0.888888888888889 -2.77555756156289e-17 -0.166666666666667 2.46655994240452e-17 0.724502518106703
+64 0 2 1 0 36 32 36 0.888888888888889 -2.77555756156289e-17 -0.111111111111111 2.46655994240452e-17 0.724342898925177
+64 0 2 1 0 36 34 36 0.888888888888889 -2.77555756156289e-17 -0.0555555555555556 2.46655994240452e-17 0.72395273727097
+64 0 2 1 0 36 36 36 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.723733474251298
+64 0 2 1 0 36 38 36 0.888888888888889 -2.77555756156289e-17 0.0555555555555555 2.46655994240452e-17 0.72395273727097
+64 0 2 1 0 36 40 36 0.888888888888889 -2.77555756156289e-17 0.111111111111111 2.46655994240452e-17 0.724342898925177
+64 0 2 1 0 36 42 36 0.888888888888889 -2.77555756156289e-17 0.166666666666667 2.46655994240452e-17 0.724502518106703
+64 0 2 1 0 36 44 36 0.888888888888889 -2.77555756156289e-17 0.222222222222222 2.46655994240452e-17 0.725100663327574
+64 0 2 1 0 36 46 36 0.888888888888889 -2.77555756156289e-17 0.277777777777778 2.46655994240452e-17 0.726552055334392
+64 0 2 1 0 36 48 36 0.888888888888889 -2.77555756156289e-17 0.333333333333333 2.46655994240452e-17 0.729218296316213
+64 0 2 1 0 36 50 36 0.888888888888889 -2.77555756156289e-17 0.388888888888889 2.46655994240452e-17 0.733688776948745
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 2 0 36 22 36 0.888888888888889 2.46655994240452e-17 -0.388888888888889 -2.77555756156289e-17 0.733688776948746
+64 0 2 2 0 36 24 36 0.888888888888889 2.46655994240452e-17 -0.333333333333333 -2.77555756156289e-17 0.729218296316213
+64 0 2 2 0 36 26 36 0.888888888888889 2.46655994240452e-17 -0.277777777777778 -2.77555756156289e-17 0.726552055334392
+64 0 2 2 0 36 28 36 0.888888888888889 2.46655994240452e-17 -0.222222222222222 -2.77555756156289e-17 0.725100663327575
+64 0 2 2 0 36 30 36 0.888888888888889 2.46655994240452e-17 -0.166666666666667 -2.77555756156289e-17 0.724502518106703
+64 0 2 2 0 36 32 36 0.888888888888889 2.46655994240452e-17 -0.111111111111111 -2.77555756156289e-17 0.724342898925177
+64 0 2 2 0 36 34 36 0.888888888888889 2.46655994240452e-17 -0.0555555555555556 -2.77555756156289e-17 0.72395273727097
+64 0 2 2 0 36 36 36 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.723733474251298
+64 0 2 2 0 36 38 36 0.888888888888889 2.46655994240452e-17 0.0555555555555555 -2.77555756156289e-17 0.72395273727097
+64 0 2 2 0 36 40 36 0.888888888888889 2.46655994240452e-17 0.111111111111111 -2.77555756156289e-17 0.724342898925177
+64 0 2 2 0 36 42 36 0.888888888888889 2.46655994240452e-17 0.166666666666667 -2.77555756156289e-17 0.724502518106703
+64 0 2 2 0 36 44 36 0.888888888888889 2.46655994240452e-17 0.222222222222222 -2.77555756156289e-17 0.725100663327574
+64 0 2 2 0 36 46 36 0.888888888888889 2.46655994240452e-17 0.277777777777778 -2.77555756156289e-17 0.726552055334392
+64 0 2 2 0 36 48 36 0.888888888888889 2.46655994240452e-17 0.333333333333333 -2.77555756156289e-17 0.729218296316213
+64 0 2 2 0 36 50 36 0.888888888888889 2.46655994240452e-17 0.388888888888889 -2.77555756156289e-17 0.733688776948745
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 3 0 36 22 36 0.888888888888889 -2.77555756156289e-17 -0.388888888888889 -2.77555756156289e-17 0.733688776948746
+64 0 2 3 0 36 24 36 0.888888888888889 -2.77555756156289e-17 -0.333333333333333 -2.77555756156289e-17 0.729218296316213
+64 0 2 3 0 36 26 36 0.888888888888889 -2.77555756156289e-17 -0.277777777777778 -2.77555756156289e-17 0.726552055334392
+64 0 2 3 0 36 28 36 0.888888888888889 -2.77555756156289e-17 -0.222222222222222 -2.77555756156289e-17 0.725100663327575
+64 0 2 3 0 36 30 36 0.888888888888889 -2.77555756156289e-17 -0.166666666666667 -2.77555756156289e-17 0.724502518106703
+64 0 2 3 0 36 32 36 0.888888888888889 -2.77555756156289e-17 -0.111111111111111 -2.77555756156289e-17 0.724342898925177
+64 0 2 3 0 36 34 36 0.888888888888889 -2.77555756156289e-17 -0.0555555555555556 -2.77555756156289e-17 0.72395273727097
+64 0 2 3 0 36 36 36 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.723733474251298
+64 0 2 3 0 36 38 36 0.888888888888889 -2.77555756156289e-17 0.0555555555555555 -2.77555756156289e-17 0.72395273727097
+64 0 2 3 0 36 40 36 0.888888888888889 -2.77555756156289e-17 0.111111111111111 -2.77555756156289e-17 0.724342898925177
+64 0 2 3 0 36 42 36 0.888888888888889 -2.77555756156289e-17 0.166666666666667 -2.77555756156289e-17 0.724502518106703
+64 0 2 3 0 36 44 36 0.888888888888889 -2.77555756156289e-17 0.222222222222222 -2.77555756156289e-17 0.725100663327574
+64 0 2 3 0 36 46 36 0.888888888888889 -2.77555756156289e-17 0.277777777777778 -2.77555756156289e-17 0.726552055334392
+64 0 2 3 0 36 48 36 0.888888888888889 -2.77555756156289e-17 0.333333333333333 -2.77555756156289e-17 0.729218296316213
+64 0 2 3 0 36 50 36 0.888888888888889 -2.77555756156289e-17 0.388888888888889 -2.77555756156289e-17 0.733688776948745
+
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 0 0 36 29 36 0.888888888888889 0 -0.194444444444445 0 0.724720854915558
+64 0 3 0 0 36 30 36 0.888888888888889 0 -0.166666666666667 0 0.724502518106703
+64 0 3 0 0 36 31 36 0.888888888888889 0 -0.138888888888889 0 0.724409709543024
+64 0 3 0 0 36 32 36 0.888888888888889 0 -0.111111111111111 0 0.724342898925177
+64 0 3 0 0 36 33 36 0.888888888888889 0 -0.0833333333333334 0 0.724151545837958
+64 0 3 0 0 36 34 36 0.888888888888889 0 -0.0555555555555556 0 0.72395273727097
+64 0 3 0 0 36 35 36 0.888888888888889 0 -0.0277777777777778 0 0.723805016719017
+64 0 3 0 0 36 36 36 0.888888888888889 0 -5.55111512312578e-17 0 0.723733474251298
+64 0 3 0 0 36 37 36 0.888888888888889 0 0.0277777777777777 0 0.723805016719017
+64 0 3 0 0 36 38 36 0.888888888888889 0 0.0555555555555555 0 0.72395273727097
+64 0 3 0 0 36 39 36 0.888888888888889 0 0.0833333333333333 0 0.724151545837958
+64 0 3 0 0 36 40 36 0.888888888888889 0 0.111111111111111 0 0.724342898925177
+64 0 3 0 0 36 41 36 0.888888888888889 0 0.138888888888889 0 0.724409709543024
+64 0 3 0 0 36 42 36 0.888888888888889 0 0.166666666666667 0 0.724502518106703
+64 0 3 0 0 36 43 36 0.888888888888889 0 0.194444444444444 0 0.724720854915558
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 1 0 36 29 36 0.888888888888889 -1.38777878078145e-17 -0.194444444444445 0 0.724720854915558
+64 0 3 1 0 36 30 36 0.888888888888889 -1.38777878078145e-17 -0.166666666666667 0 0.724502518106703
+64 0 3 1 0 36 31 36 0.888888888888889 -1.38777878078145e-17 -0.138888888888889 0 0.724409709543024
+64 0 3 1 0 36 32 36 0.888888888888889 -1.38777878078145e-17 -0.111111111111111 0 0.724342898925177
+64 0 3 1 0 36 33 36 0.888888888888889 -1.38777878078145e-17 -0.0833333333333334 0 0.724151545837958
+64 0 3 1 0 36 34 36 0.888888888888889 -1.38777878078145e-17 -0.0555555555555556 0 0.72395273727097
+64 0 3 1 0 36 35 36 0.888888888888889 -1.38777878078145e-17 -0.0277777777777778 0 0.723805016719017
+64 0 3 1 0 36 36 36 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0 0.723733474251298
+64 0 3 1 0 36 37 36 0.888888888888889 -1.38777878078145e-17 0.0277777777777777 0 0.723805016719017
+64 0 3 1 0 36 38 36 0.888888888888889 -1.38777878078145e-17 0.0555555555555555 0 0.72395273727097
+64 0 3 1 0 36 39 36 0.888888888888889 -1.38777878078145e-17 0.0833333333333333 0 0.724151545837958
+64 0 3 1 0 36 40 36 0.888888888888889 -1.38777878078145e-17 0.111111111111111 0 0.724342898925177
+64 0 3 1 0 36 41 36 0.888888888888889 -1.38777878078145e-17 0.138888888888889 0 0.724409709543024
+64 0 3 1 0 36 42 36 0.888888888888889 -1.38777878078145e-17 0.166666666666667 0 0.724502518106703
+64 0 3 1 0 36 43 36 0.888888888888889 -1.38777878078145e-17 0.194444444444444 0 0.724720854915558
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 2 0 36 29 36 0.888888888888889 0 -0.194444444444445 -1.38777878078145e-17 0.724720854915558
+64 0 3 2 0 36 30 36 0.888888888888889 0 -0.166666666666667 -1.38777878078145e-17 0.724502518106703
+64 0 3 2 0 36 31 36 0.888888888888889 0 -0.138888888888889 -1.38777878078145e-17 0.724409709543024
+64 0 3 2 0 36 32 36 0.888888888888889 0 -0.111111111111111 -1.38777878078145e-17 0.724342898925177
+64 0 3 2 0 36 33 36 0.888888888888889 0 -0.0833333333333334 -1.38777878078145e-17 0.724151545837958
+64 0 3 2 0 36 34 36 0.888888888888889 0 -0.0555555555555556 -1.38777878078145e-17 0.72395273727097
+64 0 3 2 0 36 35 36 0.888888888888889 0 -0.0277777777777778 -1.38777878078145e-17 0.723805016719017
+64 0 3 2 0 36 36 36 0.888888888888889 0 -5.55111512312578e-17 -1.38777878078145e-17 0.723733474251298
+64 0 3 2 0 36 37 36 0.888888888888889 0 0.0277777777777777 -1.38777878078145e-17 0.723805016719017
+64 0 3 2 0 36 38 36 0.888888888888889 0 0.0555555555555555 -1.38777878078145e-17 0.72395273727097
+64 0 3 2 0 36 39 36 0.888888888888889 0 0.0833333333333333 -1.38777878078145e-17 0.724151545837958
+64 0 3 2 0 36 40 36 0.888888888888889 0 0.111111111111111 -1.38777878078145e-17 0.724342898925177
+64 0 3 2 0 36 41 36 0.888888888888889 0 0.138888888888889 -1.38777878078145e-17 0.724409709543024
+64 0 3 2 0 36 42 36 0.888888888888889 0 0.166666666666667 -1.38777878078145e-17 0.724502518106703
+64 0 3 2 0 36 43 36 0.888888888888889 0 0.194444444444444 -1.38777878078145e-17 0.724720854915558
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 3 0 36 29 36 0.888888888888889 -1.38777878078145e-17 -0.194444444444445 -1.38777878078145e-17 0.724720854915558
+64 0 3 3 0 36 30 36 0.888888888888889 -1.38777878078145e-17 -0.166666666666667 -1.38777878078145e-17 0.724502518106703
+64 0 3 3 0 36 31 36 0.888888888888889 -1.38777878078145e-17 -0.138888888888889 -1.38777878078145e-17 0.724409709543024
+64 0 3 3 0 36 32 36 0.888888888888889 -1.38777878078145e-17 -0.111111111111111 -1.38777878078145e-17 0.724342898925177
+64 0 3 3 0 36 33 36 0.888888888888889 -1.38777878078145e-17 -0.0833333333333334 -1.38777878078145e-17 0.724151545837958
+64 0 3 3 0 36 34 36 0.888888888888889 -1.38777878078145e-17 -0.0555555555555556 -1.38777878078145e-17 0.72395273727097
+64 0 3 3 0 36 35 36 0.888888888888889 -1.38777878078145e-17 -0.0277777777777778 -1.38777878078145e-17 0.723805016719017
+64 0 3 3 0 36 36 36 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.723733474251298
+64 0 3 3 0 36 37 36 0.888888888888889 -1.38777878078145e-17 0.0277777777777777 -1.38777878078145e-17 0.723805016719017
+64 0 3 3 0 36 38 36 0.888888888888889 -1.38777878078145e-17 0.0555555555555555 -1.38777878078145e-17 0.72395273727097
+64 0 3 3 0 36 39 36 0.888888888888889 -1.38777878078145e-17 0.0833333333333333 -1.38777878078145e-17 0.724151545837958
+64 0 3 3 0 36 40 36 0.888888888888889 -1.38777878078145e-17 0.111111111111111 -1.38777878078145e-17 0.724342898925177
+64 0 3 3 0 36 41 36 0.888888888888889 -1.38777878078145e-17 0.138888888888889 -1.38777878078145e-17 0.724409709543024
+64 0 3 3 0 36 42 36 0.888888888888889 -1.38777878078145e-17 0.166666666666667 -1.38777878078145e-17 0.724502518106703
+64 0 3 3 0 36 43 36 0.888888888888889 -1.38777878078145e-17 0.194444444444444 -1.38777878078145e-17 0.724720854915558
+
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 0 0 40 0 40 1.33333333333333 0.111111111111111 -1 0.111111111111111 0.877480603359996
+96 0 0 0 0 40 8 40 1.33333333333333 0.111111111111111 -0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 0 0 40 16 40 1.33333333333333 0.111111111111111 -0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 0 0 40 24 40 1.33333333333333 0.111111111111111 -0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 0 0 40 32 40 1.33333333333333 0.111111111111111 -0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 48 40 1.33333333333333 0.111111111111111 0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 0 0 40 56 40 1.33333333333333 0.111111111111111 0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 0 0 40 64 40 1.33333333333333 0.111111111111111 0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 0 0 40 72 40 1.33333333333333 0.111111111111111 1 0.111111111111111 0.877480603359996
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 1 0 40 0 40 1.33333333333333 0.111111111111111 -1 0.111111111111111 0.877480603359996
+96 0 0 1 0 40 8 40 1.33333333333333 0.111111111111111 -0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 1 0 40 16 40 1.33333333333333 0.111111111111111 -0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 1 0 40 24 40 1.33333333333333 0.111111111111111 -0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 1 0 40 32 40 1.33333333333333 0.111111111111111 -0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 1 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 1 0 40 48 40 1.33333333333333 0.111111111111111 0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 1 0 40 56 40 1.33333333333333 0.111111111111111 0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 1 0 40 64 40 1.33333333333333 0.111111111111111 0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 1 0 40 72 40 1.33333333333333 0.111111111111111 1 0.111111111111111 0.877480603359996
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 2 0 40 0 40 1.33333333333333 0.111111111111111 -1 0.111111111111111 0.877480603359996
+96 0 0 2 0 40 8 40 1.33333333333333 0.111111111111111 -0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 2 0 40 16 40 1.33333333333333 0.111111111111111 -0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 2 0 40 24 40 1.33333333333333 0.111111111111111 -0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 2 0 40 32 40 1.33333333333333 0.111111111111111 -0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 2 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 2 0 40 48 40 1.33333333333333 0.111111111111111 0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 2 0 40 56 40 1.33333333333333 0.111111111111111 0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 2 0 40 64 40 1.33333333333333 0.111111111111111 0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 2 0 40 72 40 1.33333333333333 0.111111111111111 1 0.111111111111111 0.877480603359996
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 3 0 40 0 40 1.33333333333333 0.111111111111111 -1 0.111111111111111 0.877480603359996
+96 0 0 3 0 40 8 40 1.33333333333333 0.111111111111111 -0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 3 0 40 16 40 1.33333333333333 0.111111111111111 -0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 3 0 40 24 40 1.33333333333333 0.111111111111111 -0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 3 0 40 32 40 1.33333333333333 0.111111111111111 -0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 3 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 3 0 40 48 40 1.33333333333333 0.111111111111111 0.333333333333333 0.111111111111111 0.677899959110667
+96 0 0 3 0 40 56 40 1.33333333333333 0.111111111111111 0.555555555555556 0.111111111111111 0.735090597558599
+96 0 0 3 0 40 64 40 1.33333333333333 0.111111111111111 0.777777777777778 0.111111111111111 0.798008089475601
+96 0 0 3 0 40 72 40 1.33333333333333 0.111111111111111 1 0.111111111111111 0.877480603359996
+
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 0 0 36 8 36 1.33333333333333 -9.86623976961809e-17 -0.777777777777778 -9.86623976961809e-17 0.796688784792057
+96 0 1 0 0 36 12 36 1.33333333333333 -9.86623976961809e-17 -0.666666666666667 -9.86623976961809e-17 0.76190136189151
+96 0 1 0 0 36 16 36 1.33333333333333 -9.86623976961809e-17 -0.555555555555556 -9.86623976961809e-17 0.729928937348657
+96 0 1 0 0 36 20 36 1.33333333333333 -9.86623976961809e-17 -0.444444444444444 -9.86623976961809e-17 0.698215010923196
+96 0 1 0 0 36 24 36 1.33333333333333 -9.86623976961809e-17 -0.333333333333333 -9.86623976961809e-17 0.668908746807157
+96 0 1 0 0 36 28 36 1.33333333333333 -9.86623976961809e-17 -0.222222222222222 -9.86623976961809e-17 0.641345710414296
+96 0 1 0 0 36 32 36 1.33333333333333 -9.86623976961809e-17 -0.111111111111111 -9.86623976961809e-17 0.621410197839124
+96 0 1 0 0 36 36 36 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.61547287921812
+96 0 1 0 0 36 40 36 1.33333333333333 -9.86623976961809e-17 0.111111111111111 -9.86623976961809e-17 0.621410197839125
+96 0 1 0 0 36 44 36 1.33333333333333 -9.86623976961809e-17 0.222222222222222 -9.86623976961809e-17 0.641345710414297
+96 0 1 0 0 36 48 36 1.33333333333333 -9.86623976961809e-17 0.333333333333333 -9.86623976961809e-17 0.668908746807157
+96 0 1 0 0 36 52 36 1.33333333333333 -9.86623976961809e-17 0.444444444444444 -9.86623976961809e-17 0.698215010923196
+96 0 1 0 0 36 56 36 1.33333333333333 -9.86623976961809e-17 0.555555555555555 -9.86623976961809e-17 0.729928937348657
+96 0 1 0 0 36 60 36 1.33333333333333 -9.86623976961809e-17 0.666666666666667 -9.86623976961809e-17 0.76190136189151
+96 0 1 0 0 36 64 36 1.33333333333333 -9.86623976961809e-17 0.777777777777778 -9.86623976961809e-17 0.796688784792057
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 1 0 36 8 36 1.33333333333333 -5.55111512312578e-17 -0.777777777777778 -9.86623976961809e-17 0.796688784792057
+96 0 1 1 0 36 12 36 1.33333333333333 -5.55111512312578e-17 -0.666666666666667 -9.86623976961809e-17 0.76190136189151
+96 0 1 1 0 36 16 36 1.33333333333333 -5.55111512312578e-17 -0.555555555555556 -9.86623976961809e-17 0.729928937348657
+96 0 1 1 0 36 20 36 1.33333333333333 -5.55111512312578e-17 -0.444444444444444 -9.86623976961809e-17 0.698215010923196
+96 0 1 1 0 36 24 36 1.33333333333333 -5.55111512312578e-17 -0.333333333333333 -9.86623976961809e-17 0.668908746807157
+96 0 1 1 0 36 28 36 1.33333333333333 -5.55111512312578e-17 -0.222222222222222 -9.86623976961809e-17 0.641345710414296
+96 0 1 1 0 36 32 36 1.33333333333333 -5.55111512312578e-17 -0.111111111111111 -9.86623976961809e-17 0.621410197839124
+96 0 1 1 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.61547287921812
+96 0 1 1 0 36 40 36 1.33333333333333 -5.55111512312578e-17 0.111111111111111 -9.86623976961809e-17 0.621410197839125
+96 0 1 1 0 36 44 36 1.33333333333333 -5.55111512312578e-17 0.222222222222222 -9.86623976961809e-17 0.641345710414297
+96 0 1 1 0 36 48 36 1.33333333333333 -5.55111512312578e-17 0.333333333333333 -9.86623976961809e-17 0.668908746807157
+96 0 1 1 0 36 52 36 1.33333333333333 -5.55111512312578e-17 0.444444444444444 -9.86623976961809e-17 0.698215010923196
+96 0 1 1 0 36 56 36 1.33333333333333 -5.55111512312578e-17 0.555555555555555 -9.86623976961809e-17 0.729928937348657
+96 0 1 1 0 36 60 36 1.33333333333333 -5.55111512312578e-17 0.666666666666667 -9.86623976961809e-17 0.76190136189151
+96 0 1 1 0 36 64 36 1.33333333333333 -5.55111512312578e-17 0.777777777777778 -9.86623976961809e-17 0.796688784792057
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 2 0 36 8 36 1.33333333333333 -9.86623976961809e-17 -0.777777777777778 -5.55111512312578e-17 0.796688784792057
+96 0 1 2 0 36 12 36 1.33333333333333 -9.86623976961809e-17 -0.666666666666667 -5.55111512312578e-17 0.76190136189151
+96 0 1 2 0 36 16 36 1.33333333333333 -9.86623976961809e-17 -0.555555555555556 -5.55111512312578e-17 0.729928937348657
+96 0 1 2 0 36 20 36 1.33333333333333 -9.86623976961809e-17 -0.444444444444444 -5.55111512312578e-17 0.698215010923196
+96 0 1 2 0 36 24 36 1.33333333333333 -9.86623976961809e-17 -0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 1 2 0 36 28 36 1.33333333333333 -9.86623976961809e-17 -0.222222222222222 -5.55111512312578e-17 0.641345710414296
+96 0 1 2 0 36 32 36 1.33333333333333 -9.86623976961809e-17 -0.111111111111111 -5.55111512312578e-17 0.621410197839124
+96 0 1 2 0 36 36 36 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 2 0 36 40 36 1.33333333333333 -9.86623976961809e-17 0.111111111111111 -5.55111512312578e-17 0.621410197839125
+96 0 1 2 0 36 44 36 1.33333333333333 -9.86623976961809e-17 0.222222222222222 -5.55111512312578e-17 0.641345710414297
+96 0 1 2 0 36 48 36 1.33333333333333 -9.86623976961809e-17 0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 1 2 0 36 52 36 1.33333333333333 -9.86623976961809e-17 0.444444444444444 -5.55111512312578e-17 0.698215010923196
+96 0 1 2 0 36 56 36 1.33333333333333 -9.86623976961809e-17 0.555555555555555 -5.55111512312578e-17 0.729928937348657
+96 0 1 2 0 36 60 36 1.33333333333333 -9.86623976961809e-17 0.666666666666667 -5.55111512312578e-17 0.76190136189151
+96 0 1 2 0 36 64 36 1.33333333333333 -9.86623976961809e-17 0.777777777777778 -5.55111512312578e-17 0.796688784792057
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 3 0 36 8 36 1.33333333333333 -5.55111512312578e-17 -0.777777777777778 -5.55111512312578e-17 0.796688784792057
+96 0 1 3 0 36 12 36 1.33333333333333 -5.55111512312578e-17 -0.666666666666667 -5.55111512312578e-17 0.76190136189151
+96 0 1 3 0 36 16 36 1.33333333333333 -5.55111512312578e-17 -0.555555555555556 -5.55111512312578e-17 0.729928937348657
+96 0 1 3 0 36 20 36 1.33333333333333 -5.55111512312578e-17 -0.444444444444444 -5.55111512312578e-17 0.698215010923196
+96 0 1 3 0 36 24 36 1.33333333333333 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 1 3 0 36 28 36 1.33333333333333 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.641345710414296
+96 0 1 3 0 36 32 36 1.33333333333333 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.621410197839124
+96 0 1 3 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 3 0 36 40 36 1.33333333333333 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.621410197839125
+96 0 1 3 0 36 44 36 1.33333333333333 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.641345710414297
+96 0 1 3 0 36 48 36 1.33333333333333 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.668908746807157
+96 0 1 3 0 36 52 36 1.33333333333333 -5.55111512312578e-17 0.444444444444444 -5.55111512312578e-17 0.698215010923196
+96 0 1 3 0 36 56 36 1.33333333333333 -5.55111512312578e-17 0.555555555555555 -5.55111512312578e-17 0.729928937348657
+96 0 1 3 0 36 60 36 1.33333333333333 -5.55111512312578e-17 0.666666666666667 -5.55111512312578e-17 0.76190136189151
+96 0 1 3 0 36 64 36 1.33333333333333 -5.55111512312578e-17 0.777777777777778 -5.55111512312578e-17 0.796688784792057
+
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 0 0 36 22 36 1.33333333333333 2.46655994240452e-17 -0.388888888888889 2.46655994240452e-17 0.683302448238139
+96 0 2 0 0 36 24 36 1.33333333333333 2.46655994240452e-17 -0.333333333333333 2.46655994240452e-17 0.668908746807157
+96 0 2 0 0 36 26 36 1.33333333333333 2.46655994240452e-17 -0.277777777777778 2.46655994240452e-17 0.654541556639422
+96 0 2 0 0 36 28 36 1.33333333333333 2.46655994240452e-17 -0.222222222222222 2.46655994240452e-17 0.641345710414296
+96 0 2 0 0 36 30 36 1.33333333333333 2.46655994240452e-17 -0.166666666666667 2.46655994240452e-17 0.630026346765969
+96 0 2 0 0 36 32 36 1.33333333333333 2.46655994240452e-17 -0.111111111111111 2.46655994240452e-17 0.621410197839124
+96 0 2 0 0 36 34 36 1.33333333333333 2.46655994240452e-17 -0.0555555555555556 2.46655994240452e-17 0.616824486578861
+96 0 2 0 0 36 36 36 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.61547287921812
+96 0 2 0 0 36 38 36 1.33333333333333 2.46655994240452e-17 0.0555555555555555 2.46655994240452e-17 0.616824486578861
+96 0 2 0 0 36 40 36 1.33333333333333 2.46655994240452e-17 0.111111111111111 2.46655994240452e-17 0.621410197839125
+96 0 2 0 0 36 42 36 1.33333333333333 2.46655994240452e-17 0.166666666666667 2.46655994240452e-17 0.63002634676597
+96 0 2 0 0 36 44 36 1.33333333333333 2.46655994240452e-17 0.222222222222222 2.46655994240452e-17 0.641345710414297
+96 0 2 0 0 36 46 36 1.33333333333333 2.46655994240452e-17 0.277777777777778 2.46655994240452e-17 0.654541556639422
+96 0 2 0 0 36 48 36 1.33333333333333 2.46655994240452e-17 0.333333333333333 2.46655994240452e-17 0.668908746807157
+96 0 2 0 0 36 50 36 1.33333333333333 2.46655994240452e-17 0.388888888888889 2.46655994240452e-17 0.683302448238139
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 1 0 36 22 36 1.33333333333333 -2.77555756156289e-17 -0.388888888888889 2.46655994240452e-17 0.683302448238139
+96 0 2 1 0 36 24 36 1.33333333333333 -2.77555756156289e-17 -0.333333333333333 2.46655994240452e-17 0.668908746807157
+96 0 2 1 0 36 26 36 1.33333333333333 -2.77555756156289e-17 -0.277777777777778 2.46655994240452e-17 0.654541556639422
+96 0 2 1 0 36 28 36 1.33333333333333 -2.77555756156289e-17 -0.222222222222222 2.46655994240452e-17 0.641345710414296
+96 0 2 1 0 36 30 36 1.33333333333333 -2.77555756156289e-17 -0.166666666666667 2.46655994240452e-17 0.630026346765969
+96 0 2 1 0 36 32 36 1.33333333333333 -2.77555756156289e-17 -0.111111111111111 2.46655994240452e-17 0.621410197839124
+96 0 2 1 0 36 34 36 1.33333333333333 -2.77555756156289e-17 -0.0555555555555556 2.46655994240452e-17 0.616824486578861
+96 0 2 1 0 36 36 36 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.61547287921812
+96 0 2 1 0 36 38 36 1.33333333333333 -2.77555756156289e-17 0.0555555555555555 2.46655994240452e-17 0.616824486578861
+96 0 2 1 0 36 40 36 1.33333333333333 -2.77555756156289e-17 0.111111111111111 2.46655994240452e-17 0.621410197839125
+96 0 2 1 0 36 42 36 1.33333333333333 -2.77555756156289e-17 0.166666666666667 2.46655994240452e-17 0.63002634676597
+96 0 2 1 0 36 44 36 1.33333333333333 -2.77555756156289e-17 0.222222222222222 2.46655994240452e-17 0.641345710414297
+96 0 2 1 0 36 46 36 1.33333333333333 -2.77555756156289e-17 0.277777777777778 2.46655994240452e-17 0.654541556639422
+96 0 2 1 0 36 48 36 1.33333333333333 -2.77555756156289e-17 0.333333333333333 2.46655994240452e-17 0.668908746807157
+96 0 2 1 0 36 50 36 1.33333333333333 -2.77555756156289e-17 0.388888888888889 2.46655994240452e-17 0.683302448238139
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 2 0 36 22 36 1.33333333333333 2.46655994240452e-17 -0.388888888888889 -2.77555756156289e-17 0.683302448238139
+96 0 2 2 0 36 24 36 1.33333333333333 2.46655994240452e-17 -0.333333333333333 -2.77555756156289e-17 0.668908746807157
+96 0 2 2 0 36 26 36 1.33333333333333 2.46655994240452e-17 -0.277777777777778 -2.77555756156289e-17 0.654541556639422
+96 0 2 2 0 36 28 36 1.33333333333333 2.46655994240452e-17 -0.222222222222222 -2.77555756156289e-17 0.641345710414296
+96 0 2 2 0 36 30 36 1.33333333333333 2.46655994240452e-17 -0.166666666666667 -2.77555756156289e-17 0.630026346765969
+96 0 2 2 0 36 32 36 1.33333333333333 2.46655994240452e-17 -0.111111111111111 -2.77555756156289e-17 0.621410197839124
+96 0 2 2 0 36 34 36 1.33333333333333 2.46655994240452e-17 -0.0555555555555556 -2.77555756156289e-17 0.616824486578861
+96 0 2 2 0 36 36 36 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.61547287921812
+96 0 2 2 0 36 38 36 1.33333333333333 2.46655994240452e-17 0.0555555555555555 -2.77555756156289e-17 0.616824486578861
+96 0 2 2 0 36 40 36 1.33333333333333 2.46655994240452e-17 0.111111111111111 -2.77555756156289e-17 0.621410197839125
+96 0 2 2 0 36 42 36 1.33333333333333 2.46655994240452e-17 0.166666666666667 -2.77555756156289e-17 0.63002634676597
+96 0 2 2 0 36 44 36 1.33333333333333 2.46655994240452e-17 0.222222222222222 -2.77555756156289e-17 0.641345710414297
+96 0 2 2 0 36 46 36 1.33333333333333 2.46655994240452e-17 0.277777777777778 -2.77555756156289e-17 0.654541556639422
+96 0 2 2 0 36 48 36 1.33333333333333 2.46655994240452e-17 0.333333333333333 -2.77555756156289e-17 0.668908746807157
+96 0 2 2 0 36 50 36 1.33333333333333 2.46655994240452e-17 0.388888888888889 -2.77555756156289e-17 0.683302448238139
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 3 0 36 22 36 1.33333333333333 -2.77555756156289e-17 -0.388888888888889 -2.77555756156289e-17 0.683302448238139
+96 0 2 3 0 36 24 36 1.33333333333333 -2.77555756156289e-17 -0.333333333333333 -2.77555756156289e-17 0.668908746807157
+96 0 2 3 0 36 26 36 1.33333333333333 -2.77555756156289e-17 -0.277777777777778 -2.77555756156289e-17 0.654541556639422
+96 0 2 3 0 36 28 36 1.33333333333333 -2.77555756156289e-17 -0.222222222222222 -2.77555756156289e-17 0.641345710414296
+96 0 2 3 0 36 30 36 1.33333333333333 -2.77555756156289e-17 -0.166666666666667 -2.77555756156289e-17 0.630026346765969
+96 0 2 3 0 36 32 36 1.33333333333333 -2.77555756156289e-17 -0.111111111111111 -2.77555756156289e-17 0.621410197839124
+96 0 2 3 0 36 34 36 1.33333333333333 -2.77555756156289e-17 -0.0555555555555556 -2.77555756156289e-17 0.616824486578861
+96 0 2 3 0 36 36 36 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.61547287921812
+96 0 2 3 0 36 38 36 1.33333333333333 -2.77555756156289e-17 0.0555555555555555 -2.77555756156289e-17 0.616824486578861
+96 0 2 3 0 36 40 36 1.33333333333333 -2.77555756156289e-17 0.111111111111111 -2.77555756156289e-17 0.621410197839125
+96 0 2 3 0 36 42 36 1.33333333333333 -2.77555756156289e-17 0.166666666666667 -2.77555756156289e-17 0.63002634676597
+96 0 2 3 0 36 44 36 1.33333333333333 -2.77555756156289e-17 0.222222222222222 -2.77555756156289e-17 0.641345710414297
+96 0 2 3 0 36 46 36 1.33333333333333 -2.77555756156289e-17 0.277777777777778 -2.77555756156289e-17 0.654541556639422
+96 0 2 3 0 36 48 36 1.33333333333333 -2.77555756156289e-17 0.333333333333333 -2.77555756156289e-17 0.668908746807157
+96 0 2 3 0 36 50 36 1.33333333333333 -2.77555756156289e-17 0.388888888888889 -2.77555756156289e-17 0.683302448238139
+
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 0 0 36 29 36 1.33333333333333 0 -0.194444444444445 0 0.63539979750899
+96 0 3 0 0 36 30 36 1.33333333333333 0 -0.166666666666667 0 0.630026346765969
+96 0 3 0 0 36 31 36 1.33333333333333 0 -0.138888888888889 0 0.625297419028293
+96 0 3 0 0 36 32 36 1.33333333333333 0 -0.111111111111111 0 0.621410197839124
+96 0 3 0 0 36 33 36 1.33333333333333 0 -0.0833333333333334 0 0.618663308361111
+96 0 3 0 0 36 34 36 1.33333333333333 0 -0.0555555555555556 0 0.616824486578861
+96 0 3 0 0 36 35 36 1.33333333333333 0 -0.0277777777777778 0 0.615777600484678
+96 0 3 0 0 36 36 36 1.33333333333333 0 -5.55111512312578e-17 0 0.61547287921812
+96 0 3 0 0 36 37 36 1.33333333333333 0 0.0277777777777777 0 0.615777600484678
+96 0 3 0 0 36 38 36 1.33333333333333 0 0.0555555555555555 0 0.616824486578861
+96 0 3 0 0 36 39 36 1.33333333333333 0 0.0833333333333333 0 0.618663308361111
+96 0 3 0 0 36 40 36 1.33333333333333 0 0.111111111111111 0 0.621410197839125
+96 0 3 0 0 36 41 36 1.33333333333333 0 0.138888888888889 0 0.625297419028293
+96 0 3 0 0 36 42 36 1.33333333333333 0 0.166666666666667 0 0.63002634676597
+96 0 3 0 0 36 43 36 1.33333333333333 0 0.194444444444444 0 0.63539979750899
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 1 0 36 29 36 1.33333333333333 -1.38777878078145e-17 -0.194444444444445 0 0.63539979750899
+96 0 3 1 0 36 30 36 1.33333333333333 -1.38777878078145e-17 -0.166666666666667 0 0.630026346765969
+96 0 3 1 0 36 31 36 1.33333333333333 -1.38777878078145e-17 -0.138888888888889 0 0.625297419028293
+96 0 3 1 0 36 32 36 1.33333333333333 -1.38777878078145e-17 -0.111111111111111 0 0.621410197839124
+96 0 3 1 0 36 33 36 1.33333333333333 -1.38777878078145e-17 -0.0833333333333334 0 0.618663308361111
+96 0 3 1 0 36 34 36 1.33333333333333 -1.38777878078145e-17 -0.0555555555555556 0 0.616824486578861
+96 0 3 1 0 36 35 36 1.33333333333333 -1.38777878078145e-17 -0.0277777777777778 0 0.615777600484678
+96 0 3 1 0 36 36 36 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0 0.61547287921812
+96 0 3 1 0 36 37 36 1.33333333333333 -1.38777878078145e-17 0.0277777777777777 0 0.615777600484678
+96 0 3 1 0 36 38 36 1.33333333333333 -1.38777878078145e-17 0.0555555555555555 0 0.616824486578861
+96 0 3 1 0 36 39 36 1.33333333333333 -1.38777878078145e-17 0.0833333333333333 0 0.618663308361111
+96 0 3 1 0 36 40 36 1.33333333333333 -1.38777878078145e-17 0.111111111111111 0 0.621410197839125
+96 0 3 1 0 36 41 36 1.33333333333333 -1.38777878078145e-17 0.138888888888889 0 0.625297419028293
+96 0 3 1 0 36 42 36 1.33333333333333 -1.38777878078145e-17 0.166666666666667 0 0.63002634676597
+96 0 3 1 0 36 43 36 1.33333333333333 -1.38777878078145e-17 0.194444444444444 0 0.63539979750899
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 2 0 36 29 36 1.33333333333333 0 -0.194444444444445 -1.38777878078145e-17 0.63539979750899
+96 0 3 2 0 36 30 36 1.33333333333333 0 -0.166666666666667 -1.38777878078145e-17 0.630026346765969
+96 0 3 2 0 36 31 36 1.33333333333333 0 -0.138888888888889 -1.38777878078145e-17 0.625297419028293
+96 0 3 2 0 36 32 36 1.33333333333333 0 -0.111111111111111 -1.38777878078145e-17 0.621410197839124
+96 0 3 2 0 36 33 36 1.33333333333333 0 -0.0833333333333334 -1.38777878078145e-17 0.618663308361111
+96 0 3 2 0 36 34 36 1.33333333333333 0 -0.0555555555555556 -1.38777878078145e-17 0.616824486578861
+96 0 3 2 0 36 35 36 1.33333333333333 0 -0.0277777777777778 -1.38777878078145e-17 0.615777600484678
+96 0 3 2 0 36 36 36 1.33333333333333 0 -5.55111512312578e-17 -1.38777878078145e-17 0.61547287921812
+96 0 3 2 0 36 37 36 1.33333333333333 0 0.0277777777777777 -1.38777878078145e-17 0.615777600484678
+96 0 3 2 0 36 38 36 1.33333333333333 0 0.0555555555555555 -1.38777878078145e-17 0.616824486578861
+96 0 3 2 0 36 39 36 1.33333333333333 0 0.0833333333333333 -1.38777878078145e-17 0.618663308361111
+96 0 3 2 0 36 40 36 1.33333333333333 0 0.111111111111111 -1.38777878078145e-17 0.621410197839125
+96 0 3 2 0 36 41 36 1.33333333333333 0 0.138888888888889 -1.38777878078145e-17 0.625297419028293
+96 0 3 2 0 36 42 36 1.33333333333333 0 0.166666666666667 -1.38777878078145e-17 0.63002634676597
+96 0 3 2 0 36 43 36 1.33333333333333 0 0.194444444444444 -1.38777878078145e-17 0.63539979750899
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 3 0 36 29 36 1.33333333333333 -1.38777878078145e-17 -0.194444444444445 -1.38777878078145e-17 0.63539979750899
+96 0 3 3 0 36 30 36 1.33333333333333 -1.38777878078145e-17 -0.166666666666667 -1.38777878078145e-17 0.630026346765969
+96 0 3 3 0 36 31 36 1.33333333333333 -1.38777878078145e-17 -0.138888888888889 -1.38777878078145e-17 0.625297419028293
+96 0 3 3 0 36 32 36 1.33333333333333 -1.38777878078145e-17 -0.111111111111111 -1.38777878078145e-17 0.621410197839124
+96 0 3 3 0 36 33 36 1.33333333333333 -1.38777878078145e-17 -0.0833333333333334 -1.38777878078145e-17 0.618663308361111
+96 0 3 3 0 36 34 36 1.33333333333333 -1.38777878078145e-17 -0.0555555555555556 -1.38777878078145e-17 0.616824486578861
+96 0 3 3 0 36 35 36 1.33333333333333 -1.38777878078145e-17 -0.0277777777777778 -1.38777878078145e-17 0.615777600484678
+96 0 3 3 0 36 36 36 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.61547287921812
+96 0 3 3 0 36 37 36 1.33333333333333 -1.38777878078145e-17 0.0277777777777777 -1.38777878078145e-17 0.615777600484678
+96 0 3 3 0 36 38 36 1.33333333333333 -1.38777878078145e-17 0.0555555555555555 -1.38777878078145e-17 0.616824486578861
+96 0 3 3 0 36 39 36 1.33333333333333 -1.38777878078145e-17 0.0833333333333333 -1.38777878078145e-17 0.618663308361111
+96 0 3 3 0 36 40 36 1.33333333333333 -1.38777878078145e-17 0.111111111111111 -1.38777878078145e-17 0.621410197839125
+96 0 3 3 0 36 41 36 1.33333333333333 -1.38777878078145e-17 0.138888888888889 -1.38777878078145e-17 0.625297419028293
+96 0 3 3 0 36 42 36 1.33333333333333 -1.38777878078145e-17 0.166666666666667 -1.38777878078145e-17 0.63002634676597
+96 0 3 3 0 36 43 36 1.33333333333333 -1.38777878078145e-17 0.194444444444444 -1.38777878078145e-17 0.63539979750899
+
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 0 0 40 0 40 1.77777777777778 0.111111111111111 -1 0.111111111111111 0.873700996777018
+128 0 0 0 0 40 8 40 1.77777777777778 0.111111111111111 -0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 0 0 40 16 40 1.77777777777778 0.111111111111111 -0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 0 0 40 24 40 1.77777777777778 0.111111111111111 -0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 0 0 40 32 40 1.77777777777778 0.111111111111111 -0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 48 40 1.77777777777778 0.111111111111111 0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 0 0 40 56 40 1.77777777777778 0.111111111111111 0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 0 0 40 64 40 1.77777777777778 0.111111111111111 0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 0 0 40 72 40 1.77777777777778 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 1 0 40 0 40 1.77777777777778 0.111111111111111 -1 0.111111111111111 0.873700996777018
+128 0 0 1 0 40 8 40 1.77777777777778 0.111111111111111 -0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 1 0 40 16 40 1.77777777777778 0.111111111111111 -0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 1 0 40 24 40 1.77777777777778 0.111111111111111 -0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 1 0 40 32 40 1.77777777777778 0.111111111111111 -0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 1 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 1 0 40 48 40 1.77777777777778 0.111111111111111 0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 1 0 40 56 40 1.77777777777778 0.111111111111111 0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 1 0 40 64 40 1.77777777777778 0.111111111111111 0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 1 0 40 72 40 1.77777777777778 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 2 0 40 0 40 1.77777777777778 0.111111111111111 -1 0.111111111111111 0.873700996777018
+128 0 0 2 0 40 8 40 1.77777777777778 0.111111111111111 -0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 2 0 40 16 40 1.77777777777778 0.111111111111111 -0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 2 0 40 24 40 1.77777777777778 0.111111111111111 -0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 2 0 40 32 40 1.77777777777778 0.111111111111111 -0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 2 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 2 0 40 48 40 1.77777777777778 0.111111111111111 0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 2 0 40 56 40 1.77777777777778 0.111111111111111 0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 2 0 40 64 40 1.77777777777778 0.111111111111111 0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 2 0 40 72 40 1.77777777777778 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 3 0 40 0 40 1.77777777777778 0.111111111111111 -1 0.111111111111111 0.873700996777018
+128 0 0 3 0 40 8 40 1.77777777777778 0.111111111111111 -0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 3 0 40 16 40 1.77777777777778 0.111111111111111 -0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 3 0 40 24 40 1.77777777777778 0.111111111111111 -0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 3 0 40 32 40 1.77777777777778 0.111111111111111 -0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 3 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 3 0 40 48 40 1.77777777777778 0.111111111111111 0.333333333333333 0.111111111111111 0.883486952153519
+128 0 0 3 0 40 56 40 1.77777777777778 0.111111111111111 0.555555555555556 0.111111111111111 0.863004424640887
+128 0 0 3 0 40 64 40 1.77777777777778 0.111111111111111 0.777777777777778 0.111111111111111 0.859471717622308
+128 0 0 3 0 40 72 40 1.77777777777778 0.111111111111111 1 0.111111111111111 0.873700996777018
+
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 0 0 36 8 36 1.77777777777778 -9.86623976961809e-17 -0.777777777777778 -9.86623976961809e-17 0.862653663591007
+128 0 1 0 0 36 12 36 1.77777777777778 -9.86623976961809e-17 -0.666666666666667 -9.86623976961809e-17 0.862560028606905
+128 0 1 0 0 36 16 36 1.77777777777778 -9.86623976961809e-17 -0.555555555555556 -9.86623976961809e-17 0.866965759785718
+128 0 1 0 0 36 20 36 1.77777777777778 -9.86623976961809e-17 -0.444444444444444 -9.86623976961809e-17 0.876167092595071
+128 0 1 0 0 36 24 36 1.77777777777778 -9.86623976961809e-17 -0.333333333333333 -9.86623976961809e-17 0.889185421864397
+128 0 1 0 0 36 28 36 1.77777777777778 -9.86623976961809e-17 -0.222222222222222 -9.86623976961809e-17 0.907998184681559
+128 0 1 0 0 36 32 36 1.77777777777778 -9.86623976961809e-17 -0.111111111111111 -9.86623976961809e-17 0.924033489738888
+128 0 1 0 0 36 36 36 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.928389498223199
+128 0 1 0 0 36 40 36 1.77777777777778 -9.86623976961809e-17 0.111111111111111 -9.86623976961809e-17 0.924033489738888
+128 0 1 0 0 36 44 36 1.77777777777778 -9.86623976961809e-17 0.222222222222222 -9.86623976961809e-17 0.907998184681559
+128 0 1 0 0 36 48 36 1.77777777777778 -9.86623976961809e-17 0.333333333333333 -9.86623976961809e-17 0.889185421864397
+128 0 1 0 0 36 52 36 1.77777777777778 -9.86623976961809e-17 0.444444444444444 -9.86623976961809e-17 0.876167092595071
+128 0 1 0 0 36 56 36 1.77777777777778 -9.86623976961809e-17 0.555555555555555 -9.86623976961809e-17 0.866965759785718
+128 0 1 0 0 36 60 36 1.77777777777778 -9.86623976961809e-17 0.666666666666667 -9.86623976961809e-17 0.862560028606905
+128 0 1 0 0 36 64 36 1.77777777777778 -9.86623976961809e-17 0.777777777777778 -9.86623976961809e-17 0.862653663591007
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 1 0 36 8 36 1.77777777777778 -5.55111512312578e-17 -0.777777777777778 -9.86623976961809e-17 0.862653663591007
+128 0 1 1 0 36 12 36 1.77777777777778 -5.55111512312578e-17 -0.666666666666667 -9.86623976961809e-17 0.862560028606905
+128 0 1 1 0 36 16 36 1.77777777777778 -5.55111512312578e-17 -0.555555555555556 -9.86623976961809e-17 0.866965759785718
+128 0 1 1 0 36 20 36 1.77777777777778 -5.55111512312578e-17 -0.444444444444444 -9.86623976961809e-17 0.876167092595071
+128 0 1 1 0 36 24 36 1.77777777777778 -5.55111512312578e-17 -0.333333333333333 -9.86623976961809e-17 0.889185421864397
+128 0 1 1 0 36 28 36 1.77777777777778 -5.55111512312578e-17 -0.222222222222222 -9.86623976961809e-17 0.907998184681559
+128 0 1 1 0 36 32 36 1.77777777777778 -5.55111512312578e-17 -0.111111111111111 -9.86623976961809e-17 0.924033489738888
+128 0 1 1 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.928389498223199
+128 0 1 1 0 36 40 36 1.77777777777778 -5.55111512312578e-17 0.111111111111111 -9.86623976961809e-17 0.924033489738888
+128 0 1 1 0 36 44 36 1.77777777777778 -5.55111512312578e-17 0.222222222222222 -9.86623976961809e-17 0.907998184681559
+128 0 1 1 0 36 48 36 1.77777777777778 -5.55111512312578e-17 0.333333333333333 -9.86623976961809e-17 0.889185421864397
+128 0 1 1 0 36 52 36 1.77777777777778 -5.55111512312578e-17 0.444444444444444 -9.86623976961809e-17 0.876167092595071
+128 0 1 1 0 36 56 36 1.77777777777778 -5.55111512312578e-17 0.555555555555555 -9.86623976961809e-17 0.866965759785718
+128 0 1 1 0 36 60 36 1.77777777777778 -5.55111512312578e-17 0.666666666666667 -9.86623976961809e-17 0.862560028606905
+128 0 1 1 0 36 64 36 1.77777777777778 -5.55111512312578e-17 0.777777777777778 -9.86623976961809e-17 0.862653663591007
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 2 0 36 8 36 1.77777777777778 -9.86623976961809e-17 -0.777777777777778 -5.55111512312578e-17 0.862653663591007
+128 0 1 2 0 36 12 36 1.77777777777778 -9.86623976961809e-17 -0.666666666666667 -5.55111512312578e-17 0.862560028606905
+128 0 1 2 0 36 16 36 1.77777777777778 -9.86623976961809e-17 -0.555555555555556 -5.55111512312578e-17 0.866965759785718
+128 0 1 2 0 36 20 36 1.77777777777778 -9.86623976961809e-17 -0.444444444444444 -5.55111512312578e-17 0.876167092595071
+128 0 1 2 0 36 24 36 1.77777777777778 -9.86623976961809e-17 -0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 1 2 0 36 28 36 1.77777777777778 -9.86623976961809e-17 -0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 1 2 0 36 32 36 1.77777777777778 -9.86623976961809e-17 -0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 1 2 0 36 36 36 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 2 0 36 40 36 1.77777777777778 -9.86623976961809e-17 0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 1 2 0 36 44 36 1.77777777777778 -9.86623976961809e-17 0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 1 2 0 36 48 36 1.77777777777778 -9.86623976961809e-17 0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 1 2 0 36 52 36 1.77777777777778 -9.86623976961809e-17 0.444444444444444 -5.55111512312578e-17 0.876167092595071
+128 0 1 2 0 36 56 36 1.77777777777778 -9.86623976961809e-17 0.555555555555555 -5.55111512312578e-17 0.866965759785718
+128 0 1 2 0 36 60 36 1.77777777777778 -9.86623976961809e-17 0.666666666666667 -5.55111512312578e-17 0.862560028606905
+128 0 1 2 0 36 64 36 1.77777777777778 -9.86623976961809e-17 0.777777777777778 -5.55111512312578e-17 0.862653663591007
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 3 0 36 8 36 1.77777777777778 -5.55111512312578e-17 -0.777777777777778 -5.55111512312578e-17 0.862653663591007
+128 0 1 3 0 36 12 36 1.77777777777778 -5.55111512312578e-17 -0.666666666666667 -5.55111512312578e-17 0.862560028606905
+128 0 1 3 0 36 16 36 1.77777777777778 -5.55111512312578e-17 -0.555555555555556 -5.55111512312578e-17 0.866965759785718
+128 0 1 3 0 36 20 36 1.77777777777778 -5.55111512312578e-17 -0.444444444444444 -5.55111512312578e-17 0.876167092595071
+128 0 1 3 0 36 24 36 1.77777777777778 -5.55111512312578e-17 -0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 1 3 0 36 28 36 1.77777777777778 -5.55111512312578e-17 -0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 1 3 0 36 32 36 1.77777777777778 -5.55111512312578e-17 -0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 1 3 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 3 0 36 40 36 1.77777777777778 -5.55111512312578e-17 0.111111111111111 -5.55111512312578e-17 0.924033489738888
+128 0 1 3 0 36 44 36 1.77777777777778 -5.55111512312578e-17 0.222222222222222 -5.55111512312578e-17 0.907998184681559
+128 0 1 3 0 36 48 36 1.77777777777778 -5.55111512312578e-17 0.333333333333333 -5.55111512312578e-17 0.889185421864397
+128 0 1 3 0 36 52 36 1.77777777777778 -5.55111512312578e-17 0.444444444444444 -5.55111512312578e-17 0.876167092595071
+128 0 1 3 0 36 56 36 1.77777777777778 -5.55111512312578e-17 0.555555555555555 -5.55111512312578e-17 0.866965759785718
+128 0 1 3 0 36 60 36 1.77777777777778 -5.55111512312578e-17 0.666666666666667 -5.55111512312578e-17 0.862560028606905
+128 0 1 3 0 36 64 36 1.77777777777778 -5.55111512312578e-17 0.777777777777778 -5.55111512312578e-17 0.862653663591007
+
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 0 0 36 22 36 1.77777777777778 2.46655994240452e-17 -0.388888888888889 2.46655994240452e-17 0.882075542854246
+128 0 2 0 0 36 24 36 1.77777777777778 2.46655994240452e-17 -0.333333333333333 2.46655994240452e-17 0.889185421864397
+128 0 2 0 0 36 26 36 1.77777777777778 2.46655994240452e-17 -0.277777777777778 2.46655994240452e-17 0.898403242286228
+128 0 2 0 0 36 28 36 1.77777777777778 2.46655994240452e-17 -0.222222222222222 2.46655994240452e-17 0.907998184681559
+128 0 2 0 0 36 30 36 1.77777777777778 2.46655994240452e-17 -0.166666666666667 2.46655994240452e-17 0.916919384356027
+128 0 2 0 0 36 32 36 1.77777777777778 2.46655994240452e-17 -0.111111111111111 2.46655994240452e-17 0.924033489738888
+128 0 2 0 0 36 34 36 1.77777777777778 2.46655994240452e-17 -0.0555555555555556 2.46655994240452e-17 0.927485951077396
+128 0 2 0 0 36 36 36 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.928389498223199
+128 0 2 0 0 36 38 36 1.77777777777778 2.46655994240452e-17 0.0555555555555555 2.46655994240452e-17 0.927485951077396
+128 0 2 0 0 36 40 36 1.77777777777778 2.46655994240452e-17 0.111111111111111 2.46655994240452e-17 0.924033489738888
+128 0 2 0 0 36 42 36 1.77777777777778 2.46655994240452e-17 0.166666666666667 2.46655994240452e-17 0.916919384356027
+128 0 2 0 0 36 44 36 1.77777777777778 2.46655994240452e-17 0.222222222222222 2.46655994240452e-17 0.907998184681559
+128 0 2 0 0 36 46 36 1.77777777777778 2.46655994240452e-17 0.277777777777778 2.46655994240452e-17 0.898403242286228
+128 0 2 0 0 36 48 36 1.77777777777778 2.46655994240452e-17 0.333333333333333 2.46655994240452e-17 0.889185421864397
+128 0 2 0 0 36 50 36 1.77777777777778 2.46655994240452e-17 0.388888888888889 2.46655994240452e-17 0.882075542854246
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 1 0 36 22 36 1.77777777777778 -2.77555756156289e-17 -0.388888888888889 2.46655994240452e-17 0.882075542854246
+128 0 2 1 0 36 24 36 1.77777777777778 -2.77555756156289e-17 -0.333333333333333 2.46655994240452e-17 0.889185421864397
+128 0 2 1 0 36 26 36 1.77777777777778 -2.77555756156289e-17 -0.277777777777778 2.46655994240452e-17 0.898403242286228
+128 0 2 1 0 36 28 36 1.77777777777778 -2.77555756156289e-17 -0.222222222222222 2.46655994240452e-17 0.907998184681559
+128 0 2 1 0 36 30 36 1.77777777777778 -2.77555756156289e-17 -0.166666666666667 2.46655994240452e-17 0.916919384356027
+128 0 2 1 0 36 32 36 1.77777777777778 -2.77555756156289e-17 -0.111111111111111 2.46655994240452e-17 0.924033489738888
+128 0 2 1 0 36 34 36 1.77777777777778 -2.77555756156289e-17 -0.0555555555555556 2.46655994240452e-17 0.927485951077396
+128 0 2 1 0 36 36 36 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.928389498223199
+128 0 2 1 0 36 38 36 1.77777777777778 -2.77555756156289e-17 0.0555555555555555 2.46655994240452e-17 0.927485951077396
+128 0 2 1 0 36 40 36 1.77777777777778 -2.77555756156289e-17 0.111111111111111 2.46655994240452e-17 0.924033489738888
+128 0 2 1 0 36 42 36 1.77777777777778 -2.77555756156289e-17 0.166666666666667 2.46655994240452e-17 0.916919384356027
+128 0 2 1 0 36 44 36 1.77777777777778 -2.77555756156289e-17 0.222222222222222 2.46655994240452e-17 0.907998184681559
+128 0 2 1 0 36 46 36 1.77777777777778 -2.77555756156289e-17 0.277777777777778 2.46655994240452e-17 0.898403242286228
+128 0 2 1 0 36 48 36 1.77777777777778 -2.77555756156289e-17 0.333333333333333 2.46655994240452e-17 0.889185421864397
+128 0 2 1 0 36 50 36 1.77777777777778 -2.77555756156289e-17 0.388888888888889 2.46655994240452e-17 0.882075542854246
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 2 0 36 22 36 1.77777777777778 2.46655994240452e-17 -0.388888888888889 -2.77555756156289e-17 0.882075542854246
+128 0 2 2 0 36 24 36 1.77777777777778 2.46655994240452e-17 -0.333333333333333 -2.77555756156289e-17 0.889185421864397
+128 0 2 2 0 36 26 36 1.77777777777778 2.46655994240452e-17 -0.277777777777778 -2.77555756156289e-17 0.898403242286228
+128 0 2 2 0 36 28 36 1.77777777777778 2.46655994240452e-17 -0.222222222222222 -2.77555756156289e-17 0.907998184681559
+128 0 2 2 0 36 30 36 1.77777777777778 2.46655994240452e-17 -0.166666666666667 -2.77555756156289e-17 0.916919384356027
+128 0 2 2 0 36 32 36 1.77777777777778 2.46655994240452e-17 -0.111111111111111 -2.77555756156289e-17 0.924033489738888
+128 0 2 2 0 36 34 36 1.77777777777778 2.46655994240452e-17 -0.0555555555555556 -2.77555756156289e-17 0.927485951077396
+128 0 2 2 0 36 36 36 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.928389498223199
+128 0 2 2 0 36 38 36 1.77777777777778 2.46655994240452e-17 0.0555555555555555 -2.77555756156289e-17 0.927485951077396
+128 0 2 2 0 36 40 36 1.77777777777778 2.46655994240452e-17 0.111111111111111 -2.77555756156289e-17 0.924033489738888
+128 0 2 2 0 36 42 36 1.77777777777778 2.46655994240452e-17 0.166666666666667 -2.77555756156289e-17 0.916919384356027
+128 0 2 2 0 36 44 36 1.77777777777778 2.46655994240452e-17 0.222222222222222 -2.77555756156289e-17 0.907998184681559
+128 0 2 2 0 36 46 36 1.77777777777778 2.46655994240452e-17 0.277777777777778 -2.77555756156289e-17 0.898403242286228
+128 0 2 2 0 36 48 36 1.77777777777778 2.46655994240452e-17 0.333333333333333 -2.77555756156289e-17 0.889185421864397
+128 0 2 2 0 36 50 36 1.77777777777778 2.46655994240452e-17 0.388888888888889 -2.77555756156289e-17 0.882075542854246
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 3 0 36 22 36 1.77777777777778 -2.77555756156289e-17 -0.388888888888889 -2.77555756156289e-17 0.882075542854246
+128 0 2 3 0 36 24 36 1.77777777777778 -2.77555756156289e-17 -0.333333333333333 -2.77555756156289e-17 0.889185421864397
+128 0 2 3 0 36 26 36 1.77777777777778 -2.77555756156289e-17 -0.277777777777778 -2.77555756156289e-17 0.898403242286228
+128 0 2 3 0 36 28 36 1.77777777777778 -2.77555756156289e-17 -0.222222222222222 -2.77555756156289e-17 0.907998184681559
+128 0 2 3 0 36 30 36 1.77777777777778 -2.77555756156289e-17 -0.166666666666667 -2.77555756156289e-17 0.916919384356027
+128 0 2 3 0 36 32 36 1.77777777777778 -2.77555756156289e-17 -0.111111111111111 -2.77555756156289e-17 0.924033489738888
+128 0 2 3 0 36 34 36 1.77777777777778 -2.77555756156289e-17 -0.0555555555555556 -2.77555756156289e-17 0.927485951077396
+128 0 2 3 0 36 36 36 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.928389498223199
+128 0 2 3 0 36 38 36 1.77777777777778 -2.77555756156289e-17 0.0555555555555555 -2.77555756156289e-17 0.927485951077396
+128 0 2 3 0 36 40 36 1.77777777777778 -2.77555756156289e-17 0.111111111111111 -2.77555756156289e-17 0.924033489738888
+128 0 2 3 0 36 42 36 1.77777777777778 -2.77555756156289e-17 0.166666666666667 -2.77555756156289e-17 0.916919384356027
+128 0 2 3 0 36 44 36 1.77777777777778 -2.77555756156289e-17 0.222222222222222 -2.77555756156289e-17 0.907998184681559
+128 0 2 3 0 36 46 36 1.77777777777778 -2.77555756156289e-17 0.277777777777778 -2.77555756156289e-17 0.898403242286228
+128 0 2 3 0 36 48 36 1.77777777777778 -2.77555756156289e-17 0.333333333333333 -2.77555756156289e-17 0.889185421864397
+128 0 2 3 0 36 50 36 1.77777777777778 -2.77555756156289e-17 0.388888888888889 -2.77555756156289e-17 0.882075542854246
+
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 0 0 36 29 36 1.77777777777778 0 -0.194444444444445 0 0.912613836832073
+128 0 3 0 0 36 30 36 1.77777777777778 0 -0.166666666666667 0 0.916919384356027
+128 0 3 0 0 36 31 36 1.77777777777778 0 -0.138888888888889 0 0.920818233193455
+128 0 3 0 0 36 32 36 1.77777777777778 0 -0.111111111111111 0 0.924033489738888
+128 0 3 0 0 36 33 36 1.77777777777778 0 -0.0833333333333334 0 0.926147880297958
+128 0 3 0 0 36 34 36 1.77777777777778 0 -0.0555555555555556 0 0.927485951077396
+128 0 3 0 0 36 35 36 1.77777777777778 0 -0.0277777777777778 0 0.928209975180567
+128 0 3 0 0 36 36 36 1.77777777777778 0 -5.55111512312578e-17 0 0.928389498223199
+128 0 3 0 0 36 37 36 1.77777777777778 0 0.0277777777777777 0 0.928209975180567
+128 0 3 0 0 36 38 36 1.77777777777778 0 0.0555555555555555 0 0.927485951077396
+128 0 3 0 0 36 39 36 1.77777777777778 0 0.0833333333333333 0 0.926147880297958
+128 0 3 0 0 36 40 36 1.77777777777778 0 0.111111111111111 0 0.924033489738888
+128 0 3 0 0 36 41 36 1.77777777777778 0 0.138888888888889 0 0.920818233193455
+128 0 3 0 0 36 42 36 1.77777777777778 0 0.166666666666667 0 0.916919384356027
+128 0 3 0 0 36 43 36 1.77777777777778 0 0.194444444444444 0 0.912613836832073
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 1 0 36 29 36 1.77777777777778 -1.38777878078145e-17 -0.194444444444445 0 0.912613836832073
+128 0 3 1 0 36 30 36 1.77777777777778 -1.38777878078145e-17 -0.166666666666667 0 0.916919384356027
+128 0 3 1 0 36 31 36 1.77777777777778 -1.38777878078145e-17 -0.138888888888889 0 0.920818233193455
+128 0 3 1 0 36 32 36 1.77777777777778 -1.38777878078145e-17 -0.111111111111111 0 0.924033489738888
+128 0 3 1 0 36 33 36 1.77777777777778 -1.38777878078145e-17 -0.0833333333333334 0 0.926147880297958
+128 0 3 1 0 36 34 36 1.77777777777778 -1.38777878078145e-17 -0.0555555555555556 0 0.927485951077396
+128 0 3 1 0 36 35 36 1.77777777777778 -1.38777878078145e-17 -0.0277777777777778 0 0.928209975180567
+128 0 3 1 0 36 36 36 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0 0.928389498223199
+128 0 3 1 0 36 37 36 1.77777777777778 -1.38777878078145e-17 0.0277777777777777 0 0.928209975180567
+128 0 3 1 0 36 38 36 1.77777777777778 -1.38777878078145e-17 0.0555555555555555 0 0.927485951077396
+128 0 3 1 0 36 39 36 1.77777777777778 -1.38777878078145e-17 0.0833333333333333 0 0.926147880297958
+128 0 3 1 0 36 40 36 1.77777777777778 -1.38777878078145e-17 0.111111111111111 0 0.924033489738888
+128 0 3 1 0 36 41 36 1.77777777777778 -1.38777878078145e-17 0.138888888888889 0 0.920818233193455
+128 0 3 1 0 36 42 36 1.77777777777778 -1.38777878078145e-17 0.166666666666667 0 0.916919384356027
+128 0 3 1 0 36 43 36 1.77777777777778 -1.38777878078145e-17 0.194444444444444 0 0.912613836832073
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 2 0 36 29 36 1.77777777777778 0 -0.194444444444445 -1.38777878078145e-17 0.912613836832073
+128 0 3 2 0 36 30 36 1.77777777777778 0 -0.166666666666667 -1.38777878078145e-17 0.916919384356027
+128 0 3 2 0 36 31 36 1.77777777777778 0 -0.138888888888889 -1.38777878078145e-17 0.920818233193455
+128 0 3 2 0 36 32 36 1.77777777777778 0 -0.111111111111111 -1.38777878078145e-17 0.924033489738888
+128 0 3 2 0 36 33 36 1.77777777777778 0 -0.0833333333333334 -1.38777878078145e-17 0.926147880297958
+128 0 3 2 0 36 34 36 1.77777777777778 0 -0.0555555555555556 -1.38777878078145e-17 0.927485951077396
+128 0 3 2 0 36 35 36 1.77777777777778 0 -0.0277777777777778 -1.38777878078145e-17 0.928209975180567
+128 0 3 2 0 36 36 36 1.77777777777778 0 -5.55111512312578e-17 -1.38777878078145e-17 0.928389498223199
+128 0 3 2 0 36 37 36 1.77777777777778 0 0.0277777777777777 -1.38777878078145e-17 0.928209975180567
+128 0 3 2 0 36 38 36 1.77777777777778 0 0.0555555555555555 -1.38777878078145e-17 0.927485951077396
+128 0 3 2 0 36 39 36 1.77777777777778 0 0.0833333333333333 -1.38777878078145e-17 0.926147880297958
+128 0 3 2 0 36 40 36 1.77777777777778 0 0.111111111111111 -1.38777878078145e-17 0.924033489738888
+128 0 3 2 0 36 41 36 1.77777777777778 0 0.138888888888889 -1.38777878078145e-17 0.920818233193455
+128 0 3 2 0 36 42 36 1.77777777777778 0 0.166666666666667 -1.38777878078145e-17 0.916919384356027
+128 0 3 2 0 36 43 36 1.77777777777778 0 0.194444444444444 -1.38777878078145e-17 0.912613836832073
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 3 0 36 29 36 1.77777777777778 -1.38777878078145e-17 -0.194444444444445 -1.38777878078145e-17 0.912613836832073
+128 0 3 3 0 36 30 36 1.77777777777778 -1.38777878078145e-17 -0.166666666666667 -1.38777878078145e-17 0.916919384356027
+128 0 3 3 0 36 31 36 1.77777777777778 -1.38777878078145e-17 -0.138888888888889 -1.38777878078145e-17 0.920818233193455
+128 0 3 3 0 36 32 36 1.77777777777778 -1.38777878078145e-17 -0.111111111111111 -1.38777878078145e-17 0.924033489738888
+128 0 3 3 0 36 33 36 1.77777777777778 -1.38777878078145e-17 -0.0833333333333334 -1.38777878078145e-17 0.926147880297958
+128 0 3 3 0 36 34 36 1.77777777777778 -1.38777878078145e-17 -0.0555555555555556 -1.38777878078145e-17 0.927485951077396
+128 0 3 3 0 36 35 36 1.77777777777778 -1.38777878078145e-17 -0.0277777777777778 -1.38777878078145e-17 0.928209975180567
+128 0 3 3 0 36 36 36 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.928389498223199
+128 0 3 3 0 36 37 36 1.77777777777778 -1.38777878078145e-17 0.0277777777777777 -1.38777878078145e-17 0.928209975180567
+128 0 3 3 0 36 38 36 1.77777777777778 -1.38777878078145e-17 0.0555555555555555 -1.38777878078145e-17 0.927485951077396
+128 0 3 3 0 36 39 36 1.77777777777778 -1.38777878078145e-17 0.0833333333333333 -1.38777878078145e-17 0.926147880297958
+128 0 3 3 0 36 40 36 1.77777777777778 -1.38777878078145e-17 0.111111111111111 -1.38777878078145e-17 0.924033489738888
+128 0 3 3 0 36 41 36 1.77777777777778 -1.38777878078145e-17 0.138888888888889 -1.38777878078145e-17 0.920818233193455
+128 0 3 3 0 36 42 36 1.77777777777778 -1.38777878078145e-17 0.166666666666667 -1.38777878078145e-17 0.916919384356027
+128 0 3 3 0 36 43 36 1.77777777777778 -1.38777878078145e-17 0.194444444444444 -1.38777878078145e-17 0.912613836832073
+
+
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.z.asc b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.z.asc
new file mode 100644
index 000000000..343b8054b
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi.z.asc
@@ -0,0 +1,632 @@
+# WAVETOY::phi z (phi)
+#
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 0 0 40 40 0 0.888888888888889 0.111111111111111 0.111111111111111 -1 0.873700996777018
+64 0 0 0 0 40 40 8 0.888888888888889 0.111111111111111 0.111111111111111 -0.777777777777778 0.807676282684182
+64 0 0 0 0 40 40 16 0.888888888888889 0.111111111111111 0.111111111111111 -0.555555555555556 0.756699260944861
+64 0 0 0 0 40 40 24 0.888888888888889 0.111111111111111 0.111111111111111 -0.333333333333333 0.730294733882952
+64 0 0 0 0 40 40 32 0.888888888888889 0.111111111111111 0.111111111111111 -0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 0 0 40 40 48 0.888888888888889 0.111111111111111 0.111111111111111 0.333333333333333 0.730294733882952
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 1 0 40 40 0 0.888888888888889 0.111111111111111 0.111111111111111 -1 0.873700996777018
+64 0 0 1 0 40 40 8 0.888888888888889 0.111111111111111 0.111111111111111 -0.777777777777778 0.807676282684182
+64 0 0 1 0 40 40 16 0.888888888888889 0.111111111111111 0.111111111111111 -0.555555555555556 0.756699260944861
+64 0 0 1 0 40 40 24 0.888888888888889 0.111111111111111 0.111111111111111 -0.333333333333333 0.730294733882952
+64 0 0 1 0 40 40 32 0.888888888888889 0.111111111111111 0.111111111111111 -0.111111111111111 0.725539249473295
+64 0 0 1 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 1 0 40 40 48 0.888888888888889 0.111111111111111 0.111111111111111 0.333333333333333 0.730294733882952
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 2 0 40 40 24 0.888888888888889 0.111111111111111 0.111111111111111 -0.333333333333333 0.730294733882952
+64 0 0 2 0 40 40 32 0.888888888888889 0.111111111111111 0.111111111111111 -0.111111111111111 0.725539249473295
+64 0 0 2 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 2 0 40 40 48 0.888888888888889 0.111111111111111 0.111111111111111 0.333333333333333 0.730294733882952
+64 0 0 2 0 40 40 56 0.888888888888889 0.111111111111111 0.111111111111111 0.555555555555556 0.756699260944861
+64 0 0 2 0 40 40 64 0.888888888888889 0.111111111111111 0.111111111111111 0.777777777777778 0.807676282684182
+64 0 0 2 0 40 40 72 0.888888888888889 0.111111111111111 0.111111111111111 1 0.873700996777018
+
+# iteration 64
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 0 3 0 40 40 24 0.888888888888889 0.111111111111111 0.111111111111111 -0.333333333333333 0.730294733882952
+64 0 0 3 0 40 40 32 0.888888888888889 0.111111111111111 0.111111111111111 -0.111111111111111 0.725539249473295
+64 0 0 3 0 40 40 40 0.888888888888889 0.111111111111111 0.111111111111111 0.111111111111111 0.725539249473295
+64 0 0 3 0 40 40 48 0.888888888888889 0.111111111111111 0.111111111111111 0.333333333333333 0.730294733882952
+64 0 0 3 0 40 40 56 0.888888888888889 0.111111111111111 0.111111111111111 0.555555555555556 0.756699260944861
+64 0 0 3 0 40 40 64 0.888888888888889 0.111111111111111 0.111111111111111 0.777777777777778 0.807676282684182
+64 0 0 3 0 40 40 72 0.888888888888889 0.111111111111111 0.111111111111111 1 0.873700996777018
+
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 0 0 36 36 8 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.777777777777778 0.808379332677938
+64 0 1 0 0 36 36 12 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.666666666666667 0.779665123251562
+64 0 1 0 0 36 36 16 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.555555555555556 0.756097245006156
+64 0 1 0 0 36 36 20 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.444444444444444 0.739694852518638
+64 0 1 0 0 36 36 24 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.333333333333333 0.729218296316213
+64 0 1 0 0 36 36 28 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.222222222222222 0.725100663327574
+64 0 1 0 0 36 36 32 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 1 0 0 36 36 36 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.723733474251298
+64 0 1 0 0 36 36 40 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 1 0 0 36 36 44 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 1 0 36 36 8 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.777777777777778 0.808379332677938
+64 0 1 1 0 36 36 12 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.666666666666667 0.779665123251562
+64 0 1 1 0 36 36 16 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.555555555555556 0.756097245006156
+64 0 1 1 0 36 36 20 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.444444444444444 0.739694852518638
+64 0 1 1 0 36 36 24 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.729218296316213
+64 0 1 1 0 36 36 28 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.725100663327574
+64 0 1 1 0 36 36 32 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 1 1 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.723733474251298
+64 0 1 1 0 36 36 40 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 1 1 0 36 36 44 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 2 0 36 36 32 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 1 2 0 36 36 36 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 2 0 36 36 40 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 1 2 0 36 36 44 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+64 0 1 2 0 36 36 48 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.333333333333333 0.729218296316213
+64 0 1 2 0 36 36 52 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.444444444444444 0.739694852518638
+64 0 1 2 0 36 36 56 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.555555555555555 0.756097245006155
+64 0 1 2 0 36 36 60 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.666666666666667 0.779665123251561
+64 0 1 2 0 36 36 64 0.888888888888889 -9.86623976961809e-17 -5.55111512312578e-17 0.777777777777778 0.808379332677938
+
+# iteration 64
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 1 3 0 36 36 32 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 1 3 0 36 36 36 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.723733474251298
+64 0 1 3 0 36 36 40 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 1 3 0 36 36 44 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+64 0 1 3 0 36 36 48 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.729218296316213
+64 0 1 3 0 36 36 52 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.444444444444444 0.739694852518638
+64 0 1 3 0 36 36 56 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.555555555555555 0.756097245006155
+64 0 1 3 0 36 36 60 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.666666666666667 0.779665123251561
+64 0 1 3 0 36 36 64 0.888888888888889 -5.55111512312578e-17 -5.55111512312578e-17 0.777777777777778 0.808379332677938
+
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 0 0 36 36 22 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.388888888888889 0.733688776948746
+64 0 2 0 0 36 36 24 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.333333333333333 0.729218296316213
+64 0 2 0 0 36 36 26 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.277777777777778 0.726552055334392
+64 0 2 0 0 36 36 28 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.222222222222222 0.725100663327574
+64 0 2 0 0 36 36 30 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.166666666666667 0.724502518106703
+64 0 2 0 0 36 36 32 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 2 0 0 36 36 34 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.0555555555555555 0.72395273727097
+64 0 2 0 0 36 36 36 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.723733474251298
+64 0 2 0 0 36 36 38 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.0555555555555556 0.72395273727097
+64 0 2 0 0 36 36 40 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 1 0 36 36 22 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.388888888888889 0.733688776948746
+64 0 2 1 0 36 36 24 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.333333333333333 0.729218296316213
+64 0 2 1 0 36 36 26 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.277777777777778 0.726552055334392
+64 0 2 1 0 36 36 28 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.222222222222222 0.725100663327574
+64 0 2 1 0 36 36 30 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.166666666666667 0.724502518106703
+64 0 2 1 0 36 36 32 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 2 1 0 36 36 34 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.0555555555555555 0.72395273727097
+64 0 2 1 0 36 36 36 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.723733474251298
+64 0 2 1 0 36 36 38 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.0555555555555556 0.72395273727097
+64 0 2 1 0 36 36 40 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 2 0 36 36 34 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -0.0555555555555556 0.72395273727097
+64 0 2 2 0 36 36 36 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.723733474251298
+64 0 2 2 0 36 36 38 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.0555555555555555 0.72395273727097
+64 0 2 2 0 36 36 40 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 2 2 0 36 36 42 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.166666666666667 0.724502518106703
+64 0 2 2 0 36 36 44 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+64 0 2 2 0 36 36 46 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.277777777777778 0.726552055334391
+64 0 2 2 0 36 36 48 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.333333333333333 0.729218296316213
+64 0 2 2 0 36 36 50 0.888888888888889 2.46655994240452e-17 -5.55111512312578e-17 0.388888888888889 0.733688776948745
+
+# iteration 64
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 2 3 0 36 36 34 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -0.0555555555555556 0.72395273727097
+64 0 2 3 0 36 36 36 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.723733474251298
+64 0 2 3 0 36 36 38 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.0555555555555555 0.72395273727097
+64 0 2 3 0 36 36 40 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 2 3 0 36 36 42 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.166666666666667 0.724502518106703
+64 0 2 3 0 36 36 44 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.222222222222222 0.725100663327574
+64 0 2 3 0 36 36 46 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.277777777777778 0.726552055334391
+64 0 2 3 0 36 36 48 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.333333333333333 0.729218296316213
+64 0 2 3 0 36 36 50 0.888888888888889 -2.77555756156289e-17 -5.55111512312578e-17 0.388888888888889 0.733688776948745
+
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 0 0 36 36 29 0.888888888888889 0 -5.55111512312578e-17 -0.194444444444445 0.724720854915558
+64 0 3 0 0 36 36 30 0.888888888888889 0 -5.55111512312578e-17 -0.166666666666667 0.724502518106703
+64 0 3 0 0 36 36 31 0.888888888888889 0 -5.55111512312578e-17 -0.138888888888889 0.724409709543024
+64 0 3 0 0 36 36 32 0.888888888888889 0 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 3 0 0 36 36 33 0.888888888888889 0 -5.55111512312578e-17 -0.0833333333333334 0.724151545837958
+64 0 3 0 0 36 36 34 0.888888888888889 0 -5.55111512312578e-17 -0.0555555555555556 0.72395273727097
+64 0 3 0 0 36 36 35 0.888888888888889 0 -5.55111512312578e-17 -0.0277777777777778 0.723805016719017
+64 0 3 0 0 36 36 36 0.888888888888889 0 -5.55111512312578e-17 0 0.723733474251298
+64 0 3 0 0 36 36 37 0.888888888888889 0 -5.55111512312578e-17 0.0277777777777778 0.723805016719017
+64 0 3 0 0 36 36 38 0.888888888888889 0 -5.55111512312578e-17 0.0555555555555556 0.72395273727097
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 1 0 36 36 29 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.194444444444445 0.724720854915558
+64 0 3 1 0 36 36 30 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.166666666666667 0.724502518106703
+64 0 3 1 0 36 36 31 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.138888888888889 0.724409709543024
+64 0 3 1 0 36 36 32 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.111111111111111 0.724342898925177
+64 0 3 1 0 36 36 33 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.0833333333333334 0.724151545837958
+64 0 3 1 0 36 36 34 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.0555555555555556 0.72395273727097
+64 0 3 1 0 36 36 35 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.0277777777777778 0.723805016719017
+64 0 3 1 0 36 36 36 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0 0.723733474251298
+64 0 3 1 0 36 36 37 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.0277777777777778 0.723805016719017
+64 0 3 1 0 36 36 38 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.0555555555555556 0.72395273727097
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 2 0 36 36 35 0.888888888888889 0 -5.55111512312578e-17 -0.0277777777777778 0.723805016719017
+64 0 3 2 0 36 36 36 0.888888888888889 0 -5.55111512312578e-17 -1.38777878078145e-17 0.723733474251298
+64 0 3 2 0 36 36 37 0.888888888888889 0 -5.55111512312578e-17 0.0277777777777778 0.723805016719017
+64 0 3 2 0 36 36 38 0.888888888888889 0 -5.55111512312578e-17 0.0555555555555555 0.72395273727097
+64 0 3 2 0 36 36 39 0.888888888888889 0 -5.55111512312578e-17 0.0833333333333333 0.724151545837958
+64 0 3 2 0 36 36 40 0.888888888888889 0 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 3 2 0 36 36 41 0.888888888888889 0 -5.55111512312578e-17 0.138888888888889 0.724409709543024
+64 0 3 2 0 36 36 42 0.888888888888889 0 -5.55111512312578e-17 0.166666666666667 0.724502518106703
+64 0 3 2 0 36 36 43 0.888888888888889 0 -5.55111512312578e-17 0.194444444444444 0.724720854915557
+
+# iteration 64
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+64 0 3 3 0 36 36 35 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -0.0277777777777778 0.723805016719017
+64 0 3 3 0 36 36 36 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.723733474251298
+64 0 3 3 0 36 36 37 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.0277777777777778 0.723805016719017
+64 0 3 3 0 36 36 38 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.0555555555555555 0.72395273727097
+64 0 3 3 0 36 36 39 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.0833333333333333 0.724151545837958
+64 0 3 3 0 36 36 40 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.111111111111111 0.724342898925177
+64 0 3 3 0 36 36 41 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.138888888888889 0.724409709543024
+64 0 3 3 0 36 36 42 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.166666666666667 0.724502518106703
+64 0 3 3 0 36 36 43 0.888888888888889 -1.38777878078145e-17 -5.55111512312578e-17 0.194444444444444 0.724720854915557
+
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 0 0 40 40 0 1.33333333333333 0.111111111111111 0.111111111111111 -1 0.877480603359996
+96 0 0 0 0 40 40 8 1.33333333333333 0.111111111111111 0.111111111111111 -0.777777777777778 0.798008089475601
+96 0 0 0 0 40 40 16 1.33333333333333 0.111111111111111 0.111111111111111 -0.555555555555556 0.735090597558599
+96 0 0 0 0 40 40 24 1.33333333333333 0.111111111111111 0.111111111111111 -0.333333333333333 0.677899959110667
+96 0 0 0 0 40 40 32 1.33333333333333 0.111111111111111 0.111111111111111 -0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 0 0 40 40 48 1.33333333333333 0.111111111111111 0.111111111111111 0.333333333333333 0.677899959110667
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 1 0 40 40 0 1.33333333333333 0.111111111111111 0.111111111111111 -1 0.877480603359996
+96 0 0 1 0 40 40 8 1.33333333333333 0.111111111111111 0.111111111111111 -0.777777777777778 0.798008089475601
+96 0 0 1 0 40 40 16 1.33333333333333 0.111111111111111 0.111111111111111 -0.555555555555556 0.735090597558599
+96 0 0 1 0 40 40 24 1.33333333333333 0.111111111111111 0.111111111111111 -0.333333333333333 0.677899959110667
+96 0 0 1 0 40 40 32 1.33333333333333 0.111111111111111 0.111111111111111 -0.111111111111111 0.632828813666694
+96 0 0 1 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 1 0 40 40 48 1.33333333333333 0.111111111111111 0.111111111111111 0.333333333333333 0.677899959110667
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 2 0 40 40 24 1.33333333333333 0.111111111111111 0.111111111111111 -0.333333333333333 0.677899959110667
+96 0 0 2 0 40 40 32 1.33333333333333 0.111111111111111 0.111111111111111 -0.111111111111111 0.632828813666694
+96 0 0 2 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 2 0 40 40 48 1.33333333333333 0.111111111111111 0.111111111111111 0.333333333333333 0.677899959110667
+96 0 0 2 0 40 40 56 1.33333333333333 0.111111111111111 0.111111111111111 0.555555555555556 0.735090597558599
+96 0 0 2 0 40 40 64 1.33333333333333 0.111111111111111 0.111111111111111 0.777777777777778 0.798008089475601
+96 0 0 2 0 40 40 72 1.33333333333333 0.111111111111111 0.111111111111111 1 0.877480603359996
+
+# iteration 96
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 0 3 0 40 40 24 1.33333333333333 0.111111111111111 0.111111111111111 -0.333333333333333 0.677899959110667
+96 0 0 3 0 40 40 32 1.33333333333333 0.111111111111111 0.111111111111111 -0.111111111111111 0.632828813666694
+96 0 0 3 0 40 40 40 1.33333333333333 0.111111111111111 0.111111111111111 0.111111111111111 0.632828813666694
+96 0 0 3 0 40 40 48 1.33333333333333 0.111111111111111 0.111111111111111 0.333333333333333 0.677899959110667
+96 0 0 3 0 40 40 56 1.33333333333333 0.111111111111111 0.111111111111111 0.555555555555556 0.735090597558599
+96 0 0 3 0 40 40 64 1.33333333333333 0.111111111111111 0.111111111111111 0.777777777777778 0.798008089475601
+96 0 0 3 0 40 40 72 1.33333333333333 0.111111111111111 0.111111111111111 1 0.877480603359996
+
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 0 0 36 36 8 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.777777777777778 0.796688784792057
+96 0 1 0 0 36 36 12 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.666666666666667 0.76190136189151
+96 0 1 0 0 36 36 16 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.555555555555556 0.729928937348657
+96 0 1 0 0 36 36 20 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.444444444444444 0.698215010923196
+96 0 1 0 0 36 36 24 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.333333333333333 0.668908746807157
+96 0 1 0 0 36 36 28 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.222222222222222 0.641345710414296
+96 0 1 0 0 36 36 32 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 1 0 0 36 36 36 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.61547287921812
+96 0 1 0 0 36 36 40 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 1 0 0 36 36 44 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 1 0 36 36 8 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.777777777777778 0.796688784792057
+96 0 1 1 0 36 36 12 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.666666666666667 0.76190136189151
+96 0 1 1 0 36 36 16 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.555555555555556 0.729928937348657
+96 0 1 1 0 36 36 20 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.444444444444444 0.698215010923196
+96 0 1 1 0 36 36 24 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.668908746807157
+96 0 1 1 0 36 36 28 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.641345710414296
+96 0 1 1 0 36 36 32 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 1 1 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.61547287921812
+96 0 1 1 0 36 36 40 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 1 1 0 36 36 44 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 2 0 36 36 32 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 1 2 0 36 36 36 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 2 0 36 36 40 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 1 2 0 36 36 44 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+96 0 1 2 0 36 36 48 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.333333333333333 0.668908746807157
+96 0 1 2 0 36 36 52 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.444444444444444 0.698215010923196
+96 0 1 2 0 36 36 56 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.555555555555555 0.729928937348657
+96 0 1 2 0 36 36 60 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.666666666666667 0.76190136189151
+96 0 1 2 0 36 36 64 1.33333333333333 -9.86623976961809e-17 -5.55111512312578e-17 0.777777777777778 0.796688784792057
+
+# iteration 96
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 1 3 0 36 36 32 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 1 3 0 36 36 36 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.61547287921812
+96 0 1 3 0 36 36 40 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 1 3 0 36 36 44 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+96 0 1 3 0 36 36 48 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.668908746807157
+96 0 1 3 0 36 36 52 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.444444444444444 0.698215010923196
+96 0 1 3 0 36 36 56 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.555555555555555 0.729928937348657
+96 0 1 3 0 36 36 60 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.666666666666667 0.76190136189151
+96 0 1 3 0 36 36 64 1.33333333333333 -5.55111512312578e-17 -5.55111512312578e-17 0.777777777777778 0.796688784792057
+
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 0 0 36 36 22 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.388888888888889 0.683302448238139
+96 0 2 0 0 36 36 24 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.333333333333333 0.668908746807157
+96 0 2 0 0 36 36 26 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.277777777777778 0.654541556639422
+96 0 2 0 0 36 36 28 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.222222222222222 0.641345710414296
+96 0 2 0 0 36 36 30 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.166666666666667 0.630026346765969
+96 0 2 0 0 36 36 32 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 2 0 0 36 36 34 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.0555555555555555 0.616824486578861
+96 0 2 0 0 36 36 36 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.61547287921812
+96 0 2 0 0 36 36 38 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.0555555555555556 0.616824486578861
+96 0 2 0 0 36 36 40 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 1 0 36 36 22 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.388888888888889 0.683302448238139
+96 0 2 1 0 36 36 24 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.333333333333333 0.668908746807157
+96 0 2 1 0 36 36 26 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.277777777777778 0.654541556639422
+96 0 2 1 0 36 36 28 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.222222222222222 0.641345710414296
+96 0 2 1 0 36 36 30 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.166666666666667 0.630026346765969
+96 0 2 1 0 36 36 32 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 2 1 0 36 36 34 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.0555555555555555 0.616824486578861
+96 0 2 1 0 36 36 36 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.61547287921812
+96 0 2 1 0 36 36 38 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.0555555555555556 0.616824486578861
+96 0 2 1 0 36 36 40 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 2 0 36 36 34 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -0.0555555555555556 0.616824486578861
+96 0 2 2 0 36 36 36 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.61547287921812
+96 0 2 2 0 36 36 38 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.0555555555555555 0.616824486578861
+96 0 2 2 0 36 36 40 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 2 2 0 36 36 42 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.166666666666667 0.63002634676597
+96 0 2 2 0 36 36 44 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+96 0 2 2 0 36 36 46 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.277777777777778 0.654541556639422
+96 0 2 2 0 36 36 48 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.333333333333333 0.668908746807157
+96 0 2 2 0 36 36 50 1.33333333333333 2.46655994240452e-17 -5.55111512312578e-17 0.388888888888889 0.683302448238139
+
+# iteration 96
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 2 3 0 36 36 34 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -0.0555555555555556 0.616824486578861
+96 0 2 3 0 36 36 36 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.61547287921812
+96 0 2 3 0 36 36 38 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.0555555555555555 0.616824486578861
+96 0 2 3 0 36 36 40 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 2 3 0 36 36 42 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.166666666666667 0.63002634676597
+96 0 2 3 0 36 36 44 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.222222222222222 0.641345710414297
+96 0 2 3 0 36 36 46 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.277777777777778 0.654541556639422
+96 0 2 3 0 36 36 48 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.333333333333333 0.668908746807157
+96 0 2 3 0 36 36 50 1.33333333333333 -2.77555756156289e-17 -5.55111512312578e-17 0.388888888888889 0.683302448238139
+
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 0 0 36 36 29 1.33333333333333 0 -5.55111512312578e-17 -0.194444444444445 0.63539979750899
+96 0 3 0 0 36 36 30 1.33333333333333 0 -5.55111512312578e-17 -0.166666666666667 0.630026346765969
+96 0 3 0 0 36 36 31 1.33333333333333 0 -5.55111512312578e-17 -0.138888888888889 0.625297419028293
+96 0 3 0 0 36 36 32 1.33333333333333 0 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 3 0 0 36 36 33 1.33333333333333 0 -5.55111512312578e-17 -0.0833333333333334 0.618663308361111
+96 0 3 0 0 36 36 34 1.33333333333333 0 -5.55111512312578e-17 -0.0555555555555556 0.616824486578861
+96 0 3 0 0 36 36 35 1.33333333333333 0 -5.55111512312578e-17 -0.0277777777777778 0.615777600484678
+96 0 3 0 0 36 36 36 1.33333333333333 0 -5.55111512312578e-17 0 0.61547287921812
+96 0 3 0 0 36 36 37 1.33333333333333 0 -5.55111512312578e-17 0.0277777777777778 0.615777600484678
+96 0 3 0 0 36 36 38 1.33333333333333 0 -5.55111512312578e-17 0.0555555555555556 0.616824486578861
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 1 0 36 36 29 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.194444444444445 0.63539979750899
+96 0 3 1 0 36 36 30 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.166666666666667 0.630026346765969
+96 0 3 1 0 36 36 31 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.138888888888889 0.625297419028293
+96 0 3 1 0 36 36 32 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.111111111111111 0.621410197839124
+96 0 3 1 0 36 36 33 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.0833333333333334 0.618663308361111
+96 0 3 1 0 36 36 34 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.0555555555555556 0.616824486578861
+96 0 3 1 0 36 36 35 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.0277777777777778 0.615777600484678
+96 0 3 1 0 36 36 36 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0 0.61547287921812
+96 0 3 1 0 36 36 37 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.0277777777777778 0.615777600484678
+96 0 3 1 0 36 36 38 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.0555555555555556 0.616824486578861
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 2 0 36 36 35 1.33333333333333 0 -5.55111512312578e-17 -0.0277777777777778 0.615777600484678
+96 0 3 2 0 36 36 36 1.33333333333333 0 -5.55111512312578e-17 -1.38777878078145e-17 0.61547287921812
+96 0 3 2 0 36 36 37 1.33333333333333 0 -5.55111512312578e-17 0.0277777777777778 0.615777600484678
+96 0 3 2 0 36 36 38 1.33333333333333 0 -5.55111512312578e-17 0.0555555555555555 0.616824486578861
+96 0 3 2 0 36 36 39 1.33333333333333 0 -5.55111512312578e-17 0.0833333333333333 0.618663308361111
+96 0 3 2 0 36 36 40 1.33333333333333 0 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 3 2 0 36 36 41 1.33333333333333 0 -5.55111512312578e-17 0.138888888888889 0.625297419028293
+96 0 3 2 0 36 36 42 1.33333333333333 0 -5.55111512312578e-17 0.166666666666667 0.63002634676597
+96 0 3 2 0 36 36 43 1.33333333333333 0 -5.55111512312578e-17 0.194444444444444 0.63539979750899
+
+# iteration 96
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+96 0 3 3 0 36 36 35 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -0.0277777777777778 0.615777600484678
+96 0 3 3 0 36 36 36 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.61547287921812
+96 0 3 3 0 36 36 37 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.0277777777777778 0.615777600484678
+96 0 3 3 0 36 36 38 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.0555555555555555 0.616824486578861
+96 0 3 3 0 36 36 39 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.0833333333333333 0.618663308361111
+96 0 3 3 0 36 36 40 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.111111111111111 0.621410197839124
+96 0 3 3 0 36 36 41 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.138888888888889 0.625297419028293
+96 0 3 3 0 36 36 42 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.166666666666667 0.63002634676597
+96 0 3 3 0 36 36 43 1.33333333333333 -1.38777878078145e-17 -5.55111512312578e-17 0.194444444444444 0.63539979750899
+
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 0 0 40 40 0 1.77777777777778 0.111111111111111 0.111111111111111 -1 0.873700996777018
+128 0 0 0 0 40 40 8 1.77777777777778 0.111111111111111 0.111111111111111 -0.777777777777778 0.859471717622308
+128 0 0 0 0 40 40 16 1.77777777777778 0.111111111111111 0.111111111111111 -0.555555555555556 0.863004424640887
+128 0 0 0 0 40 40 24 1.77777777777778 0.111111111111111 0.111111111111111 -0.333333333333333 0.883486952153519
+128 0 0 0 0 40 40 32 1.77777777777778 0.111111111111111 0.111111111111111 -0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 0 0 40 40 48 1.77777777777778 0.111111111111111 0.111111111111111 0.333333333333333 0.883486952153519
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 1 0 40 40 0 1.77777777777778 0.111111111111111 0.111111111111111 -1 0.873700996777018
+128 0 0 1 0 40 40 8 1.77777777777778 0.111111111111111 0.111111111111111 -0.777777777777778 0.859471717622308
+128 0 0 1 0 40 40 16 1.77777777777778 0.111111111111111 0.111111111111111 -0.555555555555556 0.863004424640887
+128 0 0 1 0 40 40 24 1.77777777777778 0.111111111111111 0.111111111111111 -0.333333333333333 0.883486952153519
+128 0 0 1 0 40 40 32 1.77777777777778 0.111111111111111 0.111111111111111 -0.111111111111111 0.915799135771738
+128 0 0 1 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 1 0 40 40 48 1.77777777777778 0.111111111111111 0.111111111111111 0.333333333333333 0.883486952153519
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 2 0 40 40 24 1.77777777777778 0.111111111111111 0.111111111111111 -0.333333333333333 0.883486952153519
+128 0 0 2 0 40 40 32 1.77777777777778 0.111111111111111 0.111111111111111 -0.111111111111111 0.915799135771738
+128 0 0 2 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 2 0 40 40 48 1.77777777777778 0.111111111111111 0.111111111111111 0.333333333333333 0.883486952153519
+128 0 0 2 0 40 40 56 1.77777777777778 0.111111111111111 0.111111111111111 0.555555555555556 0.863004424640887
+128 0 0 2 0 40 40 64 1.77777777777778 0.111111111111111 0.111111111111111 0.777777777777778 0.859471717622308
+128 0 0 2 0 40 40 72 1.77777777777778 0.111111111111111 0.111111111111111 1 0.873700996777018
+
+# iteration 128
+# refinement level 0 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 0 3 0 40 40 24 1.77777777777778 0.111111111111111 0.111111111111111 -0.333333333333333 0.883486952153519
+128 0 0 3 0 40 40 32 1.77777777777778 0.111111111111111 0.111111111111111 -0.111111111111111 0.915799135771738
+128 0 0 3 0 40 40 40 1.77777777777778 0.111111111111111 0.111111111111111 0.111111111111111 0.915799135771738
+128 0 0 3 0 40 40 48 1.77777777777778 0.111111111111111 0.111111111111111 0.333333333333333 0.883486952153519
+128 0 0 3 0 40 40 56 1.77777777777778 0.111111111111111 0.111111111111111 0.555555555555556 0.863004424640887
+128 0 0 3 0 40 40 64 1.77777777777778 0.111111111111111 0.111111111111111 0.777777777777778 0.859471717622308
+128 0 0 3 0 40 40 72 1.77777777777778 0.111111111111111 0.111111111111111 1 0.873700996777018
+
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 0 0 36 36 8 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.777777777777778 0.862653663591007
+128 0 1 0 0 36 36 12 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.666666666666667 0.862560028606905
+128 0 1 0 0 36 36 16 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.555555555555556 0.866965759785718
+128 0 1 0 0 36 36 20 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.444444444444444 0.876167092595071
+128 0 1 0 0 36 36 24 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.333333333333333 0.889185421864397
+128 0 1 0 0 36 36 28 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.222222222222222 0.90799818468156
+128 0 1 0 0 36 36 32 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 1 0 0 36 36 36 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.928389498223199
+128 0 1 0 0 36 36 40 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 1 0 0 36 36 44 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 1 0 36 36 8 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.777777777777778 0.862653663591007
+128 0 1 1 0 36 36 12 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.666666666666667 0.862560028606905
+128 0 1 1 0 36 36 16 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.555555555555556 0.866965759785718
+128 0 1 1 0 36 36 20 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.444444444444444 0.876167092595071
+128 0 1 1 0 36 36 24 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.333333333333333 0.889185421864397
+128 0 1 1 0 36 36 28 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.222222222222222 0.90799818468156
+128 0 1 1 0 36 36 32 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 1 1 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -9.86623976961809e-17 0.928389498223199
+128 0 1 1 0 36 36 40 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 1 1 0 36 36 44 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 2 0 36 36 32 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 1 2 0 36 36 36 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 2 0 36 36 40 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 1 2 0 36 36 44 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+128 0 1 2 0 36 36 48 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.333333333333333 0.889185421864397
+128 0 1 2 0 36 36 52 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.444444444444444 0.876167092595071
+128 0 1 2 0 36 36 56 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.555555555555555 0.866965759785718
+128 0 1 2 0 36 36 60 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.666666666666667 0.862560028606905
+128 0 1 2 0 36 36 64 1.77777777777778 -9.86623976961809e-17 -5.55111512312578e-17 0.777777777777778 0.862653663591007
+
+# iteration 128
+# refinement level 1 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 1 3 0 36 36 32 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 1 3 0 36 36 36 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 -5.55111512312578e-17 0.928389498223199
+128 0 1 3 0 36 36 40 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 1 3 0 36 36 44 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+128 0 1 3 0 36 36 48 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.333333333333333 0.889185421864397
+128 0 1 3 0 36 36 52 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.444444444444444 0.876167092595071
+128 0 1 3 0 36 36 56 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.555555555555555 0.866965759785718
+128 0 1 3 0 36 36 60 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.666666666666667 0.862560028606905
+128 0 1 3 0 36 36 64 1.77777777777778 -5.55111512312578e-17 -5.55111512312578e-17 0.777777777777778 0.862653663591007
+
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 0 0 36 36 22 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.388888888888889 0.882075542854246
+128 0 2 0 0 36 36 24 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.333333333333333 0.889185421864397
+128 0 2 0 0 36 36 26 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.277777777777778 0.898403242286228
+128 0 2 0 0 36 36 28 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.222222222222222 0.90799818468156
+128 0 2 0 0 36 36 30 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.166666666666667 0.916919384356027
+128 0 2 0 0 36 36 32 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 2 0 0 36 36 34 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.0555555555555555 0.927485951077396
+128 0 2 0 0 36 36 36 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 2.46655994240452e-17 0.928389498223199
+128 0 2 0 0 36 36 38 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.0555555555555556 0.927485951077396
+128 0 2 0 0 36 36 40 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 1 0 36 36 22 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.388888888888889 0.882075542854246
+128 0 2 1 0 36 36 24 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.333333333333333 0.889185421864397
+128 0 2 1 0 36 36 26 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.277777777777778 0.898403242286228
+128 0 2 1 0 36 36 28 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.222222222222222 0.90799818468156
+128 0 2 1 0 36 36 30 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.166666666666667 0.916919384356027
+128 0 2 1 0 36 36 32 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 2 1 0 36 36 34 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.0555555555555555 0.927485951077396
+128 0 2 1 0 36 36 36 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 2.46655994240452e-17 0.928389498223199
+128 0 2 1 0 36 36 38 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.0555555555555556 0.927485951077396
+128 0 2 1 0 36 36 40 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 2 0 36 36 34 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -0.0555555555555556 0.927485951077396
+128 0 2 2 0 36 36 36 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.928389498223199
+128 0 2 2 0 36 36 38 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.0555555555555555 0.927485951077396
+128 0 2 2 0 36 36 40 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 2 2 0 36 36 42 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.166666666666667 0.916919384356027
+128 0 2 2 0 36 36 44 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+128 0 2 2 0 36 36 46 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.277777777777778 0.898403242286228
+128 0 2 2 0 36 36 48 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.333333333333333 0.889185421864397
+128 0 2 2 0 36 36 50 1.77777777777778 2.46655994240452e-17 -5.55111512312578e-17 0.388888888888889 0.882075542854246
+
+# iteration 128
+# refinement level 2 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 2 3 0 36 36 34 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -0.0555555555555556 0.927485951077396
+128 0 2 3 0 36 36 36 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 -2.77555756156289e-17 0.928389498223199
+128 0 2 3 0 36 36 38 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.0555555555555555 0.927485951077396
+128 0 2 3 0 36 36 40 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 2 3 0 36 36 42 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.166666666666667 0.916919384356027
+128 0 2 3 0 36 36 44 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.222222222222222 0.90799818468156
+128 0 2 3 0 36 36 46 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.277777777777778 0.898403242286228
+128 0 2 3 0 36 36 48 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.333333333333333 0.889185421864397
+128 0 2 3 0 36 36 50 1.77777777777778 -2.77555756156289e-17 -5.55111512312578e-17 0.388888888888889 0.882075542854246
+
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 0 0 36 36 29 1.77777777777778 0 -5.55111512312578e-17 -0.194444444444445 0.912613836832073
+128 0 3 0 0 36 36 30 1.77777777777778 0 -5.55111512312578e-17 -0.166666666666667 0.916919384356027
+128 0 3 0 0 36 36 31 1.77777777777778 0 -5.55111512312578e-17 -0.138888888888889 0.920818233193455
+128 0 3 0 0 36 36 32 1.77777777777778 0 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 3 0 0 36 36 33 1.77777777777778 0 -5.55111512312578e-17 -0.0833333333333334 0.926147880297958
+128 0 3 0 0 36 36 34 1.77777777777778 0 -5.55111512312578e-17 -0.0555555555555556 0.927485951077396
+128 0 3 0 0 36 36 35 1.77777777777778 0 -5.55111512312578e-17 -0.0277777777777778 0.928209975180567
+128 0 3 0 0 36 36 36 1.77777777777778 0 -5.55111512312578e-17 0 0.928389498223199
+128 0 3 0 0 36 36 37 1.77777777777778 0 -5.55111512312578e-17 0.0277777777777778 0.928209975180567
+128 0 3 0 0 36 36 38 1.77777777777778 0 -5.55111512312578e-17 0.0555555555555556 0.927485951077396
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 1 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 1 0 36 36 29 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.194444444444445 0.912613836832073
+128 0 3 1 0 36 36 30 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.166666666666667 0.916919384356027
+128 0 3 1 0 36 36 31 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.138888888888889 0.920818233193455
+128 0 3 1 0 36 36 32 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.111111111111111 0.924033489738888
+128 0 3 1 0 36 36 33 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.0833333333333334 0.926147880297958
+128 0 3 1 0 36 36 34 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.0555555555555556 0.927485951077396
+128 0 3 1 0 36 36 35 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.0277777777777778 0.928209975180567
+128 0 3 1 0 36 36 36 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0 0.928389498223199
+128 0 3 1 0 36 36 37 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.0277777777777778 0.928209975180567
+128 0 3 1 0 36 36 38 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.0555555555555556 0.927485951077396
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 2 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 2 0 36 36 35 1.77777777777778 0 -5.55111512312578e-17 -0.0277777777777778 0.928209975180567
+128 0 3 2 0 36 36 36 1.77777777777778 0 -5.55111512312578e-17 -1.38777878078145e-17 0.928389498223199
+128 0 3 2 0 36 36 37 1.77777777777778 0 -5.55111512312578e-17 0.0277777777777778 0.928209975180567
+128 0 3 2 0 36 36 38 1.77777777777778 0 -5.55111512312578e-17 0.0555555555555555 0.927485951077396
+128 0 3 2 0 36 36 39 1.77777777777778 0 -5.55111512312578e-17 0.0833333333333333 0.926147880297958
+128 0 3 2 0 36 36 40 1.77777777777778 0 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 3 2 0 36 36 41 1.77777777777778 0 -5.55111512312578e-17 0.138888888888889 0.920818233193455
+128 0 3 2 0 36 36 42 1.77777777777778 0 -5.55111512312578e-17 0.166666666666667 0.916919384356027
+128 0 3 2 0 36 36 43 1.77777777777778 0 -5.55111512312578e-17 0.194444444444444 0.912613836832073
+
+# iteration 128
+# refinement level 3 multigrid level 0 map 0 component 3 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+128 0 3 3 0 36 36 35 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -0.0277777777777778 0.928209975180567
+128 0 3 3 0 36 36 36 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 -1.38777878078145e-17 0.928389498223199
+128 0 3 3 0 36 36 37 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.0277777777777778 0.928209975180567
+128 0 3 3 0 36 36 38 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.0555555555555555 0.927485951077396
+128 0 3 3 0 36 36 39 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.0833333333333333 0.926147880297958
+128 0 3 3 0 36 36 40 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.111111111111111 0.924033489738888
+128 0 3 3 0 36 36 41 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.138888888888889 0.920818233193455
+128 0 3 3 0 36 36 42 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.166666666666667 0.916919384356027
+128 0 3 3 0 36 36 43 1.77777777777778 -1.38777878078145e-17 -5.55111512312578e-17 0.194444444444444 0.912613836832073
+
+
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_maximum.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_maximum.xg
new file mode 100644
index 000000000..e25d17d43
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_maximum.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.8737009967770
+1.3333333333333 0.8774806033600
+1.7777777777778 0.9157991357717
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_minimum.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_minimum.xg
new file mode 100644
index 000000000..973172b6d
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_minimum.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.6796516032334
+1.3333333333333 0.6328288136667
+1.7777777777778 0.6796516032334
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm1.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm1.xg
new file mode 100644
index 000000000..6e8792bca
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm1.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.7927895664365
+1.3333333333333 0.7914772512610
+1.7777777777778 0.8208628581415
diff --git a/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm2.xg b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm2.xg
new file mode 100644
index 000000000..124c22eda
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/CarpetWaveToyRecover_test_4proc/phi_norm2.xg
@@ -0,0 +1,4 @@
+"phi v time
+0.8888888888889 0.7937177688028
+1.3333333333333 0.7927587735574
+1.7777777777778 0.8218200985038
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data.par b/Carpet/CarpetIOHDF5/test/input_initial_data.par
new file mode 100644
index 000000000..a16e312c6
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data.par
@@ -0,0 +1,57 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/test/input_initial_data.par,v 1.3 2004/08/19 11:47:31 tradke Exp $
+
+# deactivate the IDScalarWaveMoL thorn
+# initial data is read from files using the filereader
+ActiveThorns = "Carpet CarpetLib CarpetRegrid CarpetInterp CarpetReduce CarpetSlab Boundary CoordBase SymBase CartGrid3D Periodic LocalInterp NaNChecker Slab Time MoL WaveToyMoL IOUtil IOBasic CarpetIOHDF5"
+#ActiveThorns = "Carpet CarpetLib CarpetRegrid CarpetInterp CarpetReduce CarpetSlab Boundary CoordBase SymBase CartGrid3D Periodic LocalInterp NaNChecker Slab Time MoL IDScalarWaveMoL WaveToyMoL IOUtil IOBasic CarpetIOHDF5"
+
+
+Cactus::cctk_itlast = 128
+
+Driver::global_nx = 24
+Driver::global_ny = 5
+Driver::global_nz = 5
+Driver::ghost_size = 2
+
+Carpet::max_refinement_levels = 3
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+Carpet::init_each_timelevel = "yes"
+
+CarpetRegrid::refinement_levels = 1
+CarpetRegrid::refined_regions = "manual-gridpoint-list"
+CarpetRegrid::gridpoints = "[[ ([28,4,4]:[68,12,12]:[2,2,2]) ]]"
+CarpetRegrid::outerbounds = "[[ [[0,0],[1,1],[1,1]] ]]"
+
+NaNChecker::check_every = 16
+NaNChecker::check_vars = "all"
+NaNChecker::action_if_found = "terminate"
+
+Grid::domain = full
+Grid::type = byrange
+Grid::xmin = -0.1
+Grid::ymin = -0.15
+Grid::zmin = -0.15
+Grid::xmax = +1.05
+Grid::ymax = +0.15
+Grid::zmax = +0.15
+
+Periodic::periodic = "yes"
+
+Time::dtfac = 0.25
+
+MoL::ODE_Method = "ICN"
+
+IO::out_dir = $parfilename
+IO::out_fileinfo = "none"
+IO::parfile_write = "no"
+IO::out_every = 1
+IO::out_yline_x = 0.5
+IO::out_zline_x = 0.5
+
+IOBasic::outInfo_vars = "WaveToyMoL::scalarevolve"
+IOBasic::outScalar_vars = "WaveToyMoL::scalarevolve"
+
+# filereader input files and directory
+IO::filereader_ID_files = "psi phi"
+IO::recover_dir = "../../../arrangements/Carpet/CarpetIOHDF5/test/input_initial_data"
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/phi.h5 b/Carpet/CarpetIOHDF5/test/input_initial_data/phi.h5
new file mode 100644
index 000000000..86ad6542c
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/phi.h5
Binary files differ
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/phi_maximum.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_maximum.xg
new file mode 100644
index 000000000..78ce3fbaa
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_maximum.xg
@@ -0,0 +1,34 @@
+"phi v time
+0.0000000000000 1.0000000000000
+0.0125000000000 0.9986404587860
+0.0250000000000 0.9945673789444
+0.0375000000000 1.0119432126264
+0.0500000000000 1.0268055861612
+0.0625000000000 1.0388778598256
+0.0750000000000 1.0481272355649
+0.0875000000000 1.0716903046796
+0.1000000000000 1.0982829974947
+0.1125000000000 1.1218913478250
+0.1250000000000 1.1424512117393
+0.1375000000000 1.1599067288796
+0.1500000000000 1.1900017850006
+0.1625000000000 1.2219191687257
+0.1750000000000 1.2505162515579
+0.1875000000000 1.2757153346263
+0.2000000000000 1.2974479523686
+0.2125000000000 1.3156550585508
+0.2250000000000 1.3380762519805
+0.2375000000000 1.3673894350252
+0.2500000000000 1.3929870450400
+0.2625000000000 1.4147995341575
+0.2750000000000 1.4327676397030
+0.2875000000000 1.4468425452064
+0.3000000000000 1.4569860130280
+0.3125000000000 1.4631704882406
+0.3250000000000 1.4713646259286
+0.3375000000000 1.4861345916159
+0.3500000000000 1.4968663526009
+0.3625000000000 1.5035307556225
+0.3750000000000 1.5061096994421
+0.3875000000000 1.5045961840087
+0.4000000000000 1.4989943294590
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/phi_minimum.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_minimum.xg
new file mode 100644
index 000000000..d62cc5b13
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_minimum.xg
@@ -0,0 +1,34 @@
+"phi v time
+0.0000000000000 -1.0000000000000
+0.0125000000000 -0.9986404587860
+0.0250000000000 -0.9945673789444
+0.0375000000000 -1.0119432126264
+0.0500000000000 -1.0268055861612
+0.0625000000000 -1.0388778598256
+0.0750000000000 -1.0481272355649
+0.0875000000000 -1.0716903046796
+0.1000000000000 -1.0982829974947
+0.1125000000000 -1.1218913478250
+0.1250000000000 -1.1424512117393
+0.1375000000000 -1.1599067288796
+0.1500000000000 -1.1900017850006
+0.1625000000000 -1.2219191687257
+0.1750000000000 -1.2505162515579
+0.1875000000000 -1.2757153346263
+0.2000000000000 -1.2974479523686
+0.2125000000000 -1.3156550585508
+0.2250000000000 -1.3380762519805
+0.2375000000000 -1.3673894350252
+0.2500000000000 -1.3929870450400
+0.2625000000000 -1.4147995341575
+0.2750000000000 -1.4327676397030
+0.2875000000000 -1.4468425452064
+0.3000000000000 -1.4569860130280
+0.3125000000000 -1.4631704882406
+0.3250000000000 -1.4713646259286
+0.3375000000000 -1.4861345916159
+0.3500000000000 -1.4968663526009
+0.3625000000000 -1.5035307556225
+0.3750000000000 -1.5061096994421
+0.3875000000000 -1.5045961840087
+0.4000000000000 -1.4989943294590
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm1.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm1.xg
new file mode 100644
index 000000000..c3618d28a
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm1.xg
@@ -0,0 +1,34 @@
+"phi v time
+0.0000000000000 0.6807763773465
+0.0125000000000 0.6883135845966
+0.0250000000000 0.6939804679330
+0.0375000000000 0.6977616325549
+0.0500000000000 0.6996468076312
+0.0625000000000 0.7113978965384
+0.0750000000000 0.7221770888255
+0.0875000000000 0.7309939361006
+0.1000000000000 0.7378244845393
+0.1125000000000 0.7471033499543
+0.1250000000000 0.7616523319997
+0.1375000000000 0.7741316985445
+0.1500000000000 0.7845075440356
+0.1625000000000 0.7927516787444
+0.1750000000000 0.7988417053545
+0.1875000000000 0.8110731791327
+0.2000000000000 0.8232064841264
+0.2125000000000 0.8331029209643
+0.2250000000000 0.8407356028304
+0.2375000000000 0.8460837941132
+0.2500000000000 0.8491329667380
+0.2625000000000 0.8498748396317
+0.2750000000000 0.8565790617590
+0.2875000000000 0.8664821742987
+0.3000000000000 0.8740308325676
+0.3125000000000 0.8792045294337
+0.3250000000000 0.8819892111320
+0.3375000000000 0.8823773154395
+0.3500000000000 0.8803677922124
+0.3625000000000 0.8759661062267
+0.3750000000000 0.8691842223177
+0.3875000000000 0.8713683085882
+0.4000000000000 0.8728859333298
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm2.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm2.xg
new file mode 100644
index 000000000..bd291cc98
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/phi_norm2.xg
@@ -0,0 +1,34 @@
+"phi v time
+0.0000000000000 0.7489861339271
+0.0125000000000 0.7518419444399
+0.0250000000000 0.7562195954773
+0.0375000000000 0.7620457996251
+0.0500000000000 0.7692251813885
+0.0625000000000 0.7776434804038
+0.0750000000000 0.7871711042100
+0.0875000000000 0.7976667955515
+0.1000000000000 0.8089812100628
+0.1125000000000 0.8209602464387
+0.1250000000000 0.8334480229821
+0.1375000000000 0.8462894436775
+0.1500000000000 0.8593323383447
+0.1625000000000 0.8724291925272
+0.1750000000000 0.8854385033832
+0.1875000000000 0.8982258092504
+0.2000000000000 0.9106644447590
+0.2125000000000 0.9226360724714
+0.2250000000000 0.9340310379450
+0.2375000000000 0.9447485893398
+0.2500000000000 0.9546969963259
+0.2625000000000 0.9637935967973
+0.2750000000000 0.9719647941895
+0.2875000000000 0.9791460232367
+0.3000000000000 0.9852816978433
+0.3125000000000 0.9903251513560
+0.3250000000000 0.9942385768297
+0.3375000000000 0.9969929727762
+0.3500000000000 0.9985680982614
+0.3625000000000 0.9989524399743
+0.3750000000000 0.9981431929225
+0.3875000000000 0.9961462556366
+0.4000000000000 0.9929762400874
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/psi.h5 b/Carpet/CarpetIOHDF5/test/input_initial_data/psi.h5
new file mode 100644
index 000000000..fbb911bff
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/psi.h5
Binary files differ
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/psi_maximum.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_maximum.xg
new file mode 100644
index 000000000..27be32935
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_maximum.xg
@@ -0,0 +1,34 @@
+"psi v time
+0.0000000000000 6.2831853071796
+0.0125000000000 6.2746430577991
+0.0250000000000 6.2490511423835
+0.0375000000000 6.2064791316818
+0.0500000000000 6.1470427352297
+0.0625000000000 6.1059995615621
+0.0750000000000 6.0823508015521
+0.0875000000000 6.0421749067230
+0.1000000000000 5.9855810749628
+0.1125000000000 5.9127231153562
+0.1250000000000 5.8237990301668
+0.1375000000000 5.7190504767363
+0.1500000000000 5.5987621107645
+0.1625000000000 5.4972069587517
+0.1750000000000 5.4231800426911
+0.1875000000000 5.3344172069405
+0.2000000000000 5.2311596682320
+0.2125000000000 5.1136880283712
+0.2250000000000 4.9823215117033
+0.2375000000000 4.8471541168578
+0.2500000000000 4.7760344394342
+0.2625000000000 4.6919372838490
+0.2750000000000 4.5950911858351
+0.2875000000000 4.4857593225805
+0.3000000000000 4.3764423117654
+0.3125000000000 4.3393959614856
+0.3250000000000 4.2905585196070
+0.3375000000000 4.2300627107315
+0.3500000000000 4.1580729377426
+0.3625000000000 4.1642308303415
+0.3750000000000 4.1713735624227
+0.3875000000000 4.1671816776830
+0.4000000000000 4.1516665873958
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/psi_minimum.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_minimum.xg
new file mode 100644
index 000000000..fb6cf4909
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_minimum.xg
@@ -0,0 +1,34 @@
+"psi v time
+0.0000000000000 -6.2831853071796
+0.0125000000000 -6.2746430577991
+0.0250000000000 -6.2490511423835
+0.0375000000000 -6.2064791316818
+0.0500000000000 -6.1470427352296
+0.0625000000000 -6.1059995615621
+0.0750000000000 -6.0823508015522
+0.0875000000000 -6.0421749067230
+0.1000000000000 -5.9855810749628
+0.1125000000000 -5.9127231153562
+0.1250000000000 -5.8237990301668
+0.1375000000000 -5.7190504767363
+0.1500000000000 -5.5987621107645
+0.1625000000000 -5.4972069587517
+0.1750000000000 -5.4231800426911
+0.1875000000000 -5.3344172069405
+0.2000000000000 -5.2311596682320
+0.2125000000000 -5.1136880283712
+0.2250000000000 -4.9823215117033
+0.2375000000000 -4.8471541168578
+0.2500000000000 -4.7760344394342
+0.2625000000000 -4.6919372838490
+0.2750000000000 -4.5950911858351
+0.2875000000000 -4.4857593225805
+0.3000000000000 -4.3764423117654
+0.3125000000000 -4.3393959614856
+0.3250000000000 -4.2905585196070
+0.3375000000000 -4.2300627107315
+0.3500000000000 -4.1580729377426
+0.3625000000000 -4.1642308303415
+0.3750000000000 -4.1713735624227
+0.3875000000000 -4.1671816776830
+0.4000000000000 -4.1516665873958
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm1.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm1.xg
new file mode 100644
index 000000000..8fd7f80b2
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm1.xg
@@ -0,0 +1,34 @@
+"psi v time
+0.0000000000000 3.6215553016171
+0.0125000000000 3.6364763601998
+0.0250000000000 3.6415162291713
+0.0375000000000 3.6366612322730
+0.0500000000000 3.6219245799508
+0.0625000000000 3.5973463334095
+0.0750000000000 3.5629932957073
+0.0875000000000 3.5189588301869
+0.1000000000000 3.4653626067366
+0.1125000000000 3.4178909850438
+0.1250000000000 3.4031487535687
+0.1375000000000 3.3791593932900
+0.1500000000000 3.3459881060254
+0.1625000000000 3.3037250429285
+0.1750000000000 3.2524850594811
+0.1875000000000 3.1924074033578
+0.2000000000000 3.1283204712833
+0.2125000000000 3.1162479409102
+0.2250000000000 3.0957078538273
+0.2375000000000 3.0667560379254
+0.2500000000000 3.0294711776388
+0.2625000000000 2.9839546000991
+0.2750000000000 2.9543847137139
+0.2875000000000 2.9417629539386
+0.3000000000000 2.9211477552395
+0.3125000000000 2.8925951487277
+0.3250000000000 2.8561827332153
+0.3375000000000 2.8621799018707
+0.3500000000000 2.8633237516454
+0.3625000000000 2.8566872748419
+0.3750000000000 2.8422885187004
+0.3875000000000 2.8676161308430
+0.4000000000000 2.8922779097055
diff --git a/Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm2.xg b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm2.xg
new file mode 100644
index 000000000..f6e6af93d
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/input_initial_data/psi_norm2.xg
@@ -0,0 +1,34 @@
+"psi v time
+0.0000000000000 4.1631485516862
+0.0125000000000 4.1541748755646
+0.0250000000000 4.1403181106482
+0.0375000000000 4.1216804330909
+0.0500000000000 4.0984006495679
+0.0625000000000 4.0706544048325
+0.0750000000000 4.0386544211818
+0.0875000000000 4.0026507506396
+0.1000000000000 3.9629310129817
+0.1125000000000 3.9198205828109
+0.1250000000000 3.8736826762988
+0.1375000000000 3.8249182725450
+0.1500000000000 3.7739657855260
+0.1625000000000 3.7213003803309
+0.1750000000000 3.6674328023249
+0.1875000000000 3.6129075612872
+0.2000000000000 3.5583002867509
+0.2125000000000 3.5042140494355
+0.2250000000000 3.4512744321941
+0.2375000000000 3.4001231394120
+0.2500000000000 3.3514099647860
+0.2625000000000 3.3057830027058
+0.2750000000000 3.2638770952932
+0.2875000000000 3.2263006583662
+0.3000000000000 3.1936212201833
+0.3125000000000 3.1663502209452
+0.3250000000000 3.1449278306735
+0.3375000000000 3.1297087101756
+0.3500000000000 3.1209497227563
+0.3625000000000 3.1188005684516
+0.3750000000000 3.1232981418444
+0.3875000000000 3.1343651203794
+0.4000000000000 3.1518129128318
diff --git a/Carpet/CarpetIOHDF5/test/output_initial_data.parfile b/Carpet/CarpetIOHDF5/test/output_initial_data.parfile
new file mode 100644
index 000000000..2b69c050c
--- /dev/null
+++ b/Carpet/CarpetIOHDF5/test/output_initial_data.parfile
@@ -0,0 +1,57 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/test/output_initial_data.parfile,v 1.1 2004/08/23 13:44:41 tradke Exp $
+
+ActiveThorns = "Carpet CarpetLib CarpetRegrid CarpetInterp CarpetReduce CarpetSlab Boundary CoordBase SymBase CartGrid3D Periodic LocalInterp NaNChecker Slab Time MoL IDScalarWaveMoL WaveToyMoL IOUtil IOBasic CarpetIOHDF5"
+
+
+Cactus::cctk_itlast = 128
+
+Driver::global_nx = 24
+Driver::global_ny = 5
+Driver::global_nz = 5
+Driver::ghost_size = 2
+
+Carpet::max_refinement_levels = 3
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+Carpet::init_each_timelevel = "yes"
+
+CarpetRegrid::refinement_levels = 1
+CarpetRegrid::refined_regions = "manual-gridpoint-list"
+CarpetRegrid::gridpoints = "[[ ([28,4,4]:[68,12,12]:[2,2,2]) ]]"
+CarpetRegrid::outerbounds = "[[ [[0,0],[1,1],[1,1]] ]]"
+
+NaNChecker::check_every = 16
+NaNChecker::check_vars = "all"
+NaNChecker::action_if_found = "terminate"
+
+Grid::domain = full
+Grid::type = byrange
+Grid::xmin = -0.1
+Grid::ymin = -0.15
+Grid::zmin = -0.15
+Grid::xmax = +1.05
+Grid::ymax = +0.15
+Grid::zmax = +0.15
+
+Periodic::periodic = "yes"
+
+Time::dtfac = 0.25
+
+MoL::ODE_Method = "ICN"
+
+IDScalarWaveMoL::wave_number[0] = 1.0
+
+IO::out_dir = "input_initial_data"
+IO::out_fileinfo = "none"
+IO::parfile_write = "no"
+IO::out_every = 1
+IO::out_yline_x = 0.5
+IO::out_zline_x = 0.5
+
+IOBasic::outInfo_vars = "WaveToyMoL::scalarevolve"
+IOBasic::outScalar_vars = "WaveToyMoL::scalarevolve"
+
+# HDF5 output only for initial data
+IOHDF5::out3D_every = 513
+IOHDF5::out3D_vars = "WaveToyMoL::scalarevolve"
+IOHDF5::out3D_dir = "input_initial_data"
diff --git a/Carpet/CarpetIOScalar/COPYING b/Carpet/CarpetIOScalar/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetIOScalar/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetIOScalar/README b/Carpet/CarpetIOScalar/README
new file mode 100644
index 000000000..e97f8eba3
--- /dev/null
+++ b/Carpet/CarpetIOScalar/README
@@ -0,0 +1,10 @@
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/README,v 1.1 2004/06/11 17:41:51 schnetter Exp $
+
+Cactus Code Thorn CarpetIOScalar
+Thorn Author(s) : Erik Schnetter <schnetter@aei.mpg.de>
+Thorn Maintainer(s) : Erik Schnetter <schnetter@aei.mpg.de>
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides scalar output for Carpet.
diff --git a/Carpet/CarpetIOScalar/configuration.ccl b/Carpet/CarpetIOScalar/configuration.ccl
new file mode 100644
index 000000000..eb3387475
--- /dev/null
+++ b/Carpet/CarpetIOScalar/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetIOASCII
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/configuration.ccl,v 1.1 2004/06/11 17:41:51 schnetter Exp $
+
+REQUIRES Carpet CarpetLib IOUtil
+
+REQUIRES THORNS: Carpet CarpetLib IOUtil
diff --git a/Carpet/CarpetIOScalar/doc/documentation.tex b/Carpet/CarpetIOScalar/doc/documentation.tex
new file mode 100644
index 000000000..a97b1dd84
--- /dev/null
+++ b/Carpet/CarpetIOScalar/doc/documentation.tex
@@ -0,0 +1,144 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/doc/documentation.tex,v 1.1 2004/06/11 17:41:51 schnetter Exp $
+%
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevant thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % START CACTUS THORNGUIDE",
+% except for filling in the title, author, date, etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be separated with a \\ or a comma.
+% - You can define your own macros, but they must appear after
+% the START CACTUS THORNGUIDE line, and must not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphicx package.
+% More specifically, with the "\includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us to create a PDF version of the ThornGuide
+% via pdflatex.
+% - References should be included with the latex "\bibitem" command.
+% - Use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - Do not use \appendix, instead include any appendices you need as
+% standard sections.
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/doc/documentation.tex,v 1.1 2004/06/11 17:41:51 schnetter Exp $
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../../doc/latex/cactus}
+
+\begin{document}
+
+% The author of the documentation
+\author{Erik Schnetter \textless schnetter@aei.mpg.de\textgreater}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{}
+
+% the date your document was last changed, if your document is in CVS,
+% please use:
+% \date{$ $Date: 2004/06/11 17:41:51 $ $}
+\date{February 10 2004}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here
+% \def\mydef etc
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+
+\end{abstract}
+
+% The following sections are suggestive only.
+% Remove them or add your own.
+
+\section{Introduction}
+
+\section{Physical System}
+
+\section{Numerical Implementation}
+
+\section{Using This Thorn}
+
+\subsection{Obtaining This Thorn}
+
+\subsection{Basic Usage}
+
+\subsection{Special Behaviour}
+
+\subsection{Interaction With Other Thorns}
+
+\subsection{Examples}
+
+\subsection{Support and Feedback}
+
+\section{History}
+
+\subsection{Thorn Source Code}
+
+\subsection{Thorn Documentation}
+
+\subsection{Acknowledgements}
+
+
+\begin{thebibliography}{9}
+
+\end{thebibliography}
+
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}
diff --git a/Carpet/CarpetIOScalar/interface.ccl b/Carpet/CarpetIOScalar/interface.ccl
new file mode 100644
index 000000000..12d361a7b
--- /dev/null
+++ b/Carpet/CarpetIOScalar/interface.ccl
@@ -0,0 +1,8 @@
+# Interface definition for thorn CarpetIOScalar
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/interface.ccl,v 1.2 2004/06/21 16:07:41 schnetter Exp $
+
+IMPLEMENTS: IOScalar
+
+CCTK_INT last_output_iteration TYPE=scalar
+CCTK_REAL last_output_time TYPE=scalar
+CCTK_INT this_iteration TYPE=scalar
diff --git a/Carpet/CarpetIOScalar/param.ccl b/Carpet/CarpetIOScalar/param.ccl
new file mode 100644
index 000000000..ca22695e6
--- /dev/null
+++ b/Carpet/CarpetIOScalar/param.ccl
@@ -0,0 +1,57 @@
+# Parameter definitions for thorn CarpetIOScalar
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/param.ccl,v 1.3 2004/06/14 10:49:41 tradke Exp $
+
+
+
+shares: IO
+
+USES STRING out_dir
+
+USES KEYWORD out_criterion
+USES CCTK_INT out_every
+USES CCTK_REAL out_dt
+
+USES BOOLEAN strict_io_parameter_check
+
+
+private:
+
+
+
+CCTK_STRING outScalar_dir "Name of scalar output directory, overrides out_dir" STEERABLE = ALWAYS
+{
+ "^$" :: "Empty: use IO::out_dir"
+ ".+" :: "Not empty: directory name"
+} ""
+
+CCTK_STRING outScalar_vars "Variables to output in scalar form" STEERABLE = ALWAYS
+{
+ ".*" :: "A regex which matches everything"
+} ""
+
+CCTK_STRING outScalar_reductions "List of reductions to output in scalar form" STEERABLE = ALWAYS
+{
+ ".*" :: "A regex which matches everything"
+} "count minimum maximum sum average norm1 norm2 norm_inf"
+
+
+
+KEYWORD outScalar_criterion "Criterion to select scalar output intervals, overrides out_every" STEERABLE = ALWAYS
+{
+ "never" :: "Never output"
+ "iteration" :: "Output every so many iterations"
+ "time" :: "Output every that much coordinate time"
+} "iteration"
+
+CCTK_INT outScalar_every "How often to do scalar output, overrides out_every" STEERABLE = ALWAYS
+{
+ -1:* :: "Values <= 0 disable scalar output"
+} -1
+
+REAL outScalar_dt "How often to do scalar output, overrides out_dt" STEERABLE = ALWAYS
+{
+ (0:* :: "In intervals of that much coordinate time"
+ 0 :: "As often as possible"
+ -1 :: "Disable output"
+ -2 :: "Default to IO::out_dt"
+} -2
diff --git a/Carpet/CarpetIOScalar/schedule.ccl b/Carpet/CarpetIOScalar/schedule.ccl
new file mode 100644
index 000000000..8e29bed1d
--- /dev/null
+++ b/Carpet/CarpetIOScalar/schedule.ccl
@@ -0,0 +1,16 @@
+# Schedule definitions for thorn CarpetIOScalar
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/schedule.ccl,v 1.2 2004/06/21 16:07:41 schnetter Exp $
+
+storage: last_output_iteration last_output_time this_iteration
+
+schedule CarpetIOScalarStartup at STARTUP after IOUtil_Startup
+{
+ LANG: C
+ OPTIONS: global
+} "Startup routine"
+
+schedule CarpetIOScalarInit at BASEGRID
+{
+ LANG: C
+ OPTIONS: global
+} "Initialisation routine"
diff --git a/Carpet/CarpetIOScalar/src/ioscalar.cc b/Carpet/CarpetIOScalar/src/ioscalar.cc
new file mode 100644
index 000000000..83b450bb5
--- /dev/null
+++ b/Carpet/CarpetIOScalar/src/ioscalar.cc
@@ -0,0 +1,487 @@
+#include <cassert>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <list>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "CactusBase/IOUtil/src/ioGH.h"
+
+#include "carpet.hh"
+
+
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/src/ioscalar.cc,v 1.6 2004/08/05 10:28:25 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetIOScalar_ioscalar_cc);
+}
+
+
+
+// That's a hack
+namespace Carpet {
+ void UnsupportedVarType (const int vindex);
+}
+
+
+
+namespace CarpetIOScalar {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ // Definition of local types
+ struct info {
+ string reduction;
+ int handle;
+ };
+
+
+
+ // Registered functions
+ void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cctkGH);
+ int OutputGH (const cGH* cctkGH);
+ int OutputVarAs (const cGH* cctkGH, const char* varname, const char* alias);
+ int TimeToOutput (const cGH* cctkGH, int vindex);
+ int TriggerOutput (const cGH* cctkGH, int vindex);
+
+ // Internal functions
+ void SetFlag (int index, const char* optstring, void* arg);
+
+
+
+ // Definition of static members
+ int GHExtension;
+ int IOMethod;
+ vector<bool> do_truncate;
+ vector<int> last_output;
+
+
+
+ // Special output routines for complex numbers
+
+#ifdef CCTK_REAL4
+ ostream& operator<< (ostream& os, const CCTK_COMPLEX8& val)
+ {
+ return os << CCTK_Cmplx8Real(val) << " " << CCTK_Cmplx8Imag(val);
+ }
+#endif
+
+#ifdef CCTK_REAL8
+ ostream& operator<< (ostream& os, const CCTK_COMPLEX16& val)
+ {
+ return os << CCTK_Cmplx16Real(val) << " " << CCTK_Cmplx16Imag(val);
+ }
+#endif
+
+#ifdef CCTK_REAL16
+ ostream& operator<< (ostream& os, const CCTK_COMPLEX32& val)
+ {
+ return os << CCTK_Cmplx32Real(val) << " " << CCTK_Cmplx32Imag(val);
+ }
+#endif
+
+
+
+ extern "C" void
+ CarpetIOScalarStartup ()
+ {
+ CCTK_RegisterBanner ("AMR scalar I/O provided by CarpetIOScalar");
+
+ GHExtension = CCTK_RegisterGHExtension("CarpetIOScalar");
+ CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH);
+
+ IOMethod = CCTK_RegisterIOMethod ("CarpetIOScalar");
+ CCTK_RegisterIOMethodOutputGH (IOMethod, OutputGH);
+ CCTK_RegisterIOMethodOutputVarAs (IOMethod, OutputVarAs);
+ CCTK_RegisterIOMethodTimeToOutput (IOMethod, TimeToOutput);
+ CCTK_RegisterIOMethodTriggerOutput (IOMethod, TriggerOutput);
+ }
+
+
+
+ extern "C" void
+ CarpetIOScalarInit (CCTK_ARGUMENTS)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+
+ *this_iteration = 0;
+ *last_output_iteration = 0;
+ *last_output_time = cctkGH->cctk_time;
+ }
+
+
+
+ void*
+ SetupGH (tFleshConfig* const fc, int const convLevel, cGH* const cctkGH)
+ {
+ DECLARE_CCTK_PARAMETERS;
+ const void *dummy;
+
+ dummy = &fc;
+ dummy = &convLevel;
+ dummy = &cctkGH;
+ dummy = &dummy;
+
+ // Truncate all files if this is not a restart
+ do_truncate.resize (CCTK_NumVars(), true);
+
+ // No iterations have yet been output
+ last_output.resize (CCTK_NumVars(), -1);
+
+ // We register only once, ergo we get only one handle. We store
+ // that statically, so there is no need to pass anything to
+ // Cactus.
+ return NULL;
+ }
+
+
+
+ int
+ OutputGH (const cGH * const cctkGH)
+ {
+ for (int vindex=0; vindex<CCTK_NumVars(); ++vindex) {
+ if (TimeToOutput(cctkGH, vindex)) {
+ TriggerOutput(cctkGH, vindex);
+ }
+ }
+ return 0;
+ }
+
+
+
+ int
+ OutputVarAs (const cGH * const cctkGH,
+ const char* const varname, const char* const alias)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (is_level_mode());
+
+ const int n = CCTK_VarIndex(varname);
+ if (n<0) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Variable \"%s\" does not exist", varname);
+ return -1;
+ }
+ assert (n>=0 && n<CCTK_NumVars());
+ const int group = CCTK_GroupIndexFromVarI (n);
+ assert (group>=0 && group<(int)Carpet::arrdata.size());
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0 && n0<CCTK_NumVars());
+ const int var = n - n0;
+ assert (var>=0 && var<CCTK_NumVarsInGroupI(group));
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n);
+ assert (num_tl>=1);
+
+ // Check for storage
+ if (! CCTK_QueryGroupStorageI(cctkGH, group)) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Cannot output variable \"%s\" because it has no storage",
+ varname);
+ return 0;
+ }
+
+ assert (do_global_mode);
+
+ const int vartype = CCTK_VarTypeI(n);
+ assert (vartype >= 0);
+
+ // Get grid hierarchy extentsion from IOUtil
+ const ioGH * const iogh = (const ioGH *)CCTK_GHExtension (cctkGH, "IO");
+ assert (iogh);
+
+ // Create the output directory
+ const char* myoutdir = outScalar_dir;
+ if (CCTK_EQUALS(myoutdir, "")) {
+ myoutdir = out_dir;
+ }
+ if (CCTK_MyProc(cctkGH)==0) {
+ CCTK_CreateDirectory (0755, myoutdir);
+ }
+
+ // Find the set of desired reductions
+ list<info> reductions;
+ string const redlist (outScalar_reductions);
+ string::const_iterator p = redlist.begin();
+ while (p!=redlist.end()) {
+ while (p!=redlist.end() && isspace(*p)) ++p;
+ if (p==redlist.end()) break;
+ string::const_iterator const start = p;
+ while (p!=redlist.end() && !isspace(*p)) ++p;
+ string::const_iterator const end = p;
+ string const reduction (start, end);
+ int const handle = CCTK_ReductionHandle (reduction.c_str());
+ if (handle < 0) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Reduction operator \"%s\" does not exist (maybe there is no reduction thorn active?)",
+ reduction.c_str());
+ } else {
+ info i;
+ i.reduction = reduction;
+ i.handle = handle;
+ reductions.push_back (i);
+ }
+ }
+
+ // Output in global mode
+ BEGIN_GLOBAL_MODE(cctkGH) {
+
+ for (list<info>::const_iterator ireduction = reductions.begin();
+ ireduction != reductions.end();
+ ++ireduction)
+ {
+ string const reduction = ireduction->reduction;
+
+ ofstream file;
+ if (CCTK_MyProc(cctkGH)==0) {
+
+ // Invent a file name
+ ostringstream filenamebuf;
+ filenamebuf << myoutdir << "/" << alias << "." << reduction
+ << ".asc";
+ // we need a persistent temporary here
+ string filenamestr = filenamebuf.str();
+ const char* const filename = filenamestr.c_str();
+
+ // If this is the first time, then write a nice header
+ if (do_truncate.at(n) && ! iogh->recovered) {
+ file.open (filename, ios::out | ios::trunc);
+ file << "# " << varname << " (" << alias << ")" << endl;
+ file << "# iteration time data" << endl;
+ } else {
+ file.open (filename, ios::out | ios::app);
+ }
+ if (! file.good()) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not open output file \"%s\" for variable \"%s\"",
+ filename, varname);
+ }
+
+ assert (file.is_open());
+
+ file << setprecision(15);
+ assert (file.good());
+
+ } // if on the root processor
+
+ int const handle = ireduction->handle;
+
+ union {
+#define TYPECASE(N,T) T var_##T;
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+ } result;
+
+ int const ierr
+ = CCTK_Reduce (cctkGH, 0, handle, 1, vartype, &result, 1, n);
+ assert (! ierr);
+
+ if (CCTK_MyProc(cctkGH)==0) {
+
+ file << cctk_iteration << " " << cctk_time << " ";
+
+ switch (vartype) {
+#define TYPECASE(N,T) \
+ case N: \
+ file << result.var_##T; \
+ break;
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+ default:
+ UnsupportedVarType (n);
+ }
+
+ file << endl;
+ assert (file.good());
+ }
+
+ if (CCTK_MyProc(cctkGH)==0) {
+ file.close();
+ assert (file.good());
+ }
+
+ assert (! file.is_open());
+
+ } // for reductions
+
+ } END_GLOBAL_MODE;
+
+ // Don't truncate again
+ do_truncate.at(n) = false;
+
+ return 0;
+ }
+
+
+
+ int
+ TimeToOutput (const cGH * const cctkGH, int const vindex)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+
+
+
+ if (! do_global_mode) return 0;
+
+
+
+ // check whether to output at this iteration
+ bool output_this_iteration;
+
+ const char* myoutcriterion = outScalar_criterion;
+ if (CCTK_EQUALS(myoutcriterion, "default")) {
+ myoutcriterion = out_criterion;
+ }
+
+ if (CCTK_EQUALS (myoutcriterion, "never")) {
+
+ // Never output
+ output_this_iteration = false;
+
+ } else if (CCTK_EQUALS (myoutcriterion, "iteration")) {
+
+ int myoutevery = outScalar_every;
+ if (myoutevery == -2) {
+ myoutevery = out_every;
+ }
+ if (myoutevery <= 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (cctk_iteration == *this_iteration) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else if (cctk_iteration >= *last_output_iteration + myoutevery) {
+ // it is time for the next output
+ output_this_iteration = true;
+ *last_output_iteration = cctk_iteration;
+ *this_iteration = cctk_iteration;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else if (CCTK_EQUALS (myoutcriterion, "time")) {
+
+ CCTK_REAL myoutdt = outScalar_dt;
+ if (myoutdt == -2) {
+ myoutdt = out_dt;
+ }
+ if (myoutdt < 0) {
+ // output is disabled
+ output_this_iteration = false;
+ } else if (myoutdt == 0) {
+ // output all iterations
+ output_this_iteration = true;
+ } else if (cctk_iteration == *this_iteration) {
+ // we already decided to output this iteration
+ output_this_iteration = true;
+ } else if (cctk_time / cctk_delta_time
+ >= (*last_output_time + myoutdt) / cctk_delta_time - 1.0e-12) {
+ // it is time for the next output
+ output_this_iteration = true;
+ *last_output_time = cctk_time;
+ *this_iteration = cctk_iteration;
+ } else {
+ // we want no output at this iteration
+ output_this_iteration = false;
+ }
+
+ } else {
+
+ assert (0);
+
+ } // select output criterion
+
+ if (! output_this_iteration) return 0;
+
+
+
+ // check which variables to output
+ static vector<bool> output_variables;
+ static int output_variables_iteration = -1;
+
+ if (cctk_iteration > output_variables_iteration) {
+ output_variables.resize (CCTK_NumVars());
+
+ const char* const varlist = outScalar_vars;
+ if (CCTK_TraverseString (varlist, SetFlag, &output_variables,
+ CCTK_GROUP_OR_VAR) < 0)
+ {
+ CCTK_WARN (output_variables_iteration < 0 && strict_io_parameter_check ?
+ 0 : 1,
+ "error while parsing parameter 'IOScalar::outScalar_vars'");
+ }
+
+ output_variables_iteration = cctk_iteration;
+ }
+
+ if (! output_variables.at(vindex)) return 0;
+
+
+
+ if (last_output.at(vindex) == cctk_iteration) {
+ // Has already been output during this iteration
+ char* const varname = CCTK_FullName(vindex);
+ CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Skipping output for variable \"%s\", because this variable "
+ "has already been output during the current iteration -- "
+ "probably via a trigger during the analysis stage",
+ varname);
+ free (varname);
+ return 0;
+ }
+
+ assert (last_output.at(vindex) < cctk_iteration);
+
+ // Should be output during this iteration
+ return 1;
+ }
+
+
+
+ int
+ TriggerOutput (const cGH * const cctkGH, int const vindex)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+
+ char* const varname = CCTK_FullName(vindex);
+ const int retval = OutputVarAs (cctkGH, varname, CCTK_VarName(vindex));
+ free (varname);
+
+ last_output.at(vindex) = cctk_iteration;
+
+ return retval;
+ }
+
+
+
+ void
+ SetFlag (int const index, const char * const optstring, void * const arg)
+ {
+ const void *dummy;
+
+ dummy = &optstring;
+ dummy = &dummy;
+
+ vector<bool>& flags = *(vector<bool>*)arg;
+ flags.at(index) = true;
+ }
+
+
+
+} // namespace CarpetIOScalar
diff --git a/Carpet/CarpetIOScalar/src/make.code.defn b/Carpet/CarpetIOScalar/src/make.code.defn
new file mode 100644
index 000000000..f8b4594c6
--- /dev/null
+++ b/Carpet/CarpetIOScalar/src/make.code.defn
@@ -0,0 +1,8 @@
+# Main make.code.defn file for thorn CarpetIOScalar
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOScalar/src/make.code.defn,v 1.1 2004/06/11 17:41:51 schnetter Exp $
+
+# Source files in this directory
+SRCS = ioscalar.cc
+
+# Subdirectories containing source files
+SUBDIRS =
diff --git a/Carpet/CarpetInterp/COPYING b/Carpet/CarpetInterp/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetInterp/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetInterp/README b/Carpet/CarpetInterp/README
new file mode 100644
index 000000000..845afc516
--- /dev/null
+++ b/Carpet/CarpetInterp/README
@@ -0,0 +1,10 @@
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/README,v 1.2 2004/01/25 14:57:29 schnetter Exp $
+
+Cactus Code Thorn CarpetInterp
+Thorn Author(s) : Erik Schnetter <schnetter@uni-tuebingen.de>
+Thorn Maintainer(s) : Erik Schnetter <schnetter@uni-tuebingen.de>
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides a parallel interpolator for Carpet.
diff --git a/Carpet/CarpetInterp/configuration.ccl b/Carpet/CarpetInterp/configuration.ccl
new file mode 100644
index 000000000..b96f6d5f0
--- /dev/null
+++ b/Carpet/CarpetInterp/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetInterp
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/configuration.ccl,v 1.3 2004/06/08 21:09:25 schnetter Exp $
+
+REQUIRES Carpet CarpetLib
+
+REQUIRES THORNS: Carpet CarpetLib
diff --git a/Carpet/CarpetInterp/doc/documentation.tex b/Carpet/CarpetInterp/doc/documentation.tex
new file mode 100644
index 000000000..b1a2a477a
--- /dev/null
+++ b/Carpet/CarpetInterp/doc/documentation.tex
@@ -0,0 +1,143 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/doc/documentation.tex,v 1.1 2003/04/29 14:02:25 schnetter Exp $
+%
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevent thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % START CACTUS THORNGUIDE",
+% except for filling in the title, author, date etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be sparated with a \\ or a comma
+% - You can define your own macros, but they must appear after
+% the START CACTUS THORNGUIDE line, and must not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphix package.
+% More specifically, with the "includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us (later) to create a PDF version of the ThornGuide
+% via pdflatex. |
+% - References should be included with the latex "bibitem" command.
+% - Use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - Do not use \appendix, instead include any appendices you need as
+% standard sections.
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/doc/documentation.tex,v 1.1 2003/04/29 14:02:25 schnetter Exp $
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../../doc/ThornGuide/cactus}
+
+\begin{document}
+
+% The author of the documentation
+\author{Erik Schnetter \textless schnetter@uni-tuebingen.de\textgreater}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{CarpetInterp}
+
+% the date your document was last changed, if your document is in CVS,
+% please use:
+\date{$ $Date: 2003/04/29 14:02:25 $ $}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here
+% \def\mydef etc
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+
+\end{abstract}
+
+% The following sections are suggestive only.
+% Remove them or add your own.
+
+\section{Introduction}
+
+\section{Physical System}
+
+\section{Numerical Implementation}
+
+\section{Using This Thorn}
+
+\subsection{Obtaining This Thorn}
+
+\subsection{Basic Usage}
+
+\subsection{Special Behaviour}
+
+\subsection{Interaction With Other Thorns}
+
+\subsection{Examples}
+
+\subsection{Support and Feedback}
+
+\section{History}
+
+\subsection{Thorn Source Code}
+
+\subsection{Thorn Documentation}
+
+\subsection{Acknowledgements}
+
+
+\begin{thebibliography}{9}
+
+\end{thebibliography}
+
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}
diff --git a/Carpet/CarpetInterp/interface.ccl b/Carpet/CarpetInterp/interface.ccl
new file mode 100644
index 000000000..2141a0e8a
--- /dev/null
+++ b/Carpet/CarpetInterp/interface.ccl
@@ -0,0 +1,52 @@
+# Interface definition for thorn CarpetInterp
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/interface.ccl,v 1.8 2004/06/08 21:09:25 schnetter Exp $
+
+IMPLEMENTS: interp
+
+uses include header: carpet.hh
+
+uses include header: bbox.hh
+uses include header: vect.hh
+
+uses include header: data.hh
+
+
+
+# Interpolation
+CCTK_INT FUNCTION \
+ SymmetryInterpolate \
+ (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_INT IN N_dims, \
+ CCTK_INT IN local_interp_handle, \
+ CCTK_INT IN param_table_handle, \
+ CCTK_INT IN coord_system_handle, \
+ CCTK_INT IN N_interp_points, \
+ CCTK_INT IN interp_coords_type, \
+ CCTK_POINTER_TO_CONST ARRAY IN interp_coords, \
+ CCTK_INT IN N_input_arrays, \
+ CCTK_INT ARRAY IN input_array_indices, \
+ CCTK_INT IN N_output_arrays, \
+ CCTK_INT ARRAY IN output_array_types, \
+ CCTK_POINTER ARRAY IN output_arrays)
+USES FUNCTION SymmetryInterpolate
+
+
+
+CCTK_INT FUNCTION \
+ DriverInterpolate \
+ (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_INT IN N_dims, \
+ CCTK_INT IN local_interp_handle, \
+ CCTK_INT IN param_table_handle, \
+ CCTK_INT IN coord_system_handle, \
+ CCTK_INT IN N_interp_points, \
+ CCTK_INT IN interp_coords_type, \
+ CCTK_POINTER_TO_CONST ARRAY IN interp_coords, \
+ CCTK_INT IN N_input_arrays, \
+ CCTK_INT ARRAY IN input_array_indices, \
+ CCTK_INT IN N_output_arrays, \
+ CCTK_INT ARRAY IN output_array_types, \
+ CCTK_POINTER ARRAY IN output_arrays)
+PROVIDES FUNCTION DriverInterpolate \
+ WITH Carpet_DriverInterpolate \
+ LANGUAGE C
diff --git a/Carpet/CarpetInterp/param.ccl b/Carpet/CarpetInterp/param.ccl
new file mode 100644
index 000000000..7347f7f32
--- /dev/null
+++ b/Carpet/CarpetInterp/param.ccl
@@ -0,0 +1,3 @@
+# Parameter definitions for thorn CarpetInterp
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/param.ccl,v 1.2 2003/11/05 16:18:38 schnetter Exp $
+
diff --git a/Carpet/CarpetInterp/schedule.ccl b/Carpet/CarpetInterp/schedule.ccl
new file mode 100644
index 000000000..cf0891e37
--- /dev/null
+++ b/Carpet/CarpetInterp/schedule.ccl
@@ -0,0 +1,7 @@
+# Schedule definitions for thorn CarpetInterp
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/schedule.ccl,v 1.3 2003/11/05 16:18:38 schnetter Exp $
+
+schedule CarpetInterpStartup at STARTUP
+{
+ LANG: C
+} "Startup routine"
diff --git a/Carpet/CarpetInterp/src/interp.cc b/Carpet/CarpetInterp/src/interp.cc
new file mode 100644
index 000000000..8b48e9c54
--- /dev/null
+++ b/Carpet/CarpetInterp/src/interp.cc
@@ -0,0 +1,695 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.cc,v 1.36 2004/09/13 14:36:13 schnetter Exp $
+
+#include <assert.h>
+#include <math.h>
+
+#include <algorithm>
+#include <vector>
+
+#include <mpi.h>
+
+#include "cctk.h"
+
+#include "util_ErrorCodes.h"
+#include "util_Table.h"
+
+#include "bbox.hh"
+#include "data.hh"
+#include "defs.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "interp.hh"
+
+extern "C" {
+ static char const * const rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.cc,v 1.36 2004/09/13 14:36:13 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetInterp_interp_cc);
+}
+
+
+
+namespace CarpetInterp {
+
+ using namespace Carpet;
+
+
+
+ typedef vect<int,dim> ivect;
+ typedef vect<CCTK_REAL,dim> rvect;
+
+ typedef bbox<int,dim> ibbox;
+
+
+
+#define ind_rc(m,rl,c) ind_rc_(m,rl,minrl,maxrl,c,maxncomps,vhh)
+ static inline int ind_rc_(int const m,
+ int const rl, int const minrl, int const maxrl,
+ int const c, int const maxncomps,
+ vector<gh<dim> *> const hh)
+ {
+ assert (m>=0 && m<maps);
+ assert (rl>=minrl && rl<maxrl);
+ assert (minrl>=0 && maxrl<=hh.at(m)->reflevels());
+ assert (c>=0 && c<maxncomps);
+ assert (maxncomps>=0 && maxncomps<=hh.at(m)->components(rl));
+ int const ind = (rl-minrl) * maxncomps + c;
+ assert (ind>=0 && ind < (maxrl-minrl) * maxncomps);
+ return ind;
+ }
+
+#define ind_prc(p,m,rl,c) \
+ ind_prc_(p,nprocs,m,rl,minrl,maxrl,c,maxncomps,cgh,vhh)
+ static inline int ind_prc_(int const p, int const nprocs,
+ int const m,
+ int const rl, int const minrl, int const maxrl,
+ int const c, int const maxncomps,
+ cGH const * const cgh,
+ vector<gh<dim> *> const hh)
+ {
+ assert (p>=0 && p<nprocs);
+ assert (nprocs==CCTK_nProcs(cgh));
+ assert (m>=0 && m<maps);
+ assert (rl>=minrl && rl<maxrl);
+ assert (minrl>=0 && maxrl<=hh.at(m)->reflevels());
+ assert (c>=0 && c<maxncomps);
+ assert (maxncomps>=0 && maxncomps<=hh.at(m)->components(rl));
+ int const ind = (p * (maxrl-minrl) + (rl-minrl)) * maxncomps + c;
+ assert (ind>=0 && ind < nprocs * (maxrl-minrl) * maxncomps);
+ return ind;
+ }
+
+
+ static int GetInterpNumTimelevels(const cGH * const cgh,
+ const int group)
+ {
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ int ierr;
+
+ cGroup gp;
+ ierr = CCTK_GroupData (group, &gp);
+ assert (!ierr);
+
+ int interp_ntl = -1;
+
+ const int length = Util_TableGetInt
+ (gp.tagstable, &interp_ntl, "InterpNumTimelevels");
+ if (length == UTIL_ERROR_TABLE_NO_SUCH_KEY) {
+ interp_ntl = -1;
+ } else if (length >= 0) {
+ // all is well - just check they're not asking too much
+ if (interp_ntl > CCTK_ActiveTimeLevelsGI(cgh, group)) {
+ char * const groupname = CCTK_GroupName (group);
+ CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The tags table entry \"InterpNumTimelevels\" "
+ "for group \"%s\" says that %d timelevels should "
+ "be used for time interpolation.\n However, only %d "
+ "are active.",
+ groupname, interp_ntl,
+ CCTK_ActiveTimeLevelsGI(cgh, group));
+ }
+ } else {
+ assert(0);
+ }
+
+ return interp_ntl;
+
+ }
+
+
+ void CarpetInterpStartup ()
+ {
+ CCTK_OverloadInterpGridArrays (InterpGridArrays);
+ }
+
+
+
+ int InterpGridArrays (cGH const * const cgh,
+ int const N_dims,
+ int const local_interp_handle,
+ int const param_table_handle,
+ int const coord_system_handle,
+ int const N_interp_points,
+ int const interp_coords_type_code,
+ void const * const interp_coords [],
+ int const N_input_arrays,
+ CCTK_INT const input_array_variable_indices [],
+ int const N_output_arrays,
+ CCTK_INT const output_array_type_codes [],
+ void * const output_arrays [])
+ {
+ if (CCTK_IsFunctionAliased ("SymmetryInterpolate")) {
+ return SymmetryInterpolate
+ (cgh, N_dims,
+ local_interp_handle, param_table_handle, coord_system_handle,
+ N_interp_points, interp_coords_type_code, interp_coords,
+ N_input_arrays, input_array_variable_indices,
+ N_output_arrays, output_array_type_codes, output_arrays);
+ } else {
+ return Carpet_DriverInterpolate
+ (cgh, N_dims,
+ local_interp_handle, param_table_handle, coord_system_handle,
+ N_interp_points, interp_coords_type_code, interp_coords,
+ N_input_arrays, input_array_variable_indices,
+ N_output_arrays, output_array_type_codes, output_arrays);
+ }
+ }
+
+
+
+ extern "C" CCTK_INT
+ Carpet_DriverInterpolate (CCTK_POINTER_TO_CONST const cgh_,
+ CCTK_INT const N_dims,
+ CCTK_INT const local_interp_handle,
+ CCTK_INT const param_table_handle,
+ CCTK_INT const coord_system_handle,
+ CCTK_INT const N_interp_points,
+ CCTK_INT const interp_coords_type_code,
+ CCTK_POINTER_TO_CONST const interp_coords [],
+ CCTK_INT const N_input_arrays,
+ CCTK_INT const input_array_variable_indices [],
+ CCTK_INT const N_output_arrays,
+ CCTK_INT const output_array_type_codes [],
+ CCTK_POINTER const output_arrays [])
+ {
+ cGH const * const cgh = static_cast<cGH const *> (cgh_);
+ int ierr;
+
+ assert (cgh);
+ assert (N_dims == dim);
+
+
+
+ if (is_meta_mode()) {
+ CCTK_WARN (0, "It is not possible to interpolate in meta mode");
+ }
+
+ bool const want_global_mode = is_global_mode();
+
+
+
+ // Get some information
+ MPI_Comm const comm = CarpetMPIComm ();
+ int const myproc = CCTK_MyProc (cgh);
+ int const nprocs = CCTK_nProcs (cgh);
+ assert (myproc>=0 && myproc<nprocs);
+
+ // Multiple maps are not supported
+ // (because we don't know how to select a map)
+ assert (maps == 1);
+ const int m = 0;
+
+ int const minrl = want_global_mode ? 0 : reflevel;
+ int const maxrl = want_global_mode ? vhh.at(m)->reflevels() : reflevel+1;
+
+ // Multiple convergence levels are not supported
+ assert (mglevels == 1);
+ int const ml = 0;
+
+ int maxncomps = 0;
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ maxncomps = max(maxncomps, vhh.at(m)->components(rl));
+ }
+
+
+
+ // Find the time interpolation order
+ int partype;
+ void const * const parptr
+ = CCTK_ParameterGet ("prolongation_order_time", "Carpet", &partype);
+ assert (parptr);
+ assert (partype == PARAMETER_INTEGER);
+ int const prolongation_order_time = * (CCTK_INT const *) parptr;
+
+ CCTK_REAL const current_time = cgh->cctk_time / cgh->cctk_delta_time;
+
+
+
+ // Find out about the coordinates: origin and delta for the Carpet
+ // grid indices
+#if 0
+ const char * coord_system_name
+ = CCTK_CoordSystemName (coord_system_handle);
+ assert (coord_system_name);
+ rvect lower, upper, delta;
+ for (int d=0; d<dim; ++d) {
+ ierr = CCTK_CoordRange
+ (cgh, &lower[d], &upper[d], d+1, 0, coord_system_name);
+ assert (!ierr);
+ const ibbox & baseext = vhh.at(m)->baseextent;
+ delta[d]
+ = (upper[d] - lower[d]) / (baseext.upper()[d] - baseext.lower()[d]);
+ }
+#else
+ rvect const lower = rvect::ref(cgh->cctk_origin_space);
+ rvect const delta = rvect::ref(cgh->cctk_delta_space) / maxreflevelfact;
+ rvect const upper = lower + delta * (vhh.at(m)->baseextent.upper() - vhh.at(m)->baseextent.lower());
+#endif
+
+ assert (N_interp_points >= 0);
+ assert (interp_coords);
+ for (int d=0; d<dim; ++d) {
+ assert (N_interp_points==0 || interp_coords[d]);
+ }
+
+ assert (N_output_arrays >= 0);
+ if (N_interp_points > 0) {
+ assert (output_arrays);
+ for (int j=0; j<N_output_arrays; ++j) {
+ assert (output_arrays[j]);
+ }
+ }
+
+
+
+ // Assign interpolation points to components
+ vector<int> rlev (N_interp_points); // refinement level of point n
+ vector<int> home (N_interp_points); // component of point n
+ vector<int> homecnts ((maxrl-minrl) * maxncomps); // number of points in component c
+
+ for (int n=0; n<N_interp_points; ++n) {
+
+ // Find the grid point closest to the interpolation point
+ assert (interp_coords_type_code == CCTK_VARIABLE_REAL);
+ rvect pos;
+ for (int d=0; d<dim; ++d) {
+ pos[d] = static_cast<CCTK_REAL const *>(interp_coords[d])[n];
+ }
+
+ // Find the component that this grid point belongs to
+ rlev.at(n) = -1;
+ home.at(n) = -1;
+ if (all(pos>=lower && pos<=upper)) {
+ for (int rl=maxrl-1; rl>=minrl; --rl) {
+
+ const int fact = maxreflevelfact / ipow(reffact, rl) * ipow(mgfact, mglevel);
+ ivect const ipos = ivect(floor((pos - lower) / (delta * fact) + 0.5)) * fact;
+ assert (all(ipos % vhh.at(m)->bases.at(rl).at(ml).stride() == 0));
+
+ // TODO: use something faster than a linear search
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ if (vhh.at(m)->extents.at(rl).at(c).at(ml).contains(ipos)) {
+ rlev.at(n) = rl;
+ home.at(n) = c;
+ goto found;
+ }
+ }
+ }
+ }
+ CCTK_VWarn (3, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Interpolation point #%d at [%g,%g,%g] is not on any grid patch",
+ n, pos[0], pos[1], pos[2]);
+ // Map the point (arbitrarily) to the first component of the
+ // coarsest grid
+ rlev.at(n) = minrl;
+ home.at(n) = 0;
+ found:
+ assert (rlev.at(n)>=minrl && rlev.at(n)<maxrl);
+ assert (home.at(n)>=0 && home.at(n)<vhh.at(m)->components(rlev.at(n)));
+ ++ homecnts.at(ind_rc(m, rlev.at(n), home.at(n)));
+
+ } // for n
+
+ // Communicate counts
+ vector<int> allhomecnts(nprocs * (maxrl-minrl) * maxncomps);
+ MPI_Allgather
+ (&homecnts .at(0), (maxrl-minrl) * maxncomps, MPI_INT,
+ &allhomecnts.at(0), (maxrl-minrl) * maxncomps, MPI_INT, comm);
+
+
+
+ // Create coordinate patches
+ vector<data<CCTK_REAL,dim> > allcoords
+ (nprocs * (maxrl-minrl) * maxncomps);
+ for (int p=0; p<nprocs; ++p) {
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ ivect lo (0);
+ ivect up (1);
+ up[0] = allhomecnts.at(ind_prc(p,m,rl,c));
+ up[1] = dim;
+ ivect str (1);
+ ibbox extent (lo, up-str, str);
+ allcoords.at(ind_prc(p,m,rl,c)).allocate (extent, p);
+ }
+ }
+ }
+
+ // Fill in local coordinate patches
+ {
+ vector<int> tmpcnts ((maxrl-minrl) * maxncomps);
+ for (int n=0; n<N_interp_points; ++n) {
+ int const rl = rlev.at(n);
+ int const c = home.at(n);
+ assert (rl>=minrl && rl<maxrl);
+ assert (c>=0 && c<vhh.at(m)->components(rl));
+ assert (tmpcnts.at(ind_rc(m,rl,c)) >= 0);
+ assert (tmpcnts.at(ind_rc(m,rl,c)) < homecnts.at(ind_rc(m,rl,c)));
+ assert (dim==3);
+ for (int d=0; d<dim; ++d) {
+ allcoords.at(ind_prc(myproc,m,rl,c))[ivect(tmpcnts.at(ind_rc(m,rl,c)),d,0)]
+ = static_cast<CCTK_REAL const *>(interp_coords[d])[n];
+ }
+ ++ tmpcnts.at(c + (rl-minrl)*maxncomps);
+ }
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ assert (tmpcnts.at(ind_rc(m,rl,c)) == homecnts.at(ind_rc(m,rl,c)));
+ }
+ }
+ }
+
+ // Transfer coordinate patches
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ for (int p=0; p<nprocs; ++p) {
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ allcoords.at(ind_prc(p,m,rl,c)).change_processor
+ (state, vhh.at(m)->processors.at(rl).at(c));
+ }
+ }
+ }
+ }
+
+
+
+ // Create output patches
+ vector<data<CCTK_REAL,dim> > alloutputs
+ (nprocs * (maxrl-minrl) * maxncomps, -1);
+ for (int p=0; p<nprocs; ++p) {
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ ivect lo (0);
+ ivect up (1);
+ up[0] = allhomecnts.at(ind_prc(p,m,rl,c));
+ up[1] = N_output_arrays;
+ ivect str (1);
+ ibbox extent (lo, up-str, str);
+ alloutputs.at(ind_prc(p,m,rl,c)).allocate
+ (extent, vhh.at(m)->processors.at(rl).at(c));
+ }
+ }
+ }
+
+
+
+ //
+ // Do the local interpolation
+ //
+ int overall_ierr = 0;
+ BEGIN_GLOBAL_MODE(cgh) {
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ enter_level_mode (const_cast<cGH*>(cgh), rl);
+
+ // Number of necessary time levels
+ CCTK_REAL const level_time = cgh->cctk_time / cgh->cctk_delta_time;
+ bool const need_time_interp
+ = (fabs(current_time - level_time)
+ > 1e-12 * (fabs(level_time) + fabs(current_time)
+ + fabs(cgh->cctk_delta_time)));
+ assert (! (! want_global_mode && need_time_interp));
+ int const num_tl = need_time_interp ? prolongation_order_time + 1 : 1;
+
+ BEGIN_MAP_LOOP(cgh, CCTK_GF) {
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+
+ // Find out about the local geometry
+ ivect lsh;
+ rvect coord_origin, coord_delta;
+ for (int d=0; d<dim; ++d) {
+ lsh[d] = cgh->cctk_lsh[d];
+ coord_delta[d] = cgh->cctk_delta_space[d] / cgh->cctk_levfac[d];
+ coord_origin[d] = cgh->cctk_origin_space[d] + (cgh->cctk_lbnd[d] + 1.0 * cgh->cctk_levoff[d] / cgh->cctk_levoffdenom[d]) * coord_delta[d];
+ }
+
+
+
+ // Find out about the grid functions
+ vector<CCTK_INT> input_array_type_codes(N_input_arrays);
+ vector<const void *> input_arrays(N_input_arrays);
+ for (int n=0; n<N_input_arrays; ++n) {
+ if (input_array_variable_indices[n] == -1) {
+
+ // Ignore this entry
+ input_array_type_codes.at(n) = -1;
+
+ } else {
+
+ int const vi = input_array_variable_indices[n];
+ assert (vi>=0 && vi<CCTK_NumVars());
+
+ int const gi = CCTK_GroupIndexFromVarI (vi);
+ assert (gi>=0 && gi<CCTK_NumGroups());
+
+ cGroup group;
+ ierr = CCTK_GroupData (gi, &group);
+ assert (!ierr);
+ assert (group.grouptype == CCTK_GF);
+ assert (group.dim == dim);
+ assert (group.disttype == CCTK_DISTRIB_DEFAULT);
+ assert (group.stagtype == 0); // not staggered
+
+ int interp_ntls = GetInterpNumTimelevels(cgh, gi);
+ // If -ve then key wasn't set; use all timelevels.
+ if (interp_ntls < 0) interp_ntls = group.numtimelevels;
+
+ // TODO: emit better warning
+ if ((num_tl > group.numtimelevels)&&
+ (interp_ntls > group.numtimelevels)) {
+ CCTK_VWarn(0, __LINE__,__FILE__,"CarpetInterp",
+ "Tried to interpolate variable '%s' "
+ "in time.\nIt has insufficient timelevels "
+ "(%d are required).",
+ CCTK_FullName(vi),
+ min(num_tl,interp_ntls));
+ }
+ assert (group.numtimelevels >= min(num_tl,interp_ntls));
+
+ input_array_type_codes.at(n) = group.vartype;
+
+ }
+ } // for input arrays
+
+
+
+ // Work on the data from all processors
+ for (int p=0; p<nprocs; ++p) {
+ assert (allcoords.at(ind_prc(p,m,reflevel,component)).owns_storage());
+ assert (allhomecnts.at(ind_prc(p,m,reflevel,component)) == allcoords.at(ind_prc(p,m,reflevel,component)).shape()[0]);
+ assert (allhomecnts.at(ind_prc(p,m,reflevel,component)) == alloutputs.at(ind_prc(p,m,reflevel,component)).shape()[0]);
+
+ int const npoints = allhomecnts.at(ind_prc(p,m,reflevel,component));
+
+ // Do the processor-local interpolation
+ vector<const void *> tmp_interp_coords (dim);
+ for (int d=0; d<dim; ++d) {
+ tmp_interp_coords.at(d) = &allcoords.at(ind_prc(p,m,reflevel,component))[ivect(0,d,0)];
+ }
+
+
+
+ vector<vector<void *> > tmp_output_arrays (num_tl);
+
+ for (int tl=0; tl<num_tl; ++tl) {
+
+ for (int n=0; n<N_input_arrays; ++n) {
+
+ int const vi = input_array_variable_indices[n];
+ assert (vi>=0 && vi<CCTK_NumVars());
+
+ int const gi = CCTK_GroupIndexFromVarI (vi);
+ assert (gi>=0 && gi<CCTK_NumGroups());
+
+ int interp_ntls = GetInterpNumTimelevels(cgh, gi);
+ // If -ve then key wasn't set; use all timelevels.
+ if (interp_ntls < 0) interp_ntls = num_tl;
+
+ if (input_array_variable_indices[n] == -1) {
+ input_arrays.at(n) = 0;
+ } else if (tl > interp_ntls-1) {
+ // Do the interpolation anyway, just from
+ // an earlier timelevel.
+ int const vi = input_array_variable_indices[n];
+ assert (vi>=0 && vi<CCTK_NumVars());
+ input_arrays.at(n) =
+ CCTK_VarDataPtrI (cgh, interp_ntls-1, vi);
+ } else {
+ int const vi = input_array_variable_indices[n];
+ assert (vi>=0 && vi<CCTK_NumVars());
+ input_arrays.at(n) = CCTK_VarDataPtrI (cgh, tl, vi);
+ }
+ } // for input arrays
+
+ tmp_output_arrays.at(tl).resize (N_output_arrays);
+ for (int j=0; j<N_output_arrays; ++j) {
+ assert (output_array_type_codes[j] == CCTK_VARIABLE_REAL);
+ if (need_time_interp) {
+ tmp_output_arrays.at(tl).at(j) = new CCTK_REAL [npoints];
+ } else {
+ tmp_output_arrays.at(tl).at(j) = &alloutputs.at(ind_prc(p,m,reflevel,component))[ivect(0,j,0)];
+ }
+ }
+
+ ierr = CCTK_InterpLocalUniform
+ (N_dims, local_interp_handle, param_table_handle,
+ &coord_origin[0], &coord_delta[0],
+ npoints,
+ interp_coords_type_code, &tmp_interp_coords[0],
+ N_input_arrays, &lsh[0],
+ &input_array_type_codes[0], &input_arrays[0],
+ N_output_arrays,
+ output_array_type_codes, &tmp_output_arrays.at(tl)[0]);
+ if (ierr) {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The local interpolator returned the error code %d", ierr);
+ }
+ overall_ierr = min(overall_ierr, ierr);
+
+ } // for tl
+
+ // Interpolate in time, if necessary
+ if (need_time_interp) {
+
+ for (int j=0; j<N_output_arrays; ++j) {
+
+ // Find output variable indices
+ vector<CCTK_INT> operand_indices (N_output_arrays);
+ ierr = Util_TableGetIntArray
+ (param_table_handle, N_output_arrays,
+ &operand_indices.front(), "operand_indices");
+ if (ierr == UTIL_ERROR_TABLE_NO_SUCH_KEY) {
+ assert (N_output_arrays == N_input_arrays);
+ for (int m=0; m<N_output_arrays; ++m) {
+ operand_indices.at(m) = m;
+ }
+ } else {
+ assert (ierr == N_output_arrays);
+ }
+
+ // Find input array for this output array
+ int const n = operand_indices.at(j);
+
+ int const vi = input_array_variable_indices[n];
+ assert (vi>=0 && vi<CCTK_NumVars());
+
+ int const gi = CCTK_GroupIndexFromVarI (vi);
+ assert (gi>=0 && gi<CCTK_NumGroups());
+
+ int interp_ntls = GetInterpNumTimelevels(cgh, gi);
+ // If -ve then key wasn't set; use all timelevels.
+ if (interp_ntls < 0) interp_ntls = num_tl;
+
+ // Get interpolation times
+ CCTK_REAL const time = current_time;
+ vector<CCTK_REAL> times(interp_ntls);
+ for (int tl=0; tl<interp_ntls; ++tl) {
+ times.at(tl) = vtt.at(m)->time (-tl, reflevel, mglevel);
+ }
+
+ // Calculate interpolation weights
+ vector<CCTK_REAL> tfacs(interp_ntls);
+ switch (interp_ntls) {
+ case 1:
+ // no interpolation
+ // We have to assume that any GF with one timelevel
+ // is constant in time!!!
+ // assert (fabs((time - times.at(0)) / fabs(time + times.at(0) + cgh->cctk_delta_time)) < 1e-12);
+ tfacs.at(0) = 1.0;
+ break;
+ case 2:
+ // linear (2-point) interpolation
+ tfacs.at(0) = (time - times.at(1)) / (times.at(0) - times.at(1));
+ tfacs.at(1) = (time - times.at(0)) / (times.at(1) - times.at(0));
+ break;
+ case 3:
+ // quadratic (3-point) interpolation
+ tfacs.at(0) = (time - times.at(1)) * (time - times.at(2)) / ((times.at(0) - times.at(1)) * (times.at(0) - times.at(2)));
+ tfacs.at(1) = (time - times.at(0)) * (time - times.at(2)) / ((times.at(1) - times.at(0)) * (times.at(1) - times.at(2)));
+ tfacs.at(2) = (time - times.at(0)) * (time - times.at(1)) / ((times.at(2) - times.at(0)) * (times.at(2) - times.at(1)));
+ break;
+ default:
+ assert (0);
+ }
+
+ // Interpolate
+ assert (output_array_type_codes[j] == CCTK_VARIABLE_REAL);
+ for (int k=0; k<npoints; ++k) {
+ CCTK_REAL & dest = alloutputs.at(ind_prc(p,m,reflevel,component))[ivect(k,j,0)];
+ dest = 0;
+ for (int tl=0; tl<interp_ntls; ++tl) {
+ CCTK_REAL const src = ((CCTK_REAL const *)tmp_output_arrays.at(tl).at(j))[k];
+ dest += tfacs[tl] * src;
+ }
+ }
+ }
+
+ for (int tl=0; tl<num_tl; ++tl) {
+ for (int j=0; j<N_output_arrays; ++j) {
+ delete [] (CCTK_REAL *)tmp_output_arrays.at(tl).at(j);
+ }
+ }
+
+ } // if need_time_interp
+
+ } // for processors
+
+ } END_LOCAL_COMPONENT_LOOP;
+ } END_MAP_LOOP;
+
+ leave_level_mode (const_cast<cGH*>(cgh));
+ } // for rl
+
+ } END_GLOBAL_MODE;
+
+
+
+ // Transfer output patches back
+ for (comm_state<dim> state; !state.done(); state.step()) {
+ for (int p=0; p<nprocs; ++p) {
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ alloutputs.at(ind_prc(p,m,rl,c)).change_processor (state, p);
+ }
+ }
+ }
+ }
+
+
+
+ // Read out local output patches
+ {
+ vector<int> tmpcnts ((maxrl-minrl) * maxncomps);
+ for (int n=0; n<N_interp_points; ++n) {
+ int const rl = rlev.at(n);
+ int const c = home.at(n);
+ for (int j=0; j<N_output_arrays; ++j) {
+ assert (interp_coords_type_code == CCTK_VARIABLE_REAL);
+ assert (alloutputs.at(ind_prc(myproc,m,rl,c)).owns_storage());
+ assert (output_arrays);
+ assert (output_arrays[j]);
+ static_cast<CCTK_REAL *>(output_arrays[j])[n] = alloutputs.at(ind_prc(myproc,m,rl,c))[ivect(tmpcnts.at(ind_rc(m,rl,c)),j,0)];
+ }
+ ++ tmpcnts.at(ind_rc(m,rl,c));
+ }
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ for (int c=0; c<vhh.at(m)->components(rl); ++c) {
+ assert (tmpcnts.at(ind_rc(m,rl,c)) == homecnts.at(ind_rc(m,rl,c)));
+ }
+ }
+ }
+
+
+
+ int global_overall_ierr;
+ MPI_Allreduce
+ (&overall_ierr, &global_overall_ierr, 1, MPI_INT, MPI_MIN, comm);
+
+
+
+ // Done.
+ return global_overall_ierr;
+ }
+
+} // namespace CarpetInterp
diff --git a/Carpet/CarpetInterp/src/interp.h b/Carpet/CarpetInterp/src/interp.h
new file mode 100644
index 000000000..4600c6922
--- /dev/null
+++ b/Carpet/CarpetInterp/src/interp.h
@@ -0,0 +1,19 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.h,v 1.2 2003/11/05 16:18:38 schnetter Exp $ */
+
+#ifndef CARPETINTERP_H
+#define CARPETINTERP_H
+
+#ifdef __cplusplus
+namespace CarpetInterp {
+ extern "C" {
+#endif
+
+ /* Scheduled functions */
+ void CarpetInterpStartup (void);
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace CarpetInterp */
+#endif
+
+#endif /* !defined(CARPETINTERP_H) */
diff --git a/Carpet/CarpetInterp/src/interp.hh b/Carpet/CarpetInterp/src/interp.hh
new file mode 100644
index 000000000..db0d1360a
--- /dev/null
+++ b/Carpet/CarpetInterp/src/interp.hh
@@ -0,0 +1,29 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.hh,v 1.2 2004/05/21 18:12:23 schnetter Exp $
+
+#ifndef CARPETINTERP_HH
+#define CARPETINTERP_HH
+
+#include "cctk.h"
+
+#include "interp.h"
+
+namespace CarpetInterp {
+
+ int
+ InterpGridArrays (cGH const * const cGH,
+ int const N_dims,
+ int const local_interp_handle,
+ int const param_table_handle,
+ int const coord_system_handle,
+ int const N_interp_points,
+ int const interp_coords_type_code,
+ void const * const interp_coords [],
+ int const N_input_arrays,
+ CCTK_INT const input_array_variable_indices [],
+ int const N_output_arrays,
+ CCTK_INT const output_array_type_codes [],
+ void * const output_arrays []);
+
+} // namespace CarpetInterp
+
+#endif // !defined(CARPETINTERP_HH)
diff --git a/Carpet/CarpetInterp/src/make.code.defn b/Carpet/CarpetInterp/src/make.code.defn
new file mode 100644
index 000000000..8511e0de3
--- /dev/null
+++ b/Carpet/CarpetInterp/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn CarpetInterp
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/make.code.defn,v 1.2 2003/04/30 12:37:31 schnetter Exp $
+
+# Source files in this directory
+SRCS = interp.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetInterp/test/waveinterp.par b/Carpet/CarpetInterp/test/waveinterp.par
new file mode 100644
index 000000000..236ff3d04
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp.par
@@ -0,0 +1,144 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/test/waveinterp.par,v 1.1 2004/08/05 11:22:32 schnetter Exp $
+
+Cactus::cctk_run_title = "WaveToy Interpolation Test"
+Cactus::cctk_full_warnings = yes
+
+Cactus::terminate = time
+Cactus::cctk_final_time = 0.1
+
+
+
+ActiveThorns = "IOUtil"
+
+IO::out_dir = $parfile
+
+
+
+ActiveThorns = "LocalInterp AEILocalInterp"
+
+
+
+ActiveThorns = "Carpet CarpetLib CarpetInterp CarpetReduce CarpetSlab"
+
+Carpet::domain_from_coordbase = yes
+Carpet::max_refinement_levels = 20
+
+driver::ghost_size = 2
+Carpet::buffer_width = 4
+
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+Carpet::convergence_level = 0
+
+Carpet::init_3_timelevels = yes
+
+CarpetLib::save_memory_during_regridding = yes
+
+
+
+ActiveThorns = "NaNChecker"
+
+
+
+ActiveThorns = "Boundary CartGrid3D CoordBase SymBase"
+
+CoordBase::domainsize = minmax
+
+CoordBase::xmin = -1.0
+CoordBase::ymin = -1.0
+CoordBase::zmin = -1.0
+CoordBase::xmax = 1.0
+CoordBase::ymax = 1.0
+CoordBase::zmax = 1.0
+CoordBase::dx = 0.1
+CoordBase::dy = 0.1
+CoordBase::dz = 0.1
+
+CartGrid3D::type = coordbase
+CartGrid3D::avoid_origin = no
+
+
+
+ActiveThorns = "CarpetRegrid"
+
+CarpetRegrid::refinement_levels = 3
+CarpetRegrid::refined_regions = manual-coordinate-list
+CarpetRegrid::smart_outer_boundaries = yes
+CarpetRegrid::coordinates = "
+ [ [ ([-0.4,-0.4,-0.4]:[+0.4,+0.4,+0.4]:[0.0500,0.0500,0.0500]) ],
+ [ ([-0.2,-0.2,-0.2]:[+0.2,+0.2,+0.2]:[0.0250,0.0250,0.0250]) ],
+ [ ([-0.1,-0.1,-0.1]:[+0.1,+0.1,+0.1]:[0.0125,0.0125,0.0125]) ] ]
+"
+CarpetRegrid::keep_same_grid_structure = yes
+
+
+
+ActiveThorns = "Time"
+
+Time::dtfac = 0.25
+
+
+
+ActiveThorns = "MoL"
+
+MoL::ODE_Method = RK3
+
+
+
+ActiveThorns = "WaveMoL"
+
+
+
+ActiveThorns = "IDWaveMoL"
+
+IDWaveMoL::initial_data = plane
+IDWaveMoL::slopet = 1.0
+
+
+
+ActiveThorns = "InterpToArray"
+
+InterpToArray::narrays1d = 1
+InterpToArray::array1d_vars[0] = "WaveMoL::phi"
+InterpToArray::array1d_npoints_i = 10
+InterpToArray::array1d_dx_i = 0.1
+
+
+
+ActiveThorns = "IOBasic"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "norm2"
+IOBasic::outInfo_vars = "
+ WaveMoL::phi
+ WaveMoL::phit
+ WaveMoL::phix
+"
+
+
+
+ActiveThorns = "CarpetIOScalar"
+
+IOScalar::outScalar_every = 1
+IOScalar::outScalar_vars = "
+ WaveMoL::scalarevolvemol_scalar
+ WaveMoL::scalarevolvemol_vector
+"
+
+
+
+ActiveThorns = "CarpetIOASCII"
+
+IOASCII::out0D_every = 1
+IOASCII::out0D_vars = "
+ WaveMoL::scalarevolvemol_scalar
+ WaveMoL::scalarevolvemol_vector
+"
+
+IOASCII::out1D_every = 1
+IOASCII::out1D_vars = "
+ WaveMoL::scalarevolvemol_scalar
+ WaveMoL::scalarevolvemol_vector
+ InterpToArray::arrays1d
+"
diff --git a/Carpet/CarpetInterp/test/waveinterp/arrays1d[0].x.asc b/Carpet/CarpetInterp/test/waveinterp/arrays1d[0].x.asc
new file mode 100644
index 000000000..304036ac8
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/arrays1d[0].x.asc
@@ -0,0 +1,257 @@
+# INTERPTOARRAY::arrays1d[0] x (arrays1d[0])
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 0 0 0 0 0 0 0 1
+0 0 0 0 0 1 0 0 0 1 0 0 1
+0 0 0 0 0 2 0 0 0 2 0 0 1
+0 0 0 0 0 3 0 0 0 3 0 0 1
+0 0 0 0 0 4 0 0 0 4 0 0 1
+0 0 0 0 0 5 0 0 0 5 0 0 1
+0 0 0 0 0 6 0 0 0 6 0 0 1
+0 0 0 0 0 7 0 0 0 7 0 0 1
+0 0 0 0 0 8 0 0 0 8 0 0 1
+0 0 0 0 0 9 0 0 0 9 0 0 1
+
+
+# iteration 131072
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 0 0 0 0 0 0 0.00625 0 0 0 1.00625
+131072 0 0 0 0 1 0 0 0.00625 1 0 0 1.00625
+131072 0 0 0 0 2 0 0 0.00625 2 0 0 1.00625
+131072 0 0 0 0 3 0 0 0.00625 3 0 0 1.00625
+131072 0 0 0 0 4 0 0 0.00625 4 0 0 1.00625
+131072 0 0 0 0 5 0 0 0.00625 5 0 0 1.00625
+131072 0 0 0 0 6 0 0 0.00625 6 0 0 1.00625
+131072 0 0 0 0 7 0 0 0.00625 7 0 0 1.00625
+131072 0 0 0 0 8 0 0 0.00625 8 0 0 1.00625
+131072 0 0 0 0 9 0 0 0.00625 9 0 0 1.00625
+
+
+# iteration 262144
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 0 0 0 0 0 0 0.0125 0 0 0 1.0125
+262144 0 0 0 0 1 0 0 0.0125 1 0 0 1.01250000000873
+262144 0 0 0 0 2 0 0 0.0125 2 0 0 1.0125
+262144 0 0 0 0 3 0 0 0.0125 3 0 0 1.0125
+262144 0 0 0 0 4 0 0 0.0125 4 0 0 1.0125
+262144 0 0 0 0 5 0 0 0.0125 5 0 0 1.0125
+262144 0 0 0 0 6 0 0 0.0125 6 0 0 1.0125
+262144 0 0 0 0 7 0 0 0.0125 7 0 0 1.0125
+262144 0 0 0 0 8 0 0 0.0125 8 0 0 1.0125
+262144 0 0 0 0 9 0 0 0.0125 9 0 0 1.0125
+
+
+# iteration 393216
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 0 0 0 0 0 0 0.01875 0 0 0 1.01875
+393216 0 0 0 0 1 0 0 0.01875 1 0 0 1.01875000002589
+393216 0 0 0 0 2 0 0 0.01875 2 0 0 1.01874999999937
+393216 0 0 0 0 3 0 0 0.01875 3 0 0 1.01875
+393216 0 0 0 0 4 0 0 0.01875 4 0 0 1.01875
+393216 0 0 0 0 5 0 0 0.01875 5 0 0 1.01875
+393216 0 0 0 0 6 0 0 0.01875 6 0 0 1.01875
+393216 0 0 0 0 7 0 0 0.01875 7 0 0 1.01875
+393216 0 0 0 0 8 0 0 0.01875 8 0 0 1.01875
+393216 0 0 0 0 9 0 0 0.01875 9 0 0 1.01875
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 0 0 0 0.025 0 0 0 1.02500000000002
+524288 0 0 0 0 1 0 0 0.025 1 0 0 1.02500000004247
+524288 0 0 0 0 2 0 0 0.025 2 0 0 1.02499999999832
+524288 0 0 0 0 3 0 0 0.025 3 0 0 1.025
+524288 0 0 0 0 4 0 0 0.025 4 0 0 1.025
+524288 0 0 0 0 5 0 0 0.025 5 0 0 1.025
+524288 0 0 0 0 6 0 0 0.025 6 0 0 1.025
+524288 0 0 0 0 7 0 0 0.025 7 0 0 1.025
+524288 0 0 0 0 8 0 0 0.025 8 0 0 1.025
+524288 0 0 0 0 9 0 0 0.025 9 0 0 1.025
+
+
+# iteration 655360
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 0 0 0 0 0 0 0.03125 0 0 0 1.0312500000001
+655360 0 0 0 0 1 0 0 0.03125 1 0 0 1.03125000005828
+655360 0 0 0 0 2 0 0 0.03125 2 0 0 1.03124999999702
+655360 0 0 0 0 3 0 0 0.03125 3 0 0 1.03125000000003
+655360 0 0 0 0 4 0 0 0.03125 4 0 0 1.03125
+655360 0 0 0 0 5 0 0 0.03125 5 0 0 1.03125
+655360 0 0 0 0 6 0 0 0.03125 6 0 0 1.03125
+655360 0 0 0 0 7 0 0 0.03125 7 0 0 1.03125
+655360 0 0 0 0 8 0 0 0.03125 8 0 0 1.03125
+655360 0 0 0 0 9 0 0 0.03125 9 0 0 1.03125
+
+
+# iteration 786432
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 0 0 0 0 0 0 0.0375 0 0 0 1.03750000000037
+786432 0 0 0 0 1 0 0 0.0375 1 0 0 1.0375000000732
+786432 0 0 0 0 2 0 0 0.0375 2 0 0 1.03749999999542
+786432 0 0 0 0 3 0 0 0.0375 3 0 0 1.03750000000009
+786432 0 0 0 0 4 0 0 0.0375 4 0 0 1.03749999999999
+786432 0 0 0 0 5 0 0 0.0375 5 0 0 1.0375
+786432 0 0 0 0 6 0 0 0.0375 6 0 0 1.0375
+786432 0 0 0 0 7 0 0 0.0375 7 0 0 1.0375
+786432 0 0 0 0 8 0 0 0.0375 8 0 0 1.0375
+786432 0 0 0 0 9 0 0 0.0375 9 0 0 1.0375
+
+
+# iteration 917504
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 0 0 0 0 0 0 0.04375 0 0 0 1.043750000001
+917504 0 0 0 0 1 0 0 0.04375 1 0 0 1.04375000008715
+917504 0 0 0 0 2 0 0 0.04375 2 0 0 1.04374999999437
+917504 0 0 0 0 3 0 0 0.04375 3 0 0 1.04375000000016
+917504 0 0 0 0 4 0 0 0.04375 4 0 0 1.04374999999999
+917504 0 0 0 0 5 0 0 0.04375 5 0 0 1.04375
+917504 0 0 0 0 6 0 0 0.04375 6 0 0 1.04375
+917504 0 0 0 0 7 0 0 0.04375 7 0 0 1.04375
+917504 0 0 0 0 8 0 0 0.04375 8 0 0 1.04375
+917504 0 0 0 0 9 0 0 0.04375 9 0 0 1.04375
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 0 0 0 0.05 0 0 0 1.05000000000227
+1048576 0 0 0 0 1 0 0 0.05 1 0 0 1.05000000010013
+1048576 0 0 0 0 2 0 0 0.05 2 0 0 1.04999999999358
+1048576 0 0 0 0 3 0 0 0.05 3 0 0 1.05000000000024
+1048576 0 0 0 0 4 0 0 0.05 4 0 0 1.04999999999998
+1048576 0 0 0 0 5 0 0 0.05 5 0 0 1.05
+1048576 0 0 0 0 6 0 0 0.05 6 0 0 1.05
+1048576 0 0 0 0 7 0 0 0.05 7 0 0 1.05
+1048576 0 0 0 0 8 0 0 0.05 8 0 0 1.05
+1048576 0 0 0 0 9 0 0 0.05 9 0 0 1.05
+
+
+# iteration 1179648
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 0 0 0 0 0 0 0.05625 0 0 0 1.05625000000452
+1179648 0 0 0 0 1 0 0 0.05625 1 0 0 1.05625000011224
+1179648 0 0 0 0 2 0 0 0.05625 2 0 0 1.05624999999326
+1179648 0 0 0 0 3 0 0 0.05625 3 0 0 1.0562500000004
+1179648 0 0 0 0 4 0 0 0.05625 4 0 0 1.05624999999997
+1179648 0 0 0 0 5 0 0 0.05625 5 0 0 1.05625
+1179648 0 0 0 0 6 0 0 0.05625 6 0 0 1.05625
+1179648 0 0 0 0 7 0 0 0.05625 7 0 0 1.05625
+1179648 0 0 0 0 8 0 0 0.05625 8 0 0 1.05625
+1179648 0 0 0 0 9 0 0 0.05625 9 0 0 1.05625
+
+
+# iteration 1310720
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 0 0 0 0 0 0 0.0625 0 0 0 1.0625000000082
+1310720 0 0 0 0 1 0 0 0.0625 1 0 0 1.06250000012362
+1310720 0 0 0 0 2 0 0 0.0625 2 0 0 1.06249999999333
+1310720 0 0 0 0 3 0 0 0.0625 3 0 0 1.06250000000062
+1310720 0 0 0 0 4 0 0 0.0625 4 0 0 1.06249999999994
+1310720 0 0 0 0 5 0 0 0.0625 5 0 0 1.0625
+1310720 0 0 0 0 6 0 0 0.0625 6 0 0 1.0625
+1310720 0 0 0 0 7 0 0 0.0625 7 0 0 1.0625
+1310720 0 0 0 0 8 0 0 0.0625 8 0 0 1.0625
+1310720 0 0 0 0 9 0 0 0.0625 9 0 0 1.0625
+
+
+# iteration 1441792
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 0 0 0 0 0 0 0.06875 0 0 0 1.0687500000138
+1441792 0 0 0 0 1 0 0 0.06875 1 0 0 1.06875000013445
+1441792 0 0 0 0 2 0 0 0.06875 2 0 0 1.068749999994
+1441792 0 0 0 0 3 0 0 0.06875 3 0 0 1.06875000000088
+1441792 0 0 0 0 4 0 0 0.06875 4 0 0 1.06874999999991
+1441792 0 0 0 0 5 0 0 0.06875 5 0 0 1.06875
+1441792 0 0 0 0 6 0 0 0.06875 6 0 0 1.06875
+1441792 0 0 0 0 7 0 0 0.06875 7 0 0 1.06875
+1441792 0 0 0 0 8 0 0 0.06875 8 0 0 1.06875
+1441792 0 0 0 0 9 0 0 0.06875 9 0 0 1.06875
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 0 0 0 0.075 0 0 0 1.07500000002188
+1572864 0 0 0 0 1 0 0 0.075 1 0 0 1.07500000014499
+1572864 0 0 0 0 2 0 0 0.075 2 0 0 1.07499999999519
+1572864 0 0 0 0 3 0 0 0.075 3 0 0 1.07500000000118
+1572864 0 0 0 0 4 0 0 0.075 4 0 0 1.07499999999987
+1572864 0 0 0 0 5 0 0 0.075 5 0 0 1.075
+1572864 0 0 0 0 6 0 0 0.075 6 0 0 1.075
+1572864 0 0 0 0 7 0 0 0.075 7 0 0 1.075
+1572864 0 0 0 0 8 0 0 0.075 8 0 0 1.075
+1572864 0 0 0 0 9 0 0 0.075 9 0 0 1.075
+
+
+# iteration 1703936
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 0 0 0 0 0 0 0.08125 0 0 0 1.08125000003301
+1703936 0 0 0 0 1 0 0 0.08125 1 0 0 1.08125000015544
+1703936 0 0 0 0 2 0 0 0.08125 2 0 0 1.08124999999712
+1703936 0 0 0 0 3 0 0 0.08125 3 0 0 1.0812500000015
+1703936 0 0 0 0 4 0 0 0.08125 4 0 0 1.08124999999982
+1703936 0 0 0 0 5 0 0 0.08125 5 0 0 1.08125000000001
+1703936 0 0 0 0 6 0 0 0.08125 6 0 0 1.08125
+1703936 0 0 0 0 7 0 0 0.08125 7 0 0 1.08125
+1703936 0 0 0 0 8 0 0 0.08125 8 0 0 1.08125
+1703936 0 0 0 0 9 0 0 0.08125 9 0 0 1.08125
+
+
+# iteration 1835008
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 0 0 0 0 0 0 0.0875 0 0 0 1.08750000004775
+1835008 0 0 0 0 1 0 0 0.0875 1 0 0 1.08750000016605
+1835008 0 0 0 0 2 0 0 0.0875 2 0 0 1.08749999999972
+1835008 0 0 0 0 3 0 0 0.0875 3 0 0 1.08750000000186
+1835008 0 0 0 0 4 0 0 0.0875 4 0 0 1.08749999999977
+1835008 0 0 0 0 5 0 0 0.0875 5 0 0 1.08750000000001
+1835008 0 0 0 0 6 0 0 0.0875 6 0 0 1.0875
+1835008 0 0 0 0 7 0 0 0.0875 7 0 0 1.0875
+1835008 0 0 0 0 8 0 0 0.0875 8 0 0 1.0875
+1835008 0 0 0 0 9 0 0 0.0875 9 0 0 1.0875
+
+
+# iteration 1966080
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 0 0 0 0 0 0 0.09375 0 0 0 1.09375000006661
+1966080 0 0 0 0 1 0 0 0.09375 1 0 0 1.09375000017699
+1966080 0 0 0 0 2 0 0 0.09375 2 0 0 1.09375000000317
+1966080 0 0 0 0 3 0 0 0.09375 3 0 0 1.09375000000225
+1966080 0 0 0 0 4 0 0 0.09375 4 0 0 1.09374999999971
+1966080 0 0 0 0 5 0 0 0.09375 5 0 0 1.09375000000002
+1966080 0 0 0 0 6 0 0 0.09375 6 0 0 1.09375
+1966080 0 0 0 0 7 0 0 0.09375 7 0 0 1.09375
+1966080 0 0 0 0 8 0 0 0.09375 8 0 0 1.09375
+1966080 0 0 0 0 9 0 0 0.09375 9 0 0 1.09375
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 0 0 0 0.1 0 0 0 1.10000000009002
+2097152 0 0 0 0 1 0 0 0.1 1 0 0 1.10000000018839
+2097152 0 0 0 0 2 0 0 0.1 2 0 0 1.10000000000743
+2097152 0 0 0 0 3 0 0 0.1 3 0 0 1.10000000000268
+2097152 0 0 0 0 4 0 0 0.1 4 0 0 1.09999999999964
+2097152 0 0 0 0 5 0 0 0.1 5 0 0 1.10000000000003
+2097152 0 0 0 0 6 0 0 0.1 6 0 0 1.1
+2097152 0 0 0 0 7 0 0 0.1 7 0 0 1.1
+2097152 0 0 0 0 8 0 0 0.1 8 0 0 1.1
+2097152 0 0 0 0 9 0 0 0.1 9 0 0 1.1
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi..asc b/Carpet/CarpetInterp/test/waveinterp/phi..asc
new file mode 100644
index 000000000..18e004ed4
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi..asc
@@ -0,0 +1,157 @@
+# WAVEMOL::phi (phi)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1.00625
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.01875
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.0312500000001
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.043750000001
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.05625000000452
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.0687500000138
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.08125000003301
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.09375000006661
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.average.asc b/Carpet/CarpetInterp/test/waveinterp/phi.average.asc
new file mode 100644
index 000000000..bb0d142fb
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.average.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 1
+131072 0.00625 1.00624999999997
+262144 0.0125 1.01249999999981
+393216 0.01875 1.01875000000027
+524288 0.025 1.02499999999997
+655360 0.03125 1.0312500000001
+786432 0.0375 1.0375000000003
+917504 0.04375 1.04374999999973
+1048576 0.05 1.05000000000041
+1179648 0.05625 1.05624999999989
+1310720 0.0625 1.0625000000002
+1441792 0.06875 1.06875000000054
+1572864 0.075 1.07499999999995
+1703936 0.08125 1.08125000000053
+1835008 0.0875 1.08749999999996
+1966080 0.09375 1.09375000000035
+2097152 0.1 1.10000000000075
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.count.asc b/Carpet/CarpetInterp/test/waveinterp/phi.count.asc
new file mode 100644
index 000000000..b0a049d30
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.count.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 8000
+131072 0.00625 8000
+262144 0.0125 8000
+393216 0.01875 8000
+524288 0.025 8000
+655360 0.03125 8000
+786432 0.0375 8000
+917504 0.04375 8000
+1048576 0.05 8000
+1179648 0.05625 8000
+1310720 0.0625 8000
+1441792 0.06875 8000
+1572864 0.075 8000
+1703936 0.08125 8000
+1835008 0.0875 8000
+1966080 0.09375 8000
+2097152 0.1 8000
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.maximum.asc b/Carpet/CarpetInterp/test/waveinterp/phi.maximum.asc
new file mode 100644
index 000000000..05ff51f58
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.maximum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 1
+131072 0.00625 1.00625
+262144 0.0125 1.01250000002619
+393216 0.01875 1.0187500000769
+524288 0.025 1.02500000012428
+655360 0.03125 1.03125000016692
+786432 0.0375 1.03750000020354
+917504 0.04375 1.04375000023321
+1048576 0.05 1.05000000025536
+1179648 0.05625 1.05625000026976
+1310720 0.0625 1.06250000027656
+1441792 0.06875 1.06875000027621
+1572864 0.075 1.07500000026946
+1703936 0.08125 1.08125000025726
+1835008 0.0875 1.0875000002511
+1966080 0.09375 1.09375000024647
+2097152 0.1 1.10000000025568
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.minimum.asc b/Carpet/CarpetInterp/test/waveinterp/phi.minimum.asc
new file mode 100644
index 000000000..a8804e6f4
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.minimum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 1
+131072 0.00625 1.00625
+262144 0.0125 1.01249999999836
+393216 0.01875 1.01874999999554
+524288 0.025 1.02499999999139
+655360 0.03125 1.03124999998806
+786432 0.0375 1.03749999998538
+917504 0.04375 1.04374999998195
+1048576 0.05 1.04999999998336
+1179648 0.05625 1.05624999998289
+1310720 0.0625 1.06249999998278
+1441792 0.06875 1.0687499999816
+1572864 0.075 1.07499999997966
+1703936 0.08125 1.08124999997853
+1835008 0.0875 1.08749999997795
+1966080 0.09375 1.0937499999781
+2097152 0.1 1.09999999997878
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.norm1.asc b/Carpet/CarpetInterp/test/waveinterp/phi.norm1.asc
new file mode 100644
index 000000000..bb0d142fb
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.norm1.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 1
+131072 0.00625 1.00624999999997
+262144 0.0125 1.01249999999981
+393216 0.01875 1.01875000000027
+524288 0.025 1.02499999999997
+655360 0.03125 1.0312500000001
+786432 0.0375 1.0375000000003
+917504 0.04375 1.04374999999973
+1048576 0.05 1.05000000000041
+1179648 0.05625 1.05624999999989
+1310720 0.0625 1.0625000000002
+1441792 0.06875 1.06875000000054
+1572864 0.075 1.07499999999995
+1703936 0.08125 1.08125000000053
+1835008 0.0875 1.08749999999996
+1966080 0.09375 1.09375000000035
+2097152 0.1 1.10000000000075
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.norm2.asc b/Carpet/CarpetInterp/test/waveinterp/phi.norm2.asc
new file mode 100644
index 000000000..ff855db49
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.norm2.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 1
+131072 0.00625 1.00624999999999
+262144 0.0125 1.0124999999999
+393216 0.01875 1.01874999999995
+524288 0.025 1.02500000000011
+655360 0.03125 1.03125000000009
+786432 0.0375 1.03750000000014
+917504 0.04375 1.04375000000001
+1048576 0.05 1.05000000000015
+1179648 0.05625 1.0562500000002
+1310720 0.0625 1.06250000000019
+1441792 0.06875 1.06875000000013
+1572864 0.075 1.0750000000003
+1703936 0.08125 1.08125000000028
+1835008 0.0875 1.08750000000024
+1966080 0.09375 1.09375000000033
+2097152 0.1 1.1000000000003
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.norm_inf.asc b/Carpet/CarpetInterp/test/waveinterp/phi.norm_inf.asc
new file mode 100644
index 000000000..05ff51f58
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.norm_inf.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 1
+131072 0.00625 1.00625
+262144 0.0125 1.01250000002619
+393216 0.01875 1.0187500000769
+524288 0.025 1.02500000012428
+655360 0.03125 1.03125000016692
+786432 0.0375 1.03750000020354
+917504 0.04375 1.04375000023321
+1048576 0.05 1.05000000025536
+1179648 0.05625 1.05625000026976
+1310720 0.0625 1.06250000027656
+1441792 0.06875 1.06875000027621
+1572864 0.075 1.07500000026946
+1703936 0.08125 1.08125000025726
+1835008 0.0875 1.0875000002511
+1966080 0.09375 1.09375000024647
+2097152 0.1 1.10000000025568
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.sum.asc b/Carpet/CarpetInterp/test/waveinterp/phi.sum.asc
new file mode 100644
index 000000000..040f427ea
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.sum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phi (phi)
+# iteration time data
+0 0 8000
+131072 0.00625 8049.99999999976
+262144 0.0125 8099.99999999852
+393216 0.01875 8150.00000000217
+524288 0.025 8199.99999999975
+655360 0.03125 8250.00000000083
+786432 0.0375 8300.00000000237
+917504 0.04375 8349.99999999786
+1048576 0.05 8400.0000000033
+1179648 0.05625 8449.99999999914
+1310720 0.0625 8500.00000000161
+1441792 0.06875 8550.00000000436
+1572864 0.075 8599.9999999996
+1703936 0.08125 8650.00000000424
+1835008 0.0875 8699.99999999966
+1966080 0.09375 8750.0000000028
+2097152 0.1 8800.00000000602
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.x.asc b/Carpet/CarpetInterp/test/waveinterp/phi.x.asc
new file mode 100644
index 000000000..a19b7f967
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.x.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phi x (phi)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 0 5242880 5242880 0 -1 0 0 1
+0 0 0 0 0 524288 5242880 5242880 0 -0.9 0 0 1
+0 0 0 0 0 1048576 5242880 5242880 0 -0.8 0 0 1
+0 0 0 0 0 1572864 5242880 5242880 0 -0.7 0 0 1
+0 0 0 0 0 2097152 5242880 5242880 0 -0.6 0 0 1
+0 0 0 0 0 2621440 5242880 5242880 0 -0.5 0 0 1
+0 0 0 0 0 3145728 5242880 5242880 0 -0.4 0 0 1
+0 0 0 0 0 3670016 5242880 5242880 0 -0.3 0 0 1
+0 0 0 0 0 4194304 5242880 5242880 0 -0.2 0 0 1
+0 0 0 0 0 4718592 5242880 5242880 0 -0.1 0 0 1
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 0 0 0 5767168 5242880 5242880 0 0.1 0 0 1
+0 0 0 0 0 6291456 5242880 5242880 0 0.2 0 0 1
+0 0 0 0 0 6815744 5242880 5242880 0 0.3 0 0 1
+0 0 0 0 0 7340032 5242880 5242880 0 0.4 0 0 1
+0 0 0 0 0 7864320 5242880 5242880 0 0.5 0 0 1
+0 0 0 0 0 8388608 5242880 5242880 0 0.6 0 0 1
+0 0 0 0 0 8912896 5242880 5242880 0 0.7 0 0 1
+0 0 0 0 0 9437184 5242880 5242880 0 0.8 0 0 1
+0 0 0 0 0 9961472 5242880 5242880 0 0.9 0 0 1
+0 0 0 0 0 10485760 5242880 5242880 0 1 0 0 1
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 2621440 5242880 5242880 0 -0.5 0 0 1
+0 0 1 0 0 2883584 5242880 5242880 0 -0.45 0 0 1
+0 0 1 0 0 3145728 5242880 5242880 0 -0.4 0 0 1
+0 0 1 0 0 3407872 5242880 5242880 0 -0.35 0 0 1
+0 0 1 0 0 3670016 5242880 5242880 0 -0.3 0 0 1
+0 0 1 0 0 3932160 5242880 5242880 0 -0.25 0 0 1
+0 0 1 0 0 4194304 5242880 5242880 0 -0.2 0 0 1
+0 0 1 0 0 4456448 5242880 5242880 0 -0.15 0 0 1
+0 0 1 0 0 4718592 5242880 5242880 0 -0.1 0 0 1
+0 0 1 0 0 4980736 5242880 5242880 0 -0.05 0 0 1
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 1 0 0 5505024 5242880 5242880 0 0.05 0 0 1
+0 0 1 0 0 5767168 5242880 5242880 0 0.1 0 0 1
+0 0 1 0 0 6029312 5242880 5242880 0 0.15 0 0 1
+0 0 1 0 0 6291456 5242880 5242880 0 0.2 0 0 1
+0 0 1 0 0 6553600 5242880 5242880 0 0.25 0 0 1
+0 0 1 0 0 6815744 5242880 5242880 0 0.3 0 0 1
+0 0 1 0 0 7077888 5242880 5242880 0 0.35 0 0 1
+0 0 1 0 0 7340032 5242880 5242880 0 0.4 0 0 1
+0 0 1 0 0 7602176 5242880 5242880 0 0.45 0 0 1
+0 0 1 0 0 7864320 5242880 5242880 0 0.5 0 0 1
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 3932160 5242880 5242880 0 -0.25 0 0 1
+0 0 2 0 0 4063232 5242880 5242880 0 -0.225 0 0 1
+0 0 2 0 0 4194304 5242880 5242880 0 -0.2 0 0 1
+0 0 2 0 0 4325376 5242880 5242880 0 -0.175 0 0 1
+0 0 2 0 0 4456448 5242880 5242880 0 -0.15 0 0 1
+0 0 2 0 0 4587520 5242880 5242880 0 -0.125 0 0 1
+0 0 2 0 0 4718592 5242880 5242880 0 -0.1 0 0 1
+0 0 2 0 0 4849664 5242880 5242880 0 -0.075 0 0 1
+0 0 2 0 0 4980736 5242880 5242880 0 -0.05 0 0 1
+0 0 2 0 0 5111808 5242880 5242880 0 -0.025 0 0 1
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 2 0 0 5373952 5242880 5242880 0 0.025 0 0 1
+0 0 2 0 0 5505024 5242880 5242880 0 0.05 0 0 1
+0 0 2 0 0 5636096 5242880 5242880 0 0.075 0 0 1
+0 0 2 0 0 5767168 5242880 5242880 0 0.1 0 0 1
+0 0 2 0 0 5898240 5242880 5242880 0 0.125 0 0 1
+0 0 2 0 0 6029312 5242880 5242880 0 0.15 0 0 1
+0 0 2 0 0 6160384 5242880 5242880 0 0.175 0 0 1
+0 0 2 0 0 6291456 5242880 5242880 0 0.2 0 0 1
+0 0 2 0 0 6422528 5242880 5242880 0 0.225 0 0 1
+0 0 2 0 0 6553600 5242880 5242880 0 0.25 0 0 1
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 3932160 5242880 5242880 0.00625 -0.25 0 0 1.00625
+131072 0 2 0 0 4063232 5242880 5242880 0.00625 -0.225 0 0 1.00625
+131072 0 2 0 0 4194304 5242880 5242880 0.00625 -0.2 0 0 1.00625
+131072 0 2 0 0 4325376 5242880 5242880 0.00625 -0.175 0 0 1.00625
+131072 0 2 0 0 4456448 5242880 5242880 0.00625 -0.15 0 0 1.00625
+131072 0 2 0 0 4587520 5242880 5242880 0.00625 -0.125 0 0 1.00625
+131072 0 2 0 0 4718592 5242880 5242880 0.00625 -0.1 0 0 1.00625
+131072 0 2 0 0 4849664 5242880 5242880 0.00625 -0.075 0 0 1.00625
+131072 0 2 0 0 4980736 5242880 5242880 0.00625 -0.05 0 0 1.00625
+131072 0 2 0 0 5111808 5242880 5242880 0.00625 -0.025 0 0 1.00625
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1.00625
+131072 0 2 0 0 5373952 5242880 5242880 0.00625 0.025 0 0 1.00625
+131072 0 2 0 0 5505024 5242880 5242880 0.00625 0.05 0 0 1.00625
+131072 0 2 0 0 5636096 5242880 5242880 0.00625 0.075 0 0 1.00625
+131072 0 2 0 0 5767168 5242880 5242880 0.00625 0.1 0 0 1.00625
+131072 0 2 0 0 5898240 5242880 5242880 0.00625 0.125 0 0 1.00625
+131072 0 2 0 0 6029312 5242880 5242880 0.00625 0.15 0 0 1.00625
+131072 0 2 0 0 6160384 5242880 5242880 0.00625 0.175 0 0 1.00625
+131072 0 2 0 0 6291456 5242880 5242880 0.00625 0.2 0 0 1.00625
+131072 0 2 0 0 6422528 5242880 5242880 0.00625 0.225 0 0 1.00625
+131072 0 2 0 0 6553600 5242880 5242880 0.00625 0.25 0 0 1.00625
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 2621440 5242880 5242880 0.0125 -0.5 0 0 1.0125
+262144 0 1 0 0 2883584 5242880 5242880 0.0125 -0.45 0 0 1.0125
+262144 0 1 0 0 3145728 5242880 5242880 0.0125 -0.4 0 0 1.0125
+262144 0 1 0 0 3407872 5242880 5242880 0.0125 -0.35 0 0 1.0125
+262144 0 1 0 0 3670016 5242880 5242880 0.0125 -0.3 0 0 1.0125
+262144 0 1 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 1.0125
+262144 0 1 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 1.0125
+262144 0 1 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 1.0125
+262144 0 1 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 1.01250000000873
+262144 0 1 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 1.0125
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+262144 0 1 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 1.0125
+262144 0 1 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 1.01250000000873
+262144 0 1 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 1.0125
+262144 0 1 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 1.0125
+262144 0 1 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 1.0125
+262144 0 1 0 0 6815744 5242880 5242880 0.0125 0.3 0 0 1.0125
+262144 0 1 0 0 7077888 5242880 5242880 0.0125 0.35 0 0 1.0125
+262144 0 1 0 0 7340032 5242880 5242880 0.0125 0.4 0 0 1.0125
+262144 0 1 0 0 7602176 5242880 5242880 0.0125 0.45 0 0 1.0125
+262144 0 1 0 0 7864320 5242880 5242880 0.0125 0.5 0 0 1.0125
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 1.0125
+262144 0 2 0 0 4063232 5242880 5242880 0.0125 -0.225 0 0 1.0125
+262144 0 2 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 1.0125
+262144 0 2 0 0 4325376 5242880 5242880 0.0125 -0.175 0 0 1.01249999999945
+262144 0 2 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 1.0125
+262144 0 2 0 0 4587520 5242880 5242880 0.0125 -0.125 0 0 1.01250000000491
+262144 0 2 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 1.01250000000873
+262144 0 2 0 0 4849664 5242880 5242880 0.0125 -0.075 0 0 1.0125
+262144 0 2 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 1.0125
+262144 0 2 0 0 5111808 5242880 5242880 0.0125 -0.025 0 0 1.0125
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+262144 0 2 0 0 5373952 5242880 5242880 0.0125 0.025 0 0 1.0125
+262144 0 2 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 1.0125
+262144 0 2 0 0 5636096 5242880 5242880 0.0125 0.075 0 0 1.0125
+262144 0 2 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 1.01250000000873
+262144 0 2 0 0 5898240 5242880 5242880 0.0125 0.125 0 0 1.01250000000491
+262144 0 2 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 1.0125
+262144 0 2 0 0 6160384 5242880 5242880 0.0125 0.175 0 0 1.01249999999945
+262144 0 2 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 1.0125
+262144 0 2 0 0 6422528 5242880 5242880 0.0125 0.225 0 0 1.0125
+262144 0 2 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 1.0125
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 3932160 5242880 5242880 0.01875 -0.25 0 0 1.01875
+393216 0 2 0 0 4063232 5242880 5242880 0.01875 -0.225 0 0 1.01874999999964
+393216 0 2 0 0 4194304 5242880 5242880 0.01875 -0.2 0 0 1.01874999999937
+393216 0 2 0 0 4325376 5242880 5242880 0.01875 -0.175 0 0 1.01874999999822
+393216 0 2 0 0 4456448 5242880 5242880 0.01875 -0.15 0 0 1.01875000000001
+393216 0 2 0 0 4587520 5242880 5242880 0.01875 -0.125 0 0 1.01875000001291
+393216 0 2 0 0 4718592 5242880 5242880 0.01875 -0.1 0 0 1.01875000002589
+393216 0 2 0 0 4849664 5242880 5242880 0.01875 -0.075 0 0 1.01875
+393216 0 2 0 0 4980736 5242880 5242880 0.01875 -0.05 0 0 1.01875000000016
+393216 0 2 0 0 5111808 5242880 5242880 0.01875 -0.025 0 0 1.01875
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.01875
+393216 0 2 0 0 5373952 5242880 5242880 0.01875 0.025 0 0 1.01875
+393216 0 2 0 0 5505024 5242880 5242880 0.01875 0.05 0 0 1.01875000000016
+393216 0 2 0 0 5636096 5242880 5242880 0.01875 0.075 0 0 1.01875
+393216 0 2 0 0 5767168 5242880 5242880 0.01875 0.1 0 0 1.01875000002589
+393216 0 2 0 0 5898240 5242880 5242880 0.01875 0.125 0 0 1.01875000001291
+393216 0 2 0 0 6029312 5242880 5242880 0.01875 0.15 0 0 1.01875000000001
+393216 0 2 0 0 6160384 5242880 5242880 0.01875 0.175 0 0 1.01874999999822
+393216 0 2 0 0 6291456 5242880 5242880 0.01875 0.2 0 0 1.01874999999937
+393216 0 2 0 0 6422528 5242880 5242880 0.01875 0.225 0 0 1.01874999999964
+393216 0 2 0 0 6553600 5242880 5242880 0.01875 0.25 0 0 1.01875
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 0 5242880 5242880 0.025 -1 0 0 1.025
+524288 0 0 0 0 524288 5242880 5242880 0.025 -0.9 0 0 1.025
+524288 0 0 0 0 1048576 5242880 5242880 0.025 -0.8 0 0 1.025
+524288 0 0 0 0 1572864 5242880 5242880 0.025 -0.7 0 0 1.025
+524288 0 0 0 0 2097152 5242880 5242880 0.025 -0.6 0 0 1.025
+524288 0 0 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 1.025
+524288 0 0 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 1.025
+524288 0 0 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 1.025
+524288 0 0 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 1.02499999999832
+524288 0 0 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 1.02500000004247
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 0 0 0 5767168 5242880 5242880 0.025 0.1 0 0 1.02500000004247
+524288 0 0 0 0 6291456 5242880 5242880 0.025 0.2 0 0 1.02499999999832
+524288 0 0 0 0 6815744 5242880 5242880 0.025 0.3 0 0 1.025
+524288 0 0 0 0 7340032 5242880 5242880 0.025 0.4 0 0 1.025
+524288 0 0 0 0 7864320 5242880 5242880 0.025 0.5 0 0 1.025
+524288 0 0 0 0 8388608 5242880 5242880 0.025 0.6 0 0 1.025
+524288 0 0 0 0 8912896 5242880 5242880 0.025 0.7 0 0 1.025
+524288 0 0 0 0 9437184 5242880 5242880 0.025 0.8 0 0 1.025
+524288 0 0 0 0 9961472 5242880 5242880 0.025 0.9 0 0 1.025
+524288 0 0 0 0 10485760 5242880 5242880 0.025 1 0 0 1.025
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 1.025
+524288 0 1 0 0 2883584 5242880 5242880 0.025 -0.45 0 0 1.025
+524288 0 1 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 1.025
+524288 0 1 0 0 3407872 5242880 5242880 0.025 -0.35 0 0 1.02500000000011
+524288 0 1 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 1.025
+524288 0 1 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 1.0249999999964
+524288 0 1 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 1.02499999999832
+524288 0 1 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 1.02500000000003
+524288 0 1 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 1.02500000004247
+524288 0 1 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 1.02500000000073
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 1 0 0 5505024 5242880 5242880 0.025 0.05 0 0 1.02500000000073
+524288 0 1 0 0 5767168 5242880 5242880 0.025 0.1 0 0 1.02500000004247
+524288 0 1 0 0 6029312 5242880 5242880 0.025 0.15 0 0 1.02500000000003
+524288 0 1 0 0 6291456 5242880 5242880 0.025 0.2 0 0 1.02499999999832
+524288 0 1 0 0 6553600 5242880 5242880 0.025 0.25 0 0 1.0249999999964
+524288 0 1 0 0 6815744 5242880 5242880 0.025 0.3 0 0 1.025
+524288 0 1 0 0 7077888 5242880 5242880 0.025 0.35 0 0 1.02500000000011
+524288 0 1 0 0 7340032 5242880 5242880 0.025 0.4 0 0 1.025
+524288 0 1 0 0 7602176 5242880 5242880 0.025 0.45 0 0 1.025
+524288 0 1 0 0 7864320 5242880 5242880 0.025 0.5 0 0 1.025
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 1.0249999999964
+524288 0 2 0 0 4063232 5242880 5242880 0.025 -0.225 0 0 1.02499999999703
+524288 0 2 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 1.02499999999832
+524288 0 2 0 0 4325376 5242880 5242880 0.025 -0.175 0 0 1.02499999999664
+524288 0 2 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 1.02500000000003
+524288 0 2 0 0 4587520 5242880 5242880 0.025 -0.125 0 0 1.02500000002396
+524288 0 2 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 1.02500000004247
+524288 0 2 0 0 4849664 5242880 5242880 0.025 -0.075 0 0 1.02500000000014
+524288 0 2 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 1.02500000000073
+524288 0 2 0 0 5111808 5242880 5242880 0.025 -0.025 0 0 1.02500000000001
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 2 0 0 5373952 5242880 5242880 0.025 0.025 0 0 1.02500000000001
+524288 0 2 0 0 5505024 5242880 5242880 0.025 0.05 0 0 1.02500000000073
+524288 0 2 0 0 5636096 5242880 5242880 0.025 0.075 0 0 1.02500000000014
+524288 0 2 0 0 5767168 5242880 5242880 0.025 0.1 0 0 1.02500000004247
+524288 0 2 0 0 5898240 5242880 5242880 0.025 0.125 0 0 1.02500000002396
+524288 0 2 0 0 6029312 5242880 5242880 0.025 0.15 0 0 1.02500000000003
+524288 0 2 0 0 6160384 5242880 5242880 0.025 0.175 0 0 1.02499999999664
+524288 0 2 0 0 6291456 5242880 5242880 0.025 0.2 0 0 1.02499999999832
+524288 0 2 0 0 6422528 5242880 5242880 0.025 0.225 0 0 1.02499999999703
+524288 0 2 0 0 6553600 5242880 5242880 0.025 0.25 0 0 1.0249999999964
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 3932160 5242880 5242880 0.03125 -0.25 0 0 1.0312499999947
+655360 0 2 0 0 4063232 5242880 5242880 0.03125 -0.225 0 0 1.03124999999534
+655360 0 2 0 0 4194304 5242880 5242880 0.03125 -0.2 0 0 1.03124999999702
+655360 0 2 0 0 4325376 5242880 5242880 0.03125 -0.175 0 0 1.03124999999494
+655360 0 2 0 0 4456448 5242880 5242880 0.03125 -0.15 0 0 1.03124999999993
+655360 0 2 0 0 4587520 5242880 5242880 0.03125 -0.125 0 0 1.03125000003312
+655360 0 2 0 0 4718592 5242880 5242880 0.03125 -0.1 0 0 1.03125000005828
+655360 0 2 0 0 4849664 5242880 5242880 0.03125 -0.075 0 0 1.03125000000063
+655360 0 2 0 0 4980736 5242880 5242880 0.03125 -0.05 0 0 1.03125000000198
+655360 0 2 0 0 5111808 5242880 5242880 0.03125 -0.025 0 0 1.03125000000007
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.0312500000001
+655360 0 2 0 0 5373952 5242880 5242880 0.03125 0.025 0 0 1.03125000000007
+655360 0 2 0 0 5505024 5242880 5242880 0.03125 0.05 0 0 1.03125000000198
+655360 0 2 0 0 5636096 5242880 5242880 0.03125 0.075 0 0 1.03125000000063
+655360 0 2 0 0 5767168 5242880 5242880 0.03125 0.1 0 0 1.03125000005828
+655360 0 2 0 0 5898240 5242880 5242880 0.03125 0.125 0 0 1.03125000003312
+655360 0 2 0 0 6029312 5242880 5242880 0.03125 0.15 0 0 1.03124999999993
+655360 0 2 0 0 6160384 5242880 5242880 0.03125 0.175 0 0 1.03124999999494
+655360 0 2 0 0 6291456 5242880 5242880 0.03125 0.2 0 0 1.03124999999702
+655360 0 2 0 0 6422528 5242880 5242880 0.03125 0.225 0 0 1.03124999999534
+655360 0 2 0 0 6553600 5242880 5242880 0.03125 0.25 0 0 1.0312499999947
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 2621440 5242880 5242880 0.0375 -0.5 0 0 1.0375
+786432 0 1 0 0 2883584 5242880 5242880 0.0375 -0.45 0 0 1.03749999999999
+786432 0 1 0 0 3145728 5242880 5242880 0.0375 -0.4 0 0 1.03749999999999
+786432 0 1 0 0 3407872 5242880 5242880 0.0375 -0.35 0 0 1.03750000000033
+786432 0 1 0 0 3670016 5242880 5242880 0.0375 -0.3 0 0 1.03750000000009
+786432 0 1 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 1.03749999999307
+786432 0 1 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 1.03749999999542
+786432 0 1 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 1.03749999999975
+786432 0 1 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 1.0375000000732
+786432 0 1 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 1.03750000000421
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+786432 0 1 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 1.03750000000421
+786432 0 1 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 1.0375000000732
+786432 0 1 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 1.03749999999975
+786432 0 1 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 1.03749999999542
+786432 0 1 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 1.03749999999307
+786432 0 1 0 0 6815744 5242880 5242880 0.0375 0.3 0 0 1.03750000000009
+786432 0 1 0 0 7077888 5242880 5242880 0.0375 0.35 0 0 1.03750000000033
+786432 0 1 0 0 7340032 5242880 5242880 0.0375 0.4 0 0 1.03749999999999
+786432 0 1 0 0 7602176 5242880 5242880 0.0375 0.45 0 0 1.03749999999999
+786432 0 1 0 0 7864320 5242880 5242880 0.0375 0.5 0 0 1.0375
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 1.03749999999307
+786432 0 2 0 0 4063232 5242880 5242880 0.0375 -0.225 0 0 1.03749999999353
+786432 0 2 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 1.03749999999542
+786432 0 2 0 0 4325376 5242880 5242880 0.0375 -0.175 0 0 1.03749999999314
+786432 0 2 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 1.03749999999975
+786432 0 2 0 0 4587520 5242880 5242880 0.0375 -0.125 0 0 1.03750000004106
+786432 0 2 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 1.0375000000732
+786432 0 2 0 0 4849664 5242880 5242880 0.0375 -0.075 0 0 1.03750000000169
+786432 0 2 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 1.03750000000421
+786432 0 2 0 0 5111808 5242880 5242880 0.0375 -0.025 0 0 1.03750000000026
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+786432 0 2 0 0 5373952 5242880 5242880 0.0375 0.025 0 0 1.03750000000026
+786432 0 2 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 1.03750000000421
+786432 0 2 0 0 5636096 5242880 5242880 0.0375 0.075 0 0 1.03750000000169
+786432 0 2 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 1.0375000000732
+786432 0 2 0 0 5898240 5242880 5242880 0.0375 0.125 0 0 1.03750000004106
+786432 0 2 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 1.03749999999975
+786432 0 2 0 0 6160384 5242880 5242880 0.0375 0.175 0 0 1.03749999999314
+786432 0 2 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 1.03749999999542
+786432 0 2 0 0 6422528 5242880 5242880 0.0375 0.225 0 0 1.03749999999353
+786432 0 2 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 1.03749999999307
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 3932160 5242880 5242880 0.04375 -0.25 0 0 1.04374999999102
+917504 0 2 0 0 4063232 5242880 5242880 0.04375 -0.225 0 0 1.04374999999181
+917504 0 2 0 0 4194304 5242880 5242880 0.04375 -0.2 0 0 1.04374999999437
+917504 0 2 0 0 4325376 5242880 5242880 0.04375 -0.175 0 0 1.04374999999151
+917504 0 2 0 0 4456448 5242880 5242880 0.04375 -0.15 0 0 1.04374999999929
+917504 0 2 0 0 4587520 5242880 5242880 0.04375 -0.125 0 0 1.04375000004884
+917504 0 2 0 0 4718592 5242880 5242880 0.04375 -0.1 0 0 1.04375000008715
+917504 0 2 0 0 4849664 5242880 5242880 0.04375 -0.075 0 0 1.04375000000356
+917504 0 2 0 0 4980736 5242880 5242880 0.04375 -0.05 0 0 1.04375000000769
+917504 0 2 0 0 5111808 5242880 5242880 0.04375 -0.025 0 0 1.04375000000072
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.043750000001
+917504 0 2 0 0 5373952 5242880 5242880 0.04375 0.025 0 0 1.04375000000072
+917504 0 2 0 0 5505024 5242880 5242880 0.04375 0.05 0 0 1.04375000000769
+917504 0 2 0 0 5636096 5242880 5242880 0.04375 0.075 0 0 1.04375000000356
+917504 0 2 0 0 5767168 5242880 5242880 0.04375 0.1 0 0 1.04375000008715
+917504 0 2 0 0 5898240 5242880 5242880 0.04375 0.125 0 0 1.04375000004884
+917504 0 2 0 0 6029312 5242880 5242880 0.04375 0.15 0 0 1.04374999999929
+917504 0 2 0 0 6160384 5242880 5242880 0.04375 0.175 0 0 1.04374999999151
+917504 0 2 0 0 6291456 5242880 5242880 0.04375 0.2 0 0 1.04374999999437
+917504 0 2 0 0 6422528 5242880 5242880 0.04375 0.225 0 0 1.04374999999181
+917504 0 2 0 0 6553600 5242880 5242880 0.04375 0.25 0 0 1.04374999999102
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 0 5242880 5242880 0.05 -1 0 0 1.05
+1048576 0 0 0 0 524288 5242880 5242880 0.05 -0.9 0 0 1.05
+1048576 0 0 0 0 1048576 5242880 5242880 0.05 -0.8 0 0 1.05
+1048576 0 0 0 0 1572864 5242880 5242880 0.05 -0.7 0 0 1.05
+1048576 0 0 0 0 2097152 5242880 5242880 0.05 -0.6 0 0 1.05
+1048576 0 0 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 1.05
+1048576 0 0 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 1.04999999999998
+1048576 0 0 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 1.05000000000024
+1048576 0 0 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 1.04999999999358
+1048576 0 0 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 1.05000000010013
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 0 0 0 5767168 5242880 5242880 0.05 0.1 0 0 1.05000000010013
+1048576 0 0 0 0 6291456 5242880 5242880 0.05 0.2 0 0 1.04999999999358
+1048576 0 0 0 0 6815744 5242880 5242880 0.05 0.3 0 0 1.05000000000024
+1048576 0 0 0 0 7340032 5242880 5242880 0.05 0.4 0 0 1.04999999999998
+1048576 0 0 0 0 7864320 5242880 5242880 0.05 0.5 0 0 1.05
+1048576 0 0 0 0 8388608 5242880 5242880 0.05 0.6 0 0 1.05
+1048576 0 0 0 0 8912896 5242880 5242880 0.05 0.7 0 0 1.05
+1048576 0 0 0 0 9437184 5242880 5242880 0.05 0.8 0 0 1.05
+1048576 0 0 0 0 9961472 5242880 5242880 0.05 0.9 0 0 1.05
+1048576 0 0 0 0 10485760 5242880 5242880 0.05 1 0 0 1.05
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 1.05
+1048576 0 1 0 0 2883584 5242880 5242880 0.05 -0.45 0 0 1.04999999999998
+1048576 0 1 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 1.04999999999998
+1048576 0 1 0 0 3407872 5242880 5242880 0.05 -0.35 0 0 1.05000000000053
+1048576 0 1 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 1.05000000000024
+1048576 0 1 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 1.04999999999027
+1048576 0 1 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 1.04999999999358
+1048576 0 1 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 1.04999999999861
+1048576 0 1 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 1.05000000010013
+1048576 0 1 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 1.05000000001273
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 1 0 0 5505024 5242880 5242880 0.05 0.05 0 0 1.05000000001273
+1048576 0 1 0 0 5767168 5242880 5242880 0.05 0.1 0 0 1.05000000010013
+1048576 0 1 0 0 6029312 5242880 5242880 0.05 0.15 0 0 1.04999999999861
+1048576 0 1 0 0 6291456 5242880 5242880 0.05 0.2 0 0 1.04999999999358
+1048576 0 1 0 0 6553600 5242880 5242880 0.05 0.25 0 0 1.04999999999027
+1048576 0 1 0 0 6815744 5242880 5242880 0.05 0.3 0 0 1.05000000000024
+1048576 0 1 0 0 7077888 5242880 5242880 0.05 0.35 0 0 1.05000000000053
+1048576 0 1 0 0 7340032 5242880 5242880 0.05 0.4 0 0 1.04999999999998
+1048576 0 1 0 0 7602176 5242880 5242880 0.05 0.45 0 0 1.04999999999998
+1048576 0 1 0 0 7864320 5242880 5242880 0.05 0.5 0 0 1.05
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 1.04999999999027
+1048576 0 2 0 0 4063232 5242880 5242880 0.05 -0.225 0 0 1.04999999999099
+1048576 0 2 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 1.04999999999358
+1048576 0 2 0 0 4325376 5242880 5242880 0.05 -0.175 0 0 1.04999999998996
+1048576 0 2 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 1.04999999999861
+1048576 0 2 0 0 4587520 5242880 5242880 0.05 -0.125 0 0 1.05000000005515
+1048576 0 2 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 1.05000000010013
+1048576 0 2 0 0 4849664 5242880 5242880 0.05 -0.075 0 0 1.0500000000065
+1048576 0 2 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 1.05000000001273
+1048576 0 2 0 0 5111808 5242880 5242880 0.05 -0.025 0 0 1.05000000000165
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 2 0 0 5373952 5242880 5242880 0.05 0.025 0 0 1.05000000000165
+1048576 0 2 0 0 5505024 5242880 5242880 0.05 0.05 0 0 1.05000000001273
+1048576 0 2 0 0 5636096 5242880 5242880 0.05 0.075 0 0 1.0500000000065
+1048576 0 2 0 0 5767168 5242880 5242880 0.05 0.1 0 0 1.05000000010013
+1048576 0 2 0 0 5898240 5242880 5242880 0.05 0.125 0 0 1.05000000005515
+1048576 0 2 0 0 6029312 5242880 5242880 0.05 0.15 0 0 1.04999999999861
+1048576 0 2 0 0 6160384 5242880 5242880 0.05 0.175 0 0 1.04999999998996
+1048576 0 2 0 0 6291456 5242880 5242880 0.05 0.2 0 0 1.04999999999358
+1048576 0 2 0 0 6422528 5242880 5242880 0.05 0.225 0 0 1.04999999999099
+1048576 0 2 0 0 6553600 5242880 5242880 0.05 0.25 0 0 1.04999999999027
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 3932160 5242880 5242880 0.05625 -0.25 0 0 1.05624999998901
+1179648 0 2 0 0 4063232 5242880 5242880 0.05625 -0.225 0 0 1.05624999999015
+1179648 0 2 0 0 4194304 5242880 5242880 0.05625 -0.2 0 0 1.05624999999326
+1179648 0 2 0 0 4325376 5242880 5242880 0.05625 -0.175 0 0 1.05624999998853
+1179648 0 2 0 0 4456448 5242880 5242880 0.05625 -0.15 0 0 1.05624999999763
+1179648 0 2 0 0 4587520 5242880 5242880 0.05625 -0.125 0 0 1.05625000006123
+1179648 0 2 0 0 4718592 5242880 5242880 0.05625 -0.1 0 0 1.05625000011224
+1179648 0 2 0 0 4849664 5242880 5242880 0.05625 -0.075 0 0 1.05625000001079
+1179648 0 2 0 0 4980736 5242880 5242880 0.05625 -0.05 0 0 1.05625000001963
+1179648 0 2 0 0 5111808 5242880 5242880 0.05625 -0.025 0 0 1.05625000000332
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.05625000000452
+1179648 0 2 0 0 5373952 5242880 5242880 0.05625 0.025 0 0 1.05625000000332
+1179648 0 2 0 0 5505024 5242880 5242880 0.05625 0.05 0 0 1.05625000001963
+1179648 0 2 0 0 5636096 5242880 5242880 0.05625 0.075 0 0 1.05625000001079
+1179648 0 2 0 0 5767168 5242880 5242880 0.05625 0.1 0 0 1.05625000011224
+1179648 0 2 0 0 5898240 5242880 5242880 0.05625 0.125 0 0 1.05625000006123
+1179648 0 2 0 0 6029312 5242880 5242880 0.05625 0.15 0 0 1.05624999999763
+1179648 0 2 0 0 6160384 5242880 5242880 0.05625 0.175 0 0 1.05624999998853
+1179648 0 2 0 0 6291456 5242880 5242880 0.05625 0.2 0 0 1.05624999999326
+1179648 0 2 0 0 6422528 5242880 5242880 0.05625 0.225 0 0 1.05624999999015
+1179648 0 2 0 0 6553600 5242880 5242880 0.05625 0.25 0 0 1.05624999998901
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 2621440 5242880 5242880 0.0625 -0.5 0 0 1.0625
+1310720 0 1 0 0 2883584 5242880 5242880 0.0625 -0.45 0 0 1.06249999999993
+1310720 0 1 0 0 3145728 5242880 5242880 0.0625 -0.4 0 0 1.06249999999994
+1310720 0 1 0 0 3407872 5242880 5242880 0.0625 -0.35 0 0 1.06250000000083
+1310720 0 1 0 0 3670016 5242880 5242880 0.0625 -0.3 0 0 1.06250000000062
+1310720 0 1 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 1.06249999998785
+1310720 0 1 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 1.06249999999333
+1310720 0 1 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 1.06249999999637
+1310720 0 1 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 1.06250000012362
+1310720 0 1 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 1.06250000002869
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+1310720 0 1 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 1.06250000002869
+1310720 0 1 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 1.06250000012362
+1310720 0 1 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 1.06249999999637
+1310720 0 1 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 1.06249999999333
+1310720 0 1 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 1.06249999998785
+1310720 0 1 0 0 6815744 5242880 5242880 0.0625 0.3 0 0 1.06250000000062
+1310720 0 1 0 0 7077888 5242880 5242880 0.0625 0.35 0 0 1.06250000000083
+1310720 0 1 0 0 7340032 5242880 5242880 0.0625 0.4 0 0 1.06249999999994
+1310720 0 1 0 0 7602176 5242880 5242880 0.0625 0.45 0 0 1.06249999999993
+1310720 0 1 0 0 7864320 5242880 5242880 0.0625 0.5 0 0 1.0625
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 1.06249999998785
+1310720 0 2 0 0 4063232 5242880 5242880 0.0625 -0.225 0 0 1.0624999999896
+1310720 0 2 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 1.06249999999333
+1310720 0 2 0 0 4325376 5242880 5242880 0.0625 -0.175 0 0 1.06249999998724
+1310720 0 2 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 1.06249999999637
+1310720 0 2 0 0 4587520 5242880 5242880 0.0625 -0.125 0 0 1.06250000006612
+1310720 0 2 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 1.06250000012362
+1310720 0 2 0 0 4849664 5242880 5242880 0.0625 -0.075 0 0 1.06250000001668
+1310720 0 2 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 1.06250000002869
+1310720 0 2 0 0 5111808 5242880 5242880 0.0625 -0.025 0 0 1.06250000000608
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+1310720 0 2 0 0 5373952 5242880 5242880 0.0625 0.025 0 0 1.06250000000608
+1310720 0 2 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 1.06250000002869
+1310720 0 2 0 0 5636096 5242880 5242880 0.0625 0.075 0 0 1.06250000001668
+1310720 0 2 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 1.06250000012362
+1310720 0 2 0 0 5898240 5242880 5242880 0.0625 0.125 0 0 1.06250000006612
+1310720 0 2 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 1.06249999999637
+1310720 0 2 0 0 6160384 5242880 5242880 0.0625 0.175 0 0 1.06249999998724
+1310720 0 2 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 1.06249999999333
+1310720 0 2 0 0 6422528 5242880 5242880 0.0625 0.225 0 0 1.0624999999896
+1310720 0 2 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 1.06249999998785
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 3932160 5242880 5242880 0.06875 -0.25 0 0 1.06874999998681
+1441792 0 2 0 0 4063232 5242880 5242880 0.06875 -0.225 0 0 1.06874999998947
+1441792 0 2 0 0 4194304 5242880 5242880 0.06875 -0.2 0 0 1.068749999994
+1441792 0 2 0 0 4325376 5242880 5242880 0.06875 -0.175 0 0 1.06874999998618
+1441792 0 2 0 0 4456448 5242880 5242880 0.06875 -0.15 0 0 1.06874999999489
+1441792 0 2 0 0 4587520 5242880 5242880 0.06875 -0.125 0 0 1.06875000007061
+1441792 0 2 0 0 4718592 5242880 5242880 0.06875 -0.1 0 0 1.06875000013445
+1441792 0 2 0 0 4849664 5242880 5242880 0.06875 -0.075 0 0 1.06875000002444
+1441792 0 2 0 0 4980736 5242880 5242880 0.06875 -0.05 0 0 1.06875000004019
+1441792 0 2 0 0 5111808 5242880 5242880 0.06875 -0.025 0 0 1.0687500000103
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.0687500000138
+1441792 0 2 0 0 5373952 5242880 5242880 0.06875 0.025 0 0 1.0687500000103
+1441792 0 2 0 0 5505024 5242880 5242880 0.06875 0.05 0 0 1.06875000004019
+1441792 0 2 0 0 5636096 5242880 5242880 0.06875 0.075 0 0 1.06875000002444
+1441792 0 2 0 0 5767168 5242880 5242880 0.06875 0.1 0 0 1.06875000013445
+1441792 0 2 0 0 5898240 5242880 5242880 0.06875 0.125 0 0 1.06875000007061
+1441792 0 2 0 0 6029312 5242880 5242880 0.06875 0.15 0 0 1.06874999999489
+1441792 0 2 0 0 6160384 5242880 5242880 0.06875 0.175 0 0 1.06874999998618
+1441792 0 2 0 0 6291456 5242880 5242880 0.06875 0.2 0 0 1.068749999994
+1441792 0 2 0 0 6422528 5242880 5242880 0.06875 0.225 0 0 1.06874999998947
+1441792 0 2 0 0 6553600 5242880 5242880 0.06875 0.25 0 0 1.06874999998681
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 0 5242880 5242880 0.075 -1 0 0 1.075
+1572864 0 0 0 0 524288 5242880 5242880 0.075 -0.9 0 0 1.075
+1572864 0 0 0 0 1048576 5242880 5242880 0.075 -0.8 0 0 1.075
+1572864 0 0 0 0 1572864 5242880 5242880 0.075 -0.7 0 0 1.075
+1572864 0 0 0 0 2097152 5242880 5242880 0.075 -0.6 0 0 1.075
+1572864 0 0 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 1.075
+1572864 0 0 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 1.07499999999987
+1572864 0 0 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 1.07500000000118
+1572864 0 0 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 1.07499999999519
+1572864 0 0 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 1.07500000014499
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 0 0 0 5767168 5242880 5242880 0.075 0.1 0 0 1.07500000014499
+1572864 0 0 0 0 6291456 5242880 5242880 0.075 0.2 0 0 1.07499999999519
+1572864 0 0 0 0 6815744 5242880 5242880 0.075 0.3 0 0 1.07500000000118
+1572864 0 0 0 0 7340032 5242880 5242880 0.075 0.4 0 0 1.07499999999987
+1572864 0 0 0 0 7864320 5242880 5242880 0.075 0.5 0 0 1.075
+1572864 0 0 0 0 8388608 5242880 5242880 0.075 0.6 0 0 1.075
+1572864 0 0 0 0 8912896 5242880 5242880 0.075 0.7 0 0 1.075
+1572864 0 0 0 0 9437184 5242880 5242880 0.075 0.8 0 0 1.075
+1572864 0 0 0 0 9961472 5242880 5242880 0.075 0.9 0 0 1.075
+1572864 0 0 0 0 10485760 5242880 5242880 0.075 1 0 0 1.075
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 1.075
+1572864 0 1 0 0 2883584 5242880 5242880 0.075 -0.45 0 0 1.07499999999986
+1572864 0 1 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 1.07499999999987
+1572864 0 1 0 0 3407872 5242880 5242880 0.075 -0.35 0 0 1.07500000000089
+1572864 0 1 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 1.07500000000118
+1572864 0 1 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 1.0749999999889
+1572864 0 1 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 1.07499999999519
+1572864 0 1 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 1.07499999999316
+1572864 0 1 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 1.07500000014499
+1572864 0 1 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 1.0750000000544
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 1 0 0 5505024 5242880 5242880 0.075 0.05 0 0 1.0750000000544
+1572864 0 1 0 0 5767168 5242880 5242880 0.075 0.1 0 0 1.07500000014499
+1572864 0 1 0 0 6029312 5242880 5242880 0.075 0.15 0 0 1.07499999999316
+1572864 0 1 0 0 6291456 5242880 5242880 0.075 0.2 0 0 1.07499999999519
+1572864 0 1 0 0 6553600 5242880 5242880 0.075 0.25 0 0 1.0749999999889
+1572864 0 1 0 0 6815744 5242880 5242880 0.075 0.3 0 0 1.07500000000118
+1572864 0 1 0 0 7077888 5242880 5242880 0.075 0.35 0 0 1.07500000000089
+1572864 0 1 0 0 7340032 5242880 5242880 0.075 0.4 0 0 1.07499999999987
+1572864 0 1 0 0 7602176 5242880 5242880 0.075 0.45 0 0 1.07499999999986
+1572864 0 1 0 0 7864320 5242880 5242880 0.075 0.5 0 0 1.075
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 1.0749999999889
+1572864 0 2 0 0 4063232 5242880 5242880 0.075 -0.225 0 0 1.07499999999141
+1572864 0 2 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 1.07499999999519
+1572864 0 2 0 0 4325376 5242880 5242880 0.075 -0.175 0 0 1.07499999998508
+1572864 0 2 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 1.07499999999316
+1572864 0 2 0 0 4587520 5242880 5242880 0.075 -0.125 0 0 1.0750000000746
+1572864 0 2 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 1.07500000014499
+1572864 0 2 0 0 4849664 5242880 5242880 0.075 -0.075 0 0 1.07500000003426
+1572864 0 2 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 1.0750000000544
+1572864 0 2 0 0 5111808 5242880 5242880 0.075 -0.025 0 0 1.07500000001642
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 2 0 0 5373952 5242880 5242880 0.075 0.025 0 0 1.07500000001642
+1572864 0 2 0 0 5505024 5242880 5242880 0.075 0.05 0 0 1.0750000000544
+1572864 0 2 0 0 5636096 5242880 5242880 0.075 0.075 0 0 1.07500000003426
+1572864 0 2 0 0 5767168 5242880 5242880 0.075 0.1 0 0 1.07500000014499
+1572864 0 2 0 0 5898240 5242880 5242880 0.075 0.125 0 0 1.0750000000746
+1572864 0 2 0 0 6029312 5242880 5242880 0.075 0.15 0 0 1.07499999999316
+1572864 0 2 0 0 6160384 5242880 5242880 0.075 0.175 0 0 1.07499999998508
+1572864 0 2 0 0 6291456 5242880 5242880 0.075 0.2 0 0 1.07499999999519
+1572864 0 2 0 0 6422528 5242880 5242880 0.075 0.225 0 0 1.07499999999141
+1572864 0 2 0 0 6553600 5242880 5242880 0.075 0.25 0 0 1.0749999999889
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 3932160 5242880 5242880 0.08125 -0.25 0 0 1.08124999998915
+1703936 0 2 0 0 4063232 5242880 5242880 0.08125 -0.225 0 0 1.08124999999272
+1703936 0 2 0 0 4194304 5242880 5242880 0.08125 -0.2 0 0 1.08124999999712
+1703936 0 2 0 0 4325376 5242880 5242880 0.08125 -0.175 0 0 1.08124999998455
+1703936 0 2 0 0 4456448 5242880 5242880 0.08125 -0.15 0 0 1.08124999999139
+1703936 0 2 0 0 4587520 5242880 5242880 0.08125 -0.125 0 0 1.08125000007798
+1703936 0 2 0 0 4718592 5242880 5242880 0.08125 -0.1 0 0 1.08125000015544
+1703936 0 2 0 0 4849664 5242880 5242880 0.08125 -0.075 0 0 1.08125000004629
+1703936 0 2 0 0 4980736 5242880 5242880 0.08125 -0.05 0 0 1.08125000007153
+1703936 0 2 0 0 5111808 5242880 5242880 0.08125 -0.025 0 0 1.08125000002489
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.08125000003301
+1703936 0 2 0 0 5373952 5242880 5242880 0.08125 0.025 0 0 1.08125000002489
+1703936 0 2 0 0 5505024 5242880 5242880 0.08125 0.05 0 0 1.08125000007153
+1703936 0 2 0 0 5636096 5242880 5242880 0.08125 0.075 0 0 1.08125000004629
+1703936 0 2 0 0 5767168 5242880 5242880 0.08125 0.1 0 0 1.08125000015544
+1703936 0 2 0 0 5898240 5242880 5242880 0.08125 0.125 0 0 1.08125000007798
+1703936 0 2 0 0 6029312 5242880 5242880 0.08125 0.15 0 0 1.08124999999139
+1703936 0 2 0 0 6160384 5242880 5242880 0.08125 0.175 0 0 1.08124999998455
+1703936 0 2 0 0 6291456 5242880 5242880 0.08125 0.2 0 0 1.08124999999712
+1703936 0 2 0 0 6422528 5242880 5242880 0.08125 0.225 0 0 1.08124999999272
+1703936 0 2 0 0 6553600 5242880 5242880 0.08125 0.25 0 0 1.08124999998915
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 2621440 5242880 5242880 0.0875 -0.5 0 0 1.08750000000001
+1835008 0 1 0 0 2883584 5242880 5242880 0.0875 -0.45 0 0 1.08749999999976
+1835008 0 1 0 0 3145728 5242880 5242880 0.0875 -0.4 0 0 1.08749999999977
+1835008 0 1 0 0 3407872 5242880 5242880 0.0875 -0.35 0 0 1.08750000000108
+1835008 0 1 0 0 3670016 5242880 5242880 0.0875 -0.3 0 0 1.08750000000186
+1835008 0 1 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 1.0874999999892
+1835008 0 1 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 1.08749999999972
+1835008 0 1 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 1.08749999998951
+1835008 0 1 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 1.08750000016605
+1835008 0 1 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 1.08750000009175
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+1835008 0 1 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 1.08750000009175
+1835008 0 1 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 1.08750000016605
+1835008 0 1 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 1.08749999998951
+1835008 0 1 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 1.08749999999972
+1835008 0 1 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 1.0874999999892
+1835008 0 1 0 0 6815744 5242880 5242880 0.0875 0.3 0 0 1.08750000000186
+1835008 0 1 0 0 7077888 5242880 5242880 0.0875 0.35 0 0 1.08750000000108
+1835008 0 1 0 0 7340032 5242880 5242880 0.0875 0.4 0 0 1.08749999999977
+1835008 0 1 0 0 7602176 5242880 5242880 0.0875 0.45 0 0 1.08749999999976
+1835008 0 1 0 0 7864320 5242880 5242880 0.0875 0.5 0 0 1.08750000000001
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 1.0874999999892
+1835008 0 2 0 0 4063232 5242880 5242880 0.0875 -0.225 0 0 1.08749999999431
+1835008 0 2 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 1.08749999999972
+1835008 0 2 0 0 4325376 5242880 5242880 0.0875 -0.175 0 0 1.08749999998424
+1835008 0 2 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 1.08749999998951
+1835008 0 2 0 0 4587520 5242880 5242880 0.0875 -0.125 0 0 1.08750000008179
+1835008 0 2 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 1.08750000016605
+1835008 0 2 0 0 4849664 5242880 5242880 0.0875 -0.075 0 0 1.08750000006059
+1835008 0 2 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 1.08750000009175
+1835008 0 2 0 0 5111808 5242880 5242880 0.0875 -0.025 0 0 1.08750000003613
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+1835008 0 2 0 0 5373952 5242880 5242880 0.0875 0.025 0 0 1.08750000003613
+1835008 0 2 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 1.08750000009175
+1835008 0 2 0 0 5636096 5242880 5242880 0.0875 0.075 0 0 1.08750000006059
+1835008 0 2 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 1.08750000016605
+1835008 0 2 0 0 5898240 5242880 5242880 0.0875 0.125 0 0 1.08750000008179
+1835008 0 2 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 1.08749999998951
+1835008 0 2 0 0 6160384 5242880 5242880 0.0875 0.175 0 0 1.08749999998424
+1835008 0 2 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 1.08749999999972
+1835008 0 2 0 0 6422528 5242880 5242880 0.0875 0.225 0 0 1.08749999999431
+1835008 0 2 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 1.0874999999892
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 3932160 5242880 5242880 0.09375 -0.25 0 0 1.0937499999896
+1966080 0 2 0 0 4063232 5242880 5242880 0.09375 -0.225 0 0 1.09374999999655
+1966080 0 2 0 0 4194304 5242880 5242880 0.09375 -0.2 0 0 1.09375000000317
+1966080 0 2 0 0 4325376 5242880 5242880 0.09375 -0.175 0 0 1.09374999998465
+1966080 0 2 0 0 4456448 5242880 5242880 0.09375 -0.15 0 0 1.0937499999879
+1966080 0 2 0 0 4587520 5242880 5242880 0.09375 -0.125 0 0 1.09375000008476
+1966080 0 2 0 0 4718592 5242880 5242880 0.09375 -0.1 0 0 1.09375000017699
+1966080 0 2 0 0 4849664 5242880 5242880 0.09375 -0.075 0 0 1.09375000007712
+1966080 0 2 0 0 4980736 5242880 5242880 0.09375 -0.05 0 0 1.09375000011513
+1966080 0 2 0 0 5111808 5242880 5242880 0.09375 -0.025 0 0 1.09375000005053
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.09375000006661
+1966080 0 2 0 0 5373952 5242880 5242880 0.09375 0.025 0 0 1.09375000005053
+1966080 0 2 0 0 5505024 5242880 5242880 0.09375 0.05 0 0 1.09375000011513
+1966080 0 2 0 0 5636096 5242880 5242880 0.09375 0.075 0 0 1.09375000007712
+1966080 0 2 0 0 5767168 5242880 5242880 0.09375 0.1 0 0 1.09375000017699
+1966080 0 2 0 0 5898240 5242880 5242880 0.09375 0.125 0 0 1.09375000008476
+1966080 0 2 0 0 6029312 5242880 5242880 0.09375 0.15 0 0 1.0937499999879
+1966080 0 2 0 0 6160384 5242880 5242880 0.09375 0.175 0 0 1.09374999998465
+1966080 0 2 0 0 6291456 5242880 5242880 0.09375 0.2 0 0 1.09375000000317
+1966080 0 2 0 0 6422528 5242880 5242880 0.09375 0.225 0 0 1.09374999999655
+1966080 0 2 0 0 6553600 5242880 5242880 0.09375 0.25 0 0 1.0937499999896
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 0 5242880 5242880 0.1 -1 0 0 1.1
+2097152 0 0 0 0 524288 5242880 5242880 0.1 -0.9 0 0 1.1
+2097152 0 0 0 0 1048576 5242880 5242880 0.1 -0.8 0 0 1.1
+2097152 0 0 0 0 1572864 5242880 5242880 0.1 -0.7 0 0 1.1
+2097152 0 0 0 0 2097152 5242880 5242880 0.1 -0.6 0 0 1.1
+2097152 0 0 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 1.10000000000003
+2097152 0 0 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 1.09999999999964
+2097152 0 0 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 1.10000000000268
+2097152 0 0 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 1.10000000000743
+2097152 0 0 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 1.10000000018839
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 0 0 0 5767168 5242880 5242880 0.1 0.1 0 0 1.10000000018839
+2097152 0 0 0 0 6291456 5242880 5242880 0.1 0.2 0 0 1.10000000000743
+2097152 0 0 0 0 6815744 5242880 5242880 0.1 0.3 0 0 1.10000000000268
+2097152 0 0 0 0 7340032 5242880 5242880 0.1 0.4 0 0 1.09999999999964
+2097152 0 0 0 0 7864320 5242880 5242880 0.1 0.5 0 0 1.10000000000003
+2097152 0 0 0 0 8388608 5242880 5242880 0.1 0.6 0 0 1.1
+2097152 0 0 0 0 8912896 5242880 5242880 0.1 0.7 0 0 1.1
+2097152 0 0 0 0 9437184 5242880 5242880 0.1 0.8 0 0 1.1
+2097152 0 0 0 0 9961472 5242880 5242880 0.1 0.9 0 0 1.1
+2097152 0 0 0 0 10485760 5242880 5242880 0.1 1 0 0 1.1
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 1.10000000000003
+2097152 0 1 0 0 2883584 5242880 5242880 0.1 -0.45 0 0 1.09999999999964
+2097152 0 1 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 1.09999999999964
+2097152 0 1 0 0 3407872 5242880 5242880 0.1 -0.35 0 0 1.10000000000084
+2097152 0 1 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 1.10000000000268
+2097152 0 1 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 1.09999999999394
+2097152 0 1 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 1.10000000000743
+2097152 0 1 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 1.09999999998642
+2097152 0 1 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 1.10000000018839
+2097152 0 1 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 1.10000000014165
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 1 0 0 5505024 5242880 5242880 0.1 0.05 0 0 1.10000000014165
+2097152 0 1 0 0 5767168 5242880 5242880 0.1 0.1 0 0 1.10000000018839
+2097152 0 1 0 0 6029312 5242880 5242880 0.1 0.15 0 0 1.09999999998642
+2097152 0 1 0 0 6291456 5242880 5242880 0.1 0.2 0 0 1.10000000000743
+2097152 0 1 0 0 6553600 5242880 5242880 0.1 0.25 0 0 1.09999999999394
+2097152 0 1 0 0 6815744 5242880 5242880 0.1 0.3 0 0 1.10000000000268
+2097152 0 1 0 0 7077888 5242880 5242880 0.1 0.35 0 0 1.10000000000084
+2097152 0 1 0 0 7340032 5242880 5242880 0.1 0.4 0 0 1.09999999999964
+2097152 0 1 0 0 7602176 5242880 5242880 0.1 0.45 0 0 1.09999999999964
+2097152 0 1 0 0 7864320 5242880 5242880 0.1 0.5 0 0 1.10000000000003
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 1.09999999999394
+2097152 0 2 0 0 4063232 5242880 5242880 0.1 -0.225 0 0 1.10000000000145
+2097152 0 2 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 1.10000000000743
+2097152 0 2 0 0 4325376 5242880 5242880 0.1 -0.175 0 0 1.09999999998514
+2097152 0 2 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 1.09999999998642
+2097152 0 2 0 0 4587520 5242880 5242880 0.1 -0.125 0 0 1.10000000008901
+2097152 0 2 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 1.10000000018839
+2097152 0 2 0 0 4849664 5242880 5242880 0.1 -0.075 0 0 1.10000000009574
+2097152 0 2 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 1.10000000014165
+2097152 0 2 0 0 5111808 5242880 5242880 0.1 -0.025 0 0 1.1000000000684
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 2 0 0 5373952 5242880 5242880 0.1 0.025 0 0 1.1000000000684
+2097152 0 2 0 0 5505024 5242880 5242880 0.1 0.05 0 0 1.10000000014165
+2097152 0 2 0 0 5636096 5242880 5242880 0.1 0.075 0 0 1.10000000009574
+2097152 0 2 0 0 5767168 5242880 5242880 0.1 0.1 0 0 1.10000000018839
+2097152 0 2 0 0 5898240 5242880 5242880 0.1 0.125 0 0 1.10000000008901
+2097152 0 2 0 0 6029312 5242880 5242880 0.1 0.15 0 0 1.09999999998642
+2097152 0 2 0 0 6160384 5242880 5242880 0.1 0.175 0 0 1.09999999998514
+2097152 0 2 0 0 6291456 5242880 5242880 0.1 0.2 0 0 1.10000000000743
+2097152 0 2 0 0 6422528 5242880 5242880 0.1 0.225 0 0 1.10000000000145
+2097152 0 2 0 0 6553600 5242880 5242880 0.1 0.25 0 0 1.09999999999394
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.y.asc b/Carpet/CarpetInterp/test/waveinterp/phi.y.asc
new file mode 100644
index 000000000..32ed70f3b
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.y.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phi y (phi)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 0 5242880 0 0 -1 0 1
+0 0 0 0 0 5242880 524288 5242880 0 0 -0.9 0 1
+0 0 0 0 0 5242880 1048576 5242880 0 0 -0.8 0 1
+0 0 0 0 0 5242880 1572864 5242880 0 0 -0.7 0 1
+0 0 0 0 0 5242880 2097152 5242880 0 0 -0.6 0 1
+0 0 0 0 0 5242880 2621440 5242880 0 0 -0.5 0 1
+0 0 0 0 0 5242880 3145728 5242880 0 0 -0.4 0 1
+0 0 0 0 0 5242880 3670016 5242880 0 0 -0.3 0 1
+0 0 0 0 0 5242880 4194304 5242880 0 0 -0.2 0 1
+0 0 0 0 0 5242880 4718592 5242880 0 0 -0.1 0 1
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 0 0 0 5242880 5767168 5242880 0 0 0.1 0 1
+0 0 0 0 0 5242880 6291456 5242880 0 0 0.2 0 1
+0 0 0 0 0 5242880 6815744 5242880 0 0 0.3 0 1
+0 0 0 0 0 5242880 7340032 5242880 0 0 0.4 0 1
+0 0 0 0 0 5242880 7864320 5242880 0 0 0.5 0 1
+0 0 0 0 0 5242880 8388608 5242880 0 0 0.6 0 1
+0 0 0 0 0 5242880 8912896 5242880 0 0 0.7 0 1
+0 0 0 0 0 5242880 9437184 5242880 0 0 0.8 0 1
+0 0 0 0 0 5242880 9961472 5242880 0 0 0.9 0 1
+0 0 0 0 0 5242880 10485760 5242880 0 0 1 0 1
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 2621440 5242880 0 0 -0.5 0 1
+0 0 1 0 0 5242880 2883584 5242880 0 0 -0.45 0 1
+0 0 1 0 0 5242880 3145728 5242880 0 0 -0.4 0 1
+0 0 1 0 0 5242880 3407872 5242880 0 0 -0.35 0 1
+0 0 1 0 0 5242880 3670016 5242880 0 0 -0.3 0 1
+0 0 1 0 0 5242880 3932160 5242880 0 0 -0.25 0 1
+0 0 1 0 0 5242880 4194304 5242880 0 0 -0.2 0 1
+0 0 1 0 0 5242880 4456448 5242880 0 0 -0.15 0 1
+0 0 1 0 0 5242880 4718592 5242880 0 0 -0.1 0 1
+0 0 1 0 0 5242880 4980736 5242880 0 0 -0.05 0 1
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 1 0 0 5242880 5505024 5242880 0 0 0.05 0 1
+0 0 1 0 0 5242880 5767168 5242880 0 0 0.1 0 1
+0 0 1 0 0 5242880 6029312 5242880 0 0 0.15 0 1
+0 0 1 0 0 5242880 6291456 5242880 0 0 0.2 0 1
+0 0 1 0 0 5242880 6553600 5242880 0 0 0.25 0 1
+0 0 1 0 0 5242880 6815744 5242880 0 0 0.3 0 1
+0 0 1 0 0 5242880 7077888 5242880 0 0 0.35 0 1
+0 0 1 0 0 5242880 7340032 5242880 0 0 0.4 0 1
+0 0 1 0 0 5242880 7602176 5242880 0 0 0.45 0 1
+0 0 1 0 0 5242880 7864320 5242880 0 0 0.5 0 1
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 3932160 5242880 0 0 -0.25 0 1
+0 0 2 0 0 5242880 4063232 5242880 0 0 -0.225 0 1
+0 0 2 0 0 5242880 4194304 5242880 0 0 -0.2 0 1
+0 0 2 0 0 5242880 4325376 5242880 0 0 -0.175 0 1
+0 0 2 0 0 5242880 4456448 5242880 0 0 -0.15 0 1
+0 0 2 0 0 5242880 4587520 5242880 0 0 -0.125 0 1
+0 0 2 0 0 5242880 4718592 5242880 0 0 -0.1 0 1
+0 0 2 0 0 5242880 4849664 5242880 0 0 -0.075 0 1
+0 0 2 0 0 5242880 4980736 5242880 0 0 -0.05 0 1
+0 0 2 0 0 5242880 5111808 5242880 0 0 -0.025 0 1
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 2 0 0 5242880 5373952 5242880 0 0 0.025 0 1
+0 0 2 0 0 5242880 5505024 5242880 0 0 0.05 0 1
+0 0 2 0 0 5242880 5636096 5242880 0 0 0.075 0 1
+0 0 2 0 0 5242880 5767168 5242880 0 0 0.1 0 1
+0 0 2 0 0 5242880 5898240 5242880 0 0 0.125 0 1
+0 0 2 0 0 5242880 6029312 5242880 0 0 0.15 0 1
+0 0 2 0 0 5242880 6160384 5242880 0 0 0.175 0 1
+0 0 2 0 0 5242880 6291456 5242880 0 0 0.2 0 1
+0 0 2 0 0 5242880 6422528 5242880 0 0 0.225 0 1
+0 0 2 0 0 5242880 6553600 5242880 0 0 0.25 0 1
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 3932160 5242880 0.00625 0 -0.25 0 1.00625
+131072 0 2 0 0 5242880 4063232 5242880 0.00625 0 -0.225 0 1.00625
+131072 0 2 0 0 5242880 4194304 5242880 0.00625 0 -0.2 0 1.00625
+131072 0 2 0 0 5242880 4325376 5242880 0.00625 0 -0.175 0 1.00625
+131072 0 2 0 0 5242880 4456448 5242880 0.00625 0 -0.15 0 1.00625
+131072 0 2 0 0 5242880 4587520 5242880 0.00625 0 -0.125 0 1.00625
+131072 0 2 0 0 5242880 4718592 5242880 0.00625 0 -0.1 0 1.00625
+131072 0 2 0 0 5242880 4849664 5242880 0.00625 0 -0.075 0 1.00625
+131072 0 2 0 0 5242880 4980736 5242880 0.00625 0 -0.05 0 1.00625
+131072 0 2 0 0 5242880 5111808 5242880 0.00625 0 -0.025 0 1.00625
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1.00625
+131072 0 2 0 0 5242880 5373952 5242880 0.00625 0 0.025 0 1.00625
+131072 0 2 0 0 5242880 5505024 5242880 0.00625 0 0.05 0 1.00625
+131072 0 2 0 0 5242880 5636096 5242880 0.00625 0 0.075 0 1.00625
+131072 0 2 0 0 5242880 5767168 5242880 0.00625 0 0.1 0 1.00625
+131072 0 2 0 0 5242880 5898240 5242880 0.00625 0 0.125 0 1.00625
+131072 0 2 0 0 5242880 6029312 5242880 0.00625 0 0.15 0 1.00625
+131072 0 2 0 0 5242880 6160384 5242880 0.00625 0 0.175 0 1.00625
+131072 0 2 0 0 5242880 6291456 5242880 0.00625 0 0.2 0 1.00625
+131072 0 2 0 0 5242880 6422528 5242880 0.00625 0 0.225 0 1.00625
+131072 0 2 0 0 5242880 6553600 5242880 0.00625 0 0.25 0 1.00625
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 2621440 5242880 0.0125 0 -0.5 0 1.0125
+262144 0 1 0 0 5242880 2883584 5242880 0.0125 0 -0.45 0 1.0125
+262144 0 1 0 0 5242880 3145728 5242880 0.0125 0 -0.4 0 1.0125
+262144 0 1 0 0 5242880 3407872 5242880 0.0125 0 -0.35 0 1.0125
+262144 0 1 0 0 5242880 3670016 5242880 0.0125 0 -0.3 0 1.0125
+262144 0 1 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 1.0125
+262144 0 1 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 1.0125
+262144 0 1 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 1.0125
+262144 0 1 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 1.01250000000873
+262144 0 1 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 1.0125
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+262144 0 1 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 1.0125
+262144 0 1 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 1.01250000000873
+262144 0 1 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 1.0125
+262144 0 1 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 1.0125
+262144 0 1 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 1.0125
+262144 0 1 0 0 5242880 6815744 5242880 0.0125 0 0.3 0 1.0125
+262144 0 1 0 0 5242880 7077888 5242880 0.0125 0 0.35 0 1.0125
+262144 0 1 0 0 5242880 7340032 5242880 0.0125 0 0.4 0 1.0125
+262144 0 1 0 0 5242880 7602176 5242880 0.0125 0 0.45 0 1.0125
+262144 0 1 0 0 5242880 7864320 5242880 0.0125 0 0.5 0 1.0125
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 1.0125
+262144 0 2 0 0 5242880 4063232 5242880 0.0125 0 -0.225 0 1.0125
+262144 0 2 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 1.0125
+262144 0 2 0 0 5242880 4325376 5242880 0.0125 0 -0.175 0 1.01249999999945
+262144 0 2 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 1.0125
+262144 0 2 0 0 5242880 4587520 5242880 0.0125 0 -0.125 0 1.01250000000491
+262144 0 2 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 1.01250000000873
+262144 0 2 0 0 5242880 4849664 5242880 0.0125 0 -0.075 0 1.0125
+262144 0 2 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 1.0125
+262144 0 2 0 0 5242880 5111808 5242880 0.0125 0 -0.025 0 1.0125
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+262144 0 2 0 0 5242880 5373952 5242880 0.0125 0 0.025 0 1.0125
+262144 0 2 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 1.0125
+262144 0 2 0 0 5242880 5636096 5242880 0.0125 0 0.075 0 1.0125
+262144 0 2 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 1.01250000000873
+262144 0 2 0 0 5242880 5898240 5242880 0.0125 0 0.125 0 1.01250000000491
+262144 0 2 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 1.0125
+262144 0 2 0 0 5242880 6160384 5242880 0.0125 0 0.175 0 1.01249999999945
+262144 0 2 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 1.0125
+262144 0 2 0 0 5242880 6422528 5242880 0.0125 0 0.225 0 1.0125
+262144 0 2 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 1.0125
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 3932160 5242880 0.01875 0 -0.25 0 1.01875
+393216 0 2 0 0 5242880 4063232 5242880 0.01875 0 -0.225 0 1.01874999999964
+393216 0 2 0 0 5242880 4194304 5242880 0.01875 0 -0.2 0 1.01874999999937
+393216 0 2 0 0 5242880 4325376 5242880 0.01875 0 -0.175 0 1.01874999999822
+393216 0 2 0 0 5242880 4456448 5242880 0.01875 0 -0.15 0 1.01875000000001
+393216 0 2 0 0 5242880 4587520 5242880 0.01875 0 -0.125 0 1.01875000001291
+393216 0 2 0 0 5242880 4718592 5242880 0.01875 0 -0.1 0 1.01875000002589
+393216 0 2 0 0 5242880 4849664 5242880 0.01875 0 -0.075 0 1.01875
+393216 0 2 0 0 5242880 4980736 5242880 0.01875 0 -0.05 0 1.01875000000016
+393216 0 2 0 0 5242880 5111808 5242880 0.01875 0 -0.025 0 1.01875
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.01875
+393216 0 2 0 0 5242880 5373952 5242880 0.01875 0 0.025 0 1.01875
+393216 0 2 0 0 5242880 5505024 5242880 0.01875 0 0.05 0 1.01875000000016
+393216 0 2 0 0 5242880 5636096 5242880 0.01875 0 0.075 0 1.01875
+393216 0 2 0 0 5242880 5767168 5242880 0.01875 0 0.1 0 1.01875000002589
+393216 0 2 0 0 5242880 5898240 5242880 0.01875 0 0.125 0 1.01875000001291
+393216 0 2 0 0 5242880 6029312 5242880 0.01875 0 0.15 0 1.01875000000001
+393216 0 2 0 0 5242880 6160384 5242880 0.01875 0 0.175 0 1.01874999999822
+393216 0 2 0 0 5242880 6291456 5242880 0.01875 0 0.2 0 1.01874999999937
+393216 0 2 0 0 5242880 6422528 5242880 0.01875 0 0.225 0 1.01874999999964
+393216 0 2 0 0 5242880 6553600 5242880 0.01875 0 0.25 0 1.01875
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 0 5242880 0.025 0 -1 0 1.025
+524288 0 0 0 0 5242880 524288 5242880 0.025 0 -0.9 0 1.025
+524288 0 0 0 0 5242880 1048576 5242880 0.025 0 -0.8 0 1.025
+524288 0 0 0 0 5242880 1572864 5242880 0.025 0 -0.7 0 1.025
+524288 0 0 0 0 5242880 2097152 5242880 0.025 0 -0.6 0 1.025
+524288 0 0 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 1.025
+524288 0 0 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 1.025
+524288 0 0 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 1.025
+524288 0 0 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 1.02499999999832
+524288 0 0 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 1.02500000004247
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 0 0 0 5242880 5767168 5242880 0.025 0 0.1 0 1.02500000004247
+524288 0 0 0 0 5242880 6291456 5242880 0.025 0 0.2 0 1.02499999999832
+524288 0 0 0 0 5242880 6815744 5242880 0.025 0 0.3 0 1.025
+524288 0 0 0 0 5242880 7340032 5242880 0.025 0 0.4 0 1.025
+524288 0 0 0 0 5242880 7864320 5242880 0.025 0 0.5 0 1.025
+524288 0 0 0 0 5242880 8388608 5242880 0.025 0 0.6 0 1.025
+524288 0 0 0 0 5242880 8912896 5242880 0.025 0 0.7 0 1.025
+524288 0 0 0 0 5242880 9437184 5242880 0.025 0 0.8 0 1.025
+524288 0 0 0 0 5242880 9961472 5242880 0.025 0 0.9 0 1.025
+524288 0 0 0 0 5242880 10485760 5242880 0.025 0 1 0 1.025
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 1.025
+524288 0 1 0 0 5242880 2883584 5242880 0.025 0 -0.45 0 1.025
+524288 0 1 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 1.025
+524288 0 1 0 0 5242880 3407872 5242880 0.025 0 -0.35 0 1.02500000000011
+524288 0 1 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 1.025
+524288 0 1 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 1.0249999999964
+524288 0 1 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 1.02499999999832
+524288 0 1 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 1.02500000000003
+524288 0 1 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 1.02500000004247
+524288 0 1 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 1.02500000000073
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 1 0 0 5242880 5505024 5242880 0.025 0 0.05 0 1.02500000000073
+524288 0 1 0 0 5242880 5767168 5242880 0.025 0 0.1 0 1.02500000004247
+524288 0 1 0 0 5242880 6029312 5242880 0.025 0 0.15 0 1.02500000000003
+524288 0 1 0 0 5242880 6291456 5242880 0.025 0 0.2 0 1.02499999999832
+524288 0 1 0 0 5242880 6553600 5242880 0.025 0 0.25 0 1.0249999999964
+524288 0 1 0 0 5242880 6815744 5242880 0.025 0 0.3 0 1.025
+524288 0 1 0 0 5242880 7077888 5242880 0.025 0 0.35 0 1.02500000000011
+524288 0 1 0 0 5242880 7340032 5242880 0.025 0 0.4 0 1.025
+524288 0 1 0 0 5242880 7602176 5242880 0.025 0 0.45 0 1.025
+524288 0 1 0 0 5242880 7864320 5242880 0.025 0 0.5 0 1.025
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 1.0249999999964
+524288 0 2 0 0 5242880 4063232 5242880 0.025 0 -0.225 0 1.02499999999703
+524288 0 2 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 1.02499999999832
+524288 0 2 0 0 5242880 4325376 5242880 0.025 0 -0.175 0 1.02499999999664
+524288 0 2 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 1.02500000000003
+524288 0 2 0 0 5242880 4587520 5242880 0.025 0 -0.125 0 1.02500000002396
+524288 0 2 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 1.02500000004247
+524288 0 2 0 0 5242880 4849664 5242880 0.025 0 -0.075 0 1.02500000000014
+524288 0 2 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 1.02500000000073
+524288 0 2 0 0 5242880 5111808 5242880 0.025 0 -0.025 0 1.02500000000001
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 2 0 0 5242880 5373952 5242880 0.025 0 0.025 0 1.02500000000001
+524288 0 2 0 0 5242880 5505024 5242880 0.025 0 0.05 0 1.02500000000073
+524288 0 2 0 0 5242880 5636096 5242880 0.025 0 0.075 0 1.02500000000014
+524288 0 2 0 0 5242880 5767168 5242880 0.025 0 0.1 0 1.02500000004247
+524288 0 2 0 0 5242880 5898240 5242880 0.025 0 0.125 0 1.02500000002396
+524288 0 2 0 0 5242880 6029312 5242880 0.025 0 0.15 0 1.02500000000003
+524288 0 2 0 0 5242880 6160384 5242880 0.025 0 0.175 0 1.02499999999664
+524288 0 2 0 0 5242880 6291456 5242880 0.025 0 0.2 0 1.02499999999832
+524288 0 2 0 0 5242880 6422528 5242880 0.025 0 0.225 0 1.02499999999703
+524288 0 2 0 0 5242880 6553600 5242880 0.025 0 0.25 0 1.0249999999964
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 3932160 5242880 0.03125 0 -0.25 0 1.0312499999947
+655360 0 2 0 0 5242880 4063232 5242880 0.03125 0 -0.225 0 1.03124999999534
+655360 0 2 0 0 5242880 4194304 5242880 0.03125 0 -0.2 0 1.03124999999702
+655360 0 2 0 0 5242880 4325376 5242880 0.03125 0 -0.175 0 1.03124999999494
+655360 0 2 0 0 5242880 4456448 5242880 0.03125 0 -0.15 0 1.03124999999993
+655360 0 2 0 0 5242880 4587520 5242880 0.03125 0 -0.125 0 1.03125000003312
+655360 0 2 0 0 5242880 4718592 5242880 0.03125 0 -0.1 0 1.03125000005828
+655360 0 2 0 0 5242880 4849664 5242880 0.03125 0 -0.075 0 1.03125000000063
+655360 0 2 0 0 5242880 4980736 5242880 0.03125 0 -0.05 0 1.03125000000198
+655360 0 2 0 0 5242880 5111808 5242880 0.03125 0 -0.025 0 1.03125000000007
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.0312500000001
+655360 0 2 0 0 5242880 5373952 5242880 0.03125 0 0.025 0 1.03125000000007
+655360 0 2 0 0 5242880 5505024 5242880 0.03125 0 0.05 0 1.03125000000198
+655360 0 2 0 0 5242880 5636096 5242880 0.03125 0 0.075 0 1.03125000000063
+655360 0 2 0 0 5242880 5767168 5242880 0.03125 0 0.1 0 1.03125000005828
+655360 0 2 0 0 5242880 5898240 5242880 0.03125 0 0.125 0 1.03125000003312
+655360 0 2 0 0 5242880 6029312 5242880 0.03125 0 0.15 0 1.03124999999993
+655360 0 2 0 0 5242880 6160384 5242880 0.03125 0 0.175 0 1.03124999999494
+655360 0 2 0 0 5242880 6291456 5242880 0.03125 0 0.2 0 1.03124999999702
+655360 0 2 0 0 5242880 6422528 5242880 0.03125 0 0.225 0 1.03124999999534
+655360 0 2 0 0 5242880 6553600 5242880 0.03125 0 0.25 0 1.0312499999947
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 2621440 5242880 0.0375 0 -0.5 0 1.0375
+786432 0 1 0 0 5242880 2883584 5242880 0.0375 0 -0.45 0 1.03749999999999
+786432 0 1 0 0 5242880 3145728 5242880 0.0375 0 -0.4 0 1.03749999999999
+786432 0 1 0 0 5242880 3407872 5242880 0.0375 0 -0.35 0 1.03750000000033
+786432 0 1 0 0 5242880 3670016 5242880 0.0375 0 -0.3 0 1.03750000000009
+786432 0 1 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 1.03749999999307
+786432 0 1 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 1.03749999999542
+786432 0 1 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 1.03749999999975
+786432 0 1 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 1.0375000000732
+786432 0 1 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 1.03750000000421
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+786432 0 1 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 1.03750000000421
+786432 0 1 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 1.0375000000732
+786432 0 1 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 1.03749999999975
+786432 0 1 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 1.03749999999542
+786432 0 1 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 1.03749999999307
+786432 0 1 0 0 5242880 6815744 5242880 0.0375 0 0.3 0 1.03750000000009
+786432 0 1 0 0 5242880 7077888 5242880 0.0375 0 0.35 0 1.03750000000033
+786432 0 1 0 0 5242880 7340032 5242880 0.0375 0 0.4 0 1.03749999999999
+786432 0 1 0 0 5242880 7602176 5242880 0.0375 0 0.45 0 1.03749999999999
+786432 0 1 0 0 5242880 7864320 5242880 0.0375 0 0.5 0 1.0375
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 1.03749999999307
+786432 0 2 0 0 5242880 4063232 5242880 0.0375 0 -0.225 0 1.03749999999353
+786432 0 2 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 1.03749999999542
+786432 0 2 0 0 5242880 4325376 5242880 0.0375 0 -0.175 0 1.03749999999314
+786432 0 2 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 1.03749999999975
+786432 0 2 0 0 5242880 4587520 5242880 0.0375 0 -0.125 0 1.03750000004106
+786432 0 2 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 1.0375000000732
+786432 0 2 0 0 5242880 4849664 5242880 0.0375 0 -0.075 0 1.03750000000169
+786432 0 2 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 1.03750000000421
+786432 0 2 0 0 5242880 5111808 5242880 0.0375 0 -0.025 0 1.03750000000026
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+786432 0 2 0 0 5242880 5373952 5242880 0.0375 0 0.025 0 1.03750000000026
+786432 0 2 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 1.03750000000421
+786432 0 2 0 0 5242880 5636096 5242880 0.0375 0 0.075 0 1.03750000000169
+786432 0 2 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 1.0375000000732
+786432 0 2 0 0 5242880 5898240 5242880 0.0375 0 0.125 0 1.03750000004106
+786432 0 2 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 1.03749999999975
+786432 0 2 0 0 5242880 6160384 5242880 0.0375 0 0.175 0 1.03749999999314
+786432 0 2 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 1.03749999999542
+786432 0 2 0 0 5242880 6422528 5242880 0.0375 0 0.225 0 1.03749999999353
+786432 0 2 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 1.03749999999307
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 3932160 5242880 0.04375 0 -0.25 0 1.04374999999102
+917504 0 2 0 0 5242880 4063232 5242880 0.04375 0 -0.225 0 1.04374999999181
+917504 0 2 0 0 5242880 4194304 5242880 0.04375 0 -0.2 0 1.04374999999437
+917504 0 2 0 0 5242880 4325376 5242880 0.04375 0 -0.175 0 1.04374999999151
+917504 0 2 0 0 5242880 4456448 5242880 0.04375 0 -0.15 0 1.04374999999929
+917504 0 2 0 0 5242880 4587520 5242880 0.04375 0 -0.125 0 1.04375000004884
+917504 0 2 0 0 5242880 4718592 5242880 0.04375 0 -0.1 0 1.04375000008715
+917504 0 2 0 0 5242880 4849664 5242880 0.04375 0 -0.075 0 1.04375000000356
+917504 0 2 0 0 5242880 4980736 5242880 0.04375 0 -0.05 0 1.04375000000769
+917504 0 2 0 0 5242880 5111808 5242880 0.04375 0 -0.025 0 1.04375000000072
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.043750000001
+917504 0 2 0 0 5242880 5373952 5242880 0.04375 0 0.025 0 1.04375000000072
+917504 0 2 0 0 5242880 5505024 5242880 0.04375 0 0.05 0 1.04375000000769
+917504 0 2 0 0 5242880 5636096 5242880 0.04375 0 0.075 0 1.04375000000356
+917504 0 2 0 0 5242880 5767168 5242880 0.04375 0 0.1 0 1.04375000008715
+917504 0 2 0 0 5242880 5898240 5242880 0.04375 0 0.125 0 1.04375000004884
+917504 0 2 0 0 5242880 6029312 5242880 0.04375 0 0.15 0 1.04374999999929
+917504 0 2 0 0 5242880 6160384 5242880 0.04375 0 0.175 0 1.04374999999151
+917504 0 2 0 0 5242880 6291456 5242880 0.04375 0 0.2 0 1.04374999999437
+917504 0 2 0 0 5242880 6422528 5242880 0.04375 0 0.225 0 1.04374999999181
+917504 0 2 0 0 5242880 6553600 5242880 0.04375 0 0.25 0 1.04374999999102
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 0 5242880 0.05 0 -1 0 1.05
+1048576 0 0 0 0 5242880 524288 5242880 0.05 0 -0.9 0 1.05
+1048576 0 0 0 0 5242880 1048576 5242880 0.05 0 -0.8 0 1.05
+1048576 0 0 0 0 5242880 1572864 5242880 0.05 0 -0.7 0 1.05
+1048576 0 0 0 0 5242880 2097152 5242880 0.05 0 -0.6 0 1.05
+1048576 0 0 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 1.05
+1048576 0 0 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 1.04999999999998
+1048576 0 0 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 1.05000000000024
+1048576 0 0 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 1.04999999999358
+1048576 0 0 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 1.05000000010013
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 0 0 0 5242880 5767168 5242880 0.05 0 0.1 0 1.05000000010013
+1048576 0 0 0 0 5242880 6291456 5242880 0.05 0 0.2 0 1.04999999999358
+1048576 0 0 0 0 5242880 6815744 5242880 0.05 0 0.3 0 1.05000000000024
+1048576 0 0 0 0 5242880 7340032 5242880 0.05 0 0.4 0 1.04999999999998
+1048576 0 0 0 0 5242880 7864320 5242880 0.05 0 0.5 0 1.05
+1048576 0 0 0 0 5242880 8388608 5242880 0.05 0 0.6 0 1.05
+1048576 0 0 0 0 5242880 8912896 5242880 0.05 0 0.7 0 1.05
+1048576 0 0 0 0 5242880 9437184 5242880 0.05 0 0.8 0 1.05
+1048576 0 0 0 0 5242880 9961472 5242880 0.05 0 0.9 0 1.05
+1048576 0 0 0 0 5242880 10485760 5242880 0.05 0 1 0 1.05
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 1.05
+1048576 0 1 0 0 5242880 2883584 5242880 0.05 0 -0.45 0 1.04999999999998
+1048576 0 1 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 1.04999999999998
+1048576 0 1 0 0 5242880 3407872 5242880 0.05 0 -0.35 0 1.05000000000053
+1048576 0 1 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 1.05000000000024
+1048576 0 1 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 1.04999999999027
+1048576 0 1 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 1.04999999999358
+1048576 0 1 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 1.04999999999861
+1048576 0 1 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 1.05000000010013
+1048576 0 1 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 1.05000000001273
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 1 0 0 5242880 5505024 5242880 0.05 0 0.05 0 1.05000000001273
+1048576 0 1 0 0 5242880 5767168 5242880 0.05 0 0.1 0 1.05000000010013
+1048576 0 1 0 0 5242880 6029312 5242880 0.05 0 0.15 0 1.04999999999861
+1048576 0 1 0 0 5242880 6291456 5242880 0.05 0 0.2 0 1.04999999999358
+1048576 0 1 0 0 5242880 6553600 5242880 0.05 0 0.25 0 1.04999999999027
+1048576 0 1 0 0 5242880 6815744 5242880 0.05 0 0.3 0 1.05000000000024
+1048576 0 1 0 0 5242880 7077888 5242880 0.05 0 0.35 0 1.05000000000053
+1048576 0 1 0 0 5242880 7340032 5242880 0.05 0 0.4 0 1.04999999999998
+1048576 0 1 0 0 5242880 7602176 5242880 0.05 0 0.45 0 1.04999999999998
+1048576 0 1 0 0 5242880 7864320 5242880 0.05 0 0.5 0 1.05
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 1.04999999999027
+1048576 0 2 0 0 5242880 4063232 5242880 0.05 0 -0.225 0 1.04999999999099
+1048576 0 2 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 1.04999999999358
+1048576 0 2 0 0 5242880 4325376 5242880 0.05 0 -0.175 0 1.04999999998996
+1048576 0 2 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 1.04999999999861
+1048576 0 2 0 0 5242880 4587520 5242880 0.05 0 -0.125 0 1.05000000005515
+1048576 0 2 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 1.05000000010013
+1048576 0 2 0 0 5242880 4849664 5242880 0.05 0 -0.075 0 1.0500000000065
+1048576 0 2 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 1.05000000001273
+1048576 0 2 0 0 5242880 5111808 5242880 0.05 0 -0.025 0 1.05000000000165
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 2 0 0 5242880 5373952 5242880 0.05 0 0.025 0 1.05000000000165
+1048576 0 2 0 0 5242880 5505024 5242880 0.05 0 0.05 0 1.05000000001273
+1048576 0 2 0 0 5242880 5636096 5242880 0.05 0 0.075 0 1.0500000000065
+1048576 0 2 0 0 5242880 5767168 5242880 0.05 0 0.1 0 1.05000000010013
+1048576 0 2 0 0 5242880 5898240 5242880 0.05 0 0.125 0 1.05000000005515
+1048576 0 2 0 0 5242880 6029312 5242880 0.05 0 0.15 0 1.04999999999861
+1048576 0 2 0 0 5242880 6160384 5242880 0.05 0 0.175 0 1.04999999998996
+1048576 0 2 0 0 5242880 6291456 5242880 0.05 0 0.2 0 1.04999999999358
+1048576 0 2 0 0 5242880 6422528 5242880 0.05 0 0.225 0 1.04999999999099
+1048576 0 2 0 0 5242880 6553600 5242880 0.05 0 0.25 0 1.04999999999027
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 3932160 5242880 0.05625 0 -0.25 0 1.05624999998901
+1179648 0 2 0 0 5242880 4063232 5242880 0.05625 0 -0.225 0 1.05624999999015
+1179648 0 2 0 0 5242880 4194304 5242880 0.05625 0 -0.2 0 1.05624999999326
+1179648 0 2 0 0 5242880 4325376 5242880 0.05625 0 -0.175 0 1.05624999998853
+1179648 0 2 0 0 5242880 4456448 5242880 0.05625 0 -0.15 0 1.05624999999763
+1179648 0 2 0 0 5242880 4587520 5242880 0.05625 0 -0.125 0 1.05625000006123
+1179648 0 2 0 0 5242880 4718592 5242880 0.05625 0 -0.1 0 1.05625000011224
+1179648 0 2 0 0 5242880 4849664 5242880 0.05625 0 -0.075 0 1.05625000001079
+1179648 0 2 0 0 5242880 4980736 5242880 0.05625 0 -0.05 0 1.05625000001963
+1179648 0 2 0 0 5242880 5111808 5242880 0.05625 0 -0.025 0 1.05625000000332
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.05625000000452
+1179648 0 2 0 0 5242880 5373952 5242880 0.05625 0 0.025 0 1.05625000000332
+1179648 0 2 0 0 5242880 5505024 5242880 0.05625 0 0.05 0 1.05625000001963
+1179648 0 2 0 0 5242880 5636096 5242880 0.05625 0 0.075 0 1.05625000001079
+1179648 0 2 0 0 5242880 5767168 5242880 0.05625 0 0.1 0 1.05625000011224
+1179648 0 2 0 0 5242880 5898240 5242880 0.05625 0 0.125 0 1.05625000006123
+1179648 0 2 0 0 5242880 6029312 5242880 0.05625 0 0.15 0 1.05624999999763
+1179648 0 2 0 0 5242880 6160384 5242880 0.05625 0 0.175 0 1.05624999998853
+1179648 0 2 0 0 5242880 6291456 5242880 0.05625 0 0.2 0 1.05624999999326
+1179648 0 2 0 0 5242880 6422528 5242880 0.05625 0 0.225 0 1.05624999999015
+1179648 0 2 0 0 5242880 6553600 5242880 0.05625 0 0.25 0 1.05624999998901
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 2621440 5242880 0.0625 0 -0.5 0 1.0625
+1310720 0 1 0 0 5242880 2883584 5242880 0.0625 0 -0.45 0 1.06249999999993
+1310720 0 1 0 0 5242880 3145728 5242880 0.0625 0 -0.4 0 1.06249999999994
+1310720 0 1 0 0 5242880 3407872 5242880 0.0625 0 -0.35 0 1.06250000000083
+1310720 0 1 0 0 5242880 3670016 5242880 0.0625 0 -0.3 0 1.06250000000062
+1310720 0 1 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 1.06249999998785
+1310720 0 1 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 1.06249999999333
+1310720 0 1 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 1.06249999999637
+1310720 0 1 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 1.06250000012362
+1310720 0 1 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 1.06250000002869
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+1310720 0 1 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 1.06250000002869
+1310720 0 1 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 1.06250000012362
+1310720 0 1 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 1.06249999999637
+1310720 0 1 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 1.06249999999333
+1310720 0 1 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 1.06249999998785
+1310720 0 1 0 0 5242880 6815744 5242880 0.0625 0 0.3 0 1.06250000000062
+1310720 0 1 0 0 5242880 7077888 5242880 0.0625 0 0.35 0 1.06250000000083
+1310720 0 1 0 0 5242880 7340032 5242880 0.0625 0 0.4 0 1.06249999999994
+1310720 0 1 0 0 5242880 7602176 5242880 0.0625 0 0.45 0 1.06249999999993
+1310720 0 1 0 0 5242880 7864320 5242880 0.0625 0 0.5 0 1.0625
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 1.06249999998785
+1310720 0 2 0 0 5242880 4063232 5242880 0.0625 0 -0.225 0 1.0624999999896
+1310720 0 2 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 1.06249999999333
+1310720 0 2 0 0 5242880 4325376 5242880 0.0625 0 -0.175 0 1.06249999998724
+1310720 0 2 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 1.06249999999637
+1310720 0 2 0 0 5242880 4587520 5242880 0.0625 0 -0.125 0 1.06250000006612
+1310720 0 2 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 1.06250000012362
+1310720 0 2 0 0 5242880 4849664 5242880 0.0625 0 -0.075 0 1.06250000001668
+1310720 0 2 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 1.06250000002869
+1310720 0 2 0 0 5242880 5111808 5242880 0.0625 0 -0.025 0 1.06250000000608
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+1310720 0 2 0 0 5242880 5373952 5242880 0.0625 0 0.025 0 1.06250000000608
+1310720 0 2 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 1.06250000002869
+1310720 0 2 0 0 5242880 5636096 5242880 0.0625 0 0.075 0 1.06250000001668
+1310720 0 2 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 1.06250000012362
+1310720 0 2 0 0 5242880 5898240 5242880 0.0625 0 0.125 0 1.06250000006612
+1310720 0 2 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 1.06249999999637
+1310720 0 2 0 0 5242880 6160384 5242880 0.0625 0 0.175 0 1.06249999998724
+1310720 0 2 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 1.06249999999333
+1310720 0 2 0 0 5242880 6422528 5242880 0.0625 0 0.225 0 1.0624999999896
+1310720 0 2 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 1.06249999998785
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 3932160 5242880 0.06875 0 -0.25 0 1.06874999998681
+1441792 0 2 0 0 5242880 4063232 5242880 0.06875 0 -0.225 0 1.06874999998947
+1441792 0 2 0 0 5242880 4194304 5242880 0.06875 0 -0.2 0 1.068749999994
+1441792 0 2 0 0 5242880 4325376 5242880 0.06875 0 -0.175 0 1.06874999998618
+1441792 0 2 0 0 5242880 4456448 5242880 0.06875 0 -0.15 0 1.06874999999489
+1441792 0 2 0 0 5242880 4587520 5242880 0.06875 0 -0.125 0 1.06875000007061
+1441792 0 2 0 0 5242880 4718592 5242880 0.06875 0 -0.1 0 1.06875000013445
+1441792 0 2 0 0 5242880 4849664 5242880 0.06875 0 -0.075 0 1.06875000002444
+1441792 0 2 0 0 5242880 4980736 5242880 0.06875 0 -0.05 0 1.06875000004019
+1441792 0 2 0 0 5242880 5111808 5242880 0.06875 0 -0.025 0 1.0687500000103
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.0687500000138
+1441792 0 2 0 0 5242880 5373952 5242880 0.06875 0 0.025 0 1.0687500000103
+1441792 0 2 0 0 5242880 5505024 5242880 0.06875 0 0.05 0 1.06875000004019
+1441792 0 2 0 0 5242880 5636096 5242880 0.06875 0 0.075 0 1.06875000002444
+1441792 0 2 0 0 5242880 5767168 5242880 0.06875 0 0.1 0 1.06875000013445
+1441792 0 2 0 0 5242880 5898240 5242880 0.06875 0 0.125 0 1.06875000007061
+1441792 0 2 0 0 5242880 6029312 5242880 0.06875 0 0.15 0 1.06874999999489
+1441792 0 2 0 0 5242880 6160384 5242880 0.06875 0 0.175 0 1.06874999998618
+1441792 0 2 0 0 5242880 6291456 5242880 0.06875 0 0.2 0 1.068749999994
+1441792 0 2 0 0 5242880 6422528 5242880 0.06875 0 0.225 0 1.06874999998947
+1441792 0 2 0 0 5242880 6553600 5242880 0.06875 0 0.25 0 1.06874999998681
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 0 5242880 0.075 0 -1 0 1.075
+1572864 0 0 0 0 5242880 524288 5242880 0.075 0 -0.9 0 1.075
+1572864 0 0 0 0 5242880 1048576 5242880 0.075 0 -0.8 0 1.075
+1572864 0 0 0 0 5242880 1572864 5242880 0.075 0 -0.7 0 1.075
+1572864 0 0 0 0 5242880 2097152 5242880 0.075 0 -0.6 0 1.075
+1572864 0 0 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 1.075
+1572864 0 0 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 1.07499999999987
+1572864 0 0 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 1.07500000000118
+1572864 0 0 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 1.07499999999519
+1572864 0 0 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 1.07500000014499
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 0 0 0 5242880 5767168 5242880 0.075 0 0.1 0 1.07500000014499
+1572864 0 0 0 0 5242880 6291456 5242880 0.075 0 0.2 0 1.07499999999519
+1572864 0 0 0 0 5242880 6815744 5242880 0.075 0 0.3 0 1.07500000000118
+1572864 0 0 0 0 5242880 7340032 5242880 0.075 0 0.4 0 1.07499999999987
+1572864 0 0 0 0 5242880 7864320 5242880 0.075 0 0.5 0 1.075
+1572864 0 0 0 0 5242880 8388608 5242880 0.075 0 0.6 0 1.075
+1572864 0 0 0 0 5242880 8912896 5242880 0.075 0 0.7 0 1.075
+1572864 0 0 0 0 5242880 9437184 5242880 0.075 0 0.8 0 1.075
+1572864 0 0 0 0 5242880 9961472 5242880 0.075 0 0.9 0 1.075
+1572864 0 0 0 0 5242880 10485760 5242880 0.075 0 1 0 1.075
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 1.075
+1572864 0 1 0 0 5242880 2883584 5242880 0.075 0 -0.45 0 1.07499999999986
+1572864 0 1 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 1.07499999999987
+1572864 0 1 0 0 5242880 3407872 5242880 0.075 0 -0.35 0 1.07500000000089
+1572864 0 1 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 1.07500000000118
+1572864 0 1 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 1.0749999999889
+1572864 0 1 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 1.07499999999519
+1572864 0 1 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 1.07499999999316
+1572864 0 1 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 1.07500000014499
+1572864 0 1 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 1.0750000000544
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 1 0 0 5242880 5505024 5242880 0.075 0 0.05 0 1.0750000000544
+1572864 0 1 0 0 5242880 5767168 5242880 0.075 0 0.1 0 1.07500000014499
+1572864 0 1 0 0 5242880 6029312 5242880 0.075 0 0.15 0 1.07499999999316
+1572864 0 1 0 0 5242880 6291456 5242880 0.075 0 0.2 0 1.07499999999519
+1572864 0 1 0 0 5242880 6553600 5242880 0.075 0 0.25 0 1.0749999999889
+1572864 0 1 0 0 5242880 6815744 5242880 0.075 0 0.3 0 1.07500000000118
+1572864 0 1 0 0 5242880 7077888 5242880 0.075 0 0.35 0 1.07500000000089
+1572864 0 1 0 0 5242880 7340032 5242880 0.075 0 0.4 0 1.07499999999987
+1572864 0 1 0 0 5242880 7602176 5242880 0.075 0 0.45 0 1.07499999999986
+1572864 0 1 0 0 5242880 7864320 5242880 0.075 0 0.5 0 1.075
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 1.0749999999889
+1572864 0 2 0 0 5242880 4063232 5242880 0.075 0 -0.225 0 1.07499999999141
+1572864 0 2 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 1.07499999999519
+1572864 0 2 0 0 5242880 4325376 5242880 0.075 0 -0.175 0 1.07499999998508
+1572864 0 2 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 1.07499999999316
+1572864 0 2 0 0 5242880 4587520 5242880 0.075 0 -0.125 0 1.0750000000746
+1572864 0 2 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 1.07500000014499
+1572864 0 2 0 0 5242880 4849664 5242880 0.075 0 -0.075 0 1.07500000003426
+1572864 0 2 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 1.0750000000544
+1572864 0 2 0 0 5242880 5111808 5242880 0.075 0 -0.025 0 1.07500000001642
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 2 0 0 5242880 5373952 5242880 0.075 0 0.025 0 1.07500000001642
+1572864 0 2 0 0 5242880 5505024 5242880 0.075 0 0.05 0 1.0750000000544
+1572864 0 2 0 0 5242880 5636096 5242880 0.075 0 0.075 0 1.07500000003426
+1572864 0 2 0 0 5242880 5767168 5242880 0.075 0 0.1 0 1.07500000014499
+1572864 0 2 0 0 5242880 5898240 5242880 0.075 0 0.125 0 1.0750000000746
+1572864 0 2 0 0 5242880 6029312 5242880 0.075 0 0.15 0 1.07499999999316
+1572864 0 2 0 0 5242880 6160384 5242880 0.075 0 0.175 0 1.07499999998508
+1572864 0 2 0 0 5242880 6291456 5242880 0.075 0 0.2 0 1.07499999999519
+1572864 0 2 0 0 5242880 6422528 5242880 0.075 0 0.225 0 1.07499999999141
+1572864 0 2 0 0 5242880 6553600 5242880 0.075 0 0.25 0 1.0749999999889
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 3932160 5242880 0.08125 0 -0.25 0 1.08124999998915
+1703936 0 2 0 0 5242880 4063232 5242880 0.08125 0 -0.225 0 1.08124999999272
+1703936 0 2 0 0 5242880 4194304 5242880 0.08125 0 -0.2 0 1.08124999999712
+1703936 0 2 0 0 5242880 4325376 5242880 0.08125 0 -0.175 0 1.08124999998455
+1703936 0 2 0 0 5242880 4456448 5242880 0.08125 0 -0.15 0 1.08124999999139
+1703936 0 2 0 0 5242880 4587520 5242880 0.08125 0 -0.125 0 1.08125000007798
+1703936 0 2 0 0 5242880 4718592 5242880 0.08125 0 -0.1 0 1.08125000015544
+1703936 0 2 0 0 5242880 4849664 5242880 0.08125 0 -0.075 0 1.08125000004629
+1703936 0 2 0 0 5242880 4980736 5242880 0.08125 0 -0.05 0 1.08125000007153
+1703936 0 2 0 0 5242880 5111808 5242880 0.08125 0 -0.025 0 1.08125000002489
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.08125000003301
+1703936 0 2 0 0 5242880 5373952 5242880 0.08125 0 0.025 0 1.08125000002489
+1703936 0 2 0 0 5242880 5505024 5242880 0.08125 0 0.05 0 1.08125000007153
+1703936 0 2 0 0 5242880 5636096 5242880 0.08125 0 0.075 0 1.08125000004629
+1703936 0 2 0 0 5242880 5767168 5242880 0.08125 0 0.1 0 1.08125000015544
+1703936 0 2 0 0 5242880 5898240 5242880 0.08125 0 0.125 0 1.08125000007798
+1703936 0 2 0 0 5242880 6029312 5242880 0.08125 0 0.15 0 1.08124999999139
+1703936 0 2 0 0 5242880 6160384 5242880 0.08125 0 0.175 0 1.08124999998455
+1703936 0 2 0 0 5242880 6291456 5242880 0.08125 0 0.2 0 1.08124999999712
+1703936 0 2 0 0 5242880 6422528 5242880 0.08125 0 0.225 0 1.08124999999272
+1703936 0 2 0 0 5242880 6553600 5242880 0.08125 0 0.25 0 1.08124999998915
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 2621440 5242880 0.0875 0 -0.5 0 1.08750000000001
+1835008 0 1 0 0 5242880 2883584 5242880 0.0875 0 -0.45 0 1.08749999999976
+1835008 0 1 0 0 5242880 3145728 5242880 0.0875 0 -0.4 0 1.08749999999977
+1835008 0 1 0 0 5242880 3407872 5242880 0.0875 0 -0.35 0 1.08750000000108
+1835008 0 1 0 0 5242880 3670016 5242880 0.0875 0 -0.3 0 1.08750000000186
+1835008 0 1 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 1.0874999999892
+1835008 0 1 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 1.08749999999972
+1835008 0 1 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 1.08749999998951
+1835008 0 1 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 1.08750000016605
+1835008 0 1 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 1.08750000009175
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+1835008 0 1 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 1.08750000009175
+1835008 0 1 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 1.08750000016605
+1835008 0 1 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 1.08749999998951
+1835008 0 1 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 1.08749999999972
+1835008 0 1 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 1.0874999999892
+1835008 0 1 0 0 5242880 6815744 5242880 0.0875 0 0.3 0 1.08750000000186
+1835008 0 1 0 0 5242880 7077888 5242880 0.0875 0 0.35 0 1.08750000000108
+1835008 0 1 0 0 5242880 7340032 5242880 0.0875 0 0.4 0 1.08749999999977
+1835008 0 1 0 0 5242880 7602176 5242880 0.0875 0 0.45 0 1.08749999999976
+1835008 0 1 0 0 5242880 7864320 5242880 0.0875 0 0.5 0 1.08750000000001
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 1.0874999999892
+1835008 0 2 0 0 5242880 4063232 5242880 0.0875 0 -0.225 0 1.08749999999431
+1835008 0 2 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 1.08749999999972
+1835008 0 2 0 0 5242880 4325376 5242880 0.0875 0 -0.175 0 1.08749999998424
+1835008 0 2 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 1.08749999998951
+1835008 0 2 0 0 5242880 4587520 5242880 0.0875 0 -0.125 0 1.08750000008179
+1835008 0 2 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 1.08750000016605
+1835008 0 2 0 0 5242880 4849664 5242880 0.0875 0 -0.075 0 1.08750000006059
+1835008 0 2 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 1.08750000009175
+1835008 0 2 0 0 5242880 5111808 5242880 0.0875 0 -0.025 0 1.08750000003613
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+1835008 0 2 0 0 5242880 5373952 5242880 0.0875 0 0.025 0 1.08750000003613
+1835008 0 2 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 1.08750000009175
+1835008 0 2 0 0 5242880 5636096 5242880 0.0875 0 0.075 0 1.08750000006059
+1835008 0 2 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 1.08750000016605
+1835008 0 2 0 0 5242880 5898240 5242880 0.0875 0 0.125 0 1.08750000008179
+1835008 0 2 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 1.08749999998951
+1835008 0 2 0 0 5242880 6160384 5242880 0.0875 0 0.175 0 1.08749999998424
+1835008 0 2 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 1.08749999999972
+1835008 0 2 0 0 5242880 6422528 5242880 0.0875 0 0.225 0 1.08749999999431
+1835008 0 2 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 1.0874999999892
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 3932160 5242880 0.09375 0 -0.25 0 1.0937499999896
+1966080 0 2 0 0 5242880 4063232 5242880 0.09375 0 -0.225 0 1.09374999999655
+1966080 0 2 0 0 5242880 4194304 5242880 0.09375 0 -0.2 0 1.09375000000317
+1966080 0 2 0 0 5242880 4325376 5242880 0.09375 0 -0.175 0 1.09374999998465
+1966080 0 2 0 0 5242880 4456448 5242880 0.09375 0 -0.15 0 1.0937499999879
+1966080 0 2 0 0 5242880 4587520 5242880 0.09375 0 -0.125 0 1.09375000008476
+1966080 0 2 0 0 5242880 4718592 5242880 0.09375 0 -0.1 0 1.09375000017699
+1966080 0 2 0 0 5242880 4849664 5242880 0.09375 0 -0.075 0 1.09375000007712
+1966080 0 2 0 0 5242880 4980736 5242880 0.09375 0 -0.05 0 1.09375000011513
+1966080 0 2 0 0 5242880 5111808 5242880 0.09375 0 -0.025 0 1.09375000005053
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.09375000006661
+1966080 0 2 0 0 5242880 5373952 5242880 0.09375 0 0.025 0 1.09375000005053
+1966080 0 2 0 0 5242880 5505024 5242880 0.09375 0 0.05 0 1.09375000011513
+1966080 0 2 0 0 5242880 5636096 5242880 0.09375 0 0.075 0 1.09375000007712
+1966080 0 2 0 0 5242880 5767168 5242880 0.09375 0 0.1 0 1.09375000017699
+1966080 0 2 0 0 5242880 5898240 5242880 0.09375 0 0.125 0 1.09375000008476
+1966080 0 2 0 0 5242880 6029312 5242880 0.09375 0 0.15 0 1.0937499999879
+1966080 0 2 0 0 5242880 6160384 5242880 0.09375 0 0.175 0 1.09374999998465
+1966080 0 2 0 0 5242880 6291456 5242880 0.09375 0 0.2 0 1.09375000000317
+1966080 0 2 0 0 5242880 6422528 5242880 0.09375 0 0.225 0 1.09374999999655
+1966080 0 2 0 0 5242880 6553600 5242880 0.09375 0 0.25 0 1.0937499999896
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 0 5242880 0.1 0 -1 0 1.1
+2097152 0 0 0 0 5242880 524288 5242880 0.1 0 -0.9 0 1.1
+2097152 0 0 0 0 5242880 1048576 5242880 0.1 0 -0.8 0 1.1
+2097152 0 0 0 0 5242880 1572864 5242880 0.1 0 -0.7 0 1.1
+2097152 0 0 0 0 5242880 2097152 5242880 0.1 0 -0.6 0 1.1
+2097152 0 0 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 1.10000000000003
+2097152 0 0 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 1.09999999999964
+2097152 0 0 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 1.10000000000268
+2097152 0 0 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 1.10000000000743
+2097152 0 0 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 1.10000000018839
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 0 0 0 5242880 5767168 5242880 0.1 0 0.1 0 1.10000000018839
+2097152 0 0 0 0 5242880 6291456 5242880 0.1 0 0.2 0 1.10000000000743
+2097152 0 0 0 0 5242880 6815744 5242880 0.1 0 0.3 0 1.10000000000268
+2097152 0 0 0 0 5242880 7340032 5242880 0.1 0 0.4 0 1.09999999999964
+2097152 0 0 0 0 5242880 7864320 5242880 0.1 0 0.5 0 1.10000000000003
+2097152 0 0 0 0 5242880 8388608 5242880 0.1 0 0.6 0 1.1
+2097152 0 0 0 0 5242880 8912896 5242880 0.1 0 0.7 0 1.1
+2097152 0 0 0 0 5242880 9437184 5242880 0.1 0 0.8 0 1.1
+2097152 0 0 0 0 5242880 9961472 5242880 0.1 0 0.9 0 1.1
+2097152 0 0 0 0 5242880 10485760 5242880 0.1 0 1 0 1.1
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 1.10000000000003
+2097152 0 1 0 0 5242880 2883584 5242880 0.1 0 -0.45 0 1.09999999999964
+2097152 0 1 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 1.09999999999964
+2097152 0 1 0 0 5242880 3407872 5242880 0.1 0 -0.35 0 1.10000000000084
+2097152 0 1 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 1.10000000000268
+2097152 0 1 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 1.09999999999394
+2097152 0 1 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 1.10000000000743
+2097152 0 1 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 1.09999999998642
+2097152 0 1 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 1.10000000018839
+2097152 0 1 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 1.10000000014165
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 1 0 0 5242880 5505024 5242880 0.1 0 0.05 0 1.10000000014165
+2097152 0 1 0 0 5242880 5767168 5242880 0.1 0 0.1 0 1.10000000018839
+2097152 0 1 0 0 5242880 6029312 5242880 0.1 0 0.15 0 1.09999999998642
+2097152 0 1 0 0 5242880 6291456 5242880 0.1 0 0.2 0 1.10000000000743
+2097152 0 1 0 0 5242880 6553600 5242880 0.1 0 0.25 0 1.09999999999394
+2097152 0 1 0 0 5242880 6815744 5242880 0.1 0 0.3 0 1.10000000000268
+2097152 0 1 0 0 5242880 7077888 5242880 0.1 0 0.35 0 1.10000000000084
+2097152 0 1 0 0 5242880 7340032 5242880 0.1 0 0.4 0 1.09999999999964
+2097152 0 1 0 0 5242880 7602176 5242880 0.1 0 0.45 0 1.09999999999964
+2097152 0 1 0 0 5242880 7864320 5242880 0.1 0 0.5 0 1.10000000000003
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 1.09999999999394
+2097152 0 2 0 0 5242880 4063232 5242880 0.1 0 -0.225 0 1.10000000000145
+2097152 0 2 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 1.10000000000743
+2097152 0 2 0 0 5242880 4325376 5242880 0.1 0 -0.175 0 1.09999999998514
+2097152 0 2 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 1.09999999998642
+2097152 0 2 0 0 5242880 4587520 5242880 0.1 0 -0.125 0 1.10000000008901
+2097152 0 2 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 1.10000000018839
+2097152 0 2 0 0 5242880 4849664 5242880 0.1 0 -0.075 0 1.10000000009574
+2097152 0 2 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 1.10000000014165
+2097152 0 2 0 0 5242880 5111808 5242880 0.1 0 -0.025 0 1.1000000000684
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 2 0 0 5242880 5373952 5242880 0.1 0 0.025 0 1.1000000000684
+2097152 0 2 0 0 5242880 5505024 5242880 0.1 0 0.05 0 1.10000000014165
+2097152 0 2 0 0 5242880 5636096 5242880 0.1 0 0.075 0 1.10000000009574
+2097152 0 2 0 0 5242880 5767168 5242880 0.1 0 0.1 0 1.10000000018839
+2097152 0 2 0 0 5242880 5898240 5242880 0.1 0 0.125 0 1.10000000008901
+2097152 0 2 0 0 5242880 6029312 5242880 0.1 0 0.15 0 1.09999999998642
+2097152 0 2 0 0 5242880 6160384 5242880 0.1 0 0.175 0 1.09999999998514
+2097152 0 2 0 0 5242880 6291456 5242880 0.1 0 0.2 0 1.10000000000743
+2097152 0 2 0 0 5242880 6422528 5242880 0.1 0 0.225 0 1.10000000000145
+2097152 0 2 0 0 5242880 6553600 5242880 0.1 0 0.25 0 1.09999999999394
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phi.z.asc b/Carpet/CarpetInterp/test/waveinterp/phi.z.asc
new file mode 100644
index 000000000..8434cd831
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phi.z.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phi z (phi)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 0 0 0 0 -1 1
+0 0 0 0 0 5242880 5242880 524288 0 0 0 -0.9 1
+0 0 0 0 0 5242880 5242880 1048576 0 0 0 -0.8 1
+0 0 0 0 0 5242880 5242880 1572864 0 0 0 -0.7 1
+0 0 0 0 0 5242880 5242880 2097152 0 0 0 -0.6 1
+0 0 0 0 0 5242880 5242880 2621440 0 0 0 -0.5 1
+0 0 0 0 0 5242880 5242880 3145728 0 0 0 -0.4 1
+0 0 0 0 0 5242880 5242880 3670016 0 0 0 -0.3 1
+0 0 0 0 0 5242880 5242880 4194304 0 0 0 -0.2 1
+0 0 0 0 0 5242880 5242880 4718592 0 0 0 -0.1 1
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 0 0 0 5242880 5242880 5767168 0 0 0 0.1 1
+0 0 0 0 0 5242880 5242880 6291456 0 0 0 0.2 1
+0 0 0 0 0 5242880 5242880 6815744 0 0 0 0.3 1
+0 0 0 0 0 5242880 5242880 7340032 0 0 0 0.4 1
+0 0 0 0 0 5242880 5242880 7864320 0 0 0 0.5 1
+0 0 0 0 0 5242880 5242880 8388608 0 0 0 0.6 1
+0 0 0 0 0 5242880 5242880 8912896 0 0 0 0.7 1
+0 0 0 0 0 5242880 5242880 9437184 0 0 0 0.8 1
+0 0 0 0 0 5242880 5242880 9961472 0 0 0 0.9 1
+0 0 0 0 0 5242880 5242880 10485760 0 0 0 1 1
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 2621440 0 0 0 -0.5 1
+0 0 1 0 0 5242880 5242880 2883584 0 0 0 -0.45 1
+0 0 1 0 0 5242880 5242880 3145728 0 0 0 -0.4 1
+0 0 1 0 0 5242880 5242880 3407872 0 0 0 -0.35 1
+0 0 1 0 0 5242880 5242880 3670016 0 0 0 -0.3 1
+0 0 1 0 0 5242880 5242880 3932160 0 0 0 -0.25 1
+0 0 1 0 0 5242880 5242880 4194304 0 0 0 -0.2 1
+0 0 1 0 0 5242880 5242880 4456448 0 0 0 -0.15 1
+0 0 1 0 0 5242880 5242880 4718592 0 0 0 -0.1 1
+0 0 1 0 0 5242880 5242880 4980736 0 0 0 -0.05 1
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 1 0 0 5242880 5242880 5505024 0 0 0 0.05 1
+0 0 1 0 0 5242880 5242880 5767168 0 0 0 0.1 1
+0 0 1 0 0 5242880 5242880 6029312 0 0 0 0.15 1
+0 0 1 0 0 5242880 5242880 6291456 0 0 0 0.2 1
+0 0 1 0 0 5242880 5242880 6553600 0 0 0 0.25 1
+0 0 1 0 0 5242880 5242880 6815744 0 0 0 0.3 1
+0 0 1 0 0 5242880 5242880 7077888 0 0 0 0.35 1
+0 0 1 0 0 5242880 5242880 7340032 0 0 0 0.4 1
+0 0 1 0 0 5242880 5242880 7602176 0 0 0 0.45 1
+0 0 1 0 0 5242880 5242880 7864320 0 0 0 0.5 1
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 3932160 0 0 0 -0.25 1
+0 0 2 0 0 5242880 5242880 4063232 0 0 0 -0.225 1
+0 0 2 0 0 5242880 5242880 4194304 0 0 0 -0.2 1
+0 0 2 0 0 5242880 5242880 4325376 0 0 0 -0.175 1
+0 0 2 0 0 5242880 5242880 4456448 0 0 0 -0.15 1
+0 0 2 0 0 5242880 5242880 4587520 0 0 0 -0.125 1
+0 0 2 0 0 5242880 5242880 4718592 0 0 0 -0.1 1
+0 0 2 0 0 5242880 5242880 4849664 0 0 0 -0.075 1
+0 0 2 0 0 5242880 5242880 4980736 0 0 0 -0.05 1
+0 0 2 0 0 5242880 5242880 5111808 0 0 0 -0.025 1
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 2 0 0 5242880 5242880 5373952 0 0 0 0.025 1
+0 0 2 0 0 5242880 5242880 5505024 0 0 0 0.05 1
+0 0 2 0 0 5242880 5242880 5636096 0 0 0 0.075 1
+0 0 2 0 0 5242880 5242880 5767168 0 0 0 0.1 1
+0 0 2 0 0 5242880 5242880 5898240 0 0 0 0.125 1
+0 0 2 0 0 5242880 5242880 6029312 0 0 0 0.15 1
+0 0 2 0 0 5242880 5242880 6160384 0 0 0 0.175 1
+0 0 2 0 0 5242880 5242880 6291456 0 0 0 0.2 1
+0 0 2 0 0 5242880 5242880 6422528 0 0 0 0.225 1
+0 0 2 0 0 5242880 5242880 6553600 0 0 0 0.25 1
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 3932160 0.00625 0 0 -0.25 1.00625
+131072 0 2 0 0 5242880 5242880 4063232 0.00625 0 0 -0.225 1.00625
+131072 0 2 0 0 5242880 5242880 4194304 0.00625 0 0 -0.2 1.00625
+131072 0 2 0 0 5242880 5242880 4325376 0.00625 0 0 -0.175 1.00625
+131072 0 2 0 0 5242880 5242880 4456448 0.00625 0 0 -0.15 1.00625
+131072 0 2 0 0 5242880 5242880 4587520 0.00625 0 0 -0.125 1.00625
+131072 0 2 0 0 5242880 5242880 4718592 0.00625 0 0 -0.1 1.00625
+131072 0 2 0 0 5242880 5242880 4849664 0.00625 0 0 -0.075 1.00625
+131072 0 2 0 0 5242880 5242880 4980736 0.00625 0 0 -0.05 1.00625
+131072 0 2 0 0 5242880 5242880 5111808 0.00625 0 0 -0.025 1.00625
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1.00625
+131072 0 2 0 0 5242880 5242880 5373952 0.00625 0 0 0.025 1.00625
+131072 0 2 0 0 5242880 5242880 5505024 0.00625 0 0 0.05 1.00625
+131072 0 2 0 0 5242880 5242880 5636096 0.00625 0 0 0.075 1.00625
+131072 0 2 0 0 5242880 5242880 5767168 0.00625 0 0 0.1 1.00625
+131072 0 2 0 0 5242880 5242880 5898240 0.00625 0 0 0.125 1.00625
+131072 0 2 0 0 5242880 5242880 6029312 0.00625 0 0 0.15 1.00625
+131072 0 2 0 0 5242880 5242880 6160384 0.00625 0 0 0.175 1.00625
+131072 0 2 0 0 5242880 5242880 6291456 0.00625 0 0 0.2 1.00625
+131072 0 2 0 0 5242880 5242880 6422528 0.00625 0 0 0.225 1.00625
+131072 0 2 0 0 5242880 5242880 6553600 0.00625 0 0 0.25 1.00625
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 2621440 0.0125 0 0 -0.5 1.0125
+262144 0 1 0 0 5242880 5242880 2883584 0.0125 0 0 -0.45 1.0125
+262144 0 1 0 0 5242880 5242880 3145728 0.0125 0 0 -0.4 1.0125
+262144 0 1 0 0 5242880 5242880 3407872 0.0125 0 0 -0.35 1.0125
+262144 0 1 0 0 5242880 5242880 3670016 0.0125 0 0 -0.3 1.0125
+262144 0 1 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 1.0125
+262144 0 1 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 1.0125
+262144 0 1 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 1.0125
+262144 0 1 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 1.01250000000873
+262144 0 1 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 1.0125
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+262144 0 1 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 1.0125
+262144 0 1 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 1.01250000000873
+262144 0 1 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 1.0125
+262144 0 1 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 1.0125
+262144 0 1 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 1.0125
+262144 0 1 0 0 5242880 5242880 6815744 0.0125 0 0 0.3 1.0125
+262144 0 1 0 0 5242880 5242880 7077888 0.0125 0 0 0.35 1.0125
+262144 0 1 0 0 5242880 5242880 7340032 0.0125 0 0 0.4 1.0125
+262144 0 1 0 0 5242880 5242880 7602176 0.0125 0 0 0.45 1.0125
+262144 0 1 0 0 5242880 5242880 7864320 0.0125 0 0 0.5 1.0125
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 1.0125
+262144 0 2 0 0 5242880 5242880 4063232 0.0125 0 0 -0.225 1.0125
+262144 0 2 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 1.0125
+262144 0 2 0 0 5242880 5242880 4325376 0.0125 0 0 -0.175 1.01249999999945
+262144 0 2 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 1.0125
+262144 0 2 0 0 5242880 5242880 4587520 0.0125 0 0 -0.125 1.01250000000491
+262144 0 2 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 1.01250000000873
+262144 0 2 0 0 5242880 5242880 4849664 0.0125 0 0 -0.075 1.0125
+262144 0 2 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 1.0125
+262144 0 2 0 0 5242880 5242880 5111808 0.0125 0 0 -0.025 1.0125
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1.0125
+262144 0 2 0 0 5242880 5242880 5373952 0.0125 0 0 0.025 1.0125
+262144 0 2 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 1.0125
+262144 0 2 0 0 5242880 5242880 5636096 0.0125 0 0 0.075 1.0125
+262144 0 2 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 1.01250000000873
+262144 0 2 0 0 5242880 5242880 5898240 0.0125 0 0 0.125 1.01250000000491
+262144 0 2 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 1.0125
+262144 0 2 0 0 5242880 5242880 6160384 0.0125 0 0 0.175 1.01249999999945
+262144 0 2 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 1.0125
+262144 0 2 0 0 5242880 5242880 6422528 0.0125 0 0 0.225 1.0125
+262144 0 2 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 1.0125
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 3932160 0.01875 0 0 -0.25 1.01875
+393216 0 2 0 0 5242880 5242880 4063232 0.01875 0 0 -0.225 1.01874999999964
+393216 0 2 0 0 5242880 5242880 4194304 0.01875 0 0 -0.2 1.01874999999937
+393216 0 2 0 0 5242880 5242880 4325376 0.01875 0 0 -0.175 1.01874999999822
+393216 0 2 0 0 5242880 5242880 4456448 0.01875 0 0 -0.15 1.01875000000001
+393216 0 2 0 0 5242880 5242880 4587520 0.01875 0 0 -0.125 1.01875000001291
+393216 0 2 0 0 5242880 5242880 4718592 0.01875 0 0 -0.1 1.01875000002589
+393216 0 2 0 0 5242880 5242880 4849664 0.01875 0 0 -0.075 1.01875
+393216 0 2 0 0 5242880 5242880 4980736 0.01875 0 0 -0.05 1.01875000000016
+393216 0 2 0 0 5242880 5242880 5111808 0.01875 0 0 -0.025 1.01875
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.01875
+393216 0 2 0 0 5242880 5242880 5373952 0.01875 0 0 0.025 1.01875
+393216 0 2 0 0 5242880 5242880 5505024 0.01875 0 0 0.05 1.01875000000016
+393216 0 2 0 0 5242880 5242880 5636096 0.01875 0 0 0.075 1.01875
+393216 0 2 0 0 5242880 5242880 5767168 0.01875 0 0 0.1 1.01875000002589
+393216 0 2 0 0 5242880 5242880 5898240 0.01875 0 0 0.125 1.01875000001291
+393216 0 2 0 0 5242880 5242880 6029312 0.01875 0 0 0.15 1.01875000000001
+393216 0 2 0 0 5242880 5242880 6160384 0.01875 0 0 0.175 1.01874999999822
+393216 0 2 0 0 5242880 5242880 6291456 0.01875 0 0 0.2 1.01874999999937
+393216 0 2 0 0 5242880 5242880 6422528 0.01875 0 0 0.225 1.01874999999964
+393216 0 2 0 0 5242880 5242880 6553600 0.01875 0 0 0.25 1.01875
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 0 0.025 0 0 -1 1.025
+524288 0 0 0 0 5242880 5242880 524288 0.025 0 0 -0.9 1.025
+524288 0 0 0 0 5242880 5242880 1048576 0.025 0 0 -0.8 1.025
+524288 0 0 0 0 5242880 5242880 1572864 0.025 0 0 -0.7 1.025
+524288 0 0 0 0 5242880 5242880 2097152 0.025 0 0 -0.6 1.025
+524288 0 0 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 1.025
+524288 0 0 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 1.025
+524288 0 0 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 1.025
+524288 0 0 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 1.02499999999832
+524288 0 0 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 1.02500000004247
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 0 0 0 5242880 5242880 5767168 0.025 0 0 0.1 1.02500000004247
+524288 0 0 0 0 5242880 5242880 6291456 0.025 0 0 0.2 1.02499999999832
+524288 0 0 0 0 5242880 5242880 6815744 0.025 0 0 0.3 1.025
+524288 0 0 0 0 5242880 5242880 7340032 0.025 0 0 0.4 1.025
+524288 0 0 0 0 5242880 5242880 7864320 0.025 0 0 0.5 1.025
+524288 0 0 0 0 5242880 5242880 8388608 0.025 0 0 0.6 1.025
+524288 0 0 0 0 5242880 5242880 8912896 0.025 0 0 0.7 1.025
+524288 0 0 0 0 5242880 5242880 9437184 0.025 0 0 0.8 1.025
+524288 0 0 0 0 5242880 5242880 9961472 0.025 0 0 0.9 1.025
+524288 0 0 0 0 5242880 5242880 10485760 0.025 0 0 1 1.025
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 1.025
+524288 0 1 0 0 5242880 5242880 2883584 0.025 0 0 -0.45 1.025
+524288 0 1 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 1.025
+524288 0 1 0 0 5242880 5242880 3407872 0.025 0 0 -0.35 1.02500000000011
+524288 0 1 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 1.025
+524288 0 1 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 1.0249999999964
+524288 0 1 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 1.02499999999832
+524288 0 1 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 1.02500000000003
+524288 0 1 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 1.02500000004247
+524288 0 1 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 1.02500000000073
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 1 0 0 5242880 5242880 5505024 0.025 0 0 0.05 1.02500000000073
+524288 0 1 0 0 5242880 5242880 5767168 0.025 0 0 0.1 1.02500000004247
+524288 0 1 0 0 5242880 5242880 6029312 0.025 0 0 0.15 1.02500000000003
+524288 0 1 0 0 5242880 5242880 6291456 0.025 0 0 0.2 1.02499999999832
+524288 0 1 0 0 5242880 5242880 6553600 0.025 0 0 0.25 1.0249999999964
+524288 0 1 0 0 5242880 5242880 6815744 0.025 0 0 0.3 1.025
+524288 0 1 0 0 5242880 5242880 7077888 0.025 0 0 0.35 1.02500000000011
+524288 0 1 0 0 5242880 5242880 7340032 0.025 0 0 0.4 1.025
+524288 0 1 0 0 5242880 5242880 7602176 0.025 0 0 0.45 1.025
+524288 0 1 0 0 5242880 5242880 7864320 0.025 0 0 0.5 1.025
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 1.0249999999964
+524288 0 2 0 0 5242880 5242880 4063232 0.025 0 0 -0.225 1.02499999999703
+524288 0 2 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 1.02499999999832
+524288 0 2 0 0 5242880 5242880 4325376 0.025 0 0 -0.175 1.02499999999664
+524288 0 2 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 1.02500000000003
+524288 0 2 0 0 5242880 5242880 4587520 0.025 0 0 -0.125 1.02500000002396
+524288 0 2 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 1.02500000004247
+524288 0 2 0 0 5242880 5242880 4849664 0.025 0 0 -0.075 1.02500000000014
+524288 0 2 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 1.02500000000073
+524288 0 2 0 0 5242880 5242880 5111808 0.025 0 0 -0.025 1.02500000000001
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.02500000000002
+524288 0 2 0 0 5242880 5242880 5373952 0.025 0 0 0.025 1.02500000000001
+524288 0 2 0 0 5242880 5242880 5505024 0.025 0 0 0.05 1.02500000000073
+524288 0 2 0 0 5242880 5242880 5636096 0.025 0 0 0.075 1.02500000000014
+524288 0 2 0 0 5242880 5242880 5767168 0.025 0 0 0.1 1.02500000004247
+524288 0 2 0 0 5242880 5242880 5898240 0.025 0 0 0.125 1.02500000002396
+524288 0 2 0 0 5242880 5242880 6029312 0.025 0 0 0.15 1.02500000000003
+524288 0 2 0 0 5242880 5242880 6160384 0.025 0 0 0.175 1.02499999999664
+524288 0 2 0 0 5242880 5242880 6291456 0.025 0 0 0.2 1.02499999999832
+524288 0 2 0 0 5242880 5242880 6422528 0.025 0 0 0.225 1.02499999999703
+524288 0 2 0 0 5242880 5242880 6553600 0.025 0 0 0.25 1.0249999999964
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 3932160 0.03125 0 0 -0.25 1.0312499999947
+655360 0 2 0 0 5242880 5242880 4063232 0.03125 0 0 -0.225 1.03124999999534
+655360 0 2 0 0 5242880 5242880 4194304 0.03125 0 0 -0.2 1.03124999999702
+655360 0 2 0 0 5242880 5242880 4325376 0.03125 0 0 -0.175 1.03124999999494
+655360 0 2 0 0 5242880 5242880 4456448 0.03125 0 0 -0.15 1.03124999999993
+655360 0 2 0 0 5242880 5242880 4587520 0.03125 0 0 -0.125 1.03125000003312
+655360 0 2 0 0 5242880 5242880 4718592 0.03125 0 0 -0.1 1.03125000005828
+655360 0 2 0 0 5242880 5242880 4849664 0.03125 0 0 -0.075 1.03125000000063
+655360 0 2 0 0 5242880 5242880 4980736 0.03125 0 0 -0.05 1.03125000000198
+655360 0 2 0 0 5242880 5242880 5111808 0.03125 0 0 -0.025 1.03125000000007
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.0312500000001
+655360 0 2 0 0 5242880 5242880 5373952 0.03125 0 0 0.025 1.03125000000007
+655360 0 2 0 0 5242880 5242880 5505024 0.03125 0 0 0.05 1.03125000000198
+655360 0 2 0 0 5242880 5242880 5636096 0.03125 0 0 0.075 1.03125000000063
+655360 0 2 0 0 5242880 5242880 5767168 0.03125 0 0 0.1 1.03125000005828
+655360 0 2 0 0 5242880 5242880 5898240 0.03125 0 0 0.125 1.03125000003312
+655360 0 2 0 0 5242880 5242880 6029312 0.03125 0 0 0.15 1.03124999999993
+655360 0 2 0 0 5242880 5242880 6160384 0.03125 0 0 0.175 1.03124999999494
+655360 0 2 0 0 5242880 5242880 6291456 0.03125 0 0 0.2 1.03124999999702
+655360 0 2 0 0 5242880 5242880 6422528 0.03125 0 0 0.225 1.03124999999534
+655360 0 2 0 0 5242880 5242880 6553600 0.03125 0 0 0.25 1.0312499999947
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 2621440 0.0375 0 0 -0.5 1.0375
+786432 0 1 0 0 5242880 5242880 2883584 0.0375 0 0 -0.45 1.03749999999999
+786432 0 1 0 0 5242880 5242880 3145728 0.0375 0 0 -0.4 1.03749999999999
+786432 0 1 0 0 5242880 5242880 3407872 0.0375 0 0 -0.35 1.03750000000033
+786432 0 1 0 0 5242880 5242880 3670016 0.0375 0 0 -0.3 1.03750000000009
+786432 0 1 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 1.03749999999307
+786432 0 1 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 1.03749999999542
+786432 0 1 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 1.03749999999975
+786432 0 1 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 1.0375000000732
+786432 0 1 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 1.03750000000421
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+786432 0 1 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 1.03750000000421
+786432 0 1 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 1.0375000000732
+786432 0 1 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 1.03749999999975
+786432 0 1 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 1.03749999999542
+786432 0 1 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 1.03749999999307
+786432 0 1 0 0 5242880 5242880 6815744 0.0375 0 0 0.3 1.03750000000009
+786432 0 1 0 0 5242880 5242880 7077888 0.0375 0 0 0.35 1.03750000000033
+786432 0 1 0 0 5242880 5242880 7340032 0.0375 0 0 0.4 1.03749999999999
+786432 0 1 0 0 5242880 5242880 7602176 0.0375 0 0 0.45 1.03749999999999
+786432 0 1 0 0 5242880 5242880 7864320 0.0375 0 0 0.5 1.0375
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 1.03749999999307
+786432 0 2 0 0 5242880 5242880 4063232 0.0375 0 0 -0.225 1.03749999999353
+786432 0 2 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 1.03749999999542
+786432 0 2 0 0 5242880 5242880 4325376 0.0375 0 0 -0.175 1.03749999999314
+786432 0 2 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 1.03749999999975
+786432 0 2 0 0 5242880 5242880 4587520 0.0375 0 0 -0.125 1.03750000004106
+786432 0 2 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 1.0375000000732
+786432 0 2 0 0 5242880 5242880 4849664 0.0375 0 0 -0.075 1.03750000000169
+786432 0 2 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 1.03750000000421
+786432 0 2 0 0 5242880 5242880 5111808 0.0375 0 0 -0.025 1.03750000000026
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.03750000000037
+786432 0 2 0 0 5242880 5242880 5373952 0.0375 0 0 0.025 1.03750000000026
+786432 0 2 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 1.03750000000421
+786432 0 2 0 0 5242880 5242880 5636096 0.0375 0 0 0.075 1.03750000000169
+786432 0 2 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 1.0375000000732
+786432 0 2 0 0 5242880 5242880 5898240 0.0375 0 0 0.125 1.03750000004106
+786432 0 2 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 1.03749999999975
+786432 0 2 0 0 5242880 5242880 6160384 0.0375 0 0 0.175 1.03749999999314
+786432 0 2 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 1.03749999999542
+786432 0 2 0 0 5242880 5242880 6422528 0.0375 0 0 0.225 1.03749999999353
+786432 0 2 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 1.03749999999307
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 3932160 0.04375 0 0 -0.25 1.04374999999102
+917504 0 2 0 0 5242880 5242880 4063232 0.04375 0 0 -0.225 1.04374999999181
+917504 0 2 0 0 5242880 5242880 4194304 0.04375 0 0 -0.2 1.04374999999437
+917504 0 2 0 0 5242880 5242880 4325376 0.04375 0 0 -0.175 1.04374999999151
+917504 0 2 0 0 5242880 5242880 4456448 0.04375 0 0 -0.15 1.04374999999929
+917504 0 2 0 0 5242880 5242880 4587520 0.04375 0 0 -0.125 1.04375000004884
+917504 0 2 0 0 5242880 5242880 4718592 0.04375 0 0 -0.1 1.04375000008715
+917504 0 2 0 0 5242880 5242880 4849664 0.04375 0 0 -0.075 1.04375000000356
+917504 0 2 0 0 5242880 5242880 4980736 0.04375 0 0 -0.05 1.04375000000769
+917504 0 2 0 0 5242880 5242880 5111808 0.04375 0 0 -0.025 1.04375000000072
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.043750000001
+917504 0 2 0 0 5242880 5242880 5373952 0.04375 0 0 0.025 1.04375000000072
+917504 0 2 0 0 5242880 5242880 5505024 0.04375 0 0 0.05 1.04375000000769
+917504 0 2 0 0 5242880 5242880 5636096 0.04375 0 0 0.075 1.04375000000356
+917504 0 2 0 0 5242880 5242880 5767168 0.04375 0 0 0.1 1.04375000008715
+917504 0 2 0 0 5242880 5242880 5898240 0.04375 0 0 0.125 1.04375000004884
+917504 0 2 0 0 5242880 5242880 6029312 0.04375 0 0 0.15 1.04374999999929
+917504 0 2 0 0 5242880 5242880 6160384 0.04375 0 0 0.175 1.04374999999151
+917504 0 2 0 0 5242880 5242880 6291456 0.04375 0 0 0.2 1.04374999999437
+917504 0 2 0 0 5242880 5242880 6422528 0.04375 0 0 0.225 1.04374999999181
+917504 0 2 0 0 5242880 5242880 6553600 0.04375 0 0 0.25 1.04374999999102
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 0 0.05 0 0 -1 1.05
+1048576 0 0 0 0 5242880 5242880 524288 0.05 0 0 -0.9 1.05
+1048576 0 0 0 0 5242880 5242880 1048576 0.05 0 0 -0.8 1.05
+1048576 0 0 0 0 5242880 5242880 1572864 0.05 0 0 -0.7 1.05
+1048576 0 0 0 0 5242880 5242880 2097152 0.05 0 0 -0.6 1.05
+1048576 0 0 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 1.05
+1048576 0 0 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 1.04999999999998
+1048576 0 0 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 1.05000000000024
+1048576 0 0 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 1.04999999999358
+1048576 0 0 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 1.05000000010013
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 0 0 0 5242880 5242880 5767168 0.05 0 0 0.1 1.05000000010013
+1048576 0 0 0 0 5242880 5242880 6291456 0.05 0 0 0.2 1.04999999999358
+1048576 0 0 0 0 5242880 5242880 6815744 0.05 0 0 0.3 1.05000000000024
+1048576 0 0 0 0 5242880 5242880 7340032 0.05 0 0 0.4 1.04999999999998
+1048576 0 0 0 0 5242880 5242880 7864320 0.05 0 0 0.5 1.05
+1048576 0 0 0 0 5242880 5242880 8388608 0.05 0 0 0.6 1.05
+1048576 0 0 0 0 5242880 5242880 8912896 0.05 0 0 0.7 1.05
+1048576 0 0 0 0 5242880 5242880 9437184 0.05 0 0 0.8 1.05
+1048576 0 0 0 0 5242880 5242880 9961472 0.05 0 0 0.9 1.05
+1048576 0 0 0 0 5242880 5242880 10485760 0.05 0 0 1 1.05
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 1.05
+1048576 0 1 0 0 5242880 5242880 2883584 0.05 0 0 -0.45 1.04999999999998
+1048576 0 1 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 1.04999999999998
+1048576 0 1 0 0 5242880 5242880 3407872 0.05 0 0 -0.35 1.05000000000053
+1048576 0 1 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 1.05000000000024
+1048576 0 1 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 1.04999999999027
+1048576 0 1 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 1.04999999999358
+1048576 0 1 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 1.04999999999861
+1048576 0 1 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 1.05000000010013
+1048576 0 1 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 1.05000000001273
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 1 0 0 5242880 5242880 5505024 0.05 0 0 0.05 1.05000000001273
+1048576 0 1 0 0 5242880 5242880 5767168 0.05 0 0 0.1 1.05000000010013
+1048576 0 1 0 0 5242880 5242880 6029312 0.05 0 0 0.15 1.04999999999861
+1048576 0 1 0 0 5242880 5242880 6291456 0.05 0 0 0.2 1.04999999999358
+1048576 0 1 0 0 5242880 5242880 6553600 0.05 0 0 0.25 1.04999999999027
+1048576 0 1 0 0 5242880 5242880 6815744 0.05 0 0 0.3 1.05000000000024
+1048576 0 1 0 0 5242880 5242880 7077888 0.05 0 0 0.35 1.05000000000053
+1048576 0 1 0 0 5242880 5242880 7340032 0.05 0 0 0.4 1.04999999999998
+1048576 0 1 0 0 5242880 5242880 7602176 0.05 0 0 0.45 1.04999999999998
+1048576 0 1 0 0 5242880 5242880 7864320 0.05 0 0 0.5 1.05
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 1.04999999999027
+1048576 0 2 0 0 5242880 5242880 4063232 0.05 0 0 -0.225 1.04999999999099
+1048576 0 2 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 1.04999999999358
+1048576 0 2 0 0 5242880 5242880 4325376 0.05 0 0 -0.175 1.04999999998996
+1048576 0 2 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 1.04999999999861
+1048576 0 2 0 0 5242880 5242880 4587520 0.05 0 0 -0.125 1.05000000005515
+1048576 0 2 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 1.05000000010013
+1048576 0 2 0 0 5242880 5242880 4849664 0.05 0 0 -0.075 1.0500000000065
+1048576 0 2 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 1.05000000001273
+1048576 0 2 0 0 5242880 5242880 5111808 0.05 0 0 -0.025 1.05000000000165
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.05000000000227
+1048576 0 2 0 0 5242880 5242880 5373952 0.05 0 0 0.025 1.05000000000165
+1048576 0 2 0 0 5242880 5242880 5505024 0.05 0 0 0.05 1.05000000001273
+1048576 0 2 0 0 5242880 5242880 5636096 0.05 0 0 0.075 1.0500000000065
+1048576 0 2 0 0 5242880 5242880 5767168 0.05 0 0 0.1 1.05000000010013
+1048576 0 2 0 0 5242880 5242880 5898240 0.05 0 0 0.125 1.05000000005515
+1048576 0 2 0 0 5242880 5242880 6029312 0.05 0 0 0.15 1.04999999999861
+1048576 0 2 0 0 5242880 5242880 6160384 0.05 0 0 0.175 1.04999999998996
+1048576 0 2 0 0 5242880 5242880 6291456 0.05 0 0 0.2 1.04999999999358
+1048576 0 2 0 0 5242880 5242880 6422528 0.05 0 0 0.225 1.04999999999099
+1048576 0 2 0 0 5242880 5242880 6553600 0.05 0 0 0.25 1.04999999999027
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 3932160 0.05625 0 0 -0.25 1.05624999998901
+1179648 0 2 0 0 5242880 5242880 4063232 0.05625 0 0 -0.225 1.05624999999015
+1179648 0 2 0 0 5242880 5242880 4194304 0.05625 0 0 -0.2 1.05624999999326
+1179648 0 2 0 0 5242880 5242880 4325376 0.05625 0 0 -0.175 1.05624999998853
+1179648 0 2 0 0 5242880 5242880 4456448 0.05625 0 0 -0.15 1.05624999999763
+1179648 0 2 0 0 5242880 5242880 4587520 0.05625 0 0 -0.125 1.05625000006123
+1179648 0 2 0 0 5242880 5242880 4718592 0.05625 0 0 -0.1 1.05625000011224
+1179648 0 2 0 0 5242880 5242880 4849664 0.05625 0 0 -0.075 1.05625000001079
+1179648 0 2 0 0 5242880 5242880 4980736 0.05625 0 0 -0.05 1.05625000001963
+1179648 0 2 0 0 5242880 5242880 5111808 0.05625 0 0 -0.025 1.05625000000332
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.05625000000452
+1179648 0 2 0 0 5242880 5242880 5373952 0.05625 0 0 0.025 1.05625000000332
+1179648 0 2 0 0 5242880 5242880 5505024 0.05625 0 0 0.05 1.05625000001963
+1179648 0 2 0 0 5242880 5242880 5636096 0.05625 0 0 0.075 1.05625000001079
+1179648 0 2 0 0 5242880 5242880 5767168 0.05625 0 0 0.1 1.05625000011224
+1179648 0 2 0 0 5242880 5242880 5898240 0.05625 0 0 0.125 1.05625000006123
+1179648 0 2 0 0 5242880 5242880 6029312 0.05625 0 0 0.15 1.05624999999763
+1179648 0 2 0 0 5242880 5242880 6160384 0.05625 0 0 0.175 1.05624999998853
+1179648 0 2 0 0 5242880 5242880 6291456 0.05625 0 0 0.2 1.05624999999326
+1179648 0 2 0 0 5242880 5242880 6422528 0.05625 0 0 0.225 1.05624999999015
+1179648 0 2 0 0 5242880 5242880 6553600 0.05625 0 0 0.25 1.05624999998901
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 2621440 0.0625 0 0 -0.5 1.0625
+1310720 0 1 0 0 5242880 5242880 2883584 0.0625 0 0 -0.45 1.06249999999993
+1310720 0 1 0 0 5242880 5242880 3145728 0.0625 0 0 -0.4 1.06249999999994
+1310720 0 1 0 0 5242880 5242880 3407872 0.0625 0 0 -0.35 1.06250000000083
+1310720 0 1 0 0 5242880 5242880 3670016 0.0625 0 0 -0.3 1.06250000000062
+1310720 0 1 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 1.06249999998785
+1310720 0 1 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 1.06249999999333
+1310720 0 1 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 1.06249999999637
+1310720 0 1 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 1.06250000012362
+1310720 0 1 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 1.06250000002869
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+1310720 0 1 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 1.06250000002869
+1310720 0 1 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 1.06250000012362
+1310720 0 1 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 1.06249999999637
+1310720 0 1 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 1.06249999999333
+1310720 0 1 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 1.06249999998785
+1310720 0 1 0 0 5242880 5242880 6815744 0.0625 0 0 0.3 1.06250000000062
+1310720 0 1 0 0 5242880 5242880 7077888 0.0625 0 0 0.35 1.06250000000083
+1310720 0 1 0 0 5242880 5242880 7340032 0.0625 0 0 0.4 1.06249999999994
+1310720 0 1 0 0 5242880 5242880 7602176 0.0625 0 0 0.45 1.06249999999993
+1310720 0 1 0 0 5242880 5242880 7864320 0.0625 0 0 0.5 1.0625
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 1.06249999998785
+1310720 0 2 0 0 5242880 5242880 4063232 0.0625 0 0 -0.225 1.0624999999896
+1310720 0 2 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 1.06249999999333
+1310720 0 2 0 0 5242880 5242880 4325376 0.0625 0 0 -0.175 1.06249999998724
+1310720 0 2 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 1.06249999999637
+1310720 0 2 0 0 5242880 5242880 4587520 0.0625 0 0 -0.125 1.06250000006612
+1310720 0 2 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 1.06250000012362
+1310720 0 2 0 0 5242880 5242880 4849664 0.0625 0 0 -0.075 1.06250000001668
+1310720 0 2 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 1.06250000002869
+1310720 0 2 0 0 5242880 5242880 5111808 0.0625 0 0 -0.025 1.06250000000608
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.0625000000082
+1310720 0 2 0 0 5242880 5242880 5373952 0.0625 0 0 0.025 1.06250000000608
+1310720 0 2 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 1.06250000002869
+1310720 0 2 0 0 5242880 5242880 5636096 0.0625 0 0 0.075 1.06250000001668
+1310720 0 2 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 1.06250000012362
+1310720 0 2 0 0 5242880 5242880 5898240 0.0625 0 0 0.125 1.06250000006612
+1310720 0 2 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 1.06249999999637
+1310720 0 2 0 0 5242880 5242880 6160384 0.0625 0 0 0.175 1.06249999998724
+1310720 0 2 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 1.06249999999333
+1310720 0 2 0 0 5242880 5242880 6422528 0.0625 0 0 0.225 1.0624999999896
+1310720 0 2 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 1.06249999998785
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 3932160 0.06875 0 0 -0.25 1.06874999998681
+1441792 0 2 0 0 5242880 5242880 4063232 0.06875 0 0 -0.225 1.06874999998947
+1441792 0 2 0 0 5242880 5242880 4194304 0.06875 0 0 -0.2 1.068749999994
+1441792 0 2 0 0 5242880 5242880 4325376 0.06875 0 0 -0.175 1.06874999998618
+1441792 0 2 0 0 5242880 5242880 4456448 0.06875 0 0 -0.15 1.06874999999489
+1441792 0 2 0 0 5242880 5242880 4587520 0.06875 0 0 -0.125 1.06875000007061
+1441792 0 2 0 0 5242880 5242880 4718592 0.06875 0 0 -0.1 1.06875000013445
+1441792 0 2 0 0 5242880 5242880 4849664 0.06875 0 0 -0.075 1.06875000002444
+1441792 0 2 0 0 5242880 5242880 4980736 0.06875 0 0 -0.05 1.06875000004019
+1441792 0 2 0 0 5242880 5242880 5111808 0.06875 0 0 -0.025 1.0687500000103
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.0687500000138
+1441792 0 2 0 0 5242880 5242880 5373952 0.06875 0 0 0.025 1.0687500000103
+1441792 0 2 0 0 5242880 5242880 5505024 0.06875 0 0 0.05 1.06875000004019
+1441792 0 2 0 0 5242880 5242880 5636096 0.06875 0 0 0.075 1.06875000002444
+1441792 0 2 0 0 5242880 5242880 5767168 0.06875 0 0 0.1 1.06875000013445
+1441792 0 2 0 0 5242880 5242880 5898240 0.06875 0 0 0.125 1.06875000007061
+1441792 0 2 0 0 5242880 5242880 6029312 0.06875 0 0 0.15 1.06874999999489
+1441792 0 2 0 0 5242880 5242880 6160384 0.06875 0 0 0.175 1.06874999998618
+1441792 0 2 0 0 5242880 5242880 6291456 0.06875 0 0 0.2 1.068749999994
+1441792 0 2 0 0 5242880 5242880 6422528 0.06875 0 0 0.225 1.06874999998947
+1441792 0 2 0 0 5242880 5242880 6553600 0.06875 0 0 0.25 1.06874999998681
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 0 0.075 0 0 -1 1.075
+1572864 0 0 0 0 5242880 5242880 524288 0.075 0 0 -0.9 1.075
+1572864 0 0 0 0 5242880 5242880 1048576 0.075 0 0 -0.8 1.075
+1572864 0 0 0 0 5242880 5242880 1572864 0.075 0 0 -0.7 1.075
+1572864 0 0 0 0 5242880 5242880 2097152 0.075 0 0 -0.6 1.075
+1572864 0 0 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 1.075
+1572864 0 0 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 1.07499999999987
+1572864 0 0 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 1.07500000000118
+1572864 0 0 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 1.07499999999519
+1572864 0 0 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 1.07500000014499
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 0 0 0 5242880 5242880 5767168 0.075 0 0 0.1 1.07500000014499
+1572864 0 0 0 0 5242880 5242880 6291456 0.075 0 0 0.2 1.07499999999519
+1572864 0 0 0 0 5242880 5242880 6815744 0.075 0 0 0.3 1.07500000000118
+1572864 0 0 0 0 5242880 5242880 7340032 0.075 0 0 0.4 1.07499999999987
+1572864 0 0 0 0 5242880 5242880 7864320 0.075 0 0 0.5 1.075
+1572864 0 0 0 0 5242880 5242880 8388608 0.075 0 0 0.6 1.075
+1572864 0 0 0 0 5242880 5242880 8912896 0.075 0 0 0.7 1.075
+1572864 0 0 0 0 5242880 5242880 9437184 0.075 0 0 0.8 1.075
+1572864 0 0 0 0 5242880 5242880 9961472 0.075 0 0 0.9 1.075
+1572864 0 0 0 0 5242880 5242880 10485760 0.075 0 0 1 1.075
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 1.075
+1572864 0 1 0 0 5242880 5242880 2883584 0.075 0 0 -0.45 1.07499999999986
+1572864 0 1 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 1.07499999999987
+1572864 0 1 0 0 5242880 5242880 3407872 0.075 0 0 -0.35 1.07500000000089
+1572864 0 1 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 1.07500000000118
+1572864 0 1 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 1.0749999999889
+1572864 0 1 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 1.07499999999519
+1572864 0 1 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 1.07499999999316
+1572864 0 1 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 1.07500000014499
+1572864 0 1 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 1.0750000000544
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 1 0 0 5242880 5242880 5505024 0.075 0 0 0.05 1.0750000000544
+1572864 0 1 0 0 5242880 5242880 5767168 0.075 0 0 0.1 1.07500000014499
+1572864 0 1 0 0 5242880 5242880 6029312 0.075 0 0 0.15 1.07499999999316
+1572864 0 1 0 0 5242880 5242880 6291456 0.075 0 0 0.2 1.07499999999519
+1572864 0 1 0 0 5242880 5242880 6553600 0.075 0 0 0.25 1.0749999999889
+1572864 0 1 0 0 5242880 5242880 6815744 0.075 0 0 0.3 1.07500000000118
+1572864 0 1 0 0 5242880 5242880 7077888 0.075 0 0 0.35 1.07500000000089
+1572864 0 1 0 0 5242880 5242880 7340032 0.075 0 0 0.4 1.07499999999987
+1572864 0 1 0 0 5242880 5242880 7602176 0.075 0 0 0.45 1.07499999999986
+1572864 0 1 0 0 5242880 5242880 7864320 0.075 0 0 0.5 1.075
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 1.0749999999889
+1572864 0 2 0 0 5242880 5242880 4063232 0.075 0 0 -0.225 1.07499999999141
+1572864 0 2 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 1.07499999999519
+1572864 0 2 0 0 5242880 5242880 4325376 0.075 0 0 -0.175 1.07499999998508
+1572864 0 2 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 1.07499999999316
+1572864 0 2 0 0 5242880 5242880 4587520 0.075 0 0 -0.125 1.0750000000746
+1572864 0 2 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 1.07500000014499
+1572864 0 2 0 0 5242880 5242880 4849664 0.075 0 0 -0.075 1.07500000003426
+1572864 0 2 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 1.0750000000544
+1572864 0 2 0 0 5242880 5242880 5111808 0.075 0 0 -0.025 1.07500000001642
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.07500000002188
+1572864 0 2 0 0 5242880 5242880 5373952 0.075 0 0 0.025 1.07500000001642
+1572864 0 2 0 0 5242880 5242880 5505024 0.075 0 0 0.05 1.0750000000544
+1572864 0 2 0 0 5242880 5242880 5636096 0.075 0 0 0.075 1.07500000003426
+1572864 0 2 0 0 5242880 5242880 5767168 0.075 0 0 0.1 1.07500000014499
+1572864 0 2 0 0 5242880 5242880 5898240 0.075 0 0 0.125 1.0750000000746
+1572864 0 2 0 0 5242880 5242880 6029312 0.075 0 0 0.15 1.07499999999316
+1572864 0 2 0 0 5242880 5242880 6160384 0.075 0 0 0.175 1.07499999998508
+1572864 0 2 0 0 5242880 5242880 6291456 0.075 0 0 0.2 1.07499999999519
+1572864 0 2 0 0 5242880 5242880 6422528 0.075 0 0 0.225 1.07499999999141
+1572864 0 2 0 0 5242880 5242880 6553600 0.075 0 0 0.25 1.0749999999889
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 3932160 0.08125 0 0 -0.25 1.08124999998915
+1703936 0 2 0 0 5242880 5242880 4063232 0.08125 0 0 -0.225 1.08124999999272
+1703936 0 2 0 0 5242880 5242880 4194304 0.08125 0 0 -0.2 1.08124999999712
+1703936 0 2 0 0 5242880 5242880 4325376 0.08125 0 0 -0.175 1.08124999998455
+1703936 0 2 0 0 5242880 5242880 4456448 0.08125 0 0 -0.15 1.08124999999139
+1703936 0 2 0 0 5242880 5242880 4587520 0.08125 0 0 -0.125 1.08125000007798
+1703936 0 2 0 0 5242880 5242880 4718592 0.08125 0 0 -0.1 1.08125000015544
+1703936 0 2 0 0 5242880 5242880 4849664 0.08125 0 0 -0.075 1.08125000004629
+1703936 0 2 0 0 5242880 5242880 4980736 0.08125 0 0 -0.05 1.08125000007153
+1703936 0 2 0 0 5242880 5242880 5111808 0.08125 0 0 -0.025 1.08125000002489
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.08125000003301
+1703936 0 2 0 0 5242880 5242880 5373952 0.08125 0 0 0.025 1.08125000002489
+1703936 0 2 0 0 5242880 5242880 5505024 0.08125 0 0 0.05 1.08125000007153
+1703936 0 2 0 0 5242880 5242880 5636096 0.08125 0 0 0.075 1.08125000004629
+1703936 0 2 0 0 5242880 5242880 5767168 0.08125 0 0 0.1 1.08125000015544
+1703936 0 2 0 0 5242880 5242880 5898240 0.08125 0 0 0.125 1.08125000007798
+1703936 0 2 0 0 5242880 5242880 6029312 0.08125 0 0 0.15 1.08124999999139
+1703936 0 2 0 0 5242880 5242880 6160384 0.08125 0 0 0.175 1.08124999998455
+1703936 0 2 0 0 5242880 5242880 6291456 0.08125 0 0 0.2 1.08124999999712
+1703936 0 2 0 0 5242880 5242880 6422528 0.08125 0 0 0.225 1.08124999999272
+1703936 0 2 0 0 5242880 5242880 6553600 0.08125 0 0 0.25 1.08124999998915
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 2621440 0.0875 0 0 -0.5 1.08750000000001
+1835008 0 1 0 0 5242880 5242880 2883584 0.0875 0 0 -0.45 1.08749999999976
+1835008 0 1 0 0 5242880 5242880 3145728 0.0875 0 0 -0.4 1.08749999999977
+1835008 0 1 0 0 5242880 5242880 3407872 0.0875 0 0 -0.35 1.08750000000108
+1835008 0 1 0 0 5242880 5242880 3670016 0.0875 0 0 -0.3 1.08750000000186
+1835008 0 1 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 1.0874999999892
+1835008 0 1 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 1.08749999999972
+1835008 0 1 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 1.08749999998951
+1835008 0 1 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 1.08750000016605
+1835008 0 1 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 1.08750000009175
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+1835008 0 1 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 1.08750000009175
+1835008 0 1 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 1.08750000016605
+1835008 0 1 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 1.08749999998951
+1835008 0 1 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 1.08749999999972
+1835008 0 1 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 1.0874999999892
+1835008 0 1 0 0 5242880 5242880 6815744 0.0875 0 0 0.3 1.08750000000186
+1835008 0 1 0 0 5242880 5242880 7077888 0.0875 0 0 0.35 1.08750000000108
+1835008 0 1 0 0 5242880 5242880 7340032 0.0875 0 0 0.4 1.08749999999977
+1835008 0 1 0 0 5242880 5242880 7602176 0.0875 0 0 0.45 1.08749999999976
+1835008 0 1 0 0 5242880 5242880 7864320 0.0875 0 0 0.5 1.08750000000001
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 1.0874999999892
+1835008 0 2 0 0 5242880 5242880 4063232 0.0875 0 0 -0.225 1.08749999999431
+1835008 0 2 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 1.08749999999972
+1835008 0 2 0 0 5242880 5242880 4325376 0.0875 0 0 -0.175 1.08749999998424
+1835008 0 2 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 1.08749999998951
+1835008 0 2 0 0 5242880 5242880 4587520 0.0875 0 0 -0.125 1.08750000008179
+1835008 0 2 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 1.08750000016605
+1835008 0 2 0 0 5242880 5242880 4849664 0.0875 0 0 -0.075 1.08750000006059
+1835008 0 2 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 1.08750000009175
+1835008 0 2 0 0 5242880 5242880 5111808 0.0875 0 0 -0.025 1.08750000003613
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.08750000004775
+1835008 0 2 0 0 5242880 5242880 5373952 0.0875 0 0 0.025 1.08750000003613
+1835008 0 2 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 1.08750000009175
+1835008 0 2 0 0 5242880 5242880 5636096 0.0875 0 0 0.075 1.08750000006059
+1835008 0 2 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 1.08750000016605
+1835008 0 2 0 0 5242880 5242880 5898240 0.0875 0 0 0.125 1.08750000008179
+1835008 0 2 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 1.08749999998951
+1835008 0 2 0 0 5242880 5242880 6160384 0.0875 0 0 0.175 1.08749999998424
+1835008 0 2 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 1.08749999999972
+1835008 0 2 0 0 5242880 5242880 6422528 0.0875 0 0 0.225 1.08749999999431
+1835008 0 2 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 1.0874999999892
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 3932160 0.09375 0 0 -0.25 1.0937499999896
+1966080 0 2 0 0 5242880 5242880 4063232 0.09375 0 0 -0.225 1.09374999999655
+1966080 0 2 0 0 5242880 5242880 4194304 0.09375 0 0 -0.2 1.09375000000317
+1966080 0 2 0 0 5242880 5242880 4325376 0.09375 0 0 -0.175 1.09374999998465
+1966080 0 2 0 0 5242880 5242880 4456448 0.09375 0 0 -0.15 1.0937499999879
+1966080 0 2 0 0 5242880 5242880 4587520 0.09375 0 0 -0.125 1.09375000008476
+1966080 0 2 0 0 5242880 5242880 4718592 0.09375 0 0 -0.1 1.09375000017699
+1966080 0 2 0 0 5242880 5242880 4849664 0.09375 0 0 -0.075 1.09375000007712
+1966080 0 2 0 0 5242880 5242880 4980736 0.09375 0 0 -0.05 1.09375000011513
+1966080 0 2 0 0 5242880 5242880 5111808 0.09375 0 0 -0.025 1.09375000005053
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.09375000006661
+1966080 0 2 0 0 5242880 5242880 5373952 0.09375 0 0 0.025 1.09375000005053
+1966080 0 2 0 0 5242880 5242880 5505024 0.09375 0 0 0.05 1.09375000011513
+1966080 0 2 0 0 5242880 5242880 5636096 0.09375 0 0 0.075 1.09375000007712
+1966080 0 2 0 0 5242880 5242880 5767168 0.09375 0 0 0.1 1.09375000017699
+1966080 0 2 0 0 5242880 5242880 5898240 0.09375 0 0 0.125 1.09375000008476
+1966080 0 2 0 0 5242880 5242880 6029312 0.09375 0 0 0.15 1.0937499999879
+1966080 0 2 0 0 5242880 5242880 6160384 0.09375 0 0 0.175 1.09374999998465
+1966080 0 2 0 0 5242880 5242880 6291456 0.09375 0 0 0.2 1.09375000000317
+1966080 0 2 0 0 5242880 5242880 6422528 0.09375 0 0 0.225 1.09374999999655
+1966080 0 2 0 0 5242880 5242880 6553600 0.09375 0 0 0.25 1.0937499999896
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 0 0.1 0 0 -1 1.1
+2097152 0 0 0 0 5242880 5242880 524288 0.1 0 0 -0.9 1.1
+2097152 0 0 0 0 5242880 5242880 1048576 0.1 0 0 -0.8 1.1
+2097152 0 0 0 0 5242880 5242880 1572864 0.1 0 0 -0.7 1.1
+2097152 0 0 0 0 5242880 5242880 2097152 0.1 0 0 -0.6 1.1
+2097152 0 0 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 1.10000000000003
+2097152 0 0 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 1.09999999999964
+2097152 0 0 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 1.10000000000268
+2097152 0 0 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 1.10000000000743
+2097152 0 0 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 1.10000000018839
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 0 0 0 5242880 5242880 5767168 0.1 0 0 0.1 1.10000000018839
+2097152 0 0 0 0 5242880 5242880 6291456 0.1 0 0 0.2 1.10000000000743
+2097152 0 0 0 0 5242880 5242880 6815744 0.1 0 0 0.3 1.10000000000268
+2097152 0 0 0 0 5242880 5242880 7340032 0.1 0 0 0.4 1.09999999999964
+2097152 0 0 0 0 5242880 5242880 7864320 0.1 0 0 0.5 1.10000000000003
+2097152 0 0 0 0 5242880 5242880 8388608 0.1 0 0 0.6 1.1
+2097152 0 0 0 0 5242880 5242880 8912896 0.1 0 0 0.7 1.1
+2097152 0 0 0 0 5242880 5242880 9437184 0.1 0 0 0.8 1.1
+2097152 0 0 0 0 5242880 5242880 9961472 0.1 0 0 0.9 1.1
+2097152 0 0 0 0 5242880 5242880 10485760 0.1 0 0 1 1.1
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 1.10000000000003
+2097152 0 1 0 0 5242880 5242880 2883584 0.1 0 0 -0.45 1.09999999999964
+2097152 0 1 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 1.09999999999964
+2097152 0 1 0 0 5242880 5242880 3407872 0.1 0 0 -0.35 1.10000000000084
+2097152 0 1 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 1.10000000000268
+2097152 0 1 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 1.09999999999394
+2097152 0 1 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 1.10000000000743
+2097152 0 1 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 1.09999999998642
+2097152 0 1 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 1.10000000018839
+2097152 0 1 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 1.10000000014165
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 1 0 0 5242880 5242880 5505024 0.1 0 0 0.05 1.10000000014165
+2097152 0 1 0 0 5242880 5242880 5767168 0.1 0 0 0.1 1.10000000018839
+2097152 0 1 0 0 5242880 5242880 6029312 0.1 0 0 0.15 1.09999999998642
+2097152 0 1 0 0 5242880 5242880 6291456 0.1 0 0 0.2 1.10000000000743
+2097152 0 1 0 0 5242880 5242880 6553600 0.1 0 0 0.25 1.09999999999394
+2097152 0 1 0 0 5242880 5242880 6815744 0.1 0 0 0.3 1.10000000000268
+2097152 0 1 0 0 5242880 5242880 7077888 0.1 0 0 0.35 1.10000000000084
+2097152 0 1 0 0 5242880 5242880 7340032 0.1 0 0 0.4 1.09999999999964
+2097152 0 1 0 0 5242880 5242880 7602176 0.1 0 0 0.45 1.09999999999964
+2097152 0 1 0 0 5242880 5242880 7864320 0.1 0 0 0.5 1.10000000000003
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 1.09999999999394
+2097152 0 2 0 0 5242880 5242880 4063232 0.1 0 0 -0.225 1.10000000000145
+2097152 0 2 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 1.10000000000743
+2097152 0 2 0 0 5242880 5242880 4325376 0.1 0 0 -0.175 1.09999999998514
+2097152 0 2 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 1.09999999998642
+2097152 0 2 0 0 5242880 5242880 4587520 0.1 0 0 -0.125 1.10000000008901
+2097152 0 2 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 1.10000000018839
+2097152 0 2 0 0 5242880 5242880 4849664 0.1 0 0 -0.075 1.10000000009574
+2097152 0 2 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 1.10000000014165
+2097152 0 2 0 0 5242880 5242880 5111808 0.1 0 0 -0.025 1.1000000000684
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.10000000009002
+2097152 0 2 0 0 5242880 5242880 5373952 0.1 0 0 0.025 1.1000000000684
+2097152 0 2 0 0 5242880 5242880 5505024 0.1 0 0 0.05 1.10000000014165
+2097152 0 2 0 0 5242880 5242880 5636096 0.1 0 0 0.075 1.10000000009574
+2097152 0 2 0 0 5242880 5242880 5767168 0.1 0 0 0.1 1.10000000018839
+2097152 0 2 0 0 5242880 5242880 5898240 0.1 0 0 0.125 1.10000000008901
+2097152 0 2 0 0 5242880 5242880 6029312 0.1 0 0 0.15 1.09999999998642
+2097152 0 2 0 0 5242880 5242880 6160384 0.1 0 0 0.175 1.09999999998514
+2097152 0 2 0 0 5242880 5242880 6291456 0.1 0 0 0.2 1.10000000000743
+2097152 0 2 0 0 5242880 5242880 6422528 0.1 0 0 0.225 1.10000000000145
+2097152 0 2 0 0 5242880 5242880 6553600 0.1 0 0 0.25 1.09999999999394
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit..asc b/Carpet/CarpetInterp/test/waveinterp/phit..asc
new file mode 100644
index 000000000..e23cc92df
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit..asc
@@ -0,0 +1,157 @@
+# WAVEMOL::phit (phit)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.00000000000068
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.00000000002479
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.00000000014416
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.00000000046233
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.00000000107976
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.00000000205505
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.0000000033708
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.average.asc b/Carpet/CarpetInterp/test/waveinterp/phit.average.asc
new file mode 100644
index 000000000..58c4aeb0f
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.average.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 1
+131072 0.00625 1
+262144 0.0125 1.00000000000514
+393216 0.01875 1.00000000000509
+524288 0.025 1.00000000000256
+655360 0.03125 1.00000000000228
+786432 0.0375 1.00000000000246
+917504 0.04375 1.00000000000268
+1048576 0.05 1.00000000000377
+1179648 0.05625 1.00000000000409
+1310720 0.0625 1.00000000000391
+1441792 0.06875 1.00000000000408
+1572864 0.075 1.0000000000052
+1703936 0.08125 1.00000000000555
+1835008 0.0875 1.00000000000547
+1966080 0.09375 1.00000000000555
+2097152 0.1 1.00000000000645
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.count.asc b/Carpet/CarpetInterp/test/waveinterp/phit.count.asc
new file mode 100644
index 000000000..4276ce759
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.count.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 8000
+131072 0.00625 8000
+262144 0.0125 8000
+393216 0.01875 8000
+524288 0.025 8000
+655360 0.03125 8000
+786432 0.0375 8000
+917504 0.04375 8000
+1048576 0.05 8000
+1179648 0.05625 8000
+1310720 0.0625 8000
+1441792 0.06875 8000
+1572864 0.075 8000
+1703936 0.08125 8000
+1835008 0.0875 8000
+1966080 0.09375 8000
+2097152 0.1 8000
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.maximum.asc b/Carpet/CarpetInterp/test/waveinterp/phit.maximum.asc
new file mode 100644
index 000000000..358cedfb3
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.maximum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 1
+131072 0.00625 1
+262144 0.0125 1.00000000827039
+393216 0.01875 1.00000000787054
+524288 0.025 1.00000000721878
+655360 0.03125 1.0000000063627
+786432 0.0375 1.00000000530544
+917504 0.04375 1.00000000415662
+1048576 0.05 1.00000000341211
+1179648 0.05625 1.00000000326784
+1310720 0.0625 1.00000000343891
+1441792 0.06875 1.00000000394363
+1572864 0.075 1.00000000436563
+1703936 0.08125 1.00000000467698
+1835008 0.0875 1.00000000485431
+1966080 0.09375 1.00000000488022
+2097152 0.1 1.00000000474456
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.minimum.asc b/Carpet/CarpetInterp/test/waveinterp/phit.minimum.asc
new file mode 100644
index 000000000..3505e7e1f
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.minimum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 1
+131072 0.00625 1
+262144 0.0125 0.999999999483101
+393216 0.01875 0.999999999397942
+524288 0.025 0.999999999427617
+655360 0.03125 0.999999999345371
+786432 0.0375 0.999999999399089
+917504 0.04375 0.999999999449241
+1048576 0.05 0.999999999634946
+1179648 0.05625 0.999999999655201
+1310720 0.0625 0.999999999680185
+1441792 0.06875 0.999999999418723
+1572864 0.075 0.999999998455141
+1703936 0.08125 0.999999997683483
+1835008 0.0875 0.999999997080893
+1966080 0.09375 0.999999996689522
+2097152 0.1 0.999999996482608
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.norm1.asc b/Carpet/CarpetInterp/test/waveinterp/phit.norm1.asc
new file mode 100644
index 000000000..58c4aeb0f
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.norm1.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 1
+131072 0.00625 1
+262144 0.0125 1.00000000000514
+393216 0.01875 1.00000000000509
+524288 0.025 1.00000000000256
+655360 0.03125 1.00000000000228
+786432 0.0375 1.00000000000246
+917504 0.04375 1.00000000000268
+1048576 0.05 1.00000000000377
+1179648 0.05625 1.00000000000409
+1310720 0.0625 1.00000000000391
+1441792 0.06875 1.00000000000408
+1572864 0.075 1.0000000000052
+1703936 0.08125 1.00000000000555
+1835008 0.0875 1.00000000000547
+1966080 0.09375 1.00000000000555
+2097152 0.1 1.00000000000645
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.norm2.asc b/Carpet/CarpetInterp/test/waveinterp/phit.norm2.asc
new file mode 100644
index 000000000..7a3b878bb
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.norm2.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 1
+131072 0.00625 1
+262144 0.0125 1.00000000000514
+393216 0.01875 1.00000000000509
+524288 0.025 1.00000000000256
+655360 0.03125 1.00000000000226
+786432 0.0375 1.00000000000246
+917504 0.04375 1.00000000000266
+1048576 0.05 1.00000000000374
+1179648 0.05625 1.00000000000407
+1310720 0.0625 1.00000000000396
+1441792 0.06875 1.00000000000405
+1572864 0.075 1.00000000000518
+1703936 0.08125 1.00000000000551
+1835008 0.0875 1.00000000000547
+1966080 0.09375 1.00000000000555
+2097152 0.1 1.00000000000646
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.norm_inf.asc b/Carpet/CarpetInterp/test/waveinterp/phit.norm_inf.asc
new file mode 100644
index 000000000..358cedfb3
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.norm_inf.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 1
+131072 0.00625 1
+262144 0.0125 1.00000000827039
+393216 0.01875 1.00000000787054
+524288 0.025 1.00000000721878
+655360 0.03125 1.0000000063627
+786432 0.0375 1.00000000530544
+917504 0.04375 1.00000000415662
+1048576 0.05 1.00000000341211
+1179648 0.05625 1.00000000326784
+1310720 0.0625 1.00000000343891
+1441792 0.06875 1.00000000394363
+1572864 0.075 1.00000000436563
+1703936 0.08125 1.00000000467698
+1835008 0.0875 1.00000000485431
+1966080 0.09375 1.00000000488022
+2097152 0.1 1.00000000474456
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.sum.asc b/Carpet/CarpetInterp/test/waveinterp/phit.sum.asc
new file mode 100644
index 000000000..f08ab6500
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.sum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phit (phit)
+# iteration time data
+0 0 8000
+131072 0.00625 8000
+262144 0.0125 8000.00000004109
+393216 0.01875 8000.0000000407
+524288 0.025 8000.00000002048
+655360 0.03125 8000.00000001825
+786432 0.0375 8000.0000000197
+917504 0.04375 8000.0000000214
+1048576 0.05 8000.00000003019
+1179648 0.05625 8000.00000003271
+1310720 0.0625 8000.00000003126
+1441792 0.06875 8000.00000003261
+1572864 0.075 8000.00000004164
+1703936 0.08125 8000.00000004442
+1835008 0.0875 8000.00000004379
+1966080 0.09375 8000.00000004438
+2097152 0.1 8000.0000000516
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.x.asc b/Carpet/CarpetInterp/test/waveinterp/phit.x.asc
new file mode 100644
index 000000000..8d73a3c09
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.x.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phit x (phit)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 0 5242880 5242880 0 -1 0 0 1
+0 0 0 0 0 524288 5242880 5242880 0 -0.9 0 0 1
+0 0 0 0 0 1048576 5242880 5242880 0 -0.8 0 0 1
+0 0 0 0 0 1572864 5242880 5242880 0 -0.7 0 0 1
+0 0 0 0 0 2097152 5242880 5242880 0 -0.6 0 0 1
+0 0 0 0 0 2621440 5242880 5242880 0 -0.5 0 0 1
+0 0 0 0 0 3145728 5242880 5242880 0 -0.4 0 0 1
+0 0 0 0 0 3670016 5242880 5242880 0 -0.3 0 0 1
+0 0 0 0 0 4194304 5242880 5242880 0 -0.2 0 0 1
+0 0 0 0 0 4718592 5242880 5242880 0 -0.1 0 0 1
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 0 0 0 5767168 5242880 5242880 0 0.1 0 0 1
+0 0 0 0 0 6291456 5242880 5242880 0 0.2 0 0 1
+0 0 0 0 0 6815744 5242880 5242880 0 0.3 0 0 1
+0 0 0 0 0 7340032 5242880 5242880 0 0.4 0 0 1
+0 0 0 0 0 7864320 5242880 5242880 0 0.5 0 0 1
+0 0 0 0 0 8388608 5242880 5242880 0 0.6 0 0 1
+0 0 0 0 0 8912896 5242880 5242880 0 0.7 0 0 1
+0 0 0 0 0 9437184 5242880 5242880 0 0.8 0 0 1
+0 0 0 0 0 9961472 5242880 5242880 0 0.9 0 0 1
+0 0 0 0 0 10485760 5242880 5242880 0 1 0 0 1
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 2621440 5242880 5242880 0 -0.5 0 0 1
+0 0 1 0 0 2883584 5242880 5242880 0 -0.45 0 0 1
+0 0 1 0 0 3145728 5242880 5242880 0 -0.4 0 0 1
+0 0 1 0 0 3407872 5242880 5242880 0 -0.35 0 0 1
+0 0 1 0 0 3670016 5242880 5242880 0 -0.3 0 0 1
+0 0 1 0 0 3932160 5242880 5242880 0 -0.25 0 0 1
+0 0 1 0 0 4194304 5242880 5242880 0 -0.2 0 0 1
+0 0 1 0 0 4456448 5242880 5242880 0 -0.15 0 0 1
+0 0 1 0 0 4718592 5242880 5242880 0 -0.1 0 0 1
+0 0 1 0 0 4980736 5242880 5242880 0 -0.05 0 0 1
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 1 0 0 5505024 5242880 5242880 0 0.05 0 0 1
+0 0 1 0 0 5767168 5242880 5242880 0 0.1 0 0 1
+0 0 1 0 0 6029312 5242880 5242880 0 0.15 0 0 1
+0 0 1 0 0 6291456 5242880 5242880 0 0.2 0 0 1
+0 0 1 0 0 6553600 5242880 5242880 0 0.25 0 0 1
+0 0 1 0 0 6815744 5242880 5242880 0 0.3 0 0 1
+0 0 1 0 0 7077888 5242880 5242880 0 0.35 0 0 1
+0 0 1 0 0 7340032 5242880 5242880 0 0.4 0 0 1
+0 0 1 0 0 7602176 5242880 5242880 0 0.45 0 0 1
+0 0 1 0 0 7864320 5242880 5242880 0 0.5 0 0 1
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 3932160 5242880 5242880 0 -0.25 0 0 1
+0 0 2 0 0 4063232 5242880 5242880 0 -0.225 0 0 1
+0 0 2 0 0 4194304 5242880 5242880 0 -0.2 0 0 1
+0 0 2 0 0 4325376 5242880 5242880 0 -0.175 0 0 1
+0 0 2 0 0 4456448 5242880 5242880 0 -0.15 0 0 1
+0 0 2 0 0 4587520 5242880 5242880 0 -0.125 0 0 1
+0 0 2 0 0 4718592 5242880 5242880 0 -0.1 0 0 1
+0 0 2 0 0 4849664 5242880 5242880 0 -0.075 0 0 1
+0 0 2 0 0 4980736 5242880 5242880 0 -0.05 0 0 1
+0 0 2 0 0 5111808 5242880 5242880 0 -0.025 0 0 1
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 2 0 0 5373952 5242880 5242880 0 0.025 0 0 1
+0 0 2 0 0 5505024 5242880 5242880 0 0.05 0 0 1
+0 0 2 0 0 5636096 5242880 5242880 0 0.075 0 0 1
+0 0 2 0 0 5767168 5242880 5242880 0 0.1 0 0 1
+0 0 2 0 0 5898240 5242880 5242880 0 0.125 0 0 1
+0 0 2 0 0 6029312 5242880 5242880 0 0.15 0 0 1
+0 0 2 0 0 6160384 5242880 5242880 0 0.175 0 0 1
+0 0 2 0 0 6291456 5242880 5242880 0 0.2 0 0 1
+0 0 2 0 0 6422528 5242880 5242880 0 0.225 0 0 1
+0 0 2 0 0 6553600 5242880 5242880 0 0.25 0 0 1
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 3932160 5242880 5242880 0.00625 -0.25 0 0 1
+131072 0 2 0 0 4063232 5242880 5242880 0.00625 -0.225 0 0 1
+131072 0 2 0 0 4194304 5242880 5242880 0.00625 -0.2 0 0 1
+131072 0 2 0 0 4325376 5242880 5242880 0.00625 -0.175 0 0 1
+131072 0 2 0 0 4456448 5242880 5242880 0.00625 -0.15 0 0 1
+131072 0 2 0 0 4587520 5242880 5242880 0.00625 -0.125 0 0 1
+131072 0 2 0 0 4718592 5242880 5242880 0.00625 -0.1 0 0 1
+131072 0 2 0 0 4849664 5242880 5242880 0.00625 -0.075 0 0 1
+131072 0 2 0 0 4980736 5242880 5242880 0.00625 -0.05 0 0 1
+131072 0 2 0 0 5111808 5242880 5242880 0.00625 -0.025 0 0 1
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1
+131072 0 2 0 0 5373952 5242880 5242880 0.00625 0.025 0 0 1
+131072 0 2 0 0 5505024 5242880 5242880 0.00625 0.05 0 0 1
+131072 0 2 0 0 5636096 5242880 5242880 0.00625 0.075 0 0 1
+131072 0 2 0 0 5767168 5242880 5242880 0.00625 0.1 0 0 1
+131072 0 2 0 0 5898240 5242880 5242880 0.00625 0.125 0 0 1
+131072 0 2 0 0 6029312 5242880 5242880 0.00625 0.15 0 0 1
+131072 0 2 0 0 6160384 5242880 5242880 0.00625 0.175 0 0 1
+131072 0 2 0 0 6291456 5242880 5242880 0.00625 0.2 0 0 1
+131072 0 2 0 0 6422528 5242880 5242880 0.00625 0.225 0 0 1
+131072 0 2 0 0 6553600 5242880 5242880 0.00625 0.25 0 0 1
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 2621440 5242880 5242880 0.0125 -0.5 0 0 1
+262144 0 1 0 0 2883584 5242880 5242880 0.0125 -0.45 0 0 1
+262144 0 1 0 0 3145728 5242880 5242880 0.0125 -0.4 0 0 1
+262144 0 1 0 0 3407872 5242880 5242880 0.0125 -0.35 0 0 1
+262144 0 1 0 0 3670016 5242880 5242880 0.0125 -0.3 0 0 1
+262144 0 1 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 1
+262144 0 1 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 1
+262144 0 1 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 1
+262144 0 1 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 1.00000000277135
+262144 0 1 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 1.00000000000728
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+262144 0 1 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 1.00000000000728
+262144 0 1 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 1.00000000277135
+262144 0 1 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 1
+262144 0 1 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 1
+262144 0 1 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 1
+262144 0 1 0 0 6815744 5242880 5242880 0.0125 0.3 0 0 1
+262144 0 1 0 0 7077888 5242880 5242880 0.0125 0.35 0 0 1
+262144 0 1 0 0 7340032 5242880 5242880 0.0125 0.4 0 0 1
+262144 0 1 0 0 7602176 5242880 5242880 0.0125 0.45 0 0 1
+262144 0 1 0 0 7864320 5242880 5242880 0.0125 0.5 0 0 1
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 1
+262144 0 2 0 0 4063232 5242880 5242880 0.0125 -0.225 0 0 1
+262144 0 2 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 1
+262144 0 2 0 0 4325376 5242880 5242880 0.0125 -0.175 0 0 0.999999999826791
+262144 0 2 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 1
+262144 0 2 0 0 4587520 5242880 5242880 0.0125 -0.125 0 0 1.00000000155843
+262144 0 2 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 1.00000000277135
+262144 0 2 0 0 4849664 5242880 5242880 0.0125 -0.075 0 0 0.999999999998383
+262144 0 2 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 1.00000000000728
+262144 0 2 0 0 5111808 5242880 5242880 0.0125 -0.025 0 0 1
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+262144 0 2 0 0 5373952 5242880 5242880 0.0125 0.025 0 0 1
+262144 0 2 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 1.00000000000728
+262144 0 2 0 0 5636096 5242880 5242880 0.0125 0.075 0 0 0.999999999998383
+262144 0 2 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 1.00000000277135
+262144 0 2 0 0 5898240 5242880 5242880 0.0125 0.125 0 0 1.00000000155843
+262144 0 2 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 1
+262144 0 2 0 0 6160384 5242880 5242880 0.0125 0.175 0 0 0.999999999826791
+262144 0 2 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 1
+262144 0 2 0 0 6422528 5242880 5242880 0.0125 0.225 0 0 1
+262144 0 2 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 1
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 3932160 5242880 5242880 0.01875 -0.25 0 0 1
+393216 0 2 0 0 4063232 5242880 5242880 0.01875 -0.225 0 0 0.999999999945108
+393216 0 2 0 0 4194304 5242880 5242880 0.01875 -0.2 0 0 0.999999999902543
+393216 0 2 0 0 4325376 5242880 5242880 0.01875 -0.175 0 0 0.99999999974986
+393216 0 2 0 0 4456448 5242880 5242880 0.01875 -0.15 0 0 1.00000000000116
+393216 0 2 0 0 4587520 5242880 5242880 0.01875 -0.125 0 0 1.00000000176809
+393216 0 2 0 0 4718592 5242880 5242880 0.01875 -0.1 0 0 1.00000000270433
+393216 0 2 0 0 4849664 5242880 5242880 0.01875 -0.075 0 0 1.00000000000657
+393216 0 2 0 0 4980736 5242880 5242880 0.01875 -0.05 0 0 1.00000000005092
+393216 0 2 0 0 5111808 5242880 5242880 0.01875 -0.025 0 0 1.00000000000043
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.00000000000068
+393216 0 2 0 0 5373952 5242880 5242880 0.01875 0.025 0 0 1.00000000000043
+393216 0 2 0 0 5505024 5242880 5242880 0.01875 0.05 0 0 1.00000000005092
+393216 0 2 0 0 5636096 5242880 5242880 0.01875 0.075 0 0 1.00000000000657
+393216 0 2 0 0 5767168 5242880 5242880 0.01875 0.1 0 0 1.00000000270433
+393216 0 2 0 0 5898240 5242880 5242880 0.01875 0.125 0 0 1.00000000176809
+393216 0 2 0 0 6029312 5242880 5242880 0.01875 0.15 0 0 1.00000000000116
+393216 0 2 0 0 6160384 5242880 5242880 0.01875 0.175 0 0 0.99999999974986
+393216 0 2 0 0 6291456 5242880 5242880 0.01875 0.2 0 0 0.999999999902543
+393216 0 2 0 0 6422528 5242880 5242880 0.01875 0.225 0 0 0.999999999945108
+393216 0 2 0 0 6553600 5242880 5242880 0.01875 0.25 0 0 1
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 0 5242880 5242880 0.025 -1 0 0 1
+524288 0 0 0 0 524288 5242880 5242880 0.025 -0.9 0 0 1
+524288 0 0 0 0 1048576 5242880 5242880 0.025 -0.8 0 0 1
+524288 0 0 0 0 1572864 5242880 5242880 0.025 -0.7 0 0 1
+524288 0 0 0 0 2097152 5242880 5242880 0.025 -0.6 0 0 1
+524288 0 0 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 1
+524288 0 0 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 1
+524288 0 0 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 1
+524288 0 0 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0.999999999740114
+524288 0 0 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 1.00000000258949
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 0 0 0 5767168 5242880 5242880 0.025 0.1 0 0 1.00000000258949
+524288 0 0 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0.999999999740114
+524288 0 0 0 0 6815744 5242880 5242880 0.025 0.3 0 0 1
+524288 0 0 0 0 7340032 5242880 5242880 0.025 0.4 0 0 1
+524288 0 0 0 0 7864320 5242880 5242880 0.025 0.5 0 0 1
+524288 0 0 0 0 8388608 5242880 5242880 0.025 0.6 0 0 1
+524288 0 0 0 0 8912896 5242880 5242880 0.025 0.7 0 0 1
+524288 0 0 0 0 9437184 5242880 5242880 0.025 0.8 0 0 1
+524288 0 0 0 0 9961472 5242880 5242880 0.025 0.9 0 0 1
+524288 0 0 0 0 10485760 5242880 5242880 0.025 1 0 0 1
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 1
+524288 0 1 0 0 2883584 5242880 5242880 0.025 -0.45 0 0 1
+524288 0 1 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 1
+524288 0 1 0 0 3407872 5242880 5242880 0.025 -0.35 0 0 1.00000000001624
+524288 0 1 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 1
+524288 0 1 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 0.999999999691971
+524288 0 1 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0.999999999740114
+524288 0 1 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 1.0000000000031
+524288 0 1 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 1.00000000258949
+524288 0 1 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 1.00000000013846
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 1 0 0 5505024 5242880 5242880 0.025 0.05 0 0 1.00000000013846
+524288 0 1 0 0 5767168 5242880 5242880 0.025 0.1 0 0 1.00000000258949
+524288 0 1 0 0 6029312 5242880 5242880 0.025 0.15 0 0 1.0000000000031
+524288 0 1 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0.999999999740114
+524288 0 1 0 0 6553600 5242880 5242880 0.025 0.25 0 0 0.999999999691971
+524288 0 1 0 0 6815744 5242880 5242880 0.025 0.3 0 0 1
+524288 0 1 0 0 7077888 5242880 5242880 0.025 0.35 0 0 1.00000000001624
+524288 0 1 0 0 7340032 5242880 5242880 0.025 0.4 0 0 1
+524288 0 1 0 0 7602176 5242880 5242880 0.025 0.45 0 0 1
+524288 0 1 0 0 7864320 5242880 5242880 0.025 0.5 0 0 1
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 0.999999999691971
+524288 0 2 0 0 4063232 5242880 5242880 0.025 -0.225 0 0 0.999999999680354
+524288 0 2 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0.999999999740114
+524288 0 2 0 0 4325376 5242880 5242880 0.025 -0.175 0 0 0.999999999712965
+524288 0 2 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 1.0000000000031
+524288 0 2 0 0 4587520 5242880 5242880 0.025 -0.125 0 0 1.00000000146592
+524288 0 2 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 1.00000000258949
+524288 0 2 0 0 4849664 5242880 5242880 0.025 -0.075 0 0 1.00000000004511
+524288 0 2 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 1.00000000013846
+524288 0 2 0 0 5111808 5242880 5242880 0.025 -0.025 0 0 1.00000000000435
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 2 0 0 5373952 5242880 5242880 0.025 0.025 0 0 1.00000000000435
+524288 0 2 0 0 5505024 5242880 5242880 0.025 0.05 0 0 1.00000000013846
+524288 0 2 0 0 5636096 5242880 5242880 0.025 0.075 0 0 1.00000000004511
+524288 0 2 0 0 5767168 5242880 5242880 0.025 0.1 0 0 1.00000000258949
+524288 0 2 0 0 5898240 5242880 5242880 0.025 0.125 0 0 1.00000000146592
+524288 0 2 0 0 6029312 5242880 5242880 0.025 0.15 0 0 1.0000000000031
+524288 0 2 0 0 6160384 5242880 5242880 0.025 0.175 0 0 0.999999999712965
+524288 0 2 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0.999999999740114
+524288 0 2 0 0 6422528 5242880 5242880 0.025 0.225 0 0 0.999999999680354
+524288 0 2 0 0 6553600 5242880 5242880 0.025 0.25 0 0 0.999999999691971
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 3932160 5242880 5242880 0.03125 -0.25 0 0 0.999999999640443
+655360 0 2 0 0 4063232 5242880 5242880 0.03125 -0.225 0 0 0.999999999647753
+655360 0 2 0 0 4194304 5242880 5242880 0.03125 -0.2 0 0 0.999999999732034
+655360 0 2 0 0 4325376 5242880 5242880 0.03125 -0.175 0 0 0.999999999702523
+655360 0 2 0 0 4456448 5242880 5242880 0.03125 -0.15 0 0 0.999999999984606
+655360 0 2 0 0 4587520 5242880 5242880 0.03125 -0.125 0 0 1.00000000144041
+655360 0 2 0 0 4718592 5242880 5242880 0.03125 -0.1 0 0 1.00000000246101
+655360 0 2 0 0 4849664 5242880 5242880 0.03125 -0.075 0 0 1.00000000011784
+655360 0 2 0 0 4980736 5242880 5242880 0.03125 -0.05 0 0 1.00000000027064
+655360 0 2 0 0 5111808 5242880 5242880 0.03125 -0.025 0 0 1.00000000001744
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.00000000002479
+655360 0 2 0 0 5373952 5242880 5242880 0.03125 0.025 0 0 1.00000000001744
+655360 0 2 0 0 5505024 5242880 5242880 0.03125 0.05 0 0 1.00000000027064
+655360 0 2 0 0 5636096 5242880 5242880 0.03125 0.075 0 0 1.00000000011784
+655360 0 2 0 0 5767168 5242880 5242880 0.03125 0.1 0 0 1.00000000246101
+655360 0 2 0 0 5898240 5242880 5242880 0.03125 0.125 0 0 1.00000000144041
+655360 0 2 0 0 6029312 5242880 5242880 0.03125 0.15 0 0 0.999999999984606
+655360 0 2 0 0 6160384 5242880 5242880 0.03125 0.175 0 0 0.999999999702523
+655360 0 2 0 0 6291456 5242880 5242880 0.03125 0.2 0 0 0.999999999732034
+655360 0 2 0 0 6422528 5242880 5242880 0.03125 0.225 0 0 0.999999999647753
+655360 0 2 0 0 6553600 5242880 5242880 0.03125 0.25 0 0 0.999999999640443
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 2621440 5242880 5242880 0.0375 -0.5 0 0 1.00000000000001
+786432 0 1 0 0 2883584 5242880 5242880 0.0375 -0.45 0 0 0.999999999998945
+786432 0 1 0 0 3145728 5242880 5242880 0.0375 -0.4 0 0 0.999999999999198
+786432 0 1 0 0 3407872 5242880 5242880 0.0375 -0.35 0 0 1.00000000002395
+786432 0 1 0 0 3670016 5242880 5242880 0.0375 -0.3 0 0 1.00000000000972
+786432 0 1 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 0.99999999965724
+786432 0 1 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 0.999999999805198
+786432 0 1 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 0.999999999952753
+786432 0 1 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 1.00000000230525
+786432 0 1 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 1.00000000044868
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+786432 0 1 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 1.00000000044868
+786432 0 1 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 1.00000000230525
+786432 0 1 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 0.999999999952753
+786432 0 1 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 0.999999999805198
+786432 0 1 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 0.99999999965724
+786432 0 1 0 0 6815744 5242880 5242880 0.0375 0.3 0 0 1.00000000000972
+786432 0 1 0 0 7077888 5242880 5242880 0.0375 0.35 0 0 1.00000000002395
+786432 0 1 0 0 7340032 5242880 5242880 0.0375 0.4 0 0 0.999999999999198
+786432 0 1 0 0 7602176 5242880 5242880 0.0375 0.45 0 0 0.999999999998945
+786432 0 1 0 0 7864320 5242880 5242880 0.0375 0.5 0 0 1.00000000000001
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 0.99999999965724
+786432 0 2 0 0 4063232 5242880 5242880 0.0375 -0.225 0 0 0.999999999699967
+786432 0 2 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 0.999999999805198
+786432 0 2 0 0 4325376 5242880 5242880 0.0375 -0.175 0 0 0.999999999741191
+786432 0 2 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 0.999999999952753
+786432 0 2 0 0 4587520 5242880 5242880 0.0375 -0.125 0 0 1.00000000125426
+786432 0 2 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 1.00000000230525
+786432 0 2 0 0 4849664 5242880 5242880 0.0375 -0.075 0 0 1.00000000022745
+786432 0 2 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 1.00000000044868
+786432 0 2 0 0 5111808 5242880 5242880 0.0375 -0.025 0 0 1.00000000004778
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+786432 0 2 0 0 5373952 5242880 5242880 0.0375 0.025 0 0 1.00000000004778
+786432 0 2 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 1.00000000044868
+786432 0 2 0 0 5636096 5242880 5242880 0.0375 0.075 0 0 1.00000000022745
+786432 0 2 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 1.00000000230525
+786432 0 2 0 0 5898240 5242880 5242880 0.0375 0.125 0 0 1.00000000125426
+786432 0 2 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 0.999999999952753
+786432 0 2 0 0 6160384 5242880 5242880 0.0375 0.175 0 0 0.999999999741191
+786432 0 2 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 0.999999999805198
+786432 0 2 0 0 6422528 5242880 5242880 0.0375 0.225 0 0 0.999999999699967
+786432 0 2 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 0.99999999965724
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 3932160 5242880 5242880 0.04375 -0.25 0 0 0.999999999669696
+917504 0 2 0 0 4063232 5242880 5242880 0.04375 -0.225 0 0 0.999999999735269
+917504 0 2 0 0 4194304 5242880 5242880 0.04375 -0.2 0 0 0.999999999852133
+917504 0 2 0 0 4325376 5242880 5242880 0.04375 -0.175 0 0 0.999999999749234
+917504 0 2 0 0 4456448 5242880 5242880 0.04375 -0.15 0 0 0.999999999915148
+917504 0 2 0 0 4587520 5242880 5242880 0.04375 -0.125 0 0 1.00000000119155
+917504 0 2 0 0 4718592 5242880 5242880 0.04375 -0.1 0 0 1.0000000021537
+917504 0 2 0 0 4849664 5242880 5242880 0.04375 -0.075 0 0 1.00000000037762
+917504 0 2 0 0 4980736 5242880 5242880 0.04375 -0.05 0 0 1.00000000067385
+917504 0 2 0 0 5111808 5242880 5242880 0.04375 -0.025 0 0 1.00000000010524
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.00000000014416
+917504 0 2 0 0 5373952 5242880 5242880 0.04375 0.025 0 0 1.00000000010524
+917504 0 2 0 0 5505024 5242880 5242880 0.04375 0.05 0 0 1.00000000067385
+917504 0 2 0 0 5636096 5242880 5242880 0.04375 0.075 0 0 1.00000000037762
+917504 0 2 0 0 5767168 5242880 5242880 0.04375 0.1 0 0 1.0000000021537
+917504 0 2 0 0 5898240 5242880 5242880 0.04375 0.125 0 0 1.00000000119155
+917504 0 2 0 0 6029312 5242880 5242880 0.04375 0.15 0 0 0.999999999915148
+917504 0 2 0 0 6160384 5242880 5242880 0.04375 0.175 0 0 0.999999999749234
+917504 0 2 0 0 6291456 5242880 5242880 0.04375 0.2 0 0 0.999999999852133
+917504 0 2 0 0 6422528 5242880 5242880 0.04375 0.225 0 0 0.999999999735269
+917504 0 2 0 0 6553600 5242880 5242880 0.04375 0.25 0 0 0.999999999669696
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 0 5242880 5242880 0.05 -1 0 0 1
+1048576 0 0 0 0 524288 5242880 5242880 0.05 -0.9 0 0 1
+1048576 0 0 0 0 1048576 5242880 5242880 0.05 -0.8 0 0 1
+1048576 0 0 0 0 1572864 5242880 5242880 0.05 -0.7 0 0 1
+1048576 0 0 0 0 2097152 5242880 5242880 0.05 -0.6 0 0 1
+1048576 0 0 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 1.00000000000002
+1048576 0 0 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 0.99999999999786
+1048576 0 0 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 1.00000000002592
+1048576 0 0 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0.999999999908662
+1048576 0 0 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 1.00000000200092
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 0 0 0 5767168 5242880 5242880 0.05 0.1 0 0 1.00000000200092
+1048576 0 0 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0.999999999908662
+1048576 0 0 0 0 6815744 5242880 5242880 0.05 0.3 0 0 1.00000000002592
+1048576 0 0 0 0 7340032 5242880 5242880 0.05 0.4 0 0 0.99999999999786
+1048576 0 0 0 0 7864320 5242880 5242880 0.05 0.5 0 0 1.00000000000002
+1048576 0 0 0 0 8388608 5242880 5242880 0.05 0.6 0 0 1
+1048576 0 0 0 0 8912896 5242880 5242880 0.05 0.7 0 0 1
+1048576 0 0 0 0 9437184 5242880 5242880 0.05 0.8 0 0 1
+1048576 0 0 0 0 9961472 5242880 5242880 0.05 0.9 0 0 1
+1048576 0 0 0 0 10485760 5242880 5242880 0.05 1 0 0 1
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 1.00000000000002
+1048576 0 1 0 0 2883584 5242880 5242880 0.05 -0.45 0 0 0.999999999997185
+1048576 0 1 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 0.99999999999786
+1048576 0 1 0 0 3407872 5242880 5242880 0.05 -0.35 0 0 1.00000000001908
+1048576 0 1 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 1.00000000002592
+1048576 0 1 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 0.999999999838278
+1048576 0 1 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0.999999999908662
+1048576 0 1 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 0.999999999869254
+1048576 0 1 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 1.00000000200092
+1048576 0 1 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 1.00000000094713
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 1 0 0 5505024 5242880 5242880 0.05 0.05 0 0 1.00000000094713
+1048576 0 1 0 0 5767168 5242880 5242880 0.05 0.1 0 0 1.00000000200092
+1048576 0 1 0 0 6029312 5242880 5242880 0.05 0.15 0 0 0.999999999869254
+1048576 0 1 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0.999999999908662
+1048576 0 1 0 0 6553600 5242880 5242880 0.05 0.25 0 0 0.999999999838278
+1048576 0 1 0 0 6815744 5242880 5242880 0.05 0.3 0 0 1.00000000002592
+1048576 0 1 0 0 7077888 5242880 5242880 0.05 0.35 0 0 1.00000000001908
+1048576 0 1 0 0 7340032 5242880 5242880 0.05 0.4 0 0 0.99999999999786
+1048576 0 1 0 0 7602176 5242880 5242880 0.05 0.45 0 0 0.999999999997185
+1048576 0 1 0 0 7864320 5242880 5242880 0.05 0.5 0 0 1.00000000000002
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 0.999999999838278
+1048576 0 2 0 0 4063232 5242880 5242880 0.05 -0.225 0 0 0.999999999864206
+1048576 0 2 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0.999999999908662
+1048576 0 2 0 0 4325376 5242880 5242880 0.05 -0.175 0 0 0.999999999760128
+1048576 0 2 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 0.999999999869254
+1048576 0 2 0 0 4587520 5242880 5242880 0.05 -0.125 0 0 1.00000000099849
+1048576 0 2 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 1.00000000200092
+1048576 0 2 0 0 4849664 5242880 5242880 0.05 -0.075 0 0 1.00000000057078
+1048576 0 2 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 1.00000000094713
+1048576 0 2 0 0 5111808 5242880 5242880 0.05 -0.025 0 0 1.00000000020061
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 2 0 0 5373952 5242880 5242880 0.05 0.025 0 0 1.00000000020061
+1048576 0 2 0 0 5505024 5242880 5242880 0.05 0.05 0 0 1.00000000094713
+1048576 0 2 0 0 5636096 5242880 5242880 0.05 0.075 0 0 1.00000000057078
+1048576 0 2 0 0 5767168 5242880 5242880 0.05 0.1 0 0 1.00000000200092
+1048576 0 2 0 0 5898240 5242880 5242880 0.05 0.125 0 0 1.00000000099849
+1048576 0 2 0 0 6029312 5242880 5242880 0.05 0.15 0 0 0.999999999869254
+1048576 0 2 0 0 6160384 5242880 5242880 0.05 0.175 0 0 0.999999999760128
+1048576 0 2 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0.999999999908662
+1048576 0 2 0 0 6422528 5242880 5242880 0.05 0.225 0 0 0.999999999864206
+1048576 0 2 0 0 6553600 5242880 5242880 0.05 0.25 0 0 0.999999999838278
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 3932160 5242880 5242880 0.05625 -0.25 0 0 0.999999999864691
+1179648 0 2 0 0 4063232 5242880 5242880 0.05625 -0.225 0 0 0.999999999920328
+1179648 0 2 0 0 4194304 5242880 5242880 0.05625 -0.2 0 0 0.999999999977901
+1179648 0 2 0 0 4325376 5242880 5242880 0.05625 -0.175 0 0 0.999999999778339
+1179648 0 2 0 0 4456448 5242880 5242880 0.05625 -0.15 0 0 0.999999999825109
+1179648 0 2 0 0 4587520 5242880 5242880 0.05625 -0.125 0 0 1.0000000009088
+1179648 0 2 0 0 4718592 5242880 5242880 0.05625 -0.1 0 0 1.00000000187364
+1179648 0 2 0 0 4849664 5242880 5242880 0.05625 -0.075 0 0 1.00000000080762
+1179648 0 2 0 0 4980736 5242880 5242880 0.05625 -0.05 0 0 1.00000000126869
+1179648 0 2 0 0 5111808 5242880 5242880 0.05625 -0.025 0 0 1.0000000003447
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.00000000046233
+1179648 0 2 0 0 5373952 5242880 5242880 0.05625 0.025 0 0 1.0000000003447
+1179648 0 2 0 0 5505024 5242880 5242880 0.05625 0.05 0 0 1.00000000126869
+1179648 0 2 0 0 5636096 5242880 5242880 0.05625 0.075 0 0 1.00000000080762
+1179648 0 2 0 0 5767168 5242880 5242880 0.05625 0.1 0 0 1.00000000187364
+1179648 0 2 0 0 5898240 5242880 5242880 0.05625 0.125 0 0 1.0000000009088
+1179648 0 2 0 0 6029312 5242880 5242880 0.05625 0.15 0 0 0.999999999825109
+1179648 0 2 0 0 6160384 5242880 5242880 0.05625 0.175 0 0 0.999999999778339
+1179648 0 2 0 0 6291456 5242880 5242880 0.05625 0.2 0 0 0.999999999977901
+1179648 0 2 0 0 6422528 5242880 5242880 0.05625 0.225 0 0 0.999999999920328
+1179648 0 2 0 0 6553600 5242880 5242880 0.05625 0.25 0 0 0.999999999864691
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 2621440 5242880 5242880 0.0625 -0.5 0 0 1.00000000000016
+1310720 0 1 0 0 2883584 5242880 5242880 0.0625 -0.45 0 0 0.999999999995216
+1310720 0 1 0 0 3145728 5242880 5242880 0.0625 -0.4 0 0 0.999999999995699
+1310720 0 1 0 0 3407872 5242880 5242880 0.0625 -0.35 0 0 1.00000000002603
+1310720 0 1 0 0 3670016 5242880 5242880 0.0625 -0.3 0 0 1.00000000003931
+1310720 0 1 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 0.999999999848368
+1310720 0 1 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 1.00000000005881
+1310720 0 1 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 0.999999999779366
+1310720 0 1 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 1.00000000176887
+1310720 0 1 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 1.00000000163742
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+1310720 0 1 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 1.00000000163742
+1310720 0 1 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 1.00000000176887
+1310720 0 1 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 0.999999999779366
+1310720 0 1 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 1.00000000005881
+1310720 0 1 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 0.999999999848368
+1310720 0 1 0 0 6815744 5242880 5242880 0.0625 0.3 0 0 1.00000000003931
+1310720 0 1 0 0 7077888 5242880 5242880 0.0625 0.35 0 0 1.00000000002603
+1310720 0 1 0 0 7340032 5242880 5242880 0.0625 0.4 0 0 0.999999999995699
+1310720 0 1 0 0 7602176 5242880 5242880 0.0625 0.45 0 0 0.999999999995216
+1310720 0 1 0 0 7864320 5242880 5242880 0.0625 0.5 0 0 1.00000000000016
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 0.999999999848368
+1310720 0 2 0 0 4063232 5242880 5242880 0.0625 -0.225 0 0 0.99999999995912
+1310720 0 2 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 1.00000000005881
+1310720 0 2 0 0 4325376 5242880 5242880 0.0625 -0.175 0 0 0.999999999807897
+1310720 0 2 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 0.999999999779366
+1310720 0 2 0 0 4587520 5242880 5242880 0.0625 -0.125 0 0 1.00000000076487
+1310720 0 2 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 1.00000000176887
+1310720 0 2 0 0 4849664 5242880 5242880 0.0625 -0.075 0 0 1.00000000108602
+1310720 0 2 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 1.00000000163742
+1310720 0 2 0 0 5111808 5242880 5242880 0.0625 -0.025 0 0 1.00000000054727
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+1310720 0 2 0 0 5373952 5242880 5242880 0.0625 0.025 0 0 1.00000000054727
+1310720 0 2 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 1.00000000163742
+1310720 0 2 0 0 5636096 5242880 5242880 0.0625 0.075 0 0 1.00000000108602
+1310720 0 2 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 1.00000000176887
+1310720 0 2 0 0 5898240 5242880 5242880 0.0625 0.125 0 0 1.00000000076487
+1310720 0 2 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 0.999999999779366
+1310720 0 2 0 0 6160384 5242880 5242880 0.0625 0.175 0 0 0.999999999807897
+1310720 0 2 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 1.00000000005881
+1310720 0 2 0 0 6422528 5242880 5242880 0.0625 0.225 0 0 0.99999999995912
+1310720 0 2 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 0.999999999848368
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 3932160 5242880 5242880 0.06875 -0.25 0 0 0.999999999837646
+1441792 0 2 0 0 4063232 5242880 5242880 0.06875 -0.225 0 0 1.00000000000483
+1441792 0 2 0 0 4194304 5242880 5242880 0.06875 -0.2 0 0 1.00000000014767
+1441792 0 2 0 0 4325376 5242880 5242880 0.06875 -0.175 0 0 0.999999999846531
+1441792 0 2 0 0 4456448 5242880 5242880 0.06875 -0.15 0 0 0.999999999744461
+1441792 0 2 0 0 4587520 5242880 5242880 0.06875 -0.125 0 0 1.00000000066039
+1441792 0 2 0 0 4718592 5242880 5242880 0.06875 -0.1 0 0 1.00000000170236
+1441792 0 2 0 0 4849664 5242880 5242880 0.06875 -0.075 0 0 1.00000000140117
+1441792 0 2 0 0 4980736 5242880 5242880 0.06875 -0.05 0 0 1.00000000205035
+1441792 0 2 0 0 5111808 5242880 5242880 0.06875 -0.025 0 0 1.00000000081595
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.00000000107976
+1441792 0 2 0 0 5373952 5242880 5242880 0.06875 0.025 0 0 1.00000000081595
+1441792 0 2 0 0 5505024 5242880 5242880 0.06875 0.05 0 0 1.00000000205035
+1441792 0 2 0 0 5636096 5242880 5242880 0.06875 0.075 0 0 1.00000000140117
+1441792 0 2 0 0 5767168 5242880 5242880 0.06875 0.1 0 0 1.00000000170236
+1441792 0 2 0 0 5898240 5242880 5242880 0.06875 0.125 0 0 1.00000000066039
+1441792 0 2 0 0 6029312 5242880 5242880 0.06875 0.15 0 0 0.999999999744461
+1441792 0 2 0 0 6160384 5242880 5242880 0.06875 0.175 0 0 0.999999999846531
+1441792 0 2 0 0 6291456 5242880 5242880 0.06875 0.2 0 0 1.00000000014767
+1441792 0 2 0 0 6422528 5242880 5242880 0.06875 0.225 0 0 1.00000000000483
+1441792 0 2 0 0 6553600 5242880 5242880 0.06875 0.25 0 0 0.999999999837646
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 0 5242880 5242880 0.075 -1 0 0 1
+1572864 0 0 0 0 524288 5242880 5242880 0.075 -0.9 0 0 1
+1572864 0 0 0 0 1048576 5242880 5242880 0.075 -0.8 0 0 1
+1572864 0 0 0 0 1572864 5242880 5242880 0.075 -0.7 0 0 1
+1572864 0 0 0 0 2097152 5242880 5242880 0.075 -0.6 0 0 0.999999999999962
+1572864 0 0 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 1.0000000000004
+1572864 0 0 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 0.99999999999281
+1572864 0 0 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 1.00000000005299
+1572864 0 0 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 1.00000000024572
+1572864 0 0 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 1.00000000167165
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 0 0 0 5767168 5242880 5242880 0.075 0.1 0 0 1.00000000167165
+1572864 0 0 0 0 6291456 5242880 5242880 0.075 0.2 0 0 1.00000000024572
+1572864 0 0 0 0 6815744 5242880 5242880 0.075 0.3 0 0 1.00000000005299
+1572864 0 0 0 0 7340032 5242880 5242880 0.075 0.4 0 0 0.99999999999281
+1572864 0 0 0 0 7864320 5242880 5242880 0.075 0.5 0 0 1.0000000000004
+1572864 0 0 0 0 8388608 5242880 5242880 0.075 0.6 0 0 0.999999999999962
+1572864 0 0 0 0 8912896 5242880 5242880 0.075 0.7 0 0 1
+1572864 0 0 0 0 9437184 5242880 5242880 0.075 0.8 0 0 1
+1572864 0 0 0 0 9961472 5242880 5242880 0.075 0.9 0 0 1
+1572864 0 0 0 0 10485760 5242880 5242880 0.075 1 0 0 1
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 1.0000000000004
+1572864 0 1 0 0 2883584 5242880 5242880 0.075 -0.45 0 0 0.999999999992871
+1572864 0 1 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 0.99999999999281
+1572864 0 1 0 0 3407872 5242880 5242880 0.075 -0.35 0 0 1.00000000001038
+1572864 0 1 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 1.00000000005299
+1572864 0 1 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 1.000000000064
+1572864 0 1 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 1.00000000024572
+1572864 0 1 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 0.999999999716247
+1572864 0 1 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 1.00000000167165
+1572864 0 1 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 1.00000000250217
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 1 0 0 5505024 5242880 5242880 0.075 0.05 0 0 1.00000000250217
+1572864 0 1 0 0 5767168 5242880 5242880 0.075 0.1 0 0 1.00000000167165
+1572864 0 1 0 0 6029312 5242880 5242880 0.075 0.15 0 0 0.999999999716247
+1572864 0 1 0 0 6291456 5242880 5242880 0.075 0.2 0 0 1.00000000024572
+1572864 0 1 0 0 6553600 5242880 5242880 0.075 0.25 0 0 1.000000000064
+1572864 0 1 0 0 6815744 5242880 5242880 0.075 0.3 0 0 1.00000000005299
+1572864 0 1 0 0 7077888 5242880 5242880 0.075 0.35 0 0 1.00000000001038
+1572864 0 1 0 0 7340032 5242880 5242880 0.075 0.4 0 0 0.99999999999281
+1572864 0 1 0 0 7602176 5242880 5242880 0.075 0.45 0 0 0.999999999992871
+1572864 0 1 0 0 7864320 5242880 5242880 0.075 0.5 0 0 1.0000000000004
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 1.000000000064
+1572864 0 2 0 0 4063232 5242880 5242880 0.075 -0.225 0 0 1.00000000018864
+1572864 0 2 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 1.00000000024572
+1572864 0 2 0 0 4325376 5242880 5242880 0.075 -0.175 0 0 0.99999999987013
+1572864 0 2 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 0.999999999716247
+1572864 0 2 0 0 4587520 5242880 5242880 0.075 -0.125 0 0 1.00000000060895
+1572864 0 2 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 1.00000000167165
+1572864 0 2 0 0 4849664 5242880 5242880 0.075 -0.075 0 0 1.00000000174461
+1572864 0 2 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 1.00000000250217
+1572864 0 2 0 0 5111808 5242880 5242880 0.075 -0.025 0 0 1.00000000115522
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 2 0 0 5373952 5242880 5242880 0.075 0.025 0 0 1.00000000115522
+1572864 0 2 0 0 5505024 5242880 5242880 0.075 0.05 0 0 1.00000000250217
+1572864 0 2 0 0 5636096 5242880 5242880 0.075 0.075 0 0 1.00000000174461
+1572864 0 2 0 0 5767168 5242880 5242880 0.075 0.1 0 0 1.00000000167165
+1572864 0 2 0 0 5898240 5242880 5242880 0.075 0.125 0 0 1.00000000060895
+1572864 0 2 0 0 6029312 5242880 5242880 0.075 0.15 0 0 0.999999999716247
+1572864 0 2 0 0 6160384 5242880 5242880 0.075 0.175 0 0 0.99999999987013
+1572864 0 2 0 0 6291456 5242880 5242880 0.075 0.2 0 0 1.00000000024572
+1572864 0 2 0 0 6422528 5242880 5242880 0.075 0.225 0 0 1.00000000018864
+1572864 0 2 0 0 6553600 5242880 5242880 0.075 0.25 0 0 1.000000000064
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 3932160 5242880 5242880 0.08125 -0.25 0 0 1.00000000009816
+1703936 0 2 0 0 4063232 5242880 5242880 0.08125 -0.225 0 0 1.00000000027139
+1703936 0 2 0 0 4194304 5242880 5242880 0.08125 -0.2 0 0 1.00000000035833
+1703936 0 2 0 0 4325376 5242880 5242880 0.08125 -0.175 0 0 0.99999999993576
+1703936 0 2 0 0 4456448 5242880 5242880 0.08125 -0.15 0 0 0.999999999707798
+1703936 0 2 0 0 4587520 5242880 5242880 0.08125 -0.125 0 0 1.00000000050288
+1703936 0 2 0 0 4718592 5242880 5242880 0.08125 -0.1 0 0 1.00000000167849
+1703936 0 2 0 0 4849664 5242880 5242880 0.08125 -0.075 0 0 1.00000000210511
+1703936 0 2 0 0 4980736 5242880 5242880 0.08125 -0.05 0 0 1.00000000298471
+1703936 0 2 0 0 5111808 5242880 5242880 0.08125 -0.025 0 0 1.00000000156541
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.00000000205505
+1703936 0 2 0 0 5373952 5242880 5242880 0.08125 0.025 0 0 1.00000000156541
+1703936 0 2 0 0 5505024 5242880 5242880 0.08125 0.05 0 0 1.00000000298471
+1703936 0 2 0 0 5636096 5242880 5242880 0.08125 0.075 0 0 1.00000000210511
+1703936 0 2 0 0 5767168 5242880 5242880 0.08125 0.1 0 0 1.00000000167849
+1703936 0 2 0 0 5898240 5242880 5242880 0.08125 0.125 0 0 1.00000000050288
+1703936 0 2 0 0 6029312 5242880 5242880 0.08125 0.15 0 0 0.999999999707798
+1703936 0 2 0 0 6160384 5242880 5242880 0.08125 0.175 0 0 0.99999999993576
+1703936 0 2 0 0 6291456 5242880 5242880 0.08125 0.2 0 0 1.00000000035833
+1703936 0 2 0 0 6422528 5242880 5242880 0.08125 0.225 0 0 1.00000000027139
+1703936 0 2 0 0 6553600 5242880 5242880 0.08125 0.25 0 0 1.00000000009816
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 2621440 5242880 5242880 0.0875 -0.5 0 0 1.00000000000087
+1835008 0 1 0 0 2883584 5242880 5242880 0.0875 -0.45 0 0 0.999999999991356
+1835008 0 1 0 0 3145728 5242880 5242880 0.0875 -0.4 0 0 0.999999999990733
+1835008 0 1 0 0 3407872 5242880 5242880 0.0875 -0.35 0 0 1.00000000001404
+1835008 0 1 0 0 3670016 5242880 5242880 0.0875 -0.3 0 0 1.00000000006281
+1835008 0 1 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 1.00000000008321
+1835008 0 1 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 1.00000000048371
+1835008 0 1 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 0.999999999714756
+1835008 0 1 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 1.00000000171941
+1835008 0 1 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 1.0000000034867
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+1835008 0 1 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 1.0000000034867
+1835008 0 1 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 1.00000000171941
+1835008 0 1 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 0.999999999714756
+1835008 0 1 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 1.00000000048371
+1835008 0 1 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 1.00000000008321
+1835008 0 1 0 0 6815744 5242880 5242880 0.0875 0.3 0 0 1.00000000006281
+1835008 0 1 0 0 7077888 5242880 5242880 0.0875 0.35 0 0 1.00000000001404
+1835008 0 1 0 0 7340032 5242880 5242880 0.0875 0.4 0 0 0.999999999990733
+1835008 0 1 0 0 7602176 5242880 5242880 0.0875 0.45 0 0 0.999999999991356
+1835008 0 1 0 0 7864320 5242880 5242880 0.0875 0.5 0 0 1.00000000000087
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 1.00000000008321
+1835008 0 2 0 0 4063232 5242880 5242880 0.0875 -0.225 0 0 1.00000000033279
+1835008 0 2 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 1.00000000048371
+1835008 0 2 0 0 4325376 5242880 5242880 0.0875 -0.175 0 0 0.999999999998976
+1835008 0 2 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 0.999999999714756
+1835008 0 2 0 0 4587520 5242880 5242880 0.0875 -0.125 0 0 1.00000000055857
+1835008 0 2 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 1.00000000171941
+1835008 0 2 0 0 4849664 5242880 5242880 0.0875 -0.075 0 0 1.00000000246804
+1835008 0 2 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 1.0000000034867
+1835008 0 2 0 0 5111808 5242880 5242880 0.0875 -0.025 0 0 1.00000000204188
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+1835008 0 2 0 0 5373952 5242880 5242880 0.0875 0.025 0 0 1.00000000204188
+1835008 0 2 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 1.0000000034867
+1835008 0 2 0 0 5636096 5242880 5242880 0.0875 0.075 0 0 1.00000000246804
+1835008 0 2 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 1.00000000171941
+1835008 0 2 0 0 5898240 5242880 5242880 0.0875 0.125 0 0 1.00000000055857
+1835008 0 2 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 0.999999999714756
+1835008 0 2 0 0 6160384 5242880 5242880 0.0875 0.175 0 0 0.999999999998976
+1835008 0 2 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 1.00000000048371
+1835008 0 2 0 0 6422528 5242880 5242880 0.0875 0.225 0 0 1.00000000033279
+1835008 0 2 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 1.00000000008321
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 3932160 5242880 5242880 0.09375 -0.25 0 0 1.00000000006939
+1966080 0 2 0 0 4063232 5242880 5242880 0.09375 -0.225 0 0 1.00000000039637
+1966080 0 2 0 0 4194304 5242880 5242880 0.09375 -0.2 0 0 1.00000000061474
+1966080 0 2 0 0 4325376 5242880 5242880 0.09375 -0.175 0 0 1.00000000010307
+1966080 0 2 0 0 4456448 5242880 5242880 0.09375 -0.15 0 0 0.99999999974855
+1966080 0 2 0 0 4587520 5242880 5242880 0.09375 -0.125 0 0 1.00000000046383
+1966080 0 2 0 0 4718592 5242880 5242880 0.09375 -0.1 0 0 1.00000000178245
+1966080 0 2 0 0 4849664 5242880 5242880 0.09375 -0.075 0 0 1.0000000028168
+1966080 0 2 0 0 4980736 5242880 5242880 0.09375 -0.05 0 0 1.0000000039935
+1966080 0 2 0 0 5111808 5242880 5242880 0.09375 -0.025 0 0 1.00000000257445
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.0000000033708
+1966080 0 2 0 0 5373952 5242880 5242880 0.09375 0.025 0 0 1.00000000257445
+1966080 0 2 0 0 5505024 5242880 5242880 0.09375 0.05 0 0 1.0000000039935
+1966080 0 2 0 0 5636096 5242880 5242880 0.09375 0.075 0 0 1.0000000028168
+1966080 0 2 0 0 5767168 5242880 5242880 0.09375 0.1 0 0 1.00000000178245
+1966080 0 2 0 0 5898240 5242880 5242880 0.09375 0.125 0 0 1.00000000046383
+1966080 0 2 0 0 6029312 5242880 5242880 0.09375 0.15 0 0 0.99999999974855
+1966080 0 2 0 0 6160384 5242880 5242880 0.09375 0.175 0 0 1.00000000010307
+1966080 0 2 0 0 6291456 5242880 5242880 0.09375 0.2 0 0 1.00000000061474
+1966080 0 2 0 0 6422528 5242880 5242880 0.09375 0.225 0 0 1.00000000039637
+1966080 0 2 0 0 6553600 5242880 5242880 0.09375 0.25 0 0 1.00000000006939
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 0 5242880 5242880 0.1 -1 0 0 1
+2097152 0 0 0 0 524288 5242880 5242880 0.1 -0.9 0 0 1
+2097152 0 0 0 0 1048576 5242880 5242880 0.1 -0.8 0 0 0.999999999999999
+2097152 0 0 0 0 1572864 5242880 5242880 0.1 -0.7 0 0 1.00000000000001
+2097152 0 0 0 0 2097152 5242880 5242880 0.1 -0.6 0 0 0.999999999999814
+2097152 0 0 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 1.00000000000152
+2097152 0 0 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 0.999999999988956
+2097152 0 0 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 1.00000000007015
+2097152 0 0 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 1.00000000075378
+2097152 0 0 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 1.00000000186308
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 0 0 0 5767168 5242880 5242880 0.1 0.1 0 0 1.00000000186308
+2097152 0 0 0 0 6291456 5242880 5242880 0.1 0.2 0 0 1.00000000075378
+2097152 0 0 0 0 6815744 5242880 5242880 0.1 0.3 0 0 1.00000000007015
+2097152 0 0 0 0 7340032 5242880 5242880 0.1 0.4 0 0 0.999999999988956
+2097152 0 0 0 0 7864320 5242880 5242880 0.1 0.5 0 0 1.00000000000152
+2097152 0 0 0 0 8388608 5242880 5242880 0.1 0.6 0 0 0.999999999999814
+2097152 0 0 0 0 8912896 5242880 5242880 0.1 0.7 0 0 1.00000000000001
+2097152 0 0 0 0 9437184 5242880 5242880 0.1 0.8 0 0 0.999999999999999
+2097152 0 0 0 0 9961472 5242880 5242880 0.1 0.9 0 0 1
+2097152 0 0 0 0 10485760 5242880 5242880 0.1 1 0 0 1
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 1.00000000000152
+2097152 0 1 0 0 2883584 5242880 5242880 0.1 -0.45 0 0 0.999999999990269
+2097152 0 1 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 0.999999999988956
+2097152 0 1 0 0 3407872 5242880 5242880 0.1 -0.35 0 0 0.999999999986041
+2097152 0 1 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 1.00000000007015
+2097152 0 1 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 1.00000000034771
+2097152 0 1 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 1.00000000075378
+2097152 0 1 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 0.999999999805372
+2097152 0 1 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 1.00000000186308
+2097152 0 1 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 1.00000000448718
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 1 0 0 5505024 5242880 5242880 0.1 0.05 0 0 1.00000000448718
+2097152 0 1 0 0 5767168 5242880 5242880 0.1 0.1 0 0 1.00000000186308
+2097152 0 1 0 0 6029312 5242880 5242880 0.1 0.15 0 0 0.999999999805372
+2097152 0 1 0 0 6291456 5242880 5242880 0.1 0.2 0 0 1.00000000075378
+2097152 0 1 0 0 6553600 5242880 5242880 0.1 0.25 0 0 1.00000000034771
+2097152 0 1 0 0 6815744 5242880 5242880 0.1 0.3 0 0 1.00000000007015
+2097152 0 1 0 0 7077888 5242880 5242880 0.1 0.35 0 0 0.999999999986041
+2097152 0 1 0 0 7340032 5242880 5242880 0.1 0.4 0 0 0.999999999988956
+2097152 0 1 0 0 7602176 5242880 5242880 0.1 0.45 0 0 0.999999999990269
+2097152 0 1 0 0 7864320 5242880 5242880 0.1 0.5 0 0 1.00000000000152
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 1.00000000034771
+2097152 0 2 0 0 4063232 5242880 5242880 0.1 -0.225 0 0 1.00000000062737
+2097152 0 2 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 1.00000000075378
+2097152 0 2 0 0 4325376 5242880 5242880 0.1 -0.175 0 0 1.00000000017635
+2097152 0 2 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 0.999999999805372
+2097152 0 2 0 0 4587520 5242880 5242880 0.1 -0.125 0 0 1.00000000061094
+2097152 0 2 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 1.00000000186308
+2097152 0 2 0 0 4849664 5242880 5242880 0.1 -0.075 0 0 1.00000000313278
+2097152 0 2 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 1.00000000448718
+2097152 0 2 0 0 5111808 5242880 5242880 0.1 -0.025 0 0 1.00000000314711
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 2 0 0 5373952 5242880 5242880 0.1 0.025 0 0 1.00000000314711
+2097152 0 2 0 0 5505024 5242880 5242880 0.1 0.05 0 0 1.00000000448718
+2097152 0 2 0 0 5636096 5242880 5242880 0.1 0.075 0 0 1.00000000313278
+2097152 0 2 0 0 5767168 5242880 5242880 0.1 0.1 0 0 1.00000000186308
+2097152 0 2 0 0 5898240 5242880 5242880 0.1 0.125 0 0 1.00000000061094
+2097152 0 2 0 0 6029312 5242880 5242880 0.1 0.15 0 0 0.999999999805372
+2097152 0 2 0 0 6160384 5242880 5242880 0.1 0.175 0 0 1.00000000017635
+2097152 0 2 0 0 6291456 5242880 5242880 0.1 0.2 0 0 1.00000000075378
+2097152 0 2 0 0 6422528 5242880 5242880 0.1 0.225 0 0 1.00000000062737
+2097152 0 2 0 0 6553600 5242880 5242880 0.1 0.25 0 0 1.00000000034771
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.y.asc b/Carpet/CarpetInterp/test/waveinterp/phit.y.asc
new file mode 100644
index 000000000..4250db6e7
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.y.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phit y (phit)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 0 5242880 0 0 -1 0 1
+0 0 0 0 0 5242880 524288 5242880 0 0 -0.9 0 1
+0 0 0 0 0 5242880 1048576 5242880 0 0 -0.8 0 1
+0 0 0 0 0 5242880 1572864 5242880 0 0 -0.7 0 1
+0 0 0 0 0 5242880 2097152 5242880 0 0 -0.6 0 1
+0 0 0 0 0 5242880 2621440 5242880 0 0 -0.5 0 1
+0 0 0 0 0 5242880 3145728 5242880 0 0 -0.4 0 1
+0 0 0 0 0 5242880 3670016 5242880 0 0 -0.3 0 1
+0 0 0 0 0 5242880 4194304 5242880 0 0 -0.2 0 1
+0 0 0 0 0 5242880 4718592 5242880 0 0 -0.1 0 1
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 0 0 0 5242880 5767168 5242880 0 0 0.1 0 1
+0 0 0 0 0 5242880 6291456 5242880 0 0 0.2 0 1
+0 0 0 0 0 5242880 6815744 5242880 0 0 0.3 0 1
+0 0 0 0 0 5242880 7340032 5242880 0 0 0.4 0 1
+0 0 0 0 0 5242880 7864320 5242880 0 0 0.5 0 1
+0 0 0 0 0 5242880 8388608 5242880 0 0 0.6 0 1
+0 0 0 0 0 5242880 8912896 5242880 0 0 0.7 0 1
+0 0 0 0 0 5242880 9437184 5242880 0 0 0.8 0 1
+0 0 0 0 0 5242880 9961472 5242880 0 0 0.9 0 1
+0 0 0 0 0 5242880 10485760 5242880 0 0 1 0 1
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 2621440 5242880 0 0 -0.5 0 1
+0 0 1 0 0 5242880 2883584 5242880 0 0 -0.45 0 1
+0 0 1 0 0 5242880 3145728 5242880 0 0 -0.4 0 1
+0 0 1 0 0 5242880 3407872 5242880 0 0 -0.35 0 1
+0 0 1 0 0 5242880 3670016 5242880 0 0 -0.3 0 1
+0 0 1 0 0 5242880 3932160 5242880 0 0 -0.25 0 1
+0 0 1 0 0 5242880 4194304 5242880 0 0 -0.2 0 1
+0 0 1 0 0 5242880 4456448 5242880 0 0 -0.15 0 1
+0 0 1 0 0 5242880 4718592 5242880 0 0 -0.1 0 1
+0 0 1 0 0 5242880 4980736 5242880 0 0 -0.05 0 1
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 1 0 0 5242880 5505024 5242880 0 0 0.05 0 1
+0 0 1 0 0 5242880 5767168 5242880 0 0 0.1 0 1
+0 0 1 0 0 5242880 6029312 5242880 0 0 0.15 0 1
+0 0 1 0 0 5242880 6291456 5242880 0 0 0.2 0 1
+0 0 1 0 0 5242880 6553600 5242880 0 0 0.25 0 1
+0 0 1 0 0 5242880 6815744 5242880 0 0 0.3 0 1
+0 0 1 0 0 5242880 7077888 5242880 0 0 0.35 0 1
+0 0 1 0 0 5242880 7340032 5242880 0 0 0.4 0 1
+0 0 1 0 0 5242880 7602176 5242880 0 0 0.45 0 1
+0 0 1 0 0 5242880 7864320 5242880 0 0 0.5 0 1
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 3932160 5242880 0 0 -0.25 0 1
+0 0 2 0 0 5242880 4063232 5242880 0 0 -0.225 0 1
+0 0 2 0 0 5242880 4194304 5242880 0 0 -0.2 0 1
+0 0 2 0 0 5242880 4325376 5242880 0 0 -0.175 0 1
+0 0 2 0 0 5242880 4456448 5242880 0 0 -0.15 0 1
+0 0 2 0 0 5242880 4587520 5242880 0 0 -0.125 0 1
+0 0 2 0 0 5242880 4718592 5242880 0 0 -0.1 0 1
+0 0 2 0 0 5242880 4849664 5242880 0 0 -0.075 0 1
+0 0 2 0 0 5242880 4980736 5242880 0 0 -0.05 0 1
+0 0 2 0 0 5242880 5111808 5242880 0 0 -0.025 0 1
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 2 0 0 5242880 5373952 5242880 0 0 0.025 0 1
+0 0 2 0 0 5242880 5505024 5242880 0 0 0.05 0 1
+0 0 2 0 0 5242880 5636096 5242880 0 0 0.075 0 1
+0 0 2 0 0 5242880 5767168 5242880 0 0 0.1 0 1
+0 0 2 0 0 5242880 5898240 5242880 0 0 0.125 0 1
+0 0 2 0 0 5242880 6029312 5242880 0 0 0.15 0 1
+0 0 2 0 0 5242880 6160384 5242880 0 0 0.175 0 1
+0 0 2 0 0 5242880 6291456 5242880 0 0 0.2 0 1
+0 0 2 0 0 5242880 6422528 5242880 0 0 0.225 0 1
+0 0 2 0 0 5242880 6553600 5242880 0 0 0.25 0 1
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 3932160 5242880 0.00625 0 -0.25 0 1
+131072 0 2 0 0 5242880 4063232 5242880 0.00625 0 -0.225 0 1
+131072 0 2 0 0 5242880 4194304 5242880 0.00625 0 -0.2 0 1
+131072 0 2 0 0 5242880 4325376 5242880 0.00625 0 -0.175 0 1
+131072 0 2 0 0 5242880 4456448 5242880 0.00625 0 -0.15 0 1
+131072 0 2 0 0 5242880 4587520 5242880 0.00625 0 -0.125 0 1
+131072 0 2 0 0 5242880 4718592 5242880 0.00625 0 -0.1 0 1
+131072 0 2 0 0 5242880 4849664 5242880 0.00625 0 -0.075 0 1
+131072 0 2 0 0 5242880 4980736 5242880 0.00625 0 -0.05 0 1
+131072 0 2 0 0 5242880 5111808 5242880 0.00625 0 -0.025 0 1
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1
+131072 0 2 0 0 5242880 5373952 5242880 0.00625 0 0.025 0 1
+131072 0 2 0 0 5242880 5505024 5242880 0.00625 0 0.05 0 1
+131072 0 2 0 0 5242880 5636096 5242880 0.00625 0 0.075 0 1
+131072 0 2 0 0 5242880 5767168 5242880 0.00625 0 0.1 0 1
+131072 0 2 0 0 5242880 5898240 5242880 0.00625 0 0.125 0 1
+131072 0 2 0 0 5242880 6029312 5242880 0.00625 0 0.15 0 1
+131072 0 2 0 0 5242880 6160384 5242880 0.00625 0 0.175 0 1
+131072 0 2 0 0 5242880 6291456 5242880 0.00625 0 0.2 0 1
+131072 0 2 0 0 5242880 6422528 5242880 0.00625 0 0.225 0 1
+131072 0 2 0 0 5242880 6553600 5242880 0.00625 0 0.25 0 1
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 2621440 5242880 0.0125 0 -0.5 0 1
+262144 0 1 0 0 5242880 2883584 5242880 0.0125 0 -0.45 0 1
+262144 0 1 0 0 5242880 3145728 5242880 0.0125 0 -0.4 0 1
+262144 0 1 0 0 5242880 3407872 5242880 0.0125 0 -0.35 0 1
+262144 0 1 0 0 5242880 3670016 5242880 0.0125 0 -0.3 0 1
+262144 0 1 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 1
+262144 0 1 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 1
+262144 0 1 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 1
+262144 0 1 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 1.00000000277135
+262144 0 1 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 1.00000000000728
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+262144 0 1 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 1.00000000000728
+262144 0 1 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 1.00000000277135
+262144 0 1 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 1
+262144 0 1 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 1
+262144 0 1 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 1
+262144 0 1 0 0 5242880 6815744 5242880 0.0125 0 0.3 0 1
+262144 0 1 0 0 5242880 7077888 5242880 0.0125 0 0.35 0 1
+262144 0 1 0 0 5242880 7340032 5242880 0.0125 0 0.4 0 1
+262144 0 1 0 0 5242880 7602176 5242880 0.0125 0 0.45 0 1
+262144 0 1 0 0 5242880 7864320 5242880 0.0125 0 0.5 0 1
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 1
+262144 0 2 0 0 5242880 4063232 5242880 0.0125 0 -0.225 0 1
+262144 0 2 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 1
+262144 0 2 0 0 5242880 4325376 5242880 0.0125 0 -0.175 0 0.999999999826791
+262144 0 2 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 1
+262144 0 2 0 0 5242880 4587520 5242880 0.0125 0 -0.125 0 1.00000000155843
+262144 0 2 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 1.00000000277135
+262144 0 2 0 0 5242880 4849664 5242880 0.0125 0 -0.075 0 0.999999999998383
+262144 0 2 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 1.00000000000728
+262144 0 2 0 0 5242880 5111808 5242880 0.0125 0 -0.025 0 1
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+262144 0 2 0 0 5242880 5373952 5242880 0.0125 0 0.025 0 1
+262144 0 2 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 1.00000000000728
+262144 0 2 0 0 5242880 5636096 5242880 0.0125 0 0.075 0 0.999999999998383
+262144 0 2 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 1.00000000277135
+262144 0 2 0 0 5242880 5898240 5242880 0.0125 0 0.125 0 1.00000000155843
+262144 0 2 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 1
+262144 0 2 0 0 5242880 6160384 5242880 0.0125 0 0.175 0 0.999999999826791
+262144 0 2 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 1
+262144 0 2 0 0 5242880 6422528 5242880 0.0125 0 0.225 0 1
+262144 0 2 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 1
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 3932160 5242880 0.01875 0 -0.25 0 1
+393216 0 2 0 0 5242880 4063232 5242880 0.01875 0 -0.225 0 0.999999999945108
+393216 0 2 0 0 5242880 4194304 5242880 0.01875 0 -0.2 0 0.999999999902543
+393216 0 2 0 0 5242880 4325376 5242880 0.01875 0 -0.175 0 0.99999999974986
+393216 0 2 0 0 5242880 4456448 5242880 0.01875 0 -0.15 0 1.00000000000116
+393216 0 2 0 0 5242880 4587520 5242880 0.01875 0 -0.125 0 1.00000000176809
+393216 0 2 0 0 5242880 4718592 5242880 0.01875 0 -0.1 0 1.00000000270433
+393216 0 2 0 0 5242880 4849664 5242880 0.01875 0 -0.075 0 1.00000000000657
+393216 0 2 0 0 5242880 4980736 5242880 0.01875 0 -0.05 0 1.00000000005092
+393216 0 2 0 0 5242880 5111808 5242880 0.01875 0 -0.025 0 1.00000000000043
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.00000000000068
+393216 0 2 0 0 5242880 5373952 5242880 0.01875 0 0.025 0 1.00000000000043
+393216 0 2 0 0 5242880 5505024 5242880 0.01875 0 0.05 0 1.00000000005092
+393216 0 2 0 0 5242880 5636096 5242880 0.01875 0 0.075 0 1.00000000000657
+393216 0 2 0 0 5242880 5767168 5242880 0.01875 0 0.1 0 1.00000000270433
+393216 0 2 0 0 5242880 5898240 5242880 0.01875 0 0.125 0 1.00000000176809
+393216 0 2 0 0 5242880 6029312 5242880 0.01875 0 0.15 0 1.00000000000116
+393216 0 2 0 0 5242880 6160384 5242880 0.01875 0 0.175 0 0.99999999974986
+393216 0 2 0 0 5242880 6291456 5242880 0.01875 0 0.2 0 0.999999999902543
+393216 0 2 0 0 5242880 6422528 5242880 0.01875 0 0.225 0 0.999999999945108
+393216 0 2 0 0 5242880 6553600 5242880 0.01875 0 0.25 0 1
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 0 5242880 0.025 0 -1 0 1
+524288 0 0 0 0 5242880 524288 5242880 0.025 0 -0.9 0 1
+524288 0 0 0 0 5242880 1048576 5242880 0.025 0 -0.8 0 1
+524288 0 0 0 0 5242880 1572864 5242880 0.025 0 -0.7 0 1
+524288 0 0 0 0 5242880 2097152 5242880 0.025 0 -0.6 0 1
+524288 0 0 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 1
+524288 0 0 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 1
+524288 0 0 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 1
+524288 0 0 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0.999999999740114
+524288 0 0 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 1.00000000258949
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 0 0 0 5242880 5767168 5242880 0.025 0 0.1 0 1.00000000258949
+524288 0 0 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0.999999999740114
+524288 0 0 0 0 5242880 6815744 5242880 0.025 0 0.3 0 1
+524288 0 0 0 0 5242880 7340032 5242880 0.025 0 0.4 0 1
+524288 0 0 0 0 5242880 7864320 5242880 0.025 0 0.5 0 1
+524288 0 0 0 0 5242880 8388608 5242880 0.025 0 0.6 0 1
+524288 0 0 0 0 5242880 8912896 5242880 0.025 0 0.7 0 1
+524288 0 0 0 0 5242880 9437184 5242880 0.025 0 0.8 0 1
+524288 0 0 0 0 5242880 9961472 5242880 0.025 0 0.9 0 1
+524288 0 0 0 0 5242880 10485760 5242880 0.025 0 1 0 1
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 1
+524288 0 1 0 0 5242880 2883584 5242880 0.025 0 -0.45 0 1
+524288 0 1 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 1
+524288 0 1 0 0 5242880 3407872 5242880 0.025 0 -0.35 0 1.00000000001624
+524288 0 1 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 1
+524288 0 1 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 0.999999999691971
+524288 0 1 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0.999999999740114
+524288 0 1 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 1.0000000000031
+524288 0 1 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 1.00000000258949
+524288 0 1 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 1.00000000013846
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 1 0 0 5242880 5505024 5242880 0.025 0 0.05 0 1.00000000013846
+524288 0 1 0 0 5242880 5767168 5242880 0.025 0 0.1 0 1.00000000258949
+524288 0 1 0 0 5242880 6029312 5242880 0.025 0 0.15 0 1.0000000000031
+524288 0 1 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0.999999999740114
+524288 0 1 0 0 5242880 6553600 5242880 0.025 0 0.25 0 0.999999999691971
+524288 0 1 0 0 5242880 6815744 5242880 0.025 0 0.3 0 1
+524288 0 1 0 0 5242880 7077888 5242880 0.025 0 0.35 0 1.00000000001624
+524288 0 1 0 0 5242880 7340032 5242880 0.025 0 0.4 0 1
+524288 0 1 0 0 5242880 7602176 5242880 0.025 0 0.45 0 1
+524288 0 1 0 0 5242880 7864320 5242880 0.025 0 0.5 0 1
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 0.999999999691971
+524288 0 2 0 0 5242880 4063232 5242880 0.025 0 -0.225 0 0.999999999680354
+524288 0 2 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0.999999999740114
+524288 0 2 0 0 5242880 4325376 5242880 0.025 0 -0.175 0 0.999999999712965
+524288 0 2 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 1.0000000000031
+524288 0 2 0 0 5242880 4587520 5242880 0.025 0 -0.125 0 1.00000000146592
+524288 0 2 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 1.00000000258949
+524288 0 2 0 0 5242880 4849664 5242880 0.025 0 -0.075 0 1.00000000004511
+524288 0 2 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 1.00000000013846
+524288 0 2 0 0 5242880 5111808 5242880 0.025 0 -0.025 0 1.00000000000435
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 2 0 0 5242880 5373952 5242880 0.025 0 0.025 0 1.00000000000435
+524288 0 2 0 0 5242880 5505024 5242880 0.025 0 0.05 0 1.00000000013846
+524288 0 2 0 0 5242880 5636096 5242880 0.025 0 0.075 0 1.00000000004511
+524288 0 2 0 0 5242880 5767168 5242880 0.025 0 0.1 0 1.00000000258949
+524288 0 2 0 0 5242880 5898240 5242880 0.025 0 0.125 0 1.00000000146592
+524288 0 2 0 0 5242880 6029312 5242880 0.025 0 0.15 0 1.0000000000031
+524288 0 2 0 0 5242880 6160384 5242880 0.025 0 0.175 0 0.999999999712965
+524288 0 2 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0.999999999740114
+524288 0 2 0 0 5242880 6422528 5242880 0.025 0 0.225 0 0.999999999680354
+524288 0 2 0 0 5242880 6553600 5242880 0.025 0 0.25 0 0.999999999691971
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 3932160 5242880 0.03125 0 -0.25 0 0.999999999640443
+655360 0 2 0 0 5242880 4063232 5242880 0.03125 0 -0.225 0 0.999999999647753
+655360 0 2 0 0 5242880 4194304 5242880 0.03125 0 -0.2 0 0.999999999732034
+655360 0 2 0 0 5242880 4325376 5242880 0.03125 0 -0.175 0 0.999999999702523
+655360 0 2 0 0 5242880 4456448 5242880 0.03125 0 -0.15 0 0.999999999984606
+655360 0 2 0 0 5242880 4587520 5242880 0.03125 0 -0.125 0 1.00000000144041
+655360 0 2 0 0 5242880 4718592 5242880 0.03125 0 -0.1 0 1.00000000246101
+655360 0 2 0 0 5242880 4849664 5242880 0.03125 0 -0.075 0 1.00000000011784
+655360 0 2 0 0 5242880 4980736 5242880 0.03125 0 -0.05 0 1.00000000027064
+655360 0 2 0 0 5242880 5111808 5242880 0.03125 0 -0.025 0 1.00000000001744
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.00000000002479
+655360 0 2 0 0 5242880 5373952 5242880 0.03125 0 0.025 0 1.00000000001744
+655360 0 2 0 0 5242880 5505024 5242880 0.03125 0 0.05 0 1.00000000027064
+655360 0 2 0 0 5242880 5636096 5242880 0.03125 0 0.075 0 1.00000000011784
+655360 0 2 0 0 5242880 5767168 5242880 0.03125 0 0.1 0 1.00000000246101
+655360 0 2 0 0 5242880 5898240 5242880 0.03125 0 0.125 0 1.00000000144041
+655360 0 2 0 0 5242880 6029312 5242880 0.03125 0 0.15 0 0.999999999984606
+655360 0 2 0 0 5242880 6160384 5242880 0.03125 0 0.175 0 0.999999999702523
+655360 0 2 0 0 5242880 6291456 5242880 0.03125 0 0.2 0 0.999999999732034
+655360 0 2 0 0 5242880 6422528 5242880 0.03125 0 0.225 0 0.999999999647753
+655360 0 2 0 0 5242880 6553600 5242880 0.03125 0 0.25 0 0.999999999640443
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 2621440 5242880 0.0375 0 -0.5 0 1.00000000000001
+786432 0 1 0 0 5242880 2883584 5242880 0.0375 0 -0.45 0 0.999999999998945
+786432 0 1 0 0 5242880 3145728 5242880 0.0375 0 -0.4 0 0.999999999999198
+786432 0 1 0 0 5242880 3407872 5242880 0.0375 0 -0.35 0 1.00000000002395
+786432 0 1 0 0 5242880 3670016 5242880 0.0375 0 -0.3 0 1.00000000000972
+786432 0 1 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 0.99999999965724
+786432 0 1 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 0.999999999805198
+786432 0 1 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 0.999999999952753
+786432 0 1 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 1.00000000230525
+786432 0 1 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 1.00000000044868
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+786432 0 1 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 1.00000000044868
+786432 0 1 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 1.00000000230525
+786432 0 1 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 0.999999999952753
+786432 0 1 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 0.999999999805198
+786432 0 1 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 0.99999999965724
+786432 0 1 0 0 5242880 6815744 5242880 0.0375 0 0.3 0 1.00000000000972
+786432 0 1 0 0 5242880 7077888 5242880 0.0375 0 0.35 0 1.00000000002395
+786432 0 1 0 0 5242880 7340032 5242880 0.0375 0 0.4 0 0.999999999999198
+786432 0 1 0 0 5242880 7602176 5242880 0.0375 0 0.45 0 0.999999999998945
+786432 0 1 0 0 5242880 7864320 5242880 0.0375 0 0.5 0 1.00000000000001
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 0.99999999965724
+786432 0 2 0 0 5242880 4063232 5242880 0.0375 0 -0.225 0 0.999999999699967
+786432 0 2 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 0.999999999805198
+786432 0 2 0 0 5242880 4325376 5242880 0.0375 0 -0.175 0 0.999999999741191
+786432 0 2 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 0.999999999952753
+786432 0 2 0 0 5242880 4587520 5242880 0.0375 0 -0.125 0 1.00000000125426
+786432 0 2 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 1.00000000230525
+786432 0 2 0 0 5242880 4849664 5242880 0.0375 0 -0.075 0 1.00000000022745
+786432 0 2 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 1.00000000044868
+786432 0 2 0 0 5242880 5111808 5242880 0.0375 0 -0.025 0 1.00000000004778
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+786432 0 2 0 0 5242880 5373952 5242880 0.0375 0 0.025 0 1.00000000004778
+786432 0 2 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 1.00000000044868
+786432 0 2 0 0 5242880 5636096 5242880 0.0375 0 0.075 0 1.00000000022745
+786432 0 2 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 1.00000000230525
+786432 0 2 0 0 5242880 5898240 5242880 0.0375 0 0.125 0 1.00000000125426
+786432 0 2 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 0.999999999952753
+786432 0 2 0 0 5242880 6160384 5242880 0.0375 0 0.175 0 0.999999999741191
+786432 0 2 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 0.999999999805198
+786432 0 2 0 0 5242880 6422528 5242880 0.0375 0 0.225 0 0.999999999699967
+786432 0 2 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 0.99999999965724
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 3932160 5242880 0.04375 0 -0.25 0 0.999999999669696
+917504 0 2 0 0 5242880 4063232 5242880 0.04375 0 -0.225 0 0.999999999735269
+917504 0 2 0 0 5242880 4194304 5242880 0.04375 0 -0.2 0 0.999999999852133
+917504 0 2 0 0 5242880 4325376 5242880 0.04375 0 -0.175 0 0.999999999749234
+917504 0 2 0 0 5242880 4456448 5242880 0.04375 0 -0.15 0 0.999999999915148
+917504 0 2 0 0 5242880 4587520 5242880 0.04375 0 -0.125 0 1.00000000119155
+917504 0 2 0 0 5242880 4718592 5242880 0.04375 0 -0.1 0 1.0000000021537
+917504 0 2 0 0 5242880 4849664 5242880 0.04375 0 -0.075 0 1.00000000037762
+917504 0 2 0 0 5242880 4980736 5242880 0.04375 0 -0.05 0 1.00000000067385
+917504 0 2 0 0 5242880 5111808 5242880 0.04375 0 -0.025 0 1.00000000010524
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.00000000014416
+917504 0 2 0 0 5242880 5373952 5242880 0.04375 0 0.025 0 1.00000000010524
+917504 0 2 0 0 5242880 5505024 5242880 0.04375 0 0.05 0 1.00000000067385
+917504 0 2 0 0 5242880 5636096 5242880 0.04375 0 0.075 0 1.00000000037762
+917504 0 2 0 0 5242880 5767168 5242880 0.04375 0 0.1 0 1.0000000021537
+917504 0 2 0 0 5242880 5898240 5242880 0.04375 0 0.125 0 1.00000000119155
+917504 0 2 0 0 5242880 6029312 5242880 0.04375 0 0.15 0 0.999999999915148
+917504 0 2 0 0 5242880 6160384 5242880 0.04375 0 0.175 0 0.999999999749234
+917504 0 2 0 0 5242880 6291456 5242880 0.04375 0 0.2 0 0.999999999852133
+917504 0 2 0 0 5242880 6422528 5242880 0.04375 0 0.225 0 0.999999999735269
+917504 0 2 0 0 5242880 6553600 5242880 0.04375 0 0.25 0 0.999999999669696
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 0 5242880 0.05 0 -1 0 1
+1048576 0 0 0 0 5242880 524288 5242880 0.05 0 -0.9 0 1
+1048576 0 0 0 0 5242880 1048576 5242880 0.05 0 -0.8 0 1
+1048576 0 0 0 0 5242880 1572864 5242880 0.05 0 -0.7 0 1
+1048576 0 0 0 0 5242880 2097152 5242880 0.05 0 -0.6 0 1
+1048576 0 0 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 1.00000000000002
+1048576 0 0 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 0.99999999999786
+1048576 0 0 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 1.00000000002592
+1048576 0 0 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0.999999999908662
+1048576 0 0 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 1.00000000200092
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 0 0 0 5242880 5767168 5242880 0.05 0 0.1 0 1.00000000200092
+1048576 0 0 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0.999999999908662
+1048576 0 0 0 0 5242880 6815744 5242880 0.05 0 0.3 0 1.00000000002592
+1048576 0 0 0 0 5242880 7340032 5242880 0.05 0 0.4 0 0.99999999999786
+1048576 0 0 0 0 5242880 7864320 5242880 0.05 0 0.5 0 1.00000000000002
+1048576 0 0 0 0 5242880 8388608 5242880 0.05 0 0.6 0 1
+1048576 0 0 0 0 5242880 8912896 5242880 0.05 0 0.7 0 1
+1048576 0 0 0 0 5242880 9437184 5242880 0.05 0 0.8 0 1
+1048576 0 0 0 0 5242880 9961472 5242880 0.05 0 0.9 0 1
+1048576 0 0 0 0 5242880 10485760 5242880 0.05 0 1 0 1
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 1.00000000000002
+1048576 0 1 0 0 5242880 2883584 5242880 0.05 0 -0.45 0 0.999999999997185
+1048576 0 1 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 0.99999999999786
+1048576 0 1 0 0 5242880 3407872 5242880 0.05 0 -0.35 0 1.00000000001908
+1048576 0 1 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 1.00000000002592
+1048576 0 1 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 0.999999999838278
+1048576 0 1 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0.999999999908662
+1048576 0 1 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 0.999999999869254
+1048576 0 1 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 1.00000000200092
+1048576 0 1 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 1.00000000094713
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 1 0 0 5242880 5505024 5242880 0.05 0 0.05 0 1.00000000094713
+1048576 0 1 0 0 5242880 5767168 5242880 0.05 0 0.1 0 1.00000000200092
+1048576 0 1 0 0 5242880 6029312 5242880 0.05 0 0.15 0 0.999999999869254
+1048576 0 1 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0.999999999908662
+1048576 0 1 0 0 5242880 6553600 5242880 0.05 0 0.25 0 0.999999999838278
+1048576 0 1 0 0 5242880 6815744 5242880 0.05 0 0.3 0 1.00000000002592
+1048576 0 1 0 0 5242880 7077888 5242880 0.05 0 0.35 0 1.00000000001908
+1048576 0 1 0 0 5242880 7340032 5242880 0.05 0 0.4 0 0.99999999999786
+1048576 0 1 0 0 5242880 7602176 5242880 0.05 0 0.45 0 0.999999999997185
+1048576 0 1 0 0 5242880 7864320 5242880 0.05 0 0.5 0 1.00000000000002
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 0.999999999838278
+1048576 0 2 0 0 5242880 4063232 5242880 0.05 0 -0.225 0 0.999999999864206
+1048576 0 2 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0.999999999908662
+1048576 0 2 0 0 5242880 4325376 5242880 0.05 0 -0.175 0 0.999999999760128
+1048576 0 2 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 0.999999999869254
+1048576 0 2 0 0 5242880 4587520 5242880 0.05 0 -0.125 0 1.00000000099849
+1048576 0 2 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 1.00000000200092
+1048576 0 2 0 0 5242880 4849664 5242880 0.05 0 -0.075 0 1.00000000057078
+1048576 0 2 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 1.00000000094713
+1048576 0 2 0 0 5242880 5111808 5242880 0.05 0 -0.025 0 1.00000000020061
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 2 0 0 5242880 5373952 5242880 0.05 0 0.025 0 1.00000000020061
+1048576 0 2 0 0 5242880 5505024 5242880 0.05 0 0.05 0 1.00000000094713
+1048576 0 2 0 0 5242880 5636096 5242880 0.05 0 0.075 0 1.00000000057078
+1048576 0 2 0 0 5242880 5767168 5242880 0.05 0 0.1 0 1.00000000200092
+1048576 0 2 0 0 5242880 5898240 5242880 0.05 0 0.125 0 1.00000000099849
+1048576 0 2 0 0 5242880 6029312 5242880 0.05 0 0.15 0 0.999999999869254
+1048576 0 2 0 0 5242880 6160384 5242880 0.05 0 0.175 0 0.999999999760128
+1048576 0 2 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0.999999999908662
+1048576 0 2 0 0 5242880 6422528 5242880 0.05 0 0.225 0 0.999999999864206
+1048576 0 2 0 0 5242880 6553600 5242880 0.05 0 0.25 0 0.999999999838278
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 3932160 5242880 0.05625 0 -0.25 0 0.999999999864691
+1179648 0 2 0 0 5242880 4063232 5242880 0.05625 0 -0.225 0 0.999999999920328
+1179648 0 2 0 0 5242880 4194304 5242880 0.05625 0 -0.2 0 0.999999999977901
+1179648 0 2 0 0 5242880 4325376 5242880 0.05625 0 -0.175 0 0.999999999778339
+1179648 0 2 0 0 5242880 4456448 5242880 0.05625 0 -0.15 0 0.999999999825109
+1179648 0 2 0 0 5242880 4587520 5242880 0.05625 0 -0.125 0 1.0000000009088
+1179648 0 2 0 0 5242880 4718592 5242880 0.05625 0 -0.1 0 1.00000000187364
+1179648 0 2 0 0 5242880 4849664 5242880 0.05625 0 -0.075 0 1.00000000080762
+1179648 0 2 0 0 5242880 4980736 5242880 0.05625 0 -0.05 0 1.00000000126869
+1179648 0 2 0 0 5242880 5111808 5242880 0.05625 0 -0.025 0 1.0000000003447
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.00000000046233
+1179648 0 2 0 0 5242880 5373952 5242880 0.05625 0 0.025 0 1.0000000003447
+1179648 0 2 0 0 5242880 5505024 5242880 0.05625 0 0.05 0 1.00000000126869
+1179648 0 2 0 0 5242880 5636096 5242880 0.05625 0 0.075 0 1.00000000080762
+1179648 0 2 0 0 5242880 5767168 5242880 0.05625 0 0.1 0 1.00000000187364
+1179648 0 2 0 0 5242880 5898240 5242880 0.05625 0 0.125 0 1.0000000009088
+1179648 0 2 0 0 5242880 6029312 5242880 0.05625 0 0.15 0 0.999999999825109
+1179648 0 2 0 0 5242880 6160384 5242880 0.05625 0 0.175 0 0.999999999778339
+1179648 0 2 0 0 5242880 6291456 5242880 0.05625 0 0.2 0 0.999999999977901
+1179648 0 2 0 0 5242880 6422528 5242880 0.05625 0 0.225 0 0.999999999920328
+1179648 0 2 0 0 5242880 6553600 5242880 0.05625 0 0.25 0 0.999999999864691
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 2621440 5242880 0.0625 0 -0.5 0 1.00000000000016
+1310720 0 1 0 0 5242880 2883584 5242880 0.0625 0 -0.45 0 0.999999999995216
+1310720 0 1 0 0 5242880 3145728 5242880 0.0625 0 -0.4 0 0.999999999995699
+1310720 0 1 0 0 5242880 3407872 5242880 0.0625 0 -0.35 0 1.00000000002603
+1310720 0 1 0 0 5242880 3670016 5242880 0.0625 0 -0.3 0 1.00000000003931
+1310720 0 1 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 0.999999999848368
+1310720 0 1 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 1.00000000005881
+1310720 0 1 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 0.999999999779366
+1310720 0 1 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 1.00000000176887
+1310720 0 1 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 1.00000000163742
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+1310720 0 1 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 1.00000000163742
+1310720 0 1 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 1.00000000176887
+1310720 0 1 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 0.999999999779366
+1310720 0 1 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 1.00000000005881
+1310720 0 1 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 0.999999999848368
+1310720 0 1 0 0 5242880 6815744 5242880 0.0625 0 0.3 0 1.00000000003931
+1310720 0 1 0 0 5242880 7077888 5242880 0.0625 0 0.35 0 1.00000000002603
+1310720 0 1 0 0 5242880 7340032 5242880 0.0625 0 0.4 0 0.999999999995699
+1310720 0 1 0 0 5242880 7602176 5242880 0.0625 0 0.45 0 0.999999999995216
+1310720 0 1 0 0 5242880 7864320 5242880 0.0625 0 0.5 0 1.00000000000016
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 0.999999999848368
+1310720 0 2 0 0 5242880 4063232 5242880 0.0625 0 -0.225 0 0.99999999995912
+1310720 0 2 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 1.00000000005881
+1310720 0 2 0 0 5242880 4325376 5242880 0.0625 0 -0.175 0 0.999999999807897
+1310720 0 2 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 0.999999999779366
+1310720 0 2 0 0 5242880 4587520 5242880 0.0625 0 -0.125 0 1.00000000076487
+1310720 0 2 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 1.00000000176887
+1310720 0 2 0 0 5242880 4849664 5242880 0.0625 0 -0.075 0 1.00000000108602
+1310720 0 2 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 1.00000000163742
+1310720 0 2 0 0 5242880 5111808 5242880 0.0625 0 -0.025 0 1.00000000054727
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+1310720 0 2 0 0 5242880 5373952 5242880 0.0625 0 0.025 0 1.00000000054727
+1310720 0 2 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 1.00000000163742
+1310720 0 2 0 0 5242880 5636096 5242880 0.0625 0 0.075 0 1.00000000108602
+1310720 0 2 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 1.00000000176887
+1310720 0 2 0 0 5242880 5898240 5242880 0.0625 0 0.125 0 1.00000000076487
+1310720 0 2 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 0.999999999779366
+1310720 0 2 0 0 5242880 6160384 5242880 0.0625 0 0.175 0 0.999999999807897
+1310720 0 2 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 1.00000000005881
+1310720 0 2 0 0 5242880 6422528 5242880 0.0625 0 0.225 0 0.99999999995912
+1310720 0 2 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 0.999999999848368
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 3932160 5242880 0.06875 0 -0.25 0 0.999999999837646
+1441792 0 2 0 0 5242880 4063232 5242880 0.06875 0 -0.225 0 1.00000000000483
+1441792 0 2 0 0 5242880 4194304 5242880 0.06875 0 -0.2 0 1.00000000014767
+1441792 0 2 0 0 5242880 4325376 5242880 0.06875 0 -0.175 0 0.999999999846531
+1441792 0 2 0 0 5242880 4456448 5242880 0.06875 0 -0.15 0 0.999999999744461
+1441792 0 2 0 0 5242880 4587520 5242880 0.06875 0 -0.125 0 1.00000000066039
+1441792 0 2 0 0 5242880 4718592 5242880 0.06875 0 -0.1 0 1.00000000170236
+1441792 0 2 0 0 5242880 4849664 5242880 0.06875 0 -0.075 0 1.00000000140117
+1441792 0 2 0 0 5242880 4980736 5242880 0.06875 0 -0.05 0 1.00000000205035
+1441792 0 2 0 0 5242880 5111808 5242880 0.06875 0 -0.025 0 1.00000000081595
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.00000000107976
+1441792 0 2 0 0 5242880 5373952 5242880 0.06875 0 0.025 0 1.00000000081595
+1441792 0 2 0 0 5242880 5505024 5242880 0.06875 0 0.05 0 1.00000000205035
+1441792 0 2 0 0 5242880 5636096 5242880 0.06875 0 0.075 0 1.00000000140117
+1441792 0 2 0 0 5242880 5767168 5242880 0.06875 0 0.1 0 1.00000000170236
+1441792 0 2 0 0 5242880 5898240 5242880 0.06875 0 0.125 0 1.00000000066039
+1441792 0 2 0 0 5242880 6029312 5242880 0.06875 0 0.15 0 0.999999999744461
+1441792 0 2 0 0 5242880 6160384 5242880 0.06875 0 0.175 0 0.999999999846531
+1441792 0 2 0 0 5242880 6291456 5242880 0.06875 0 0.2 0 1.00000000014767
+1441792 0 2 0 0 5242880 6422528 5242880 0.06875 0 0.225 0 1.00000000000483
+1441792 0 2 0 0 5242880 6553600 5242880 0.06875 0 0.25 0 0.999999999837646
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 0 5242880 0.075 0 -1 0 1
+1572864 0 0 0 0 5242880 524288 5242880 0.075 0 -0.9 0 1
+1572864 0 0 0 0 5242880 1048576 5242880 0.075 0 -0.8 0 1
+1572864 0 0 0 0 5242880 1572864 5242880 0.075 0 -0.7 0 1
+1572864 0 0 0 0 5242880 2097152 5242880 0.075 0 -0.6 0 0.999999999999962
+1572864 0 0 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 1.0000000000004
+1572864 0 0 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 0.99999999999281
+1572864 0 0 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 1.00000000005299
+1572864 0 0 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 1.00000000024572
+1572864 0 0 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 1.00000000167165
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 0 0 0 5242880 5767168 5242880 0.075 0 0.1 0 1.00000000167165
+1572864 0 0 0 0 5242880 6291456 5242880 0.075 0 0.2 0 1.00000000024572
+1572864 0 0 0 0 5242880 6815744 5242880 0.075 0 0.3 0 1.00000000005299
+1572864 0 0 0 0 5242880 7340032 5242880 0.075 0 0.4 0 0.99999999999281
+1572864 0 0 0 0 5242880 7864320 5242880 0.075 0 0.5 0 1.0000000000004
+1572864 0 0 0 0 5242880 8388608 5242880 0.075 0 0.6 0 0.999999999999962
+1572864 0 0 0 0 5242880 8912896 5242880 0.075 0 0.7 0 1
+1572864 0 0 0 0 5242880 9437184 5242880 0.075 0 0.8 0 1
+1572864 0 0 0 0 5242880 9961472 5242880 0.075 0 0.9 0 1
+1572864 0 0 0 0 5242880 10485760 5242880 0.075 0 1 0 1
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 1.0000000000004
+1572864 0 1 0 0 5242880 2883584 5242880 0.075 0 -0.45 0 0.999999999992871
+1572864 0 1 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 0.99999999999281
+1572864 0 1 0 0 5242880 3407872 5242880 0.075 0 -0.35 0 1.00000000001038
+1572864 0 1 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 1.00000000005299
+1572864 0 1 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 1.000000000064
+1572864 0 1 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 1.00000000024572
+1572864 0 1 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 0.999999999716247
+1572864 0 1 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 1.00000000167165
+1572864 0 1 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 1.00000000250217
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 1 0 0 5242880 5505024 5242880 0.075 0 0.05 0 1.00000000250217
+1572864 0 1 0 0 5242880 5767168 5242880 0.075 0 0.1 0 1.00000000167165
+1572864 0 1 0 0 5242880 6029312 5242880 0.075 0 0.15 0 0.999999999716247
+1572864 0 1 0 0 5242880 6291456 5242880 0.075 0 0.2 0 1.00000000024572
+1572864 0 1 0 0 5242880 6553600 5242880 0.075 0 0.25 0 1.000000000064
+1572864 0 1 0 0 5242880 6815744 5242880 0.075 0 0.3 0 1.00000000005299
+1572864 0 1 0 0 5242880 7077888 5242880 0.075 0 0.35 0 1.00000000001038
+1572864 0 1 0 0 5242880 7340032 5242880 0.075 0 0.4 0 0.99999999999281
+1572864 0 1 0 0 5242880 7602176 5242880 0.075 0 0.45 0 0.999999999992871
+1572864 0 1 0 0 5242880 7864320 5242880 0.075 0 0.5 0 1.0000000000004
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 1.000000000064
+1572864 0 2 0 0 5242880 4063232 5242880 0.075 0 -0.225 0 1.00000000018864
+1572864 0 2 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 1.00000000024572
+1572864 0 2 0 0 5242880 4325376 5242880 0.075 0 -0.175 0 0.99999999987013
+1572864 0 2 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 0.999999999716247
+1572864 0 2 0 0 5242880 4587520 5242880 0.075 0 -0.125 0 1.00000000060895
+1572864 0 2 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 1.00000000167165
+1572864 0 2 0 0 5242880 4849664 5242880 0.075 0 -0.075 0 1.00000000174461
+1572864 0 2 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 1.00000000250217
+1572864 0 2 0 0 5242880 5111808 5242880 0.075 0 -0.025 0 1.00000000115522
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 2 0 0 5242880 5373952 5242880 0.075 0 0.025 0 1.00000000115522
+1572864 0 2 0 0 5242880 5505024 5242880 0.075 0 0.05 0 1.00000000250217
+1572864 0 2 0 0 5242880 5636096 5242880 0.075 0 0.075 0 1.00000000174461
+1572864 0 2 0 0 5242880 5767168 5242880 0.075 0 0.1 0 1.00000000167165
+1572864 0 2 0 0 5242880 5898240 5242880 0.075 0 0.125 0 1.00000000060895
+1572864 0 2 0 0 5242880 6029312 5242880 0.075 0 0.15 0 0.999999999716247
+1572864 0 2 0 0 5242880 6160384 5242880 0.075 0 0.175 0 0.99999999987013
+1572864 0 2 0 0 5242880 6291456 5242880 0.075 0 0.2 0 1.00000000024572
+1572864 0 2 0 0 5242880 6422528 5242880 0.075 0 0.225 0 1.00000000018864
+1572864 0 2 0 0 5242880 6553600 5242880 0.075 0 0.25 0 1.000000000064
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 3932160 5242880 0.08125 0 -0.25 0 1.00000000009816
+1703936 0 2 0 0 5242880 4063232 5242880 0.08125 0 -0.225 0 1.00000000027139
+1703936 0 2 0 0 5242880 4194304 5242880 0.08125 0 -0.2 0 1.00000000035833
+1703936 0 2 0 0 5242880 4325376 5242880 0.08125 0 -0.175 0 0.99999999993576
+1703936 0 2 0 0 5242880 4456448 5242880 0.08125 0 -0.15 0 0.999999999707798
+1703936 0 2 0 0 5242880 4587520 5242880 0.08125 0 -0.125 0 1.00000000050288
+1703936 0 2 0 0 5242880 4718592 5242880 0.08125 0 -0.1 0 1.00000000167849
+1703936 0 2 0 0 5242880 4849664 5242880 0.08125 0 -0.075 0 1.00000000210511
+1703936 0 2 0 0 5242880 4980736 5242880 0.08125 0 -0.05 0 1.00000000298471
+1703936 0 2 0 0 5242880 5111808 5242880 0.08125 0 -0.025 0 1.00000000156541
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.00000000205505
+1703936 0 2 0 0 5242880 5373952 5242880 0.08125 0 0.025 0 1.00000000156541
+1703936 0 2 0 0 5242880 5505024 5242880 0.08125 0 0.05 0 1.00000000298471
+1703936 0 2 0 0 5242880 5636096 5242880 0.08125 0 0.075 0 1.00000000210511
+1703936 0 2 0 0 5242880 5767168 5242880 0.08125 0 0.1 0 1.00000000167849
+1703936 0 2 0 0 5242880 5898240 5242880 0.08125 0 0.125 0 1.00000000050288
+1703936 0 2 0 0 5242880 6029312 5242880 0.08125 0 0.15 0 0.999999999707798
+1703936 0 2 0 0 5242880 6160384 5242880 0.08125 0 0.175 0 0.99999999993576
+1703936 0 2 0 0 5242880 6291456 5242880 0.08125 0 0.2 0 1.00000000035833
+1703936 0 2 0 0 5242880 6422528 5242880 0.08125 0 0.225 0 1.00000000027139
+1703936 0 2 0 0 5242880 6553600 5242880 0.08125 0 0.25 0 1.00000000009816
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 2621440 5242880 0.0875 0 -0.5 0 1.00000000000087
+1835008 0 1 0 0 5242880 2883584 5242880 0.0875 0 -0.45 0 0.999999999991356
+1835008 0 1 0 0 5242880 3145728 5242880 0.0875 0 -0.4 0 0.999999999990733
+1835008 0 1 0 0 5242880 3407872 5242880 0.0875 0 -0.35 0 1.00000000001404
+1835008 0 1 0 0 5242880 3670016 5242880 0.0875 0 -0.3 0 1.00000000006281
+1835008 0 1 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 1.00000000008321
+1835008 0 1 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 1.00000000048371
+1835008 0 1 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 0.999999999714756
+1835008 0 1 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 1.00000000171941
+1835008 0 1 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 1.0000000034867
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+1835008 0 1 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 1.0000000034867
+1835008 0 1 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 1.00000000171941
+1835008 0 1 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 0.999999999714756
+1835008 0 1 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 1.00000000048371
+1835008 0 1 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 1.00000000008321
+1835008 0 1 0 0 5242880 6815744 5242880 0.0875 0 0.3 0 1.00000000006281
+1835008 0 1 0 0 5242880 7077888 5242880 0.0875 0 0.35 0 1.00000000001404
+1835008 0 1 0 0 5242880 7340032 5242880 0.0875 0 0.4 0 0.999999999990733
+1835008 0 1 0 0 5242880 7602176 5242880 0.0875 0 0.45 0 0.999999999991356
+1835008 0 1 0 0 5242880 7864320 5242880 0.0875 0 0.5 0 1.00000000000087
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 1.00000000008321
+1835008 0 2 0 0 5242880 4063232 5242880 0.0875 0 -0.225 0 1.00000000033279
+1835008 0 2 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 1.00000000048371
+1835008 0 2 0 0 5242880 4325376 5242880 0.0875 0 -0.175 0 0.999999999998976
+1835008 0 2 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 0.999999999714756
+1835008 0 2 0 0 5242880 4587520 5242880 0.0875 0 -0.125 0 1.00000000055857
+1835008 0 2 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 1.00000000171941
+1835008 0 2 0 0 5242880 4849664 5242880 0.0875 0 -0.075 0 1.00000000246804
+1835008 0 2 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 1.0000000034867
+1835008 0 2 0 0 5242880 5111808 5242880 0.0875 0 -0.025 0 1.00000000204188
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+1835008 0 2 0 0 5242880 5373952 5242880 0.0875 0 0.025 0 1.00000000204188
+1835008 0 2 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 1.0000000034867
+1835008 0 2 0 0 5242880 5636096 5242880 0.0875 0 0.075 0 1.00000000246804
+1835008 0 2 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 1.00000000171941
+1835008 0 2 0 0 5242880 5898240 5242880 0.0875 0 0.125 0 1.00000000055857
+1835008 0 2 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 0.999999999714756
+1835008 0 2 0 0 5242880 6160384 5242880 0.0875 0 0.175 0 0.999999999998976
+1835008 0 2 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 1.00000000048371
+1835008 0 2 0 0 5242880 6422528 5242880 0.0875 0 0.225 0 1.00000000033279
+1835008 0 2 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 1.00000000008321
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 3932160 5242880 0.09375 0 -0.25 0 1.00000000006939
+1966080 0 2 0 0 5242880 4063232 5242880 0.09375 0 -0.225 0 1.00000000039637
+1966080 0 2 0 0 5242880 4194304 5242880 0.09375 0 -0.2 0 1.00000000061474
+1966080 0 2 0 0 5242880 4325376 5242880 0.09375 0 -0.175 0 1.00000000010307
+1966080 0 2 0 0 5242880 4456448 5242880 0.09375 0 -0.15 0 0.99999999974855
+1966080 0 2 0 0 5242880 4587520 5242880 0.09375 0 -0.125 0 1.00000000046383
+1966080 0 2 0 0 5242880 4718592 5242880 0.09375 0 -0.1 0 1.00000000178245
+1966080 0 2 0 0 5242880 4849664 5242880 0.09375 0 -0.075 0 1.0000000028168
+1966080 0 2 0 0 5242880 4980736 5242880 0.09375 0 -0.05 0 1.0000000039935
+1966080 0 2 0 0 5242880 5111808 5242880 0.09375 0 -0.025 0 1.00000000257445
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.0000000033708
+1966080 0 2 0 0 5242880 5373952 5242880 0.09375 0 0.025 0 1.00000000257445
+1966080 0 2 0 0 5242880 5505024 5242880 0.09375 0 0.05 0 1.0000000039935
+1966080 0 2 0 0 5242880 5636096 5242880 0.09375 0 0.075 0 1.0000000028168
+1966080 0 2 0 0 5242880 5767168 5242880 0.09375 0 0.1 0 1.00000000178245
+1966080 0 2 0 0 5242880 5898240 5242880 0.09375 0 0.125 0 1.00000000046383
+1966080 0 2 0 0 5242880 6029312 5242880 0.09375 0 0.15 0 0.99999999974855
+1966080 0 2 0 0 5242880 6160384 5242880 0.09375 0 0.175 0 1.00000000010307
+1966080 0 2 0 0 5242880 6291456 5242880 0.09375 0 0.2 0 1.00000000061474
+1966080 0 2 0 0 5242880 6422528 5242880 0.09375 0 0.225 0 1.00000000039637
+1966080 0 2 0 0 5242880 6553600 5242880 0.09375 0 0.25 0 1.00000000006939
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 0 5242880 0.1 0 -1 0 1
+2097152 0 0 0 0 5242880 524288 5242880 0.1 0 -0.9 0 1
+2097152 0 0 0 0 5242880 1048576 5242880 0.1 0 -0.8 0 0.999999999999999
+2097152 0 0 0 0 5242880 1572864 5242880 0.1 0 -0.7 0 1.00000000000001
+2097152 0 0 0 0 5242880 2097152 5242880 0.1 0 -0.6 0 0.999999999999814
+2097152 0 0 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 1.00000000000152
+2097152 0 0 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 0.999999999988956
+2097152 0 0 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 1.00000000007015
+2097152 0 0 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 1.00000000075378
+2097152 0 0 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 1.00000000186308
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 0 0 0 5242880 5767168 5242880 0.1 0 0.1 0 1.00000000186308
+2097152 0 0 0 0 5242880 6291456 5242880 0.1 0 0.2 0 1.00000000075378
+2097152 0 0 0 0 5242880 6815744 5242880 0.1 0 0.3 0 1.00000000007015
+2097152 0 0 0 0 5242880 7340032 5242880 0.1 0 0.4 0 0.999999999988956
+2097152 0 0 0 0 5242880 7864320 5242880 0.1 0 0.5 0 1.00000000000152
+2097152 0 0 0 0 5242880 8388608 5242880 0.1 0 0.6 0 0.999999999999814
+2097152 0 0 0 0 5242880 8912896 5242880 0.1 0 0.7 0 1.00000000000001
+2097152 0 0 0 0 5242880 9437184 5242880 0.1 0 0.8 0 0.999999999999999
+2097152 0 0 0 0 5242880 9961472 5242880 0.1 0 0.9 0 1
+2097152 0 0 0 0 5242880 10485760 5242880 0.1 0 1 0 1
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 1.00000000000152
+2097152 0 1 0 0 5242880 2883584 5242880 0.1 0 -0.45 0 0.999999999990269
+2097152 0 1 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 0.999999999988956
+2097152 0 1 0 0 5242880 3407872 5242880 0.1 0 -0.35 0 0.999999999986041
+2097152 0 1 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 1.00000000007015
+2097152 0 1 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 1.00000000034771
+2097152 0 1 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 1.00000000075378
+2097152 0 1 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 0.999999999805372
+2097152 0 1 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 1.00000000186308
+2097152 0 1 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 1.00000000448718
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 1 0 0 5242880 5505024 5242880 0.1 0 0.05 0 1.00000000448718
+2097152 0 1 0 0 5242880 5767168 5242880 0.1 0 0.1 0 1.00000000186308
+2097152 0 1 0 0 5242880 6029312 5242880 0.1 0 0.15 0 0.999999999805372
+2097152 0 1 0 0 5242880 6291456 5242880 0.1 0 0.2 0 1.00000000075378
+2097152 0 1 0 0 5242880 6553600 5242880 0.1 0 0.25 0 1.00000000034771
+2097152 0 1 0 0 5242880 6815744 5242880 0.1 0 0.3 0 1.00000000007015
+2097152 0 1 0 0 5242880 7077888 5242880 0.1 0 0.35 0 0.999999999986041
+2097152 0 1 0 0 5242880 7340032 5242880 0.1 0 0.4 0 0.999999999988956
+2097152 0 1 0 0 5242880 7602176 5242880 0.1 0 0.45 0 0.999999999990269
+2097152 0 1 0 0 5242880 7864320 5242880 0.1 0 0.5 0 1.00000000000152
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 1.00000000034771
+2097152 0 2 0 0 5242880 4063232 5242880 0.1 0 -0.225 0 1.00000000062737
+2097152 0 2 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 1.00000000075378
+2097152 0 2 0 0 5242880 4325376 5242880 0.1 0 -0.175 0 1.00000000017635
+2097152 0 2 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 0.999999999805372
+2097152 0 2 0 0 5242880 4587520 5242880 0.1 0 -0.125 0 1.00000000061094
+2097152 0 2 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 1.00000000186308
+2097152 0 2 0 0 5242880 4849664 5242880 0.1 0 -0.075 0 1.00000000313278
+2097152 0 2 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 1.00000000448718
+2097152 0 2 0 0 5242880 5111808 5242880 0.1 0 -0.025 0 1.00000000314711
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 2 0 0 5242880 5373952 5242880 0.1 0 0.025 0 1.00000000314711
+2097152 0 2 0 0 5242880 5505024 5242880 0.1 0 0.05 0 1.00000000448718
+2097152 0 2 0 0 5242880 5636096 5242880 0.1 0 0.075 0 1.00000000313278
+2097152 0 2 0 0 5242880 5767168 5242880 0.1 0 0.1 0 1.00000000186308
+2097152 0 2 0 0 5242880 5898240 5242880 0.1 0 0.125 0 1.00000000061094
+2097152 0 2 0 0 5242880 6029312 5242880 0.1 0 0.15 0 0.999999999805372
+2097152 0 2 0 0 5242880 6160384 5242880 0.1 0 0.175 0 1.00000000017635
+2097152 0 2 0 0 5242880 6291456 5242880 0.1 0 0.2 0 1.00000000075378
+2097152 0 2 0 0 5242880 6422528 5242880 0.1 0 0.225 0 1.00000000062737
+2097152 0 2 0 0 5242880 6553600 5242880 0.1 0 0.25 0 1.00000000034771
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phit.z.asc b/Carpet/CarpetInterp/test/waveinterp/phit.z.asc
new file mode 100644
index 000000000..33a83eade
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phit.z.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phit z (phit)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 0 0 0 0 -1 1
+0 0 0 0 0 5242880 5242880 524288 0 0 0 -0.9 1
+0 0 0 0 0 5242880 5242880 1048576 0 0 0 -0.8 1
+0 0 0 0 0 5242880 5242880 1572864 0 0 0 -0.7 1
+0 0 0 0 0 5242880 5242880 2097152 0 0 0 -0.6 1
+0 0 0 0 0 5242880 5242880 2621440 0 0 0 -0.5 1
+0 0 0 0 0 5242880 5242880 3145728 0 0 0 -0.4 1
+0 0 0 0 0 5242880 5242880 3670016 0 0 0 -0.3 1
+0 0 0 0 0 5242880 5242880 4194304 0 0 0 -0.2 1
+0 0 0 0 0 5242880 5242880 4718592 0 0 0 -0.1 1
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 0 0 0 5242880 5242880 5767168 0 0 0 0.1 1
+0 0 0 0 0 5242880 5242880 6291456 0 0 0 0.2 1
+0 0 0 0 0 5242880 5242880 6815744 0 0 0 0.3 1
+0 0 0 0 0 5242880 5242880 7340032 0 0 0 0.4 1
+0 0 0 0 0 5242880 5242880 7864320 0 0 0 0.5 1
+0 0 0 0 0 5242880 5242880 8388608 0 0 0 0.6 1
+0 0 0 0 0 5242880 5242880 8912896 0 0 0 0.7 1
+0 0 0 0 0 5242880 5242880 9437184 0 0 0 0.8 1
+0 0 0 0 0 5242880 5242880 9961472 0 0 0 0.9 1
+0 0 0 0 0 5242880 5242880 10485760 0 0 0 1 1
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 2621440 0 0 0 -0.5 1
+0 0 1 0 0 5242880 5242880 2883584 0 0 0 -0.45 1
+0 0 1 0 0 5242880 5242880 3145728 0 0 0 -0.4 1
+0 0 1 0 0 5242880 5242880 3407872 0 0 0 -0.35 1
+0 0 1 0 0 5242880 5242880 3670016 0 0 0 -0.3 1
+0 0 1 0 0 5242880 5242880 3932160 0 0 0 -0.25 1
+0 0 1 0 0 5242880 5242880 4194304 0 0 0 -0.2 1
+0 0 1 0 0 5242880 5242880 4456448 0 0 0 -0.15 1
+0 0 1 0 0 5242880 5242880 4718592 0 0 0 -0.1 1
+0 0 1 0 0 5242880 5242880 4980736 0 0 0 -0.05 1
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 1 0 0 5242880 5242880 5505024 0 0 0 0.05 1
+0 0 1 0 0 5242880 5242880 5767168 0 0 0 0.1 1
+0 0 1 0 0 5242880 5242880 6029312 0 0 0 0.15 1
+0 0 1 0 0 5242880 5242880 6291456 0 0 0 0.2 1
+0 0 1 0 0 5242880 5242880 6553600 0 0 0 0.25 1
+0 0 1 0 0 5242880 5242880 6815744 0 0 0 0.3 1
+0 0 1 0 0 5242880 5242880 7077888 0 0 0 0.35 1
+0 0 1 0 0 5242880 5242880 7340032 0 0 0 0.4 1
+0 0 1 0 0 5242880 5242880 7602176 0 0 0 0.45 1
+0 0 1 0 0 5242880 5242880 7864320 0 0 0 0.5 1
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 3932160 0 0 0 -0.25 1
+0 0 2 0 0 5242880 5242880 4063232 0 0 0 -0.225 1
+0 0 2 0 0 5242880 5242880 4194304 0 0 0 -0.2 1
+0 0 2 0 0 5242880 5242880 4325376 0 0 0 -0.175 1
+0 0 2 0 0 5242880 5242880 4456448 0 0 0 -0.15 1
+0 0 2 0 0 5242880 5242880 4587520 0 0 0 -0.125 1
+0 0 2 0 0 5242880 5242880 4718592 0 0 0 -0.1 1
+0 0 2 0 0 5242880 5242880 4849664 0 0 0 -0.075 1
+0 0 2 0 0 5242880 5242880 4980736 0 0 0 -0.05 1
+0 0 2 0 0 5242880 5242880 5111808 0 0 0 -0.025 1
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 1
+0 0 2 0 0 5242880 5242880 5373952 0 0 0 0.025 1
+0 0 2 0 0 5242880 5242880 5505024 0 0 0 0.05 1
+0 0 2 0 0 5242880 5242880 5636096 0 0 0 0.075 1
+0 0 2 0 0 5242880 5242880 5767168 0 0 0 0.1 1
+0 0 2 0 0 5242880 5242880 5898240 0 0 0 0.125 1
+0 0 2 0 0 5242880 5242880 6029312 0 0 0 0.15 1
+0 0 2 0 0 5242880 5242880 6160384 0 0 0 0.175 1
+0 0 2 0 0 5242880 5242880 6291456 0 0 0 0.2 1
+0 0 2 0 0 5242880 5242880 6422528 0 0 0 0.225 1
+0 0 2 0 0 5242880 5242880 6553600 0 0 0 0.25 1
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 3932160 0.00625 0 0 -0.25 1
+131072 0 2 0 0 5242880 5242880 4063232 0.00625 0 0 -0.225 1
+131072 0 2 0 0 5242880 5242880 4194304 0.00625 0 0 -0.2 1
+131072 0 2 0 0 5242880 5242880 4325376 0.00625 0 0 -0.175 1
+131072 0 2 0 0 5242880 5242880 4456448 0.00625 0 0 -0.15 1
+131072 0 2 0 0 5242880 5242880 4587520 0.00625 0 0 -0.125 1
+131072 0 2 0 0 5242880 5242880 4718592 0.00625 0 0 -0.1 1
+131072 0 2 0 0 5242880 5242880 4849664 0.00625 0 0 -0.075 1
+131072 0 2 0 0 5242880 5242880 4980736 0.00625 0 0 -0.05 1
+131072 0 2 0 0 5242880 5242880 5111808 0.00625 0 0 -0.025 1
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 1
+131072 0 2 0 0 5242880 5242880 5373952 0.00625 0 0 0.025 1
+131072 0 2 0 0 5242880 5242880 5505024 0.00625 0 0 0.05 1
+131072 0 2 0 0 5242880 5242880 5636096 0.00625 0 0 0.075 1
+131072 0 2 0 0 5242880 5242880 5767168 0.00625 0 0 0.1 1
+131072 0 2 0 0 5242880 5242880 5898240 0.00625 0 0 0.125 1
+131072 0 2 0 0 5242880 5242880 6029312 0.00625 0 0 0.15 1
+131072 0 2 0 0 5242880 5242880 6160384 0.00625 0 0 0.175 1
+131072 0 2 0 0 5242880 5242880 6291456 0.00625 0 0 0.2 1
+131072 0 2 0 0 5242880 5242880 6422528 0.00625 0 0 0.225 1
+131072 0 2 0 0 5242880 5242880 6553600 0.00625 0 0 0.25 1
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 2621440 0.0125 0 0 -0.5 1
+262144 0 1 0 0 5242880 5242880 2883584 0.0125 0 0 -0.45 1
+262144 0 1 0 0 5242880 5242880 3145728 0.0125 0 0 -0.4 1
+262144 0 1 0 0 5242880 5242880 3407872 0.0125 0 0 -0.35 1
+262144 0 1 0 0 5242880 5242880 3670016 0.0125 0 0 -0.3 1
+262144 0 1 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 1
+262144 0 1 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 1
+262144 0 1 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 1
+262144 0 1 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 1.00000000277135
+262144 0 1 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 1.00000000000728
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+262144 0 1 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 1.00000000000728
+262144 0 1 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 1.00000000277135
+262144 0 1 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 1
+262144 0 1 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 1
+262144 0 1 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 1
+262144 0 1 0 0 5242880 5242880 6815744 0.0125 0 0 0.3 1
+262144 0 1 0 0 5242880 5242880 7077888 0.0125 0 0 0.35 1
+262144 0 1 0 0 5242880 5242880 7340032 0.0125 0 0 0.4 1
+262144 0 1 0 0 5242880 5242880 7602176 0.0125 0 0 0.45 1
+262144 0 1 0 0 5242880 5242880 7864320 0.0125 0 0 0.5 1
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 1
+262144 0 2 0 0 5242880 5242880 4063232 0.0125 0 0 -0.225 1
+262144 0 2 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 1
+262144 0 2 0 0 5242880 5242880 4325376 0.0125 0 0 -0.175 0.999999999826791
+262144 0 2 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 1
+262144 0 2 0 0 5242880 5242880 4587520 0.0125 0 0 -0.125 1.00000000155843
+262144 0 2 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 1.00000000277135
+262144 0 2 0 0 5242880 5242880 4849664 0.0125 0 0 -0.075 0.999999999998383
+262144 0 2 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 1.00000000000728
+262144 0 2 0 0 5242880 5242880 5111808 0.0125 0 0 -0.025 1
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 1
+262144 0 2 0 0 5242880 5242880 5373952 0.0125 0 0 0.025 1
+262144 0 2 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 1.00000000000728
+262144 0 2 0 0 5242880 5242880 5636096 0.0125 0 0 0.075 0.999999999998383
+262144 0 2 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 1.00000000277135
+262144 0 2 0 0 5242880 5242880 5898240 0.0125 0 0 0.125 1.00000000155843
+262144 0 2 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 1
+262144 0 2 0 0 5242880 5242880 6160384 0.0125 0 0 0.175 0.999999999826791
+262144 0 2 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 1
+262144 0 2 0 0 5242880 5242880 6422528 0.0125 0 0 0.225 1
+262144 0 2 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 1
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 3932160 0.01875 0 0 -0.25 1
+393216 0 2 0 0 5242880 5242880 4063232 0.01875 0 0 -0.225 0.999999999945108
+393216 0 2 0 0 5242880 5242880 4194304 0.01875 0 0 -0.2 0.999999999902543
+393216 0 2 0 0 5242880 5242880 4325376 0.01875 0 0 -0.175 0.99999999974986
+393216 0 2 0 0 5242880 5242880 4456448 0.01875 0 0 -0.15 1.00000000000116
+393216 0 2 0 0 5242880 5242880 4587520 0.01875 0 0 -0.125 1.00000000176809
+393216 0 2 0 0 5242880 5242880 4718592 0.01875 0 0 -0.1 1.00000000270433
+393216 0 2 0 0 5242880 5242880 4849664 0.01875 0 0 -0.075 1.00000000000657
+393216 0 2 0 0 5242880 5242880 4980736 0.01875 0 0 -0.05 1.00000000005092
+393216 0 2 0 0 5242880 5242880 5111808 0.01875 0 0 -0.025 1.00000000000043
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 1.00000000000068
+393216 0 2 0 0 5242880 5242880 5373952 0.01875 0 0 0.025 1.00000000000043
+393216 0 2 0 0 5242880 5242880 5505024 0.01875 0 0 0.05 1.00000000005092
+393216 0 2 0 0 5242880 5242880 5636096 0.01875 0 0 0.075 1.00000000000657
+393216 0 2 0 0 5242880 5242880 5767168 0.01875 0 0 0.1 1.00000000270433
+393216 0 2 0 0 5242880 5242880 5898240 0.01875 0 0 0.125 1.00000000176809
+393216 0 2 0 0 5242880 5242880 6029312 0.01875 0 0 0.15 1.00000000000116
+393216 0 2 0 0 5242880 5242880 6160384 0.01875 0 0 0.175 0.99999999974986
+393216 0 2 0 0 5242880 5242880 6291456 0.01875 0 0 0.2 0.999999999902543
+393216 0 2 0 0 5242880 5242880 6422528 0.01875 0 0 0.225 0.999999999945108
+393216 0 2 0 0 5242880 5242880 6553600 0.01875 0 0 0.25 1
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 0 0.025 0 0 -1 1
+524288 0 0 0 0 5242880 5242880 524288 0.025 0 0 -0.9 1
+524288 0 0 0 0 5242880 5242880 1048576 0.025 0 0 -0.8 1
+524288 0 0 0 0 5242880 5242880 1572864 0.025 0 0 -0.7 1
+524288 0 0 0 0 5242880 5242880 2097152 0.025 0 0 -0.6 1
+524288 0 0 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 1
+524288 0 0 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 1
+524288 0 0 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 1
+524288 0 0 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0.999999999740114
+524288 0 0 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 1.00000000258949
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 0 0 0 5242880 5242880 5767168 0.025 0 0 0.1 1.00000000258949
+524288 0 0 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0.999999999740114
+524288 0 0 0 0 5242880 5242880 6815744 0.025 0 0 0.3 1
+524288 0 0 0 0 5242880 5242880 7340032 0.025 0 0 0.4 1
+524288 0 0 0 0 5242880 5242880 7864320 0.025 0 0 0.5 1
+524288 0 0 0 0 5242880 5242880 8388608 0.025 0 0 0.6 1
+524288 0 0 0 0 5242880 5242880 8912896 0.025 0 0 0.7 1
+524288 0 0 0 0 5242880 5242880 9437184 0.025 0 0 0.8 1
+524288 0 0 0 0 5242880 5242880 9961472 0.025 0 0 0.9 1
+524288 0 0 0 0 5242880 5242880 10485760 0.025 0 0 1 1
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 1
+524288 0 1 0 0 5242880 5242880 2883584 0.025 0 0 -0.45 1
+524288 0 1 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 1
+524288 0 1 0 0 5242880 5242880 3407872 0.025 0 0 -0.35 1.00000000001624
+524288 0 1 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 1
+524288 0 1 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 0.999999999691971
+524288 0 1 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0.999999999740114
+524288 0 1 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 1.0000000000031
+524288 0 1 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 1.00000000258949
+524288 0 1 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 1.00000000013846
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 1 0 0 5242880 5242880 5505024 0.025 0 0 0.05 1.00000000013846
+524288 0 1 0 0 5242880 5242880 5767168 0.025 0 0 0.1 1.00000000258949
+524288 0 1 0 0 5242880 5242880 6029312 0.025 0 0 0.15 1.0000000000031
+524288 0 1 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0.999999999740114
+524288 0 1 0 0 5242880 5242880 6553600 0.025 0 0 0.25 0.999999999691971
+524288 0 1 0 0 5242880 5242880 6815744 0.025 0 0 0.3 1
+524288 0 1 0 0 5242880 5242880 7077888 0.025 0 0 0.35 1.00000000001624
+524288 0 1 0 0 5242880 5242880 7340032 0.025 0 0 0.4 1
+524288 0 1 0 0 5242880 5242880 7602176 0.025 0 0 0.45 1
+524288 0 1 0 0 5242880 5242880 7864320 0.025 0 0 0.5 1
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 0.999999999691971
+524288 0 2 0 0 5242880 5242880 4063232 0.025 0 0 -0.225 0.999999999680354
+524288 0 2 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0.999999999740114
+524288 0 2 0 0 5242880 5242880 4325376 0.025 0 0 -0.175 0.999999999712965
+524288 0 2 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 1.0000000000031
+524288 0 2 0 0 5242880 5242880 4587520 0.025 0 0 -0.125 1.00000000146592
+524288 0 2 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 1.00000000258949
+524288 0 2 0 0 5242880 5242880 4849664 0.025 0 0 -0.075 1.00000000004511
+524288 0 2 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 1.00000000013846
+524288 0 2 0 0 5242880 5242880 5111808 0.025 0 0 -0.025 1.00000000000435
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 1.0000000000064
+524288 0 2 0 0 5242880 5242880 5373952 0.025 0 0 0.025 1.00000000000435
+524288 0 2 0 0 5242880 5242880 5505024 0.025 0 0 0.05 1.00000000013846
+524288 0 2 0 0 5242880 5242880 5636096 0.025 0 0 0.075 1.00000000004511
+524288 0 2 0 0 5242880 5242880 5767168 0.025 0 0 0.1 1.00000000258949
+524288 0 2 0 0 5242880 5242880 5898240 0.025 0 0 0.125 1.00000000146592
+524288 0 2 0 0 5242880 5242880 6029312 0.025 0 0 0.15 1.0000000000031
+524288 0 2 0 0 5242880 5242880 6160384 0.025 0 0 0.175 0.999999999712965
+524288 0 2 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0.999999999740114
+524288 0 2 0 0 5242880 5242880 6422528 0.025 0 0 0.225 0.999999999680354
+524288 0 2 0 0 5242880 5242880 6553600 0.025 0 0 0.25 0.999999999691971
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 3932160 0.03125 0 0 -0.25 0.999999999640443
+655360 0 2 0 0 5242880 5242880 4063232 0.03125 0 0 -0.225 0.999999999647753
+655360 0 2 0 0 5242880 5242880 4194304 0.03125 0 0 -0.2 0.999999999732034
+655360 0 2 0 0 5242880 5242880 4325376 0.03125 0 0 -0.175 0.999999999702523
+655360 0 2 0 0 5242880 5242880 4456448 0.03125 0 0 -0.15 0.999999999984606
+655360 0 2 0 0 5242880 5242880 4587520 0.03125 0 0 -0.125 1.00000000144041
+655360 0 2 0 0 5242880 5242880 4718592 0.03125 0 0 -0.1 1.00000000246101
+655360 0 2 0 0 5242880 5242880 4849664 0.03125 0 0 -0.075 1.00000000011784
+655360 0 2 0 0 5242880 5242880 4980736 0.03125 0 0 -0.05 1.00000000027064
+655360 0 2 0 0 5242880 5242880 5111808 0.03125 0 0 -0.025 1.00000000001744
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 1.00000000002479
+655360 0 2 0 0 5242880 5242880 5373952 0.03125 0 0 0.025 1.00000000001744
+655360 0 2 0 0 5242880 5242880 5505024 0.03125 0 0 0.05 1.00000000027064
+655360 0 2 0 0 5242880 5242880 5636096 0.03125 0 0 0.075 1.00000000011784
+655360 0 2 0 0 5242880 5242880 5767168 0.03125 0 0 0.1 1.00000000246101
+655360 0 2 0 0 5242880 5242880 5898240 0.03125 0 0 0.125 1.00000000144041
+655360 0 2 0 0 5242880 5242880 6029312 0.03125 0 0 0.15 0.999999999984606
+655360 0 2 0 0 5242880 5242880 6160384 0.03125 0 0 0.175 0.999999999702523
+655360 0 2 0 0 5242880 5242880 6291456 0.03125 0 0 0.2 0.999999999732034
+655360 0 2 0 0 5242880 5242880 6422528 0.03125 0 0 0.225 0.999999999647753
+655360 0 2 0 0 5242880 5242880 6553600 0.03125 0 0 0.25 0.999999999640443
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 2621440 0.0375 0 0 -0.5 1.00000000000001
+786432 0 1 0 0 5242880 5242880 2883584 0.0375 0 0 -0.45 0.999999999998945
+786432 0 1 0 0 5242880 5242880 3145728 0.0375 0 0 -0.4 0.999999999999198
+786432 0 1 0 0 5242880 5242880 3407872 0.0375 0 0 -0.35 1.00000000002395
+786432 0 1 0 0 5242880 5242880 3670016 0.0375 0 0 -0.3 1.00000000000972
+786432 0 1 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 0.99999999965724
+786432 0 1 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 0.999999999805198
+786432 0 1 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 0.999999999952753
+786432 0 1 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 1.00000000230525
+786432 0 1 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 1.00000000044868
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+786432 0 1 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 1.00000000044868
+786432 0 1 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 1.00000000230525
+786432 0 1 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 0.999999999952753
+786432 0 1 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 0.999999999805198
+786432 0 1 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 0.99999999965724
+786432 0 1 0 0 5242880 5242880 6815744 0.0375 0 0 0.3 1.00000000000972
+786432 0 1 0 0 5242880 5242880 7077888 0.0375 0 0 0.35 1.00000000002395
+786432 0 1 0 0 5242880 5242880 7340032 0.0375 0 0 0.4 0.999999999999198
+786432 0 1 0 0 5242880 5242880 7602176 0.0375 0 0 0.45 0.999999999998945
+786432 0 1 0 0 5242880 5242880 7864320 0.0375 0 0 0.5 1.00000000000001
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 0.99999999965724
+786432 0 2 0 0 5242880 5242880 4063232 0.0375 0 0 -0.225 0.999999999699967
+786432 0 2 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 0.999999999805198
+786432 0 2 0 0 5242880 5242880 4325376 0.0375 0 0 -0.175 0.999999999741191
+786432 0 2 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 0.999999999952753
+786432 0 2 0 0 5242880 5242880 4587520 0.0375 0 0 -0.125 1.00000000125426
+786432 0 2 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 1.00000000230525
+786432 0 2 0 0 5242880 5242880 4849664 0.0375 0 0 -0.075 1.00000000022745
+786432 0 2 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 1.00000000044868
+786432 0 2 0 0 5242880 5242880 5111808 0.0375 0 0 -0.025 1.00000000004778
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 1.00000000006647
+786432 0 2 0 0 5242880 5242880 5373952 0.0375 0 0 0.025 1.00000000004778
+786432 0 2 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 1.00000000044868
+786432 0 2 0 0 5242880 5242880 5636096 0.0375 0 0 0.075 1.00000000022745
+786432 0 2 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 1.00000000230525
+786432 0 2 0 0 5242880 5242880 5898240 0.0375 0 0 0.125 1.00000000125426
+786432 0 2 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 0.999999999952753
+786432 0 2 0 0 5242880 5242880 6160384 0.0375 0 0 0.175 0.999999999741191
+786432 0 2 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 0.999999999805198
+786432 0 2 0 0 5242880 5242880 6422528 0.0375 0 0 0.225 0.999999999699967
+786432 0 2 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 0.99999999965724
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 3932160 0.04375 0 0 -0.25 0.999999999669696
+917504 0 2 0 0 5242880 5242880 4063232 0.04375 0 0 -0.225 0.999999999735269
+917504 0 2 0 0 5242880 5242880 4194304 0.04375 0 0 -0.2 0.999999999852133
+917504 0 2 0 0 5242880 5242880 4325376 0.04375 0 0 -0.175 0.999999999749234
+917504 0 2 0 0 5242880 5242880 4456448 0.04375 0 0 -0.15 0.999999999915148
+917504 0 2 0 0 5242880 5242880 4587520 0.04375 0 0 -0.125 1.00000000119155
+917504 0 2 0 0 5242880 5242880 4718592 0.04375 0 0 -0.1 1.0000000021537
+917504 0 2 0 0 5242880 5242880 4849664 0.04375 0 0 -0.075 1.00000000037762
+917504 0 2 0 0 5242880 5242880 4980736 0.04375 0 0 -0.05 1.00000000067385
+917504 0 2 0 0 5242880 5242880 5111808 0.04375 0 0 -0.025 1.00000000010524
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 1.00000000014416
+917504 0 2 0 0 5242880 5242880 5373952 0.04375 0 0 0.025 1.00000000010524
+917504 0 2 0 0 5242880 5242880 5505024 0.04375 0 0 0.05 1.00000000067385
+917504 0 2 0 0 5242880 5242880 5636096 0.04375 0 0 0.075 1.00000000037762
+917504 0 2 0 0 5242880 5242880 5767168 0.04375 0 0 0.1 1.0000000021537
+917504 0 2 0 0 5242880 5242880 5898240 0.04375 0 0 0.125 1.00000000119155
+917504 0 2 0 0 5242880 5242880 6029312 0.04375 0 0 0.15 0.999999999915148
+917504 0 2 0 0 5242880 5242880 6160384 0.04375 0 0 0.175 0.999999999749234
+917504 0 2 0 0 5242880 5242880 6291456 0.04375 0 0 0.2 0.999999999852133
+917504 0 2 0 0 5242880 5242880 6422528 0.04375 0 0 0.225 0.999999999735269
+917504 0 2 0 0 5242880 5242880 6553600 0.04375 0 0 0.25 0.999999999669696
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 0 0.05 0 0 -1 1
+1048576 0 0 0 0 5242880 5242880 524288 0.05 0 0 -0.9 1
+1048576 0 0 0 0 5242880 5242880 1048576 0.05 0 0 -0.8 1
+1048576 0 0 0 0 5242880 5242880 1572864 0.05 0 0 -0.7 1
+1048576 0 0 0 0 5242880 5242880 2097152 0.05 0 0 -0.6 1
+1048576 0 0 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 1.00000000000002
+1048576 0 0 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 0.99999999999786
+1048576 0 0 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 1.00000000002592
+1048576 0 0 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0.999999999908662
+1048576 0 0 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 1.00000000200092
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 0 0 0 5242880 5242880 5767168 0.05 0 0 0.1 1.00000000200092
+1048576 0 0 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0.999999999908662
+1048576 0 0 0 0 5242880 5242880 6815744 0.05 0 0 0.3 1.00000000002592
+1048576 0 0 0 0 5242880 5242880 7340032 0.05 0 0 0.4 0.99999999999786
+1048576 0 0 0 0 5242880 5242880 7864320 0.05 0 0 0.5 1.00000000000002
+1048576 0 0 0 0 5242880 5242880 8388608 0.05 0 0 0.6 1
+1048576 0 0 0 0 5242880 5242880 8912896 0.05 0 0 0.7 1
+1048576 0 0 0 0 5242880 5242880 9437184 0.05 0 0 0.8 1
+1048576 0 0 0 0 5242880 5242880 9961472 0.05 0 0 0.9 1
+1048576 0 0 0 0 5242880 5242880 10485760 0.05 0 0 1 1
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 1.00000000000002
+1048576 0 1 0 0 5242880 5242880 2883584 0.05 0 0 -0.45 0.999999999997185
+1048576 0 1 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 0.99999999999786
+1048576 0 1 0 0 5242880 5242880 3407872 0.05 0 0 -0.35 1.00000000001908
+1048576 0 1 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 1.00000000002592
+1048576 0 1 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 0.999999999838278
+1048576 0 1 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0.999999999908662
+1048576 0 1 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 0.999999999869254
+1048576 0 1 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 1.00000000200092
+1048576 0 1 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 1.00000000094713
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 1 0 0 5242880 5242880 5505024 0.05 0 0 0.05 1.00000000094713
+1048576 0 1 0 0 5242880 5242880 5767168 0.05 0 0 0.1 1.00000000200092
+1048576 0 1 0 0 5242880 5242880 6029312 0.05 0 0 0.15 0.999999999869254
+1048576 0 1 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0.999999999908662
+1048576 0 1 0 0 5242880 5242880 6553600 0.05 0 0 0.25 0.999999999838278
+1048576 0 1 0 0 5242880 5242880 6815744 0.05 0 0 0.3 1.00000000002592
+1048576 0 1 0 0 5242880 5242880 7077888 0.05 0 0 0.35 1.00000000001908
+1048576 0 1 0 0 5242880 5242880 7340032 0.05 0 0 0.4 0.99999999999786
+1048576 0 1 0 0 5242880 5242880 7602176 0.05 0 0 0.45 0.999999999997185
+1048576 0 1 0 0 5242880 5242880 7864320 0.05 0 0 0.5 1.00000000000002
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 0.999999999838278
+1048576 0 2 0 0 5242880 5242880 4063232 0.05 0 0 -0.225 0.999999999864206
+1048576 0 2 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0.999999999908662
+1048576 0 2 0 0 5242880 5242880 4325376 0.05 0 0 -0.175 0.999999999760128
+1048576 0 2 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 0.999999999869254
+1048576 0 2 0 0 5242880 5242880 4587520 0.05 0 0 -0.125 1.00000000099849
+1048576 0 2 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 1.00000000200092
+1048576 0 2 0 0 5242880 5242880 4849664 0.05 0 0 -0.075 1.00000000057078
+1048576 0 2 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 1.00000000094713
+1048576 0 2 0 0 5242880 5242880 5111808 0.05 0 0 -0.025 1.00000000020061
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 1.00000000027159
+1048576 0 2 0 0 5242880 5242880 5373952 0.05 0 0 0.025 1.00000000020061
+1048576 0 2 0 0 5242880 5242880 5505024 0.05 0 0 0.05 1.00000000094713
+1048576 0 2 0 0 5242880 5242880 5636096 0.05 0 0 0.075 1.00000000057078
+1048576 0 2 0 0 5242880 5242880 5767168 0.05 0 0 0.1 1.00000000200092
+1048576 0 2 0 0 5242880 5242880 5898240 0.05 0 0 0.125 1.00000000099849
+1048576 0 2 0 0 5242880 5242880 6029312 0.05 0 0 0.15 0.999999999869254
+1048576 0 2 0 0 5242880 5242880 6160384 0.05 0 0 0.175 0.999999999760128
+1048576 0 2 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0.999999999908662
+1048576 0 2 0 0 5242880 5242880 6422528 0.05 0 0 0.225 0.999999999864206
+1048576 0 2 0 0 5242880 5242880 6553600 0.05 0 0 0.25 0.999999999838278
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 3932160 0.05625 0 0 -0.25 0.999999999864691
+1179648 0 2 0 0 5242880 5242880 4063232 0.05625 0 0 -0.225 0.999999999920328
+1179648 0 2 0 0 5242880 5242880 4194304 0.05625 0 0 -0.2 0.999999999977901
+1179648 0 2 0 0 5242880 5242880 4325376 0.05625 0 0 -0.175 0.999999999778339
+1179648 0 2 0 0 5242880 5242880 4456448 0.05625 0 0 -0.15 0.999999999825109
+1179648 0 2 0 0 5242880 5242880 4587520 0.05625 0 0 -0.125 1.0000000009088
+1179648 0 2 0 0 5242880 5242880 4718592 0.05625 0 0 -0.1 1.00000000187364
+1179648 0 2 0 0 5242880 5242880 4849664 0.05625 0 0 -0.075 1.00000000080762
+1179648 0 2 0 0 5242880 5242880 4980736 0.05625 0 0 -0.05 1.00000000126869
+1179648 0 2 0 0 5242880 5242880 5111808 0.05625 0 0 -0.025 1.0000000003447
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 1.00000000046233
+1179648 0 2 0 0 5242880 5242880 5373952 0.05625 0 0 0.025 1.0000000003447
+1179648 0 2 0 0 5242880 5242880 5505024 0.05625 0 0 0.05 1.00000000126869
+1179648 0 2 0 0 5242880 5242880 5636096 0.05625 0 0 0.075 1.00000000080762
+1179648 0 2 0 0 5242880 5242880 5767168 0.05625 0 0 0.1 1.00000000187364
+1179648 0 2 0 0 5242880 5242880 5898240 0.05625 0 0 0.125 1.0000000009088
+1179648 0 2 0 0 5242880 5242880 6029312 0.05625 0 0 0.15 0.999999999825109
+1179648 0 2 0 0 5242880 5242880 6160384 0.05625 0 0 0.175 0.999999999778339
+1179648 0 2 0 0 5242880 5242880 6291456 0.05625 0 0 0.2 0.999999999977901
+1179648 0 2 0 0 5242880 5242880 6422528 0.05625 0 0 0.225 0.999999999920328
+1179648 0 2 0 0 5242880 5242880 6553600 0.05625 0 0 0.25 0.999999999864691
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 2621440 0.0625 0 0 -0.5 1.00000000000016
+1310720 0 1 0 0 5242880 5242880 2883584 0.0625 0 0 -0.45 0.999999999995216
+1310720 0 1 0 0 5242880 5242880 3145728 0.0625 0 0 -0.4 0.999999999995699
+1310720 0 1 0 0 5242880 5242880 3407872 0.0625 0 0 -0.35 1.00000000002603
+1310720 0 1 0 0 5242880 5242880 3670016 0.0625 0 0 -0.3 1.00000000003931
+1310720 0 1 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 0.999999999848368
+1310720 0 1 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 1.00000000005881
+1310720 0 1 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 0.999999999779366
+1310720 0 1 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 1.00000000176887
+1310720 0 1 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 1.00000000163742
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+1310720 0 1 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 1.00000000163742
+1310720 0 1 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 1.00000000176887
+1310720 0 1 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 0.999999999779366
+1310720 0 1 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 1.00000000005881
+1310720 0 1 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 0.999999999848368
+1310720 0 1 0 0 5242880 5242880 6815744 0.0625 0 0 0.3 1.00000000003931
+1310720 0 1 0 0 5242880 5242880 7077888 0.0625 0 0 0.35 1.00000000002603
+1310720 0 1 0 0 5242880 5242880 7340032 0.0625 0 0 0.4 0.999999999995699
+1310720 0 1 0 0 5242880 5242880 7602176 0.0625 0 0 0.45 0.999999999995216
+1310720 0 1 0 0 5242880 5242880 7864320 0.0625 0 0 0.5 1.00000000000016
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 0.999999999848368
+1310720 0 2 0 0 5242880 5242880 4063232 0.0625 0 0 -0.225 0.99999999995912
+1310720 0 2 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 1.00000000005881
+1310720 0 2 0 0 5242880 5242880 4325376 0.0625 0 0 -0.175 0.999999999807897
+1310720 0 2 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 0.999999999779366
+1310720 0 2 0 0 5242880 5242880 4587520 0.0625 0 0 -0.125 1.00000000076487
+1310720 0 2 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 1.00000000176887
+1310720 0 2 0 0 5242880 5242880 4849664 0.0625 0 0 -0.075 1.00000000108602
+1310720 0 2 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 1.00000000163742
+1310720 0 2 0 0 5242880 5242880 5111808 0.0625 0 0 -0.025 1.00000000054727
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 1.00000000072855
+1310720 0 2 0 0 5242880 5242880 5373952 0.0625 0 0 0.025 1.00000000054727
+1310720 0 2 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 1.00000000163742
+1310720 0 2 0 0 5242880 5242880 5636096 0.0625 0 0 0.075 1.00000000108602
+1310720 0 2 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 1.00000000176887
+1310720 0 2 0 0 5242880 5242880 5898240 0.0625 0 0 0.125 1.00000000076487
+1310720 0 2 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 0.999999999779366
+1310720 0 2 0 0 5242880 5242880 6160384 0.0625 0 0 0.175 0.999999999807897
+1310720 0 2 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 1.00000000005881
+1310720 0 2 0 0 5242880 5242880 6422528 0.0625 0 0 0.225 0.99999999995912
+1310720 0 2 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 0.999999999848368
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 3932160 0.06875 0 0 -0.25 0.999999999837646
+1441792 0 2 0 0 5242880 5242880 4063232 0.06875 0 0 -0.225 1.00000000000483
+1441792 0 2 0 0 5242880 5242880 4194304 0.06875 0 0 -0.2 1.00000000014767
+1441792 0 2 0 0 5242880 5242880 4325376 0.06875 0 0 -0.175 0.999999999846531
+1441792 0 2 0 0 5242880 5242880 4456448 0.06875 0 0 -0.15 0.999999999744461
+1441792 0 2 0 0 5242880 5242880 4587520 0.06875 0 0 -0.125 1.00000000066039
+1441792 0 2 0 0 5242880 5242880 4718592 0.06875 0 0 -0.1 1.00000000170236
+1441792 0 2 0 0 5242880 5242880 4849664 0.06875 0 0 -0.075 1.00000000140117
+1441792 0 2 0 0 5242880 5242880 4980736 0.06875 0 0 -0.05 1.00000000205035
+1441792 0 2 0 0 5242880 5242880 5111808 0.06875 0 0 -0.025 1.00000000081595
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 1.00000000107976
+1441792 0 2 0 0 5242880 5242880 5373952 0.06875 0 0 0.025 1.00000000081595
+1441792 0 2 0 0 5242880 5242880 5505024 0.06875 0 0 0.05 1.00000000205035
+1441792 0 2 0 0 5242880 5242880 5636096 0.06875 0 0 0.075 1.00000000140117
+1441792 0 2 0 0 5242880 5242880 5767168 0.06875 0 0 0.1 1.00000000170236
+1441792 0 2 0 0 5242880 5242880 5898240 0.06875 0 0 0.125 1.00000000066039
+1441792 0 2 0 0 5242880 5242880 6029312 0.06875 0 0 0.15 0.999999999744461
+1441792 0 2 0 0 5242880 5242880 6160384 0.06875 0 0 0.175 0.999999999846531
+1441792 0 2 0 0 5242880 5242880 6291456 0.06875 0 0 0.2 1.00000000014767
+1441792 0 2 0 0 5242880 5242880 6422528 0.06875 0 0 0.225 1.00000000000483
+1441792 0 2 0 0 5242880 5242880 6553600 0.06875 0 0 0.25 0.999999999837646
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 0 0.075 0 0 -1 1
+1572864 0 0 0 0 5242880 5242880 524288 0.075 0 0 -0.9 1
+1572864 0 0 0 0 5242880 5242880 1048576 0.075 0 0 -0.8 1
+1572864 0 0 0 0 5242880 5242880 1572864 0.075 0 0 -0.7 1
+1572864 0 0 0 0 5242880 5242880 2097152 0.075 0 0 -0.6 0.999999999999962
+1572864 0 0 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 1.0000000000004
+1572864 0 0 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 0.99999999999281
+1572864 0 0 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 1.00000000005299
+1572864 0 0 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 1.00000000024572
+1572864 0 0 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 1.00000000167165
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 0 0 0 5242880 5242880 5767168 0.075 0 0 0.1 1.00000000167165
+1572864 0 0 0 0 5242880 5242880 6291456 0.075 0 0 0.2 1.00000000024572
+1572864 0 0 0 0 5242880 5242880 6815744 0.075 0 0 0.3 1.00000000005299
+1572864 0 0 0 0 5242880 5242880 7340032 0.075 0 0 0.4 0.99999999999281
+1572864 0 0 0 0 5242880 5242880 7864320 0.075 0 0 0.5 1.0000000000004
+1572864 0 0 0 0 5242880 5242880 8388608 0.075 0 0 0.6 0.999999999999962
+1572864 0 0 0 0 5242880 5242880 8912896 0.075 0 0 0.7 1
+1572864 0 0 0 0 5242880 5242880 9437184 0.075 0 0 0.8 1
+1572864 0 0 0 0 5242880 5242880 9961472 0.075 0 0 0.9 1
+1572864 0 0 0 0 5242880 5242880 10485760 0.075 0 0 1 1
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 1.0000000000004
+1572864 0 1 0 0 5242880 5242880 2883584 0.075 0 0 -0.45 0.999999999992871
+1572864 0 1 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 0.99999999999281
+1572864 0 1 0 0 5242880 5242880 3407872 0.075 0 0 -0.35 1.00000000001038
+1572864 0 1 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 1.00000000005299
+1572864 0 1 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 1.000000000064
+1572864 0 1 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 1.00000000024572
+1572864 0 1 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 0.999999999716247
+1572864 0 1 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 1.00000000167165
+1572864 0 1 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 1.00000000250217
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 1 0 0 5242880 5242880 5505024 0.075 0 0 0.05 1.00000000250217
+1572864 0 1 0 0 5242880 5242880 5767168 0.075 0 0 0.1 1.00000000167165
+1572864 0 1 0 0 5242880 5242880 6029312 0.075 0 0 0.15 0.999999999716247
+1572864 0 1 0 0 5242880 5242880 6291456 0.075 0 0 0.2 1.00000000024572
+1572864 0 1 0 0 5242880 5242880 6553600 0.075 0 0 0.25 1.000000000064
+1572864 0 1 0 0 5242880 5242880 6815744 0.075 0 0 0.3 1.00000000005299
+1572864 0 1 0 0 5242880 5242880 7077888 0.075 0 0 0.35 1.00000000001038
+1572864 0 1 0 0 5242880 5242880 7340032 0.075 0 0 0.4 0.99999999999281
+1572864 0 1 0 0 5242880 5242880 7602176 0.075 0 0 0.45 0.999999999992871
+1572864 0 1 0 0 5242880 5242880 7864320 0.075 0 0 0.5 1.0000000000004
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 1.000000000064
+1572864 0 2 0 0 5242880 5242880 4063232 0.075 0 0 -0.225 1.00000000018864
+1572864 0 2 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 1.00000000024572
+1572864 0 2 0 0 5242880 5242880 4325376 0.075 0 0 -0.175 0.99999999987013
+1572864 0 2 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 0.999999999716247
+1572864 0 2 0 0 5242880 5242880 4587520 0.075 0 0 -0.125 1.00000000060895
+1572864 0 2 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 1.00000000167165
+1572864 0 2 0 0 5242880 5242880 4849664 0.075 0 0 -0.075 1.00000000174461
+1572864 0 2 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 1.00000000250217
+1572864 0 2 0 0 5242880 5242880 5111808 0.075 0 0 -0.025 1.00000000115522
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 1.00000000152164
+1572864 0 2 0 0 5242880 5242880 5373952 0.075 0 0 0.025 1.00000000115522
+1572864 0 2 0 0 5242880 5242880 5505024 0.075 0 0 0.05 1.00000000250217
+1572864 0 2 0 0 5242880 5242880 5636096 0.075 0 0 0.075 1.00000000174461
+1572864 0 2 0 0 5242880 5242880 5767168 0.075 0 0 0.1 1.00000000167165
+1572864 0 2 0 0 5242880 5242880 5898240 0.075 0 0 0.125 1.00000000060895
+1572864 0 2 0 0 5242880 5242880 6029312 0.075 0 0 0.15 0.999999999716247
+1572864 0 2 0 0 5242880 5242880 6160384 0.075 0 0 0.175 0.99999999987013
+1572864 0 2 0 0 5242880 5242880 6291456 0.075 0 0 0.2 1.00000000024572
+1572864 0 2 0 0 5242880 5242880 6422528 0.075 0 0 0.225 1.00000000018864
+1572864 0 2 0 0 5242880 5242880 6553600 0.075 0 0 0.25 1.000000000064
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 3932160 0.08125 0 0 -0.25 1.00000000009816
+1703936 0 2 0 0 5242880 5242880 4063232 0.08125 0 0 -0.225 1.00000000027139
+1703936 0 2 0 0 5242880 5242880 4194304 0.08125 0 0 -0.2 1.00000000035833
+1703936 0 2 0 0 5242880 5242880 4325376 0.08125 0 0 -0.175 0.99999999993576
+1703936 0 2 0 0 5242880 5242880 4456448 0.08125 0 0 -0.15 0.999999999707798
+1703936 0 2 0 0 5242880 5242880 4587520 0.08125 0 0 -0.125 1.00000000050288
+1703936 0 2 0 0 5242880 5242880 4718592 0.08125 0 0 -0.1 1.00000000167849
+1703936 0 2 0 0 5242880 5242880 4849664 0.08125 0 0 -0.075 1.00000000210511
+1703936 0 2 0 0 5242880 5242880 4980736 0.08125 0 0 -0.05 1.00000000298471
+1703936 0 2 0 0 5242880 5242880 5111808 0.08125 0 0 -0.025 1.00000000156541
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 1.00000000205505
+1703936 0 2 0 0 5242880 5242880 5373952 0.08125 0 0 0.025 1.00000000156541
+1703936 0 2 0 0 5242880 5242880 5505024 0.08125 0 0 0.05 1.00000000298471
+1703936 0 2 0 0 5242880 5242880 5636096 0.08125 0 0 0.075 1.00000000210511
+1703936 0 2 0 0 5242880 5242880 5767168 0.08125 0 0 0.1 1.00000000167849
+1703936 0 2 0 0 5242880 5242880 5898240 0.08125 0 0 0.125 1.00000000050288
+1703936 0 2 0 0 5242880 5242880 6029312 0.08125 0 0 0.15 0.999999999707798
+1703936 0 2 0 0 5242880 5242880 6160384 0.08125 0 0 0.175 0.99999999993576
+1703936 0 2 0 0 5242880 5242880 6291456 0.08125 0 0 0.2 1.00000000035833
+1703936 0 2 0 0 5242880 5242880 6422528 0.08125 0 0 0.225 1.00000000027139
+1703936 0 2 0 0 5242880 5242880 6553600 0.08125 0 0 0.25 1.00000000009816
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 2621440 0.0875 0 0 -0.5 1.00000000000087
+1835008 0 1 0 0 5242880 5242880 2883584 0.0875 0 0 -0.45 0.999999999991356
+1835008 0 1 0 0 5242880 5242880 3145728 0.0875 0 0 -0.4 0.999999999990733
+1835008 0 1 0 0 5242880 5242880 3407872 0.0875 0 0 -0.35 1.00000000001404
+1835008 0 1 0 0 5242880 5242880 3670016 0.0875 0 0 -0.3 1.00000000006281
+1835008 0 1 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 1.00000000008321
+1835008 0 1 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 1.00000000048371
+1835008 0 1 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 0.999999999714756
+1835008 0 1 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 1.00000000171941
+1835008 0 1 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 1.0000000034867
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+1835008 0 1 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 1.0000000034867
+1835008 0 1 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 1.00000000171941
+1835008 0 1 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 0.999999999714756
+1835008 0 1 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 1.00000000048371
+1835008 0 1 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 1.00000000008321
+1835008 0 1 0 0 5242880 5242880 6815744 0.0875 0 0 0.3 1.00000000006281
+1835008 0 1 0 0 5242880 5242880 7077888 0.0875 0 0 0.35 1.00000000001404
+1835008 0 1 0 0 5242880 5242880 7340032 0.0875 0 0 0.4 0.999999999990733
+1835008 0 1 0 0 5242880 5242880 7602176 0.0875 0 0 0.45 0.999999999991356
+1835008 0 1 0 0 5242880 5242880 7864320 0.0875 0 0 0.5 1.00000000000087
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 1.00000000008321
+1835008 0 2 0 0 5242880 5242880 4063232 0.0875 0 0 -0.225 1.00000000033279
+1835008 0 2 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 1.00000000048371
+1835008 0 2 0 0 5242880 5242880 4325376 0.0875 0 0 -0.175 0.999999999998976
+1835008 0 2 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 0.999999999714756
+1835008 0 2 0 0 5242880 5242880 4587520 0.0875 0 0 -0.125 1.00000000055857
+1835008 0 2 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 1.00000000171941
+1835008 0 2 0 0 5242880 5242880 4849664 0.0875 0 0 -0.075 1.00000000246804
+1835008 0 2 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 1.0000000034867
+1835008 0 2 0 0 5242880 5242880 5111808 0.0875 0 0 -0.025 1.00000000204188
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 1.00000000267514
+1835008 0 2 0 0 5242880 5242880 5373952 0.0875 0 0 0.025 1.00000000204188
+1835008 0 2 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 1.0000000034867
+1835008 0 2 0 0 5242880 5242880 5636096 0.0875 0 0 0.075 1.00000000246804
+1835008 0 2 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 1.00000000171941
+1835008 0 2 0 0 5242880 5242880 5898240 0.0875 0 0 0.125 1.00000000055857
+1835008 0 2 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 0.999999999714756
+1835008 0 2 0 0 5242880 5242880 6160384 0.0875 0 0 0.175 0.999999999998976
+1835008 0 2 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 1.00000000048371
+1835008 0 2 0 0 5242880 5242880 6422528 0.0875 0 0 0.225 1.00000000033279
+1835008 0 2 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 1.00000000008321
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 3932160 0.09375 0 0 -0.25 1.00000000006939
+1966080 0 2 0 0 5242880 5242880 4063232 0.09375 0 0 -0.225 1.00000000039637
+1966080 0 2 0 0 5242880 5242880 4194304 0.09375 0 0 -0.2 1.00000000061474
+1966080 0 2 0 0 5242880 5242880 4325376 0.09375 0 0 -0.175 1.00000000010307
+1966080 0 2 0 0 5242880 5242880 4456448 0.09375 0 0 -0.15 0.99999999974855
+1966080 0 2 0 0 5242880 5242880 4587520 0.09375 0 0 -0.125 1.00000000046383
+1966080 0 2 0 0 5242880 5242880 4718592 0.09375 0 0 -0.1 1.00000000178245
+1966080 0 2 0 0 5242880 5242880 4849664 0.09375 0 0 -0.075 1.0000000028168
+1966080 0 2 0 0 5242880 5242880 4980736 0.09375 0 0 -0.05 1.0000000039935
+1966080 0 2 0 0 5242880 5242880 5111808 0.09375 0 0 -0.025 1.00000000257445
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 1.0000000033708
+1966080 0 2 0 0 5242880 5242880 5373952 0.09375 0 0 0.025 1.00000000257445
+1966080 0 2 0 0 5242880 5242880 5505024 0.09375 0 0 0.05 1.0000000039935
+1966080 0 2 0 0 5242880 5242880 5636096 0.09375 0 0 0.075 1.0000000028168
+1966080 0 2 0 0 5242880 5242880 5767168 0.09375 0 0 0.1 1.00000000178245
+1966080 0 2 0 0 5242880 5242880 5898240 0.09375 0 0 0.125 1.00000000046383
+1966080 0 2 0 0 5242880 5242880 6029312 0.09375 0 0 0.15 0.99999999974855
+1966080 0 2 0 0 5242880 5242880 6160384 0.09375 0 0 0.175 1.00000000010307
+1966080 0 2 0 0 5242880 5242880 6291456 0.09375 0 0 0.2 1.00000000061474
+1966080 0 2 0 0 5242880 5242880 6422528 0.09375 0 0 0.225 1.00000000039637
+1966080 0 2 0 0 5242880 5242880 6553600 0.09375 0 0 0.25 1.00000000006939
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 0 0.1 0 0 -1 1
+2097152 0 0 0 0 5242880 5242880 524288 0.1 0 0 -0.9 1
+2097152 0 0 0 0 5242880 5242880 1048576 0.1 0 0 -0.8 0.999999999999999
+2097152 0 0 0 0 5242880 5242880 1572864 0.1 0 0 -0.7 1.00000000000001
+2097152 0 0 0 0 5242880 5242880 2097152 0.1 0 0 -0.6 0.999999999999814
+2097152 0 0 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 1.00000000000152
+2097152 0 0 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 0.999999999988956
+2097152 0 0 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 1.00000000007015
+2097152 0 0 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 1.00000000075378
+2097152 0 0 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 1.00000000186308
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 0 0 0 5242880 5242880 5767168 0.1 0 0 0.1 1.00000000186308
+2097152 0 0 0 0 5242880 5242880 6291456 0.1 0 0 0.2 1.00000000075378
+2097152 0 0 0 0 5242880 5242880 6815744 0.1 0 0 0.3 1.00000000007015
+2097152 0 0 0 0 5242880 5242880 7340032 0.1 0 0 0.4 0.999999999988956
+2097152 0 0 0 0 5242880 5242880 7864320 0.1 0 0 0.5 1.00000000000152
+2097152 0 0 0 0 5242880 5242880 8388608 0.1 0 0 0.6 0.999999999999814
+2097152 0 0 0 0 5242880 5242880 8912896 0.1 0 0 0.7 1.00000000000001
+2097152 0 0 0 0 5242880 5242880 9437184 0.1 0 0 0.8 0.999999999999999
+2097152 0 0 0 0 5242880 5242880 9961472 0.1 0 0 0.9 1
+2097152 0 0 0 0 5242880 5242880 10485760 0.1 0 0 1 1
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 1.00000000000152
+2097152 0 1 0 0 5242880 5242880 2883584 0.1 0 0 -0.45 0.999999999990269
+2097152 0 1 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 0.999999999988956
+2097152 0 1 0 0 5242880 5242880 3407872 0.1 0 0 -0.35 0.999999999986041
+2097152 0 1 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 1.00000000007015
+2097152 0 1 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 1.00000000034771
+2097152 0 1 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 1.00000000075378
+2097152 0 1 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 0.999999999805372
+2097152 0 1 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 1.00000000186308
+2097152 0 1 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 1.00000000448718
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 1 0 0 5242880 5242880 5505024 0.1 0 0 0.05 1.00000000448718
+2097152 0 1 0 0 5242880 5242880 5767168 0.1 0 0 0.1 1.00000000186308
+2097152 0 1 0 0 5242880 5242880 6029312 0.1 0 0 0.15 0.999999999805372
+2097152 0 1 0 0 5242880 5242880 6291456 0.1 0 0 0.2 1.00000000075378
+2097152 0 1 0 0 5242880 5242880 6553600 0.1 0 0 0.25 1.00000000034771
+2097152 0 1 0 0 5242880 5242880 6815744 0.1 0 0 0.3 1.00000000007015
+2097152 0 1 0 0 5242880 5242880 7077888 0.1 0 0 0.35 0.999999999986041
+2097152 0 1 0 0 5242880 5242880 7340032 0.1 0 0 0.4 0.999999999988956
+2097152 0 1 0 0 5242880 5242880 7602176 0.1 0 0 0.45 0.999999999990269
+2097152 0 1 0 0 5242880 5242880 7864320 0.1 0 0 0.5 1.00000000000152
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 1.00000000034771
+2097152 0 2 0 0 5242880 5242880 4063232 0.1 0 0 -0.225 1.00000000062737
+2097152 0 2 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 1.00000000075378
+2097152 0 2 0 0 5242880 5242880 4325376 0.1 0 0 -0.175 1.00000000017635
+2097152 0 2 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 0.999999999805372
+2097152 0 2 0 0 5242880 5242880 4587520 0.1 0 0 -0.125 1.00000000061094
+2097152 0 2 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 1.00000000186308
+2097152 0 2 0 0 5242880 5242880 4849664 0.1 0 0 -0.075 1.00000000313278
+2097152 0 2 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 1.00000000448718
+2097152 0 2 0 0 5242880 5242880 5111808 0.1 0 0 -0.025 1.00000000314711
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 1.00000000412429
+2097152 0 2 0 0 5242880 5242880 5373952 0.1 0 0 0.025 1.00000000314711
+2097152 0 2 0 0 5242880 5242880 5505024 0.1 0 0 0.05 1.00000000448718
+2097152 0 2 0 0 5242880 5242880 5636096 0.1 0 0 0.075 1.00000000313278
+2097152 0 2 0 0 5242880 5242880 5767168 0.1 0 0 0.1 1.00000000186308
+2097152 0 2 0 0 5242880 5242880 5898240 0.1 0 0 0.125 1.00000000061094
+2097152 0 2 0 0 5242880 5242880 6029312 0.1 0 0 0.15 0.999999999805372
+2097152 0 2 0 0 5242880 5242880 6160384 0.1 0 0 0.175 1.00000000017635
+2097152 0 2 0 0 5242880 5242880 6291456 0.1 0 0 0.2 1.00000000075378
+2097152 0 2 0 0 5242880 5242880 6422528 0.1 0 0 0.225 1.00000000062737
+2097152 0 2 0 0 5242880 5242880 6553600 0.1 0 0 0.25 1.00000000034771
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix..asc b/Carpet/CarpetInterp/test/waveinterp/phix..asc
new file mode 100644
index 000000000..3c42790ef
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix..asc
@@ -0,0 +1,157 @@
+# WAVEMOL::phix (phix)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.average.asc b/Carpet/CarpetInterp/test/waveinterp/phix.average.asc
new file mode 100644
index 000000000..81e5044d2
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.average.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 -5.85334791673991e-30
+262144 0.0125 7.61546596377734e-31
+393216 0.01875 6.39963409360546e-32
+524288 0.025 4.22987217379507e-30
+655360 0.03125 -5.14968398928276e-30
+786432 0.0375 -1.12574148960532e-30
+917504 0.04375 7.24489855354977e-30
+1048576 0.05 -8.03001236947098e-30
+1179648 0.05625 9.07949319625439e-30
+1310720 0.0625 3.81917146501438e-30
+1441792 0.06875 -1.60190039718705e-29
+1572864 0.075 -3.19476833700931e-29
+1703936 0.08125 -4.15571924870429e-30
+1835008 0.0875 1.62347574294484e-29
+1966080 0.09375 -1.00382550189374e-29
+2097152 0.1 2.83859763830203e-29
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.count.asc b/Carpet/CarpetInterp/test/waveinterp/phix.count.asc
new file mode 100644
index 000000000..40a5bcbfb
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.count.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 8000
+131072 0.00625 8000
+262144 0.0125 8000
+393216 0.01875 8000
+524288 0.025 8000
+655360 0.03125 8000
+786432 0.0375 8000
+917504 0.04375 8000
+1048576 0.05 8000
+1179648 0.05625 8000
+1310720 0.0625 8000
+1441792 0.06875 8000
+1572864 0.075 8000
+1703936 0.08125 8000
+1835008 0.0875 8000
+1966080 0.09375 8000
+2097152 0.1 8000
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.maximum.asc b/Carpet/CarpetInterp/test/waveinterp/phix.maximum.asc
new file mode 100644
index 000000000..9e14adf44
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.maximum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 2.52330210059881e-08
+262144 0.0125 2.59751686828268e-09
+393216 0.01875 1.94813765121201e-09
+524288 0.025 1.13718142310167e-09
+655360 0.03125 1.49819814627278e-09
+786432 0.0375 1.92004376518377e-09
+917504 0.04375 2.25411963198039e-09
+1048576 0.05 2.51675670350412e-09
+1179648 0.05625 2.6865148826614e-09
+1310720 0.0625 2.77054086848342e-09
+1441792 0.06875 2.7710016315662e-09
+1572864 0.075 2.71062697591515e-09
+1703936 0.08125 2.68229908058895e-09
+1835008 0.0875 2.6295740571891e-09
+1966080 0.09375 2.53181084986157e-09
+2097152 0.1 2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.minimum.asc b/Carpet/CarpetInterp/test/waveinterp/phix.minimum.asc
new file mode 100644
index 000000000..ab06be2cb
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.minimum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 -2.52330210059881e-08
+262144 0.0125 -2.59751686828268e-09
+393216 0.01875 -1.94813765121201e-09
+524288 0.025 -1.13718142310167e-09
+655360 0.03125 -1.49819814627278e-09
+786432 0.0375 -1.92004376518377e-09
+917504 0.04375 -2.25411963198039e-09
+1048576 0.05 -2.51675670350412e-09
+1179648 0.05625 -2.6865148826614e-09
+1310720 0.0625 -2.77054086848342e-09
+1441792 0.06875 -2.7710016315662e-09
+1572864 0.075 -2.71062697591515e-09
+1703936 0.08125 -2.68229908058895e-09
+1835008 0.0875 -2.6295740571891e-09
+1966080 0.09375 -2.53181084986157e-09
+2097152 0.1 -2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.norm1.asc b/Carpet/CarpetInterp/test/waveinterp/phix.norm1.asc
new file mode 100644
index 000000000..3914ee0c3
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.norm1.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 1.8276409322037e-11
+262144 0.0125 7.34649051893126e-12
+393216 0.01875 5.91041345682556e-12
+524288 0.025 1.24242890027224e-12
+655360 0.03125 2.57713743237751e-12
+786432 0.0375 2.36124801524171e-12
+917504 0.04375 2.980572995517e-12
+1048576 0.05 3.03589049525507e-12
+1179648 0.05625 3.36169643546458e-12
+1310720 0.0625 3.61334864722834e-12
+1441792 0.06875 3.84089322924323e-12
+1572864 0.075 3.76844870942373e-12
+1703936 0.08125 3.84025109025803e-12
+1835008 0.0875 3.86147640814427e-12
+1966080 0.09375 3.97285273972382e-12
+2097152 0.1 4.30036623573871e-12
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.norm2.asc b/Carpet/CarpetInterp/test/waveinterp/phix.norm2.asc
new file mode 100644
index 000000000..f6100c672
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.norm2.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 5.18343779507329e-10
+262144 0.0125 1.13025459173354e-10
+393216 0.01875 8.58024498955012e-11
+524288 0.025 2.48311121202448e-11
+655360 0.03125 3.76969874645362e-11
+786432 0.0375 4.28591265832086e-11
+917504 0.04375 5.05689775131339e-11
+1048576 0.05 5.53837109993038e-11
+1179648 0.05625 5.9781605763834e-11
+1310720 0.0625 6.21626122183979e-11
+1441792 0.06875 6.40118017073291e-11
+1572864 0.075 6.41185856980848e-11
+1703936 0.08125 6.40670662348222e-11
+1835008 0.0875 6.32168941306762e-11
+1966080 0.09375 6.25609573472936e-11
+2097152 0.1 6.19448146789359e-11
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.norm_inf.asc b/Carpet/CarpetInterp/test/waveinterp/phix.norm_inf.asc
new file mode 100644
index 000000000..9e14adf44
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.norm_inf.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 2.52330210059881e-08
+262144 0.0125 2.59751686828268e-09
+393216 0.01875 1.94813765121201e-09
+524288 0.025 1.13718142310167e-09
+655360 0.03125 1.49819814627278e-09
+786432 0.0375 1.92004376518377e-09
+917504 0.04375 2.25411963198039e-09
+1048576 0.05 2.51675670350412e-09
+1179648 0.05625 2.6865148826614e-09
+1310720 0.0625 2.77054086848342e-09
+1441792 0.06875 2.7710016315662e-09
+1572864 0.075 2.71062697591515e-09
+1703936 0.08125 2.68229908058895e-09
+1835008 0.0875 2.6295740571891e-09
+1966080 0.09375 2.53181084986157e-09
+2097152 0.1 2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.sum.asc b/Carpet/CarpetInterp/test/waveinterp/phix.sum.asc
new file mode 100644
index 000000000..b8432b414
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.sum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phix (phix)
+# iteration time data
+0 0 0
+131072 0.00625 -4.68267833339193e-26
+262144 0.0125 6.09237277102187e-27
+393216 0.01875 5.11970727488437e-28
+524288 0.025 3.38389773903605e-26
+655360 0.03125 -4.11974719142621e-26
+786432 0.0375 -9.00593191684253e-27
+917504 0.04375 5.79591884283982e-26
+1048576 0.05 -6.42400989557679e-26
+1179648 0.05625 7.26359455700351e-26
+1310720 0.0625 3.0553371720115e-26
+1441792 0.06875 -1.28152031774964e-25
+1572864 0.075 -2.55581466960745e-25
+1703936 0.08125 -3.32457539896343e-26
+1835008 0.0875 1.29878059435587e-25
+1966080 0.09375 -8.0306040151499e-26
+2097152 0.1 2.27087811064162e-25
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.x.asc b/Carpet/CarpetInterp/test/waveinterp/phix.x.asc
new file mode 100644
index 000000000..89a09cd7a
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.x.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phix x (phix)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 0 5242880 5242880 0 -1 0 0 0
+0 0 0 0 0 524288 5242880 5242880 0 -0.9 0 0 0
+0 0 0 0 0 1048576 5242880 5242880 0 -0.8 0 0 0
+0 0 0 0 0 1572864 5242880 5242880 0 -0.7 0 0 0
+0 0 0 0 0 2097152 5242880 5242880 0 -0.6 0 0 0
+0 0 0 0 0 2621440 5242880 5242880 0 -0.5 0 0 0
+0 0 0 0 0 3145728 5242880 5242880 0 -0.4 0 0 0
+0 0 0 0 0 3670016 5242880 5242880 0 -0.3 0 0 0
+0 0 0 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 0 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 0 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 0 0 0 6815744 5242880 5242880 0 0.3 0 0 0
+0 0 0 0 0 7340032 5242880 5242880 0 0.4 0 0 0
+0 0 0 0 0 7864320 5242880 5242880 0 0.5 0 0 0
+0 0 0 0 0 8388608 5242880 5242880 0 0.6 0 0 0
+0 0 0 0 0 8912896 5242880 5242880 0 0.7 0 0 0
+0 0 0 0 0 9437184 5242880 5242880 0 0.8 0 0 0
+0 0 0 0 0 9961472 5242880 5242880 0 0.9 0 0 0
+0 0 0 0 0 10485760 5242880 5242880 0 1 0 0 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 2621440 5242880 5242880 0 -0.5 0 0 0
+0 0 1 0 0 2883584 5242880 5242880 0 -0.45 0 0 0
+0 0 1 0 0 3145728 5242880 5242880 0 -0.4 0 0 0
+0 0 1 0 0 3407872 5242880 5242880 0 -0.35 0 0 0
+0 0 1 0 0 3670016 5242880 5242880 0 -0.3 0 0 0
+0 0 1 0 0 3932160 5242880 5242880 0 -0.25 0 0 0
+0 0 1 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 1 0 0 4456448 5242880 5242880 0 -0.15 0 0 0
+0 0 1 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 1 0 0 4980736 5242880 5242880 0 -0.05 0 0 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5505024 5242880 5242880 0 0.05 0 0 0
+0 0 1 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 1 0 0 6029312 5242880 5242880 0 0.15 0 0 0
+0 0 1 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 1 0 0 6553600 5242880 5242880 0 0.25 0 0 0
+0 0 1 0 0 6815744 5242880 5242880 0 0.3 0 0 0
+0 0 1 0 0 7077888 5242880 5242880 0 0.35 0 0 0
+0 0 1 0 0 7340032 5242880 5242880 0 0.4 0 0 0
+0 0 1 0 0 7602176 5242880 5242880 0 0.45 0 0 0
+0 0 1 0 0 7864320 5242880 5242880 0 0.5 0 0 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 3932160 5242880 5242880 0 -0.25 0 0 0
+0 0 2 0 0 4063232 5242880 5242880 0 -0.225 0 0 0
+0 0 2 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 2 0 0 4325376 5242880 5242880 0 -0.175 0 0 0
+0 0 2 0 0 4456448 5242880 5242880 0 -0.15 0 0 0
+0 0 2 0 0 4587520 5242880 5242880 0 -0.125 0 0 0
+0 0 2 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 2 0 0 4849664 5242880 5242880 0 -0.075 0 0 0
+0 0 2 0 0 4980736 5242880 5242880 0 -0.05 0 0 0
+0 0 2 0 0 5111808 5242880 5242880 0 -0.025 0 0 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5373952 5242880 5242880 0 0.025 0 0 0
+0 0 2 0 0 5505024 5242880 5242880 0 0.05 0 0 0
+0 0 2 0 0 5636096 5242880 5242880 0 0.075 0 0 0
+0 0 2 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 2 0 0 5898240 5242880 5242880 0 0.125 0 0 0
+0 0 2 0 0 6029312 5242880 5242880 0 0.15 0 0 0
+0 0 2 0 0 6160384 5242880 5242880 0 0.175 0 0 0
+0 0 2 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 2 0 0 6422528 5242880 5242880 0 0.225 0 0 0
+0 0 2 0 0 6553600 5242880 5242880 0 0.25 0 0 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 3932160 5242880 5242880 0.00625 -0.25 0 0 8.51287040805251e-10
+131072 0 2 0 0 4063232 5242880 5242880 0.00625 -0.225 0 0 4.78848960452953e-10
+131072 0 2 0 0 4194304 5242880 5242880 0.00625 -0.2 0 0 0
+131072 0 2 0 0 4325376 5242880 5242880 0.00625 -0.175 0 0 2.43032142559095e-09
+131072 0 2 0 0 4456448 5242880 5242880 0.00625 -0.15 0 0 0
+131072 0 2 0 0 4587520 5242880 5242880 0.00625 -0.125 0 0 -2.23517417907715e-08
+131072 0 2 0 0 4718592 5242880 5242880 0.00625 -0.1 0 0 0
+131072 0 2 0 0 4849664 5242880 5242880 0.00625 -0.075 0 0 0
+131072 0 2 0 0 4980736 5242880 5242880 0.00625 -0.05 0 0 0
+131072 0 2 0 0 5111808 5242880 5242880 0.00625 -0.025 0 0 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5373952 5242880 5242880 0.00625 0.025 0 0 0
+131072 0 2 0 0 5505024 5242880 5242880 0.00625 0.05 0 0 0
+131072 0 2 0 0 5636096 5242880 5242880 0.00625 0.075 0 0 0
+131072 0 2 0 0 5767168 5242880 5242880 0.00625 0.1 0 0 0
+131072 0 2 0 0 5898240 5242880 5242880 0.00625 0.125 0 0 2.23517417907715e-08
+131072 0 2 0 0 6029312 5242880 5242880 0.00625 0.15 0 0 0
+131072 0 2 0 0 6160384 5242880 5242880 0.00625 0.175 0 0 -2.43032142559095e-09
+131072 0 2 0 0 6291456 5242880 5242880 0.00625 0.2 0 0 0
+131072 0 2 0 0 6422528 5242880 5242880 0.00625 0.225 0 0 -4.78848960452953e-10
+131072 0 2 0 0 6553600 5242880 5242880 0.00625 0.25 0 0 -8.51287040805251e-10
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 2621440 5242880 5242880 0.0125 -0.5 0 0 0
+262144 0 1 0 0 2883584 5242880 5242880 0.0125 -0.45 0 0 0
+262144 0 1 0 0 3145728 5242880 5242880 0.0125 -0.4 0 0 0
+262144 0 1 0 0 3407872 5242880 5242880 0.0125 -0.35 0 0 1.94025536558925e-11
+262144 0 1 0 0 3670016 5242880 5242880 0.0125 -0.3 0 0 0
+262144 0 1 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 2.27009877548067e-09
+262144 0 1 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 0
+262144 0 1 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 0
+262144 0 1 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 3.88051095886096e-11
+262144 0 1 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 0
+262144 0 1 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 -3.88051095886096e-11
+262144 0 1 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 0
+262144 0 1 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 0
+262144 0 1 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 -2.27009877548067e-09
+262144 0 1 0 0 6815744 5242880 5242880 0.0125 0.3 0 0 0
+262144 0 1 0 0 7077888 5242880 5242880 0.0125 0.35 0 0 -1.94025536558925e-11
+262144 0 1 0 0 7340032 5242880 5242880 0.0125 0.4 0 0 0
+262144 0 1 0 0 7602176 5242880 5242880 0.0125 0.45 0 0 0
+262144 0 1 0 0 7864320 5242880 5242880 0.0125 0.5 0 0 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 2.27009877548067e-09
+262144 0 2 0 0 4063232 5242880 5242880 0.0125 -0.225 0 0 1.27693056120788e-09
+262144 0 2 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 0
+262144 0 2 0 0 4325376 5242880 5242880 0.0125 -0.175 0 0 -1.4430649281683e-10
+262144 0 2 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 0
+262144 0 2 0 0 4587520 5242880 5242880 0.0125 -0.125 0 0 2.18278741435929e-11
+262144 0 2 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 3.88051095886096e-11
+262144 0 2 0 0 4849664 5242880 5242880 0.0125 -0.075 0 0 -1.74622982740402e-10
+262144 0 2 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 0
+262144 0 2 0 0 5111808 5242880 5242880 0.0125 -0.025 0 0 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5373952 5242880 5242880 0.0125 0.025 0 0 0
+262144 0 2 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 0
+262144 0 2 0 0 5636096 5242880 5242880 0.0125 0.075 0 0 1.74622982740402e-10
+262144 0 2 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 -3.88051095886096e-11
+262144 0 2 0 0 5898240 5242880 5242880 0.0125 0.125 0 0 -2.18278741435929e-11
+262144 0 2 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 0
+262144 0 2 0 0 6160384 5242880 5242880 0.0125 0.175 0 0 1.4430649281683e-10
+262144 0 2 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 0
+262144 0 2 0 0 6422528 5242880 5242880 0.0125 0.225 0 0 -1.27693056120788e-09
+262144 0 2 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 -2.27009877548067e-09
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 3932160 5242880 5242880 0.01875 -0.25 0 0 1.7025740816105e-09
+393216 0 2 0 0 4063232 5242880 5242880 0.01875 -0.225 0 0 9.59262773157592e-10
+393216 0 2 0 0 4194304 5242880 5242880 0.01875 -0.2 0 0 1.80060419699424e-11
+393216 0 2 0 0 4325376 5242880 5242880 0.01875 -0.175 0 0 -2.20306178830874e-11
+393216 0 2 0 0 4456448 5242880 5242880 0.01875 -0.15 0 0 1.37016741702522e-10
+393216 0 2 0 0 4587520 5242880 5242880 0.01875 -0.125 0 0 1.09369182438833e-10
+393216 0 2 0 0 4718592 5242880 5242880 0.01875 -0.1 0 0 -1.55569968944095e-10
+393216 0 2 0 0 4849664 5242880 5242880 0.01875 -0.075 0 0 -5.14533776696524e-10
+393216 0 2 0 0 4980736 5242880 5242880 0.01875 -0.05 0 0 -1.05031724058809e-14
+393216 0 2 0 0 5111808 5242880 5242880 0.01875 -0.025 0 0 -3.1663930736651e-12
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5373952 5242880 5242880 0.01875 0.025 0 0 3.1663930736651e-12
+393216 0 2 0 0 5505024 5242880 5242880 0.01875 0.05 0 0 1.05031724058809e-14
+393216 0 2 0 0 5636096 5242880 5242880 0.01875 0.075 0 0 5.14533776696524e-10
+393216 0 2 0 0 5767168 5242880 5242880 0.01875 0.1 0 0 1.55569968944095e-10
+393216 0 2 0 0 5898240 5242880 5242880 0.01875 0.125 0 0 -1.09369182438833e-10
+393216 0 2 0 0 6029312 5242880 5242880 0.01875 0.15 0 0 -1.37016741702522e-10
+393216 0 2 0 0 6160384 5242880 5242880 0.01875 0.175 0 0 2.20306178830874e-11
+393216 0 2 0 0 6291456 5242880 5242880 0.01875 0.2 0 0 -1.80060419699424e-11
+393216 0 2 0 0 6422528 5242880 5242880 0.01875 0.225 0 0 -9.59262773157592e-10
+393216 0 2 0 0 6553600 5242880 5242880 0.01875 0.25 0 0 -1.7025740816105e-09
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 0 5242880 5242880 0.025 -1 0 0 0
+524288 0 0 0 0 524288 5242880 5242880 0.025 -0.9 0 0 0
+524288 0 0 0 0 1048576 5242880 5242880 0.025 -0.8 0 0 0
+524288 0 0 0 0 1572864 5242880 5242880 0.025 -0.7 0 0 0
+524288 0 0 0 0 2097152 5242880 5242880 0.025 -0.6 0 0 0
+524288 0 0 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 0
+524288 0 0 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 0
+524288 0 0 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 0
+524288 0 0 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 4.80161119198463e-11
+524288 0 0 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 -3.71976833594504e-10
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5767168 5242880 5242880 0.025 0.1 0 0 3.71976833594504e-10
+524288 0 0 0 0 6291456 5242880 5242880 0.025 0.2 0 0 -4.80161119198463e-11
+524288 0 0 0 0 6815744 5242880 5242880 0.025 0.3 0 0 0
+524288 0 0 0 0 7340032 5242880 5242880 0.025 0.4 0 0 0
+524288 0 0 0 0 7864320 5242880 5242880 0.025 0.5 0 0 0
+524288 0 0 0 0 8388608 5242880 5242880 0.025 0.6 0 0 0
+524288 0 0 0 0 8912896 5242880 5242880 0.025 0.7 0 0 0
+524288 0 0 0 0 9437184 5242880 5242880 0.025 0.8 0 0 0
+524288 0 0 0 0 9961472 5242880 5242880 0.025 0.9 0 0 0
+524288 0 0 0 0 10485760 5242880 5242880 0.025 1 0 0 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 0
+524288 0 1 0 0 2883584 5242880 5242880 0.025 -0.45 0 0 0
+524288 0 1 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 0
+524288 0 1 0 0 3407872 5242880 5242880 0.025 -0.35 0 0 -3.0010069949904e-12
+524288 0 1 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 0
+524288 0 1 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 5.02576150545701e-11
+524288 0 1 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 4.80161119198463e-11
+524288 0 1 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 3.65377977873393e-10
+524288 0 1 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 -3.71976833594504e-10
+524288 0 1 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 -2.64427137593633e-12
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5505024 5242880 5242880 0.025 0.05 0 0 2.64427137593633e-12
+524288 0 1 0 0 5767168 5242880 5242880 0.025 0.1 0 0 3.71976833594504e-10
+524288 0 1 0 0 6029312 5242880 5242880 0.025 0.15 0 0 -3.65377977873393e-10
+524288 0 1 0 0 6291456 5242880 5242880 0.025 0.2 0 0 -4.80161119198463e-11
+524288 0 1 0 0 6553600 5242880 5242880 0.025 0.25 0 0 -5.02576150545701e-11
+524288 0 1 0 0 6815744 5242880 5242880 0.025 0.3 0 0 0
+524288 0 1 0 0 7077888 5242880 5242880 0.025 0.35 0 0 3.0010069949904e-12
+524288 0 1 0 0 7340032 5242880 5242880 0.025 0.4 0 0 0
+524288 0 1 0 0 7602176 5242880 5242880 0.025 0.45 0 0 0
+524288 0 1 0 0 7864320 5242880 5242880 0.025 0.5 0 0 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 5.02576150545701e-11
+524288 0 2 0 0 4063232 5242880 5242880 0.025 -0.225 0 0 3.24428478060221e-11
+524288 0 2 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 4.80161119198463e-11
+524288 0 2 0 0 4325376 5242880 5242880 0.025 -0.175 0 0 2.52641626667443e-10
+524288 0 2 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 3.65377977873393e-10
+524288 0 2 0 0 4587520 5242880 5242880 0.025 -0.125 0 0 -6.54759637711926e-12
+524288 0 2 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 -3.71976833594504e-10
+524288 0 2 0 0 4849664 5242880 5242880 0.025 -0.075 0 0 -8.34775128651562e-10
+524288 0 2 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 -2.64427137593633e-12
+524288 0 2 0 0 5111808 5242880 5242880 0.025 -0.025 0 0 -1.42062519155791e-11
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5373952 5242880 5242880 0.025 0.025 0 0 1.42062519155791e-11
+524288 0 2 0 0 5505024 5242880 5242880 0.025 0.05 0 0 2.64427137593633e-12
+524288 0 2 0 0 5636096 5242880 5242880 0.025 0.075 0 0 8.34775128651562e-10
+524288 0 2 0 0 5767168 5242880 5242880 0.025 0.1 0 0 3.71976833594504e-10
+524288 0 2 0 0 5898240 5242880 5242880 0.025 0.125 0 0 6.54759637711926e-12
+524288 0 2 0 0 6029312 5242880 5242880 0.025 0.15 0 0 -3.65377977873393e-10
+524288 0 2 0 0 6160384 5242880 5242880 0.025 0.175 0 0 -2.52641626667443e-10
+524288 0 2 0 0 6291456 5242880 5242880 0.025 0.2 0 0 -4.80161119198463e-11
+524288 0 2 0 0 6422528 5242880 5242880 0.025 0.225 0 0 -3.24428478060221e-11
+524288 0 2 0 0 6553600 5242880 5242880 0.025 0.25 0 0 -5.02576150545701e-11
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 3932160 5242880 5242880 0.03125 -0.25 0 0 -2.03283184165604e-10
+655360 0 2 0 0 4063232 5242880 5242880 0.03125 -0.225 0 0 -1.10218192534204e-10
+655360 0 2 0 0 4194304 5242880 5242880 0.03125 -0.2 0 0 6.71560801759896e-11
+655360 0 2 0 0 4325376 5242880 5242880 0.03125 -0.175 0 0 3.81864711955078e-10
+655360 0 2 0 0 4456448 5242880 5242880 0.03125 -0.15 0 0 5.43200962509205e-10
+655360 0 2 0 0 4587520 5242880 5242880 0.03125 -0.125 0 0 7.64770232818818e-11
+655360 0 2 0 0 4718592 5242880 5242880 0.03125 -0.1 0 0 -5.39370936802896e-10
+655360 0 2 0 0 4849664 5242880 5242880 0.03125 -0.075 0 0 -1.12595637443332e-09
+655360 0 2 0 0 4980736 5242880 5242880 0.03125 -0.05 0 0 -1.12561372260049e-11
+655360 0 2 0 0 5111808 5242880 5242880 0.03125 -0.025 0 0 -3.75721814771524e-11
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5373952 5242880 5242880 0.03125 0.025 0 0 3.75721814771524e-11
+655360 0 2 0 0 5505024 5242880 5242880 0.03125 0.05 0 0 1.12561372260049e-11
+655360 0 2 0 0 5636096 5242880 5242880 0.03125 0.075 0 0 1.12595637443332e-09
+655360 0 2 0 0 5767168 5242880 5242880 0.03125 0.1 0 0 5.39370936802896e-10
+655360 0 2 0 0 5898240 5242880 5242880 0.03125 0.125 0 0 -7.64770232818818e-11
+655360 0 2 0 0 6029312 5242880 5242880 0.03125 0.15 0 0 -5.43200962509205e-10
+655360 0 2 0 0 6160384 5242880 5242880 0.03125 0.175 0 0 -3.81864711955078e-10
+655360 0 2 0 0 6291456 5242880 5242880 0.03125 0.2 0 0 -6.71560801759896e-11
+655360 0 2 0 0 6422528 5242880 5242880 0.03125 0.225 0 0 1.10218192534204e-10
+655360 0 2 0 0 6553600 5242880 5242880 0.03125 0.25 0 0 2.03283184165604e-10
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 2621440 5242880 5242880 0.0375 -0.5 0 0 -3.17246229286638e-14
+786432 0 1 0 0 2883584 5242880 5242880 0.0375 -0.45 0 0 1.04805866676244e-12
+786432 0 1 0 0 3145728 5242880 5242880 0.0375 -0.4 0 0 4.56771773182929e-13
+786432 0 1 0 0 3407872 5242880 5242880 0.0375 -0.35 0 0 -1.77414430260585e-11
+786432 0 1 0 0 3670016 5242880 5242880 0.0375 -0.3 0 0 -1.29435143159107e-11
+786432 0 1 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 1.14095870609471e-10
+786432 0 1 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 8.3050656629613e-11
+786432 0 1 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 7.1777994427776e-10
+786432 0 1 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 -6.90806513844085e-10
+786432 0 1 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 -2.86001292093552e-11
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 2.86001292093552e-11
+786432 0 1 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 6.90806513844085e-10
+786432 0 1 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 -7.1777994427776e-10
+786432 0 1 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 -8.3050656629613e-11
+786432 0 1 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 -1.14095870609471e-10
+786432 0 1 0 0 6815744 5242880 5242880 0.0375 0.3 0 0 1.29435143159107e-11
+786432 0 1 0 0 7077888 5242880 5242880 0.0375 0.35 0 0 1.77414430260585e-11
+786432 0 1 0 0 7340032 5242880 5242880 0.0375 0.4 0 0 -4.56771773182929e-13
+786432 0 1 0 0 7602176 5242880 5242880 0.0375 0.45 0 0 -1.04805866676244e-12
+786432 0 1 0 0 7864320 5242880 5242880 0.0375 0.5 0 0 3.17246229286638e-14
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 1.14095870609471e-10
+786432 0 2 0 0 4063232 5242880 5242880 0.0375 -0.225 0 0 6.68426446993694e-11
+786432 0 2 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 8.3050656629613e-11
+786432 0 2 0 0 4325376 5242880 5242880 0.0375 -0.175 0 0 4.8651162821256e-10
+786432 0 2 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 7.1777994427776e-10
+786432 0 2 0 0 4587520 5242880 5242880 0.0375 -0.125 0 0 1.17693966551757e-11
+786432 0 2 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 -6.90806513844085e-10
+786432 0 2 0 0 4849664 5242880 5242880 0.0375 -0.075 0 0 -1.37983248438278e-09
+786432 0 2 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 -2.86001292093552e-11
+786432 0 2 0 0 5111808 5242880 5242880 0.0375 -0.025 0 0 -7.6696357598216e-11
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5373952 5242880 5242880 0.0375 0.025 0 0 7.6696357598216e-11
+786432 0 2 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 2.86001292093552e-11
+786432 0 2 0 0 5636096 5242880 5242880 0.0375 0.075 0 0 1.37983248438278e-09
+786432 0 2 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 6.90806513844085e-10
+786432 0 2 0 0 5898240 5242880 5242880 0.0375 0.125 0 0 -1.17693966551757e-11
+786432 0 2 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 -7.1777994427776e-10
+786432 0 2 0 0 6160384 5242880 5242880 0.0375 0.175 0 0 -4.8651162821256e-10
+786432 0 2 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 -8.3050656629613e-11
+786432 0 2 0 0 6422528 5242880 5242880 0.0375 0.225 0 0 -6.68426446993694e-11
+786432 0 2 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 -1.14095870609471e-10
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 3932160 5242880 5242880 0.04375 -0.25 0 0 1.55692360393826e-10
+917504 0 2 0 0 4063232 5242880 5242880 0.04375 -0.225 0 0 8.98292153340505e-11
+917504 0 2 0 0 4194304 5242880 5242880 0.04375 -0.2 0 0 9.87482959985408e-11
+917504 0 2 0 0 4325376 5242880 5242880 0.04375 -0.175 0 0 5.82061050143167e-10
+917504 0 2 0 0 4456448 5242880 5242880 0.04375 -0.15 0 0 8.7534961223934e-10
+917504 0 2 0 0 4587520 5242880 5242880 0.04375 -0.125 0 0 9.97820270600842e-11
+917504 0 2 0 0 4718592 5242880 5242880 0.04375 -0.1 0 0 -7.99350738378557e-10
+917504 0 2 0 0 4849664 5242880 5242880 0.04375 -0.075 0 0 -1.58914841471199e-09
+917504 0 2 0 0 4980736 5242880 5242880 0.04375 -0.05 0 0 -5.6796509625053e-11
+917504 0 2 0 0 5111808 5242880 5242880 0.04375 -0.025 0 0 -1.33697386495157e-10
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5373952 5242880 5242880 0.04375 0.025 0 0 1.33697386495157e-10
+917504 0 2 0 0 5505024 5242880 5242880 0.04375 0.05 0 0 5.6796509625053e-11
+917504 0 2 0 0 5636096 5242880 5242880 0.04375 0.075 0 0 1.58914841471199e-09
+917504 0 2 0 0 5767168 5242880 5242880 0.04375 0.1 0 0 7.99350738378557e-10
+917504 0 2 0 0 5898240 5242880 5242880 0.04375 0.125 0 0 -9.97820270600842e-11
+917504 0 2 0 0 6029312 5242880 5242880 0.04375 0.15 0 0 -8.7534961223934e-10
+917504 0 2 0 0 6160384 5242880 5242880 0.04375 0.175 0 0 -5.82061050143167e-10
+917504 0 2 0 0 6291456 5242880 5242880 0.04375 0.2 0 0 -9.87482959985408e-11
+917504 0 2 0 0 6422528 5242880 5242880 0.04375 0.225 0 0 -8.98292153340505e-11
+917504 0 2 0 0 6553600 5242880 5242880 0.04375 0.25 0 0 -1.55692360393826e-10
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 0 5242880 5242880 0.05 -1 0 0 0
+1048576 0 0 0 0 524288 5242880 5242880 0.05 -0.9 0 0 0
+1048576 0 0 0 0 1048576 5242880 5242880 0.05 -0.8 0 0 0
+1048576 0 0 0 0 1572864 5242880 5242880 0.05 -0.7 0 0 0
+1048576 0 0 0 0 2097152 5242880 5242880 0.05 -0.6 0 0 0
+1048576 0 0 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 -8.45989944764369e-14
+1048576 0 0 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 1.21805806182114e-12
+1048576 0 0 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 -3.45160381757618e-11
+1048576 0 0 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 1.13232846710165e-10
+1048576 0 0 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 -8.77529424125889e-10
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5767168 5242880 5242880 0.05 0.1 0 0 8.77529424125889e-10
+1048576 0 0 0 0 6291456 5242880 5242880 0.05 0.2 0 0 -1.13232846710165e-10
+1048576 0 0 0 0 6815744 5242880 5242880 0.05 0.3 0 0 3.45160381757618e-11
+1048576 0 0 0 0 7340032 5242880 5242880 0.05 0.4 0 0 -1.21805806182114e-12
+1048576 0 0 0 0 7864320 5242880 5242880 0.05 0.5 0 0 8.45989944764369e-14
+1048576 0 0 0 0 8388608 5242880 5242880 0.05 0.6 0 0 0
+1048576 0 0 0 0 8912896 5242880 5242880 0.05 0.7 0 0 0
+1048576 0 0 0 0 9437184 5242880 5242880 0.05 0.8 0 0 0
+1048576 0 0 0 0 9961472 5242880 5242880 0.05 0.9 0 0 0
+1048576 0 0 0 0 10485760 5242880 5242880 0.05 1 0 0 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 -8.45989944764369e-14
+1048576 0 1 0 0 2883584 5242880 5242880 0.05 -0.45 0 0 2.79482311136651e-12
+1048576 0 1 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 1.21805806182114e-12
+1048576 0 1 0 0 3407872 5242880 5242880 0.05 -0.35 0 0 -2.58018792963222e-11
+1048576 0 1 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 -3.45160381757618e-11
+1048576 0 1 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 9.90476651796061e-11
+1048576 0 1 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 1.13232846710165e-10
+1048576 0 1 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 1.02049840337385e-09
+1048576 0 1 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 -8.77529424125889e-10
+1048576 0 1 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 -9.69948542780171e-11
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5505024 5242880 5242880 0.05 0.05 0 0 9.69948542780171e-11
+1048576 0 1 0 0 5767168 5242880 5242880 0.05 0.1 0 0 8.77529424125889e-10
+1048576 0 1 0 0 6029312 5242880 5242880 0.05 0.15 0 0 -1.02049840337385e-09
+1048576 0 1 0 0 6291456 5242880 5242880 0.05 0.2 0 0 -1.13232846710165e-10
+1048576 0 1 0 0 6553600 5242880 5242880 0.05 0.25 0 0 -9.90476651796061e-11
+1048576 0 1 0 0 6815744 5242880 5242880 0.05 0.3 0 0 3.45160381757618e-11
+1048576 0 1 0 0 7077888 5242880 5242880 0.05 0.35 0 0 2.58018792963222e-11
+1048576 0 1 0 0 7340032 5242880 5242880 0.05 0.4 0 0 -1.21805806182114e-12
+1048576 0 1 0 0 7602176 5242880 5242880 0.05 0.45 0 0 -2.79482311136651e-12
+1048576 0 1 0 0 7864320 5242880 5242880 0.05 0.5 0 0 8.45989944764369e-14
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 9.90476651796061e-11
+1048576 0 2 0 0 4063232 5242880 5242880 0.05 -0.225 0 0 5.77838901131156e-11
+1048576 0 2 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 1.13232846710165e-10
+1048576 0 2 0 0 4325376 5242880 5242880 0.05 -0.175 0 0 6.86378938106402e-10
+1048576 0 2 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 1.02049840337385e-09
+1048576 0 2 0 0 4587520 5242880 5242880 0.05 -0.125 0 0 7.940517629997e-11
+1048576 0 2 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 -8.77529424125889e-10
+1048576 0 2 0 0 4849664 5242880 5242880 0.05 -0.075 0 0 -1.74812777216834e-09
+1048576 0 2 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 -9.69948542780171e-11
+1048576 0 2 0 0 5111808 5242880 5242880 0.05 -0.025 0 0 -2.09176403050589e-10
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5373952 5242880 5242880 0.05 0.025 0 0 2.09176403050589e-10
+1048576 0 2 0 0 5505024 5242880 5242880 0.05 0.05 0 0 9.69948542780171e-11
+1048576 0 2 0 0 5636096 5242880 5242880 0.05 0.075 0 0 1.74812777216834e-09
+1048576 0 2 0 0 5767168 5242880 5242880 0.05 0.1 0 0 8.77529424125889e-10
+1048576 0 2 0 0 5898240 5242880 5242880 0.05 0.125 0 0 -7.940517629997e-11
+1048576 0 2 0 0 6029312 5242880 5242880 0.05 0.15 0 0 -1.02049840337385e-09
+1048576 0 2 0 0 6160384 5242880 5242880 0.05 0.175 0 0 -6.86378938106402e-10
+1048576 0 2 0 0 6291456 5242880 5242880 0.05 0.2 0 0 -1.13232846710165e-10
+1048576 0 2 0 0 6422528 5242880 5242880 0.05 0.225 0 0 -5.77838901131156e-11
+1048576 0 2 0 0 6553600 5242880 5242880 0.05 0.25 0 0 -9.90476651796061e-11
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 3932160 5242880 5242880 0.05625 -0.25 0 0 1.16100548303662e-10
+1179648 0 2 0 0 4063232 5242880 5242880 0.05625 -0.225 0 0 6.10234773446789e-11
+1179648 0 2 0 0 4194304 5242880 5242880 0.05625 -0.2 0 0 1.15569069071564e-10
+1179648 0 2 0 0 4325376 5242880 5242880 0.05625 -0.175 0 0 7.57218084160716e-10
+1179648 0 2 0 0 4456448 5242880 5242880 0.05625 -0.15 0 0 1.14978515973243e-09
+1179648 0 2 0 0 4587520 5242880 5242880 0.05625 -0.125 0 0 1.76389248042821e-10
+1179648 0 2 0 0 4718592 5242880 5242880 0.05625 -0.1 0 0 -9.02082302374948e-10
+1179648 0 2 0 0 4849664 5242880 5242880 0.05625 -0.075 0 0 -1.85227602700344e-09
+1179648 0 2 0 0 4980736 5242880 5242880 0.05625 -0.05 0 0 -1.4924199145024e-10
+1179648 0 2 0 0 5111808 5242880 5242880 0.05625 -0.025 0 0 -3.02089459928527e-10
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5373952 5242880 5242880 0.05625 0.025 0 0 3.02089459928527e-10
+1179648 0 2 0 0 5505024 5242880 5242880 0.05625 0.05 0 0 1.4924199145024e-10
+1179648 0 2 0 0 5636096 5242880 5242880 0.05625 0.075 0 0 1.85227602700344e-09
+1179648 0 2 0 0 5767168 5242880 5242880 0.05625 0.1 0 0 9.02082302374948e-10
+1179648 0 2 0 0 5898240 5242880 5242880 0.05625 0.125 0 0 -1.76389248042821e-10
+1179648 0 2 0 0 6029312 5242880 5242880 0.05625 0.15 0 0 -1.14978515973243e-09
+1179648 0 2 0 0 6160384 5242880 5242880 0.05625 0.175 0 0 -7.57218084160716e-10
+1179648 0 2 0 0 6291456 5242880 5242880 0.05625 0.2 0 0 -1.15569069071564e-10
+1179648 0 2 0 0 6422528 5242880 5242880 0.05625 0.225 0 0 -6.10234773446789e-11
+1179648 0 2 0 0 6553600 5242880 5242880 0.05625 0.25 0 0 -1.16100548303662e-10
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 2621440 5242880 5242880 0.0625 -0.5 0 0 -3.04437898501764e-13
+1310720 0 1 0 0 2883584 5242880 5242880 0.0625 -0.45 0 0 4.38967709837784e-12
+1310720 0 1 0 0 3145728 5242880 5242880 0.0625 -0.4 0 0 3.11205401726244e-12
+1310720 0 1 0 0 3407872 5242880 5242880 0.0625 -0.35 0 0 -3.66809800849549e-11
+1310720 0 1 0 0 3670016 5242880 5242880 0.0625 -0.3 0 0 -4.49737374078052e-11
+1310720 0 1 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 1.49538088653709e-10
+1310720 0 1 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 1.09402042980378e-10
+1310720 0 1 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 1.26435693396469e-09
+1310720 0 1 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 -8.82571386343993e-10
+1310720 0 1 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 -2.12154000385952e-10
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 2.12154000385952e-10
+1310720 0 1 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 8.82571386343993e-10
+1310720 0 1 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 -1.26435693396469e-09
+1310720 0 1 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 -1.09402042980378e-10
+1310720 0 1 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 -1.49538088653709e-10
+1310720 0 1 0 0 6815744 5242880 5242880 0.0625 0.3 0 0 4.49737374078052e-11
+1310720 0 1 0 0 7077888 5242880 5242880 0.0625 0.35 0 0 3.66809800849549e-11
+1310720 0 1 0 0 7340032 5242880 5242880 0.0625 0.4 0 0 -3.11205401726244e-12
+1310720 0 1 0 0 7602176 5242880 5242880 0.0625 0.45 0 0 -4.38967709837784e-12
+1310720 0 1 0 0 7864320 5242880 5242880 0.0625 0.5 0 0 3.04437898501764e-13
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 1.49538088653709e-10
+1310720 0 2 0 0 4063232 5242880 5242880 0.0625 -0.225 0 0 6.94423742593689e-11
+1310720 0 2 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 1.09402042980378e-10
+1310720 0 2 0 0 4325376 5242880 5242880 0.0625 -0.175 0 0 8.18554005637242e-10
+1310720 0 2 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 1.26435693396469e-09
+1310720 0 2 0 0 4587520 5242880 5242880 0.0625 -0.125 0 0 2.21176367874489e-10
+1310720 0 2 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 -8.82571386343993e-10
+1310720 0 2 0 0 4849664 5242880 5242880 0.0625 -0.075 0 0 -1.89863267700356e-09
+1310720 0 2 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 -2.12154000385952e-10
+1310720 0 2 0 0 5111808 5242880 5242880 0.0625 -0.025 0 0 -4.09720003295237e-10
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5373952 5242880 5242880 0.0625 0.025 0 0 4.09720003295237e-10
+1310720 0 2 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 2.12154000385952e-10
+1310720 0 2 0 0 5636096 5242880 5242880 0.0625 0.075 0 0 1.89863267700356e-09
+1310720 0 2 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 8.82571386343993e-10
+1310720 0 2 0 0 5898240 5242880 5242880 0.0625 0.125 0 0 -2.21176367874489e-10
+1310720 0 2 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 -1.26435693396469e-09
+1310720 0 2 0 0 6160384 5242880 5242880 0.0625 0.175 0 0 -8.18554005637242e-10
+1310720 0 2 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 -1.09402042980378e-10
+1310720 0 2 0 0 6422528 5242880 5242880 0.0625 0.225 0 0 -6.94423742593689e-11
+1310720 0 2 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 -1.49538088653709e-10
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 3932160 5242880 5242880 0.06875 -0.25 0 0 1.81307149993657e-10
+1441792 0 2 0 0 4063232 5242880 5242880 0.06875 -0.225 0 0 7.7773652278003e-11
+1441792 0 2 0 0 4194304 5242880 5242880 0.06875 -0.2 0 0 1.03259930987754e-10
+1441792 0 2 0 0 4325376 5242880 5242880 0.06875 -0.175 0 0 8.64003737307137e-10
+1441792 0 2 0 0 4456448 5242880 5242880 0.06875 -0.15 0 0 1.36522779944452e-09
+1441792 0 2 0 0 4587520 5242880 5242880 0.06875 -0.125 0 0 3.34266718489435e-10
+1441792 0 2 0 0 4718592 5242880 5242880 0.06875 -0.1 0 0 -8.06391597015418e-10
+1441792 0 2 0 0 4849664 5242880 5242880 0.06875 -0.075 0 0 -1.88530306181415e-09
+1441792 0 2 0 0 4980736 5242880 5242880 0.06875 -0.05 0 0 -2.82855130521546e-10
+1441792 0 2 0 0 5111808 5242880 5242880 0.06875 -0.025 0 0 -5.27734009270198e-10
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5373952 5242880 5242880 0.06875 0.025 0 0 5.27734009270198e-10
+1441792 0 2 0 0 5505024 5242880 5242880 0.06875 0.05 0 0 2.82855130521546e-10
+1441792 0 2 0 0 5636096 5242880 5242880 0.06875 0.075 0 0 1.88530306181415e-09
+1441792 0 2 0 0 5767168 5242880 5242880 0.06875 0.1 0 0 8.06391597015418e-10
+1441792 0 2 0 0 5898240 5242880 5242880 0.06875 0.125 0 0 -3.34266718489435e-10
+1441792 0 2 0 0 6029312 5242880 5242880 0.06875 0.15 0 0 -1.36522779944452e-09
+1441792 0 2 0 0 6160384 5242880 5242880 0.06875 0.175 0 0 -8.64003737307137e-10
+1441792 0 2 0 0 6291456 5242880 5242880 0.06875 0.2 0 0 -1.03259930987754e-10
+1441792 0 2 0 0 6422528 5242880 5242880 0.06875 0.225 0 0 -7.7773652278003e-11
+1441792 0 2 0 0 6553600 5242880 5242880 0.06875 0.25 0 0 -1.81307149993657e-10
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 0 5242880 5242880 0.075 -1 0 0 0
+1572864 0 0 0 0 524288 5242880 5242880 0.075 -0.9 0 0 0
+1572864 0 0 0 0 1048576 5242880 5242880 0.075 -0.8 0 0 0
+1572864 0 0 0 0 1572864 5242880 5242880 0.075 -0.7 0 0 -1.35771024053118e-15
+1572864 0 0 0 0 2097152 5242880 5242880 0.075 -0.6 0 0 1.98637402822518e-14
+1572864 0 0 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 -6.42636407051829e-13
+1572864 0 0 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 5.86269458905756e-12
+1572864 0 0 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 -5.08978900692902e-11
+1572864 0 0 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 9.43000122433091e-11
+1572864 0 0 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 -6.75829822660567e-10
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5767168 5242880 5242880 0.075 0.1 0 0 6.75829822660567e-10
+1572864 0 0 0 0 6291456 5242880 5242880 0.075 0.2 0 0 -9.43000122433091e-11
+1572864 0 0 0 0 6815744 5242880 5242880 0.075 0.3 0 0 5.08978900692902e-11
+1572864 0 0 0 0 7340032 5242880 5242880 0.075 0.4 0 0 -5.86269458905756e-12
+1572864 0 0 0 0 7864320 5242880 5242880 0.075 0.5 0 0 6.42636407051829e-13
+1572864 0 0 0 0 8388608 5242880 5242880 0.075 0.6 0 0 -1.98637402822518e-14
+1572864 0 0 0 0 8912896 5242880 5242880 0.075 0.7 0 0 1.35771024053118e-15
+1572864 0 0 0 0 9437184 5242880 5242880 0.075 0.8 0 0 0
+1572864 0 0 0 0 9961472 5242880 5242880 0.075 0.9 0 0 0
+1572864 0 0 0 0 10485760 5242880 5242880 0.075 1 0 0 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 -6.42636407051829e-13
+1572864 0 1 0 0 2883584 5242880 5242880 0.075 -0.45 0 0 6.11615937294123e-12
+1572864 0 1 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 5.86269458905756e-12
+1572864 0 1 0 0 3407872 5242880 5242880 0.075 -0.35 0 0 -3.1185883447397e-11
+1572864 0 1 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 -5.08978900692902e-11
+1572864 0 1 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 6.6286639227355e-11
+1572864 0 1 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 9.43000122433091e-11
+1572864 0 1 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 1.45205973171395e-09
+1572864 0 1 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 -6.75829822660567e-10
+1572864 0 1 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 -3.56851564501752e-10
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5505024 5242880 5242880 0.075 0.05 0 0 3.56851564501752e-10
+1572864 0 1 0 0 5767168 5242880 5242880 0.075 0.1 0 0 6.75829822660567e-10
+1572864 0 1 0 0 6029312 5242880 5242880 0.075 0.15 0 0 -1.45205973171395e-09
+1572864 0 1 0 0 6291456 5242880 5242880 0.075 0.2 0 0 -9.43000122433091e-11
+1572864 0 1 0 0 6553600 5242880 5242880 0.075 0.25 0 0 -6.6286639227355e-11
+1572864 0 1 0 0 6815744 5242880 5242880 0.075 0.3 0 0 5.08978900692902e-11
+1572864 0 1 0 0 7077888 5242880 5242880 0.075 0.35 0 0 3.1185883447397e-11
+1572864 0 1 0 0 7340032 5242880 5242880 0.075 0.4 0 0 -5.86269458905756e-12
+1572864 0 1 0 0 7602176 5242880 5242880 0.075 0.45 0 0 -6.11615937294123e-12
+1572864 0 1 0 0 7864320 5242880 5242880 0.075 0.5 0 0 6.42636407051829e-13
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 6.6286639227355e-11
+1572864 0 2 0 0 4063232 5242880 5242880 0.075 -0.225 0 0 2.75737634945702e-12
+1572864 0 2 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 9.43000122433091e-11
+1572864 0 2 0 0 4325376 5242880 5242880 0.075 -0.175 0 0 9.07923804940536e-10
+1572864 0 2 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 1.45205973171395e-09
+1572864 0 2 0 0 4587520 5242880 5242880 0.075 -0.125 0 0 4.53038795858683e-10
+1572864 0 2 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 -6.75829822660567e-10
+1572864 0 2 0 0 4849664 5242880 5242880 0.075 -0.075 0 0 -1.8117351507918e-09
+1572864 0 2 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 -3.56851564501752e-10
+1572864 0 2 0 0 5111808 5242880 5242880 0.075 -0.025 0 0 -6.50323827196727e-10
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5373952 5242880 5242880 0.075 0.025 0 0 6.50323827196727e-10
+1572864 0 2 0 0 5505024 5242880 5242880 0.075 0.05 0 0 3.56851564501752e-10
+1572864 0 2 0 0 5636096 5242880 5242880 0.075 0.075 0 0 1.8117351507918e-09
+1572864 0 2 0 0 5767168 5242880 5242880 0.075 0.1 0 0 6.75829822660567e-10
+1572864 0 2 0 0 5898240 5242880 5242880 0.075 0.125 0 0 -4.53038795858683e-10
+1572864 0 2 0 0 6029312 5242880 5242880 0.075 0.15 0 0 -1.45205973171395e-09
+1572864 0 2 0 0 6160384 5242880 5242880 0.075 0.175 0 0 -9.07923804940536e-10
+1572864 0 2 0 0 6291456 5242880 5242880 0.075 0.2 0 0 -9.43000122433091e-11
+1572864 0 2 0 0 6422528 5242880 5242880 0.075 0.225 0 0 -2.75737634945702e-12
+1572864 0 2 0 0 6553600 5242880 5242880 0.075 0.25 0 0 -6.6286639227355e-11
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 3932160 5242880 5242880 0.08125 -0.25 0 0 6.96062224198494e-11
+1703936 0 2 0 0 4063232 5242880 5242880 0.08125 -0.225 0 0 -1.10388286118339e-11
+1703936 0 2 0 0 4194304 5242880 5242880 0.08125 -0.2 0 0 7.52374759716012e-11
+1703936 0 2 0 0 4325376 5242880 5242880 0.08125 -0.175 0 0 9.3008305679465e-10
+1703936 0 2 0 0 4456448 5242880 5242880 0.08125 -0.15 0 0 1.52889975737573e-09
+1703936 0 2 0 0 4587520 5242880 5242880 0.08125 -0.125 0 0 5.89320989216024e-10
+1703936 0 2 0 0 4718592 5242880 5242880 0.08125 -0.1 0 0 -4.94475691873812e-10
+1703936 0 2 0 0 4849664 5242880 5242880 0.08125 -0.075 0 0 -1.67817614897074e-09
+1703936 0 2 0 0 4980736 5242880 5242880 0.08125 -0.05 0 0 -4.281106418443e-10
+1703936 0 2 0 0 5111808 5242880 5242880 0.08125 -0.025 0 0 -7.70426056284634e-10
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5373952 5242880 5242880 0.08125 0.025 0 0 7.70426056284634e-10
+1703936 0 2 0 0 5505024 5242880 5242880 0.08125 0.05 0 0 4.281106418443e-10
+1703936 0 2 0 0 5636096 5242880 5242880 0.08125 0.075 0 0 1.67817614897074e-09
+1703936 0 2 0 0 5767168 5242880 5242880 0.08125 0.1 0 0 4.94475691873812e-10
+1703936 0 2 0 0 5898240 5242880 5242880 0.08125 0.125 0 0 -5.89320989216024e-10
+1703936 0 2 0 0 6029312 5242880 5242880 0.08125 0.15 0 0 -1.52889975737573e-09
+1703936 0 2 0 0 6160384 5242880 5242880 0.08125 0.175 0 0 -9.3008305679465e-10
+1703936 0 2 0 0 6291456 5242880 5242880 0.08125 0.2 0 0 -7.52374759716012e-11
+1703936 0 2 0 0 6422528 5242880 5242880 0.08125 0.225 0 0 1.10388286118339e-11
+1703936 0 2 0 0 6553600 5242880 5242880 0.08125 0.25 0 0 -6.96062224198494e-11
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 2621440 5242880 5242880 0.0875 -0.5 0 0 -1.14959691072114e-12
+1835008 0 1 0 0 2883584 5242880 5242880 0.0875 -0.45 0 0 7.22601572039165e-12
+1835008 0 1 0 0 3145728 5242880 5242880 0.0875 -0.4 0 0 9.22265678178953e-12
+1835008 0 1 0 0 3407872 5242880 5242880 0.0875 -0.35 0 0 -2.91131087878753e-11
+1835008 0 1 0 0 3670016 5242880 5242880 0.0875 -0.3 0 0 -4.30227031662326e-11
+1835008 0 1 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 1.02889344216125e-10
+1835008 0 1 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 4.8500592431111e-11
+1835008 0 1 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 1.59439886756226e-09
+1835008 0 1 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 -2.54991675922393e-10
+1835008 0 1 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 -4.89255647569594e-10
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 4.89255647569594e-10
+1835008 0 1 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 2.54991675922393e-10
+1835008 0 1 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 -1.59439886756226e-09
+1835008 0 1 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 -4.8500592431111e-11
+1835008 0 1 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 -1.02889344216125e-10
+1835008 0 1 0 0 6815744 5242880 5242880 0.0875 0.3 0 0 4.30227031662326e-11
+1835008 0 1 0 0 7077888 5242880 5242880 0.0875 0.35 0 0 2.91131087878753e-11
+1835008 0 1 0 0 7340032 5242880 5242880 0.0875 0.4 0 0 -9.22265678178953e-12
+1835008 0 1 0 0 7602176 5242880 5242880 0.0875 0.45 0 0 -7.22601572039165e-12
+1835008 0 1 0 0 7864320 5242880 5242880 0.0875 0.5 0 0 1.14959691072114e-12
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 1.02889344216125e-10
+1835008 0 2 0 0 4063232 5242880 5242880 0.0875 -0.225 0 0 -1.18041709106814e-11
+1835008 0 2 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 4.8500592431111e-11
+1835008 0 2 0 0 4325376 5242880 5242880 0.0875 -0.175 0 0 9.33637341977913e-10
+1835008 0 2 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 1.59439886756226e-09
+1835008 0 2 0 0 4587520 5242880 5242880 0.0875 -0.125 0 0 7.8096373624358e-10
+1835008 0 2 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 -2.54991675922393e-10
+1835008 0 2 0 0 4849664 5242880 5242880 0.0875 -0.075 0 0 -1.48597429731427e-09
+1835008 0 2 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 -4.89255647569594e-10
+1835008 0 2 0 0 5111808 5242880 5242880 0.0875 -0.025 0 0 -8.8000695156835e-10
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5373952 5242880 5242880 0.0875 0.025 0 0 8.8000695156835e-10
+1835008 0 2 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 4.89255647569594e-10
+1835008 0 2 0 0 5636096 5242880 5242880 0.0875 0.075 0 0 1.48597429731427e-09
+1835008 0 2 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 2.54991675922393e-10
+1835008 0 2 0 0 5898240 5242880 5242880 0.0875 0.125 0 0 -7.8096373624358e-10
+1835008 0 2 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 -1.59439886756226e-09
+1835008 0 2 0 0 6160384 5242880 5242880 0.0875 0.175 0 0 -9.33637341977913e-10
+1835008 0 2 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 -4.8500592431111e-11
+1835008 0 2 0 0 6422528 5242880 5242880 0.0875 0.225 0 0 1.18041709106814e-11
+1835008 0 2 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 -1.02889344216125e-10
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 3932160 5242880 5242880 0.09375 -0.25 0 0 1.34436501201734e-10
+1966080 0 2 0 0 4063232 5242880 5242880 0.09375 -0.225 0 0 -1.03885846193062e-11
+1966080 0 2 0 0 4194304 5242880 5242880 0.09375 -0.2 0 0 2.69188612372906e-11
+1966080 0 2 0 0 4325376 5242880 5242880 0.09375 -0.175 0 0 9.38286274781054e-10
+1966080 0 2 0 0 4456448 5242880 5242880 0.09375 -0.15 0 0 1.65348419736237e-09
+1966080 0 2 0 0 4587520 5242880 5242880 0.09375 -0.125 0 0 9.42916074141038e-10
+1966080 0 2 0 0 4718592 5242880 5242880 0.09375 -0.1 0 0 2.10926091407752e-11
+1966080 0 2 0 0 4849664 5242880 5242880 0.09375 -0.075 0 0 -1.23712620703209e-09
+1966080 0 2 0 0 4980736 5242880 5242880 0.09375 -0.05 0 0 -5.31834245624345e-10
+1966080 0 2 0 0 5111808 5242880 5242880 0.09375 -0.025 0 0 -9.7040738870439e-10
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5373952 5242880 5242880 0.09375 0.025 0 0 9.7040738870439e-10
+1966080 0 2 0 0 5505024 5242880 5242880 0.09375 0.05 0 0 5.31834245624345e-10
+1966080 0 2 0 0 5636096 5242880 5242880 0.09375 0.075 0 0 1.23712620703209e-09
+1966080 0 2 0 0 5767168 5242880 5242880 0.09375 0.1 0 0 -2.10926091407752e-11
+1966080 0 2 0 0 5898240 5242880 5242880 0.09375 0.125 0 0 -9.42916074141038e-10
+1966080 0 2 0 0 6029312 5242880 5242880 0.09375 0.15 0 0 -1.65348419736237e-09
+1966080 0 2 0 0 6160384 5242880 5242880 0.09375 0.175 0 0 -9.38286274781054e-10
+1966080 0 2 0 0 6291456 5242880 5242880 0.09375 0.2 0 0 -2.69188612372906e-11
+1966080 0 2 0 0 6422528 5242880 5242880 0.09375 0.225 0 0 1.03885846193062e-11
+1966080 0 2 0 0 6553600 5242880 5242880 0.09375 0.25 0 0 -1.34436501201734e-10
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 0 5242880 5242880 0.1 -1 0 0 0
+2097152 0 0 0 0 524288 5242880 5242880 0.1 -0.9 0 0 -2.31296463463574e-17
+2097152 0 0 0 0 1048576 5242880 5242880 0.1 -0.8 0 0 3.46944695195361e-16
+2097152 0 0 0 0 1572864 5242880 5242880 0.1 -0.7 0 0 -1.33434929772136e-14
+2097152 0 0 0 0 2097152 5242880 5242880 0.1 -0.6 0 0 1.30913798320383e-13
+2097152 0 0 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 -1.80851861264486e-12
+2097152 0 0 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 1.32743815939307e-11
+2097152 0 0 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 -2.44367743632938e-11
+2097152 0 0 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 6.21578251832252e-12
+2097152 0 0 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 3.4977364523255e-10
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5767168 5242880 5242880 0.1 0.1 0 0 -3.4977364523255e-10
+2097152 0 0 0 0 6291456 5242880 5242880 0.1 0.2 0 0 -6.21578251832252e-12
+2097152 0 0 0 0 6815744 5242880 5242880 0.1 0.3 0 0 2.44367743632938e-11
+2097152 0 0 0 0 7340032 5242880 5242880 0.1 0.4 0 0 -1.32743815939307e-11
+2097152 0 0 0 0 7864320 5242880 5242880 0.1 0.5 0 0 1.80851861264486e-12
+2097152 0 0 0 0 8388608 5242880 5242880 0.1 0.6 0 0 -1.30913798320383e-13
+2097152 0 0 0 0 8912896 5242880 5242880 0.1 0.7 0 0 1.33434929772136e-14
+2097152 0 0 0 0 9437184 5242880 5242880 0.1 0.8 0 0 -3.46944695195361e-16
+2097152 0 0 0 0 9961472 5242880 5242880 0.1 0.9 0 0 2.31296463463574e-17
+2097152 0 0 0 0 10485760 5242880 5242880 0.1 1 0 0 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 -1.80851861264486e-12
+2097152 0 1 0 0 2883584 5242880 5242880 0.1 -0.45 0 0 7.96866421228411e-12
+2097152 0 1 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 1.32743815939307e-11
+2097152 0 1 0 0 3407872 5242880 5242880 0.1 -0.35 0 0 -6.55429992687158e-12
+2097152 0 1 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 -2.44367743632938e-11
+2097152 0 1 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 -3.29398095894514e-11
+2097152 0 1 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 6.21578251832252e-12
+2097152 0 1 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 1.70451336841312e-09
+2097152 0 1 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 3.4977364523255e-10
+2097152 0 1 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 -5.46878123804569e-10
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5505024 5242880 5242880 0.1 0.05 0 0 5.46878123804569e-10
+2097152 0 1 0 0 5767168 5242880 5242880 0.1 0.1 0 0 -3.4977364523255e-10
+2097152 0 1 0 0 6029312 5242880 5242880 0.1 0.15 0 0 -1.70451336841312e-09
+2097152 0 1 0 0 6291456 5242880 5242880 0.1 0.2 0 0 -6.21578251832252e-12
+2097152 0 1 0 0 6553600 5242880 5242880 0.1 0.25 0 0 3.29398095894514e-11
+2097152 0 1 0 0 6815744 5242880 5242880 0.1 0.3 0 0 2.44367743632938e-11
+2097152 0 1 0 0 7077888 5242880 5242880 0.1 0.35 0 0 6.55429992687158e-12
+2097152 0 1 0 0 7340032 5242880 5242880 0.1 0.4 0 0 -1.32743815939307e-11
+2097152 0 1 0 0 7602176 5242880 5242880 0.1 0.45 0 0 -7.96866421228411e-12
+2097152 0 1 0 0 7864320 5242880 5242880 0.1 0.5 0 0 1.80851861264486e-12
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 -3.29398095894514e-11
+2097152 0 2 0 0 4063232 5242880 5242880 0.1 -0.225 0 0 -1.20037052355624e-10
+2097152 0 2 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 6.21578251832252e-12
+2097152 0 2 0 0 4325376 5242880 5242880 0.1 -0.175 0 0 9.4248303267124e-10
+2097152 0 2 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 1.70451336841312e-09
+2097152 0 2 0 0 4587520 5242880 5242880 0.1 -0.125 0 0 1.18932784150608e-09
+2097152 0 2 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 3.4977364523255e-10
+2097152 0 2 0 0 4849664 5242880 5242880 0.1 -0.075 0 0 -9.3463225122233e-10
+2097152 0 2 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 -5.46878123804569e-10
+2097152 0 2 0 0 5111808 5242880 5242880 0.1 -0.025 0 0 -1.03273274654203e-09
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5373952 5242880 5242880 0.1 0.025 0 0 1.03273274654203e-09
+2097152 0 2 0 0 5505024 5242880 5242880 0.1 0.05 0 0 5.46878123804569e-10
+2097152 0 2 0 0 5636096 5242880 5242880 0.1 0.075 0 0 9.3463225122233e-10
+2097152 0 2 0 0 5767168 5242880 5242880 0.1 0.1 0 0 -3.4977364523255e-10
+2097152 0 2 0 0 5898240 5242880 5242880 0.1 0.125 0 0 -1.18932784150608e-09
+2097152 0 2 0 0 6029312 5242880 5242880 0.1 0.15 0 0 -1.70451336841312e-09
+2097152 0 2 0 0 6160384 5242880 5242880 0.1 0.175 0 0 -9.4248303267124e-10
+2097152 0 2 0 0 6291456 5242880 5242880 0.1 0.2 0 0 -6.21578251832252e-12
+2097152 0 2 0 0 6422528 5242880 5242880 0.1 0.225 0 0 1.20037052355624e-10
+2097152 0 2 0 0 6553600 5242880 5242880 0.1 0.25 0 0 3.29398095894514e-11
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.y.asc b/Carpet/CarpetInterp/test/waveinterp/phix.y.asc
new file mode 100644
index 000000000..963b71ded
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.y.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phix y (phix)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 0 5242880 0 0 -1 0 0
+0 0 0 0 0 5242880 524288 5242880 0 0 -0.9 0 0
+0 0 0 0 0 5242880 1048576 5242880 0 0 -0.8 0 0
+0 0 0 0 0 5242880 1572864 5242880 0 0 -0.7 0 0
+0 0 0 0 0 5242880 2097152 5242880 0 0 -0.6 0 0
+0 0 0 0 0 5242880 2621440 5242880 0 0 -0.5 0 0
+0 0 0 0 0 5242880 3145728 5242880 0 0 -0.4 0 0
+0 0 0 0 0 5242880 3670016 5242880 0 0 -0.3 0 0
+0 0 0 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 0 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 0 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 0 0 0 5242880 6815744 5242880 0 0 0.3 0 0
+0 0 0 0 0 5242880 7340032 5242880 0 0 0.4 0 0
+0 0 0 0 0 5242880 7864320 5242880 0 0 0.5 0 0
+0 0 0 0 0 5242880 8388608 5242880 0 0 0.6 0 0
+0 0 0 0 0 5242880 8912896 5242880 0 0 0.7 0 0
+0 0 0 0 0 5242880 9437184 5242880 0 0 0.8 0 0
+0 0 0 0 0 5242880 9961472 5242880 0 0 0.9 0 0
+0 0 0 0 0 5242880 10485760 5242880 0 0 1 0 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 2621440 5242880 0 0 -0.5 0 0
+0 0 1 0 0 5242880 2883584 5242880 0 0 -0.45 0 0
+0 0 1 0 0 5242880 3145728 5242880 0 0 -0.4 0 0
+0 0 1 0 0 5242880 3407872 5242880 0 0 -0.35 0 0
+0 0 1 0 0 5242880 3670016 5242880 0 0 -0.3 0 0
+0 0 1 0 0 5242880 3932160 5242880 0 0 -0.25 0 0
+0 0 1 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 1 0 0 5242880 4456448 5242880 0 0 -0.15 0 0
+0 0 1 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 1 0 0 5242880 4980736 5242880 0 0 -0.05 0 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5242880 5505024 5242880 0 0 0.05 0 0
+0 0 1 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 1 0 0 5242880 6029312 5242880 0 0 0.15 0 0
+0 0 1 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 1 0 0 5242880 6553600 5242880 0 0 0.25 0 0
+0 0 1 0 0 5242880 6815744 5242880 0 0 0.3 0 0
+0 0 1 0 0 5242880 7077888 5242880 0 0 0.35 0 0
+0 0 1 0 0 5242880 7340032 5242880 0 0 0.4 0 0
+0 0 1 0 0 5242880 7602176 5242880 0 0 0.45 0 0
+0 0 1 0 0 5242880 7864320 5242880 0 0 0.5 0 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 3932160 5242880 0 0 -0.25 0 0
+0 0 2 0 0 5242880 4063232 5242880 0 0 -0.225 0 0
+0 0 2 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 2 0 0 5242880 4325376 5242880 0 0 -0.175 0 0
+0 0 2 0 0 5242880 4456448 5242880 0 0 -0.15 0 0
+0 0 2 0 0 5242880 4587520 5242880 0 0 -0.125 0 0
+0 0 2 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 2 0 0 5242880 4849664 5242880 0 0 -0.075 0 0
+0 0 2 0 0 5242880 4980736 5242880 0 0 -0.05 0 0
+0 0 2 0 0 5242880 5111808 5242880 0 0 -0.025 0 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5242880 5373952 5242880 0 0 0.025 0 0
+0 0 2 0 0 5242880 5505024 5242880 0 0 0.05 0 0
+0 0 2 0 0 5242880 5636096 5242880 0 0 0.075 0 0
+0 0 2 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 2 0 0 5242880 5898240 5242880 0 0 0.125 0 0
+0 0 2 0 0 5242880 6029312 5242880 0 0 0.15 0 0
+0 0 2 0 0 5242880 6160384 5242880 0 0 0.175 0 0
+0 0 2 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 2 0 0 5242880 6422528 5242880 0 0 0.225 0 0
+0 0 2 0 0 5242880 6553600 5242880 0 0 0.25 0 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 3932160 5242880 0.00625 0 -0.25 0 0
+131072 0 2 0 0 5242880 4063232 5242880 0.00625 0 -0.225 0 0
+131072 0 2 0 0 5242880 4194304 5242880 0.00625 0 -0.2 0 0
+131072 0 2 0 0 5242880 4325376 5242880 0.00625 0 -0.175 0 0
+131072 0 2 0 0 5242880 4456448 5242880 0.00625 0 -0.15 0 0
+131072 0 2 0 0 5242880 4587520 5242880 0.00625 0 -0.125 0 0
+131072 0 2 0 0 5242880 4718592 5242880 0.00625 0 -0.1 0 0
+131072 0 2 0 0 5242880 4849664 5242880 0.00625 0 -0.075 0 0
+131072 0 2 0 0 5242880 4980736 5242880 0.00625 0 -0.05 0 0
+131072 0 2 0 0 5242880 5111808 5242880 0.00625 0 -0.025 0 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5242880 5373952 5242880 0.00625 0 0.025 0 0
+131072 0 2 0 0 5242880 5505024 5242880 0.00625 0 0.05 0 0
+131072 0 2 0 0 5242880 5636096 5242880 0.00625 0 0.075 0 0
+131072 0 2 0 0 5242880 5767168 5242880 0.00625 0 0.1 0 0
+131072 0 2 0 0 5242880 5898240 5242880 0.00625 0 0.125 0 0
+131072 0 2 0 0 5242880 6029312 5242880 0.00625 0 0.15 0 0
+131072 0 2 0 0 5242880 6160384 5242880 0.00625 0 0.175 0 0
+131072 0 2 0 0 5242880 6291456 5242880 0.00625 0 0.2 0 0
+131072 0 2 0 0 5242880 6422528 5242880 0.00625 0 0.225 0 0
+131072 0 2 0 0 5242880 6553600 5242880 0.00625 0 0.25 0 0
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 2621440 5242880 0.0125 0 -0.5 0 0
+262144 0 1 0 0 5242880 2883584 5242880 0.0125 0 -0.45 0 0
+262144 0 1 0 0 5242880 3145728 5242880 0.0125 0 -0.4 0 0
+262144 0 1 0 0 5242880 3407872 5242880 0.0125 0 -0.35 0 0
+262144 0 1 0 0 5242880 3670016 5242880 0.0125 0 -0.3 0 0
+262144 0 1 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 0
+262144 0 1 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 0
+262144 0 1 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 0
+262144 0 1 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 0
+262144 0 1 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 0
+262144 0 1 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 0
+262144 0 1 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 0
+262144 0 1 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 0
+262144 0 1 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 0
+262144 0 1 0 0 5242880 6815744 5242880 0.0125 0 0.3 0 0
+262144 0 1 0 0 5242880 7077888 5242880 0.0125 0 0.35 0 0
+262144 0 1 0 0 5242880 7340032 5242880 0.0125 0 0.4 0 0
+262144 0 1 0 0 5242880 7602176 5242880 0.0125 0 0.45 0 0
+262144 0 1 0 0 5242880 7864320 5242880 0.0125 0 0.5 0 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 0
+262144 0 2 0 0 5242880 4063232 5242880 0.0125 0 -0.225 0 0
+262144 0 2 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 0
+262144 0 2 0 0 5242880 4325376 5242880 0.0125 0 -0.175 0 0
+262144 0 2 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 0
+262144 0 2 0 0 5242880 4587520 5242880 0.0125 0 -0.125 0 0
+262144 0 2 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 0
+262144 0 2 0 0 5242880 4849664 5242880 0.0125 0 -0.075 0 0
+262144 0 2 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 0
+262144 0 2 0 0 5242880 5111808 5242880 0.0125 0 -0.025 0 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5242880 5373952 5242880 0.0125 0 0.025 0 0
+262144 0 2 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 0
+262144 0 2 0 0 5242880 5636096 5242880 0.0125 0 0.075 0 0
+262144 0 2 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 0
+262144 0 2 0 0 5242880 5898240 5242880 0.0125 0 0.125 0 0
+262144 0 2 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 0
+262144 0 2 0 0 5242880 6160384 5242880 0.0125 0 0.175 0 0
+262144 0 2 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 0
+262144 0 2 0 0 5242880 6422528 5242880 0.0125 0 0.225 0 0
+262144 0 2 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 0
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 3932160 5242880 0.01875 0 -0.25 0 0
+393216 0 2 0 0 5242880 4063232 5242880 0.01875 0 -0.225 0 0
+393216 0 2 0 0 5242880 4194304 5242880 0.01875 0 -0.2 0 0
+393216 0 2 0 0 5242880 4325376 5242880 0.01875 0 -0.175 0 0
+393216 0 2 0 0 5242880 4456448 5242880 0.01875 0 -0.15 0 0
+393216 0 2 0 0 5242880 4587520 5242880 0.01875 0 -0.125 0 0
+393216 0 2 0 0 5242880 4718592 5242880 0.01875 0 -0.1 0 0
+393216 0 2 0 0 5242880 4849664 5242880 0.01875 0 -0.075 0 0
+393216 0 2 0 0 5242880 4980736 5242880 0.01875 0 -0.05 0 0
+393216 0 2 0 0 5242880 5111808 5242880 0.01875 0 -0.025 0 0
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5242880 5373952 5242880 0.01875 0 0.025 0 0
+393216 0 2 0 0 5242880 5505024 5242880 0.01875 0 0.05 0 0
+393216 0 2 0 0 5242880 5636096 5242880 0.01875 0 0.075 0 0
+393216 0 2 0 0 5242880 5767168 5242880 0.01875 0 0.1 0 0
+393216 0 2 0 0 5242880 5898240 5242880 0.01875 0 0.125 0 0
+393216 0 2 0 0 5242880 6029312 5242880 0.01875 0 0.15 0 0
+393216 0 2 0 0 5242880 6160384 5242880 0.01875 0 0.175 0 0
+393216 0 2 0 0 5242880 6291456 5242880 0.01875 0 0.2 0 0
+393216 0 2 0 0 5242880 6422528 5242880 0.01875 0 0.225 0 0
+393216 0 2 0 0 5242880 6553600 5242880 0.01875 0 0.25 0 0
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 0 5242880 0.025 0 -1 0 0
+524288 0 0 0 0 5242880 524288 5242880 0.025 0 -0.9 0 0
+524288 0 0 0 0 5242880 1048576 5242880 0.025 0 -0.8 0 0
+524288 0 0 0 0 5242880 1572864 5242880 0.025 0 -0.7 0 0
+524288 0 0 0 0 5242880 2097152 5242880 0.025 0 -0.6 0 0
+524288 0 0 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 0
+524288 0 0 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 0
+524288 0 0 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 0
+524288 0 0 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0
+524288 0 0 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 0
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5242880 5767168 5242880 0.025 0 0.1 0 0
+524288 0 0 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0
+524288 0 0 0 0 5242880 6815744 5242880 0.025 0 0.3 0 0
+524288 0 0 0 0 5242880 7340032 5242880 0.025 0 0.4 0 0
+524288 0 0 0 0 5242880 7864320 5242880 0.025 0 0.5 0 0
+524288 0 0 0 0 5242880 8388608 5242880 0.025 0 0.6 0 0
+524288 0 0 0 0 5242880 8912896 5242880 0.025 0 0.7 0 0
+524288 0 0 0 0 5242880 9437184 5242880 0.025 0 0.8 0 0
+524288 0 0 0 0 5242880 9961472 5242880 0.025 0 0.9 0 0
+524288 0 0 0 0 5242880 10485760 5242880 0.025 0 1 0 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 0
+524288 0 1 0 0 5242880 2883584 5242880 0.025 0 -0.45 0 0
+524288 0 1 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 0
+524288 0 1 0 0 5242880 3407872 5242880 0.025 0 -0.35 0 0
+524288 0 1 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 0
+524288 0 1 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 0
+524288 0 1 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0
+524288 0 1 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 0
+524288 0 1 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 0
+524288 0 1 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 0
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5242880 5505024 5242880 0.025 0 0.05 0 0
+524288 0 1 0 0 5242880 5767168 5242880 0.025 0 0.1 0 0
+524288 0 1 0 0 5242880 6029312 5242880 0.025 0 0.15 0 0
+524288 0 1 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0
+524288 0 1 0 0 5242880 6553600 5242880 0.025 0 0.25 0 0
+524288 0 1 0 0 5242880 6815744 5242880 0.025 0 0.3 0 0
+524288 0 1 0 0 5242880 7077888 5242880 0.025 0 0.35 0 0
+524288 0 1 0 0 5242880 7340032 5242880 0.025 0 0.4 0 0
+524288 0 1 0 0 5242880 7602176 5242880 0.025 0 0.45 0 0
+524288 0 1 0 0 5242880 7864320 5242880 0.025 0 0.5 0 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 0
+524288 0 2 0 0 5242880 4063232 5242880 0.025 0 -0.225 0 0
+524288 0 2 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0
+524288 0 2 0 0 5242880 4325376 5242880 0.025 0 -0.175 0 0
+524288 0 2 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 0
+524288 0 2 0 0 5242880 4587520 5242880 0.025 0 -0.125 0 0
+524288 0 2 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 0
+524288 0 2 0 0 5242880 4849664 5242880 0.025 0 -0.075 0 0
+524288 0 2 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 0
+524288 0 2 0 0 5242880 5111808 5242880 0.025 0 -0.025 0 0
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5242880 5373952 5242880 0.025 0 0.025 0 0
+524288 0 2 0 0 5242880 5505024 5242880 0.025 0 0.05 0 0
+524288 0 2 0 0 5242880 5636096 5242880 0.025 0 0.075 0 0
+524288 0 2 0 0 5242880 5767168 5242880 0.025 0 0.1 0 0
+524288 0 2 0 0 5242880 5898240 5242880 0.025 0 0.125 0 0
+524288 0 2 0 0 5242880 6029312 5242880 0.025 0 0.15 0 0
+524288 0 2 0 0 5242880 6160384 5242880 0.025 0 0.175 0 0
+524288 0 2 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0
+524288 0 2 0 0 5242880 6422528 5242880 0.025 0 0.225 0 0
+524288 0 2 0 0 5242880 6553600 5242880 0.025 0 0.25 0 0
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 3932160 5242880 0.03125 0 -0.25 0 0
+655360 0 2 0 0 5242880 4063232 5242880 0.03125 0 -0.225 0 0
+655360 0 2 0 0 5242880 4194304 5242880 0.03125 0 -0.2 0 0
+655360 0 2 0 0 5242880 4325376 5242880 0.03125 0 -0.175 0 0
+655360 0 2 0 0 5242880 4456448 5242880 0.03125 0 -0.15 0 0
+655360 0 2 0 0 5242880 4587520 5242880 0.03125 0 -0.125 0 0
+655360 0 2 0 0 5242880 4718592 5242880 0.03125 0 -0.1 0 0
+655360 0 2 0 0 5242880 4849664 5242880 0.03125 0 -0.075 0 0
+655360 0 2 0 0 5242880 4980736 5242880 0.03125 0 -0.05 0 0
+655360 0 2 0 0 5242880 5111808 5242880 0.03125 0 -0.025 0 0
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5242880 5373952 5242880 0.03125 0 0.025 0 0
+655360 0 2 0 0 5242880 5505024 5242880 0.03125 0 0.05 0 0
+655360 0 2 0 0 5242880 5636096 5242880 0.03125 0 0.075 0 0
+655360 0 2 0 0 5242880 5767168 5242880 0.03125 0 0.1 0 0
+655360 0 2 0 0 5242880 5898240 5242880 0.03125 0 0.125 0 0
+655360 0 2 0 0 5242880 6029312 5242880 0.03125 0 0.15 0 0
+655360 0 2 0 0 5242880 6160384 5242880 0.03125 0 0.175 0 0
+655360 0 2 0 0 5242880 6291456 5242880 0.03125 0 0.2 0 0
+655360 0 2 0 0 5242880 6422528 5242880 0.03125 0 0.225 0 0
+655360 0 2 0 0 5242880 6553600 5242880 0.03125 0 0.25 0 0
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 2621440 5242880 0.0375 0 -0.5 0 0
+786432 0 1 0 0 5242880 2883584 5242880 0.0375 0 -0.45 0 0
+786432 0 1 0 0 5242880 3145728 5242880 0.0375 0 -0.4 0 0
+786432 0 1 0 0 5242880 3407872 5242880 0.0375 0 -0.35 0 0
+786432 0 1 0 0 5242880 3670016 5242880 0.0375 0 -0.3 0 0
+786432 0 1 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 0
+786432 0 1 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 0
+786432 0 1 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 0
+786432 0 1 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 0
+786432 0 1 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 0
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 0
+786432 0 1 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 0
+786432 0 1 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 0
+786432 0 1 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 0
+786432 0 1 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 0
+786432 0 1 0 0 5242880 6815744 5242880 0.0375 0 0.3 0 0
+786432 0 1 0 0 5242880 7077888 5242880 0.0375 0 0.35 0 0
+786432 0 1 0 0 5242880 7340032 5242880 0.0375 0 0.4 0 0
+786432 0 1 0 0 5242880 7602176 5242880 0.0375 0 0.45 0 0
+786432 0 1 0 0 5242880 7864320 5242880 0.0375 0 0.5 0 0
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 0
+786432 0 2 0 0 5242880 4063232 5242880 0.0375 0 -0.225 0 0
+786432 0 2 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 0
+786432 0 2 0 0 5242880 4325376 5242880 0.0375 0 -0.175 0 0
+786432 0 2 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 0
+786432 0 2 0 0 5242880 4587520 5242880 0.0375 0 -0.125 0 0
+786432 0 2 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 0
+786432 0 2 0 0 5242880 4849664 5242880 0.0375 0 -0.075 0 0
+786432 0 2 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 0
+786432 0 2 0 0 5242880 5111808 5242880 0.0375 0 -0.025 0 0
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5242880 5373952 5242880 0.0375 0 0.025 0 0
+786432 0 2 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 0
+786432 0 2 0 0 5242880 5636096 5242880 0.0375 0 0.075 0 0
+786432 0 2 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 0
+786432 0 2 0 0 5242880 5898240 5242880 0.0375 0 0.125 0 0
+786432 0 2 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 0
+786432 0 2 0 0 5242880 6160384 5242880 0.0375 0 0.175 0 0
+786432 0 2 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 0
+786432 0 2 0 0 5242880 6422528 5242880 0.0375 0 0.225 0 0
+786432 0 2 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 0
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 3932160 5242880 0.04375 0 -0.25 0 0
+917504 0 2 0 0 5242880 4063232 5242880 0.04375 0 -0.225 0 0
+917504 0 2 0 0 5242880 4194304 5242880 0.04375 0 -0.2 0 0
+917504 0 2 0 0 5242880 4325376 5242880 0.04375 0 -0.175 0 0
+917504 0 2 0 0 5242880 4456448 5242880 0.04375 0 -0.15 0 0
+917504 0 2 0 0 5242880 4587520 5242880 0.04375 0 -0.125 0 0
+917504 0 2 0 0 5242880 4718592 5242880 0.04375 0 -0.1 0 0
+917504 0 2 0 0 5242880 4849664 5242880 0.04375 0 -0.075 0 0
+917504 0 2 0 0 5242880 4980736 5242880 0.04375 0 -0.05 0 0
+917504 0 2 0 0 5242880 5111808 5242880 0.04375 0 -0.025 0 0
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5242880 5373952 5242880 0.04375 0 0.025 0 0
+917504 0 2 0 0 5242880 5505024 5242880 0.04375 0 0.05 0 0
+917504 0 2 0 0 5242880 5636096 5242880 0.04375 0 0.075 0 0
+917504 0 2 0 0 5242880 5767168 5242880 0.04375 0 0.1 0 0
+917504 0 2 0 0 5242880 5898240 5242880 0.04375 0 0.125 0 0
+917504 0 2 0 0 5242880 6029312 5242880 0.04375 0 0.15 0 0
+917504 0 2 0 0 5242880 6160384 5242880 0.04375 0 0.175 0 0
+917504 0 2 0 0 5242880 6291456 5242880 0.04375 0 0.2 0 0
+917504 0 2 0 0 5242880 6422528 5242880 0.04375 0 0.225 0 0
+917504 0 2 0 0 5242880 6553600 5242880 0.04375 0 0.25 0 0
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 0 5242880 0.05 0 -1 0 0
+1048576 0 0 0 0 5242880 524288 5242880 0.05 0 -0.9 0 0
+1048576 0 0 0 0 5242880 1048576 5242880 0.05 0 -0.8 0 0
+1048576 0 0 0 0 5242880 1572864 5242880 0.05 0 -0.7 0 0
+1048576 0 0 0 0 5242880 2097152 5242880 0.05 0 -0.6 0 0
+1048576 0 0 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 0
+1048576 0 0 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 0
+1048576 0 0 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 0
+1048576 0 0 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0
+1048576 0 0 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 0
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5242880 5767168 5242880 0.05 0 0.1 0 0
+1048576 0 0 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0
+1048576 0 0 0 0 5242880 6815744 5242880 0.05 0 0.3 0 0
+1048576 0 0 0 0 5242880 7340032 5242880 0.05 0 0.4 0 0
+1048576 0 0 0 0 5242880 7864320 5242880 0.05 0 0.5 0 0
+1048576 0 0 0 0 5242880 8388608 5242880 0.05 0 0.6 0 0
+1048576 0 0 0 0 5242880 8912896 5242880 0.05 0 0.7 0 0
+1048576 0 0 0 0 5242880 9437184 5242880 0.05 0 0.8 0 0
+1048576 0 0 0 0 5242880 9961472 5242880 0.05 0 0.9 0 0
+1048576 0 0 0 0 5242880 10485760 5242880 0.05 0 1 0 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 0
+1048576 0 1 0 0 5242880 2883584 5242880 0.05 0 -0.45 0 0
+1048576 0 1 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 0
+1048576 0 1 0 0 5242880 3407872 5242880 0.05 0 -0.35 0 0
+1048576 0 1 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 0
+1048576 0 1 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 0
+1048576 0 1 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0
+1048576 0 1 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 0
+1048576 0 1 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 0
+1048576 0 1 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 0
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5242880 5505024 5242880 0.05 0 0.05 0 0
+1048576 0 1 0 0 5242880 5767168 5242880 0.05 0 0.1 0 0
+1048576 0 1 0 0 5242880 6029312 5242880 0.05 0 0.15 0 0
+1048576 0 1 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0
+1048576 0 1 0 0 5242880 6553600 5242880 0.05 0 0.25 0 0
+1048576 0 1 0 0 5242880 6815744 5242880 0.05 0 0.3 0 0
+1048576 0 1 0 0 5242880 7077888 5242880 0.05 0 0.35 0 0
+1048576 0 1 0 0 5242880 7340032 5242880 0.05 0 0.4 0 0
+1048576 0 1 0 0 5242880 7602176 5242880 0.05 0 0.45 0 0
+1048576 0 1 0 0 5242880 7864320 5242880 0.05 0 0.5 0 0
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 0
+1048576 0 2 0 0 5242880 4063232 5242880 0.05 0 -0.225 0 0
+1048576 0 2 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0
+1048576 0 2 0 0 5242880 4325376 5242880 0.05 0 -0.175 0 0
+1048576 0 2 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 0
+1048576 0 2 0 0 5242880 4587520 5242880 0.05 0 -0.125 0 0
+1048576 0 2 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 0
+1048576 0 2 0 0 5242880 4849664 5242880 0.05 0 -0.075 0 0
+1048576 0 2 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 0
+1048576 0 2 0 0 5242880 5111808 5242880 0.05 0 -0.025 0 0
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5242880 5373952 5242880 0.05 0 0.025 0 0
+1048576 0 2 0 0 5242880 5505024 5242880 0.05 0 0.05 0 0
+1048576 0 2 0 0 5242880 5636096 5242880 0.05 0 0.075 0 0
+1048576 0 2 0 0 5242880 5767168 5242880 0.05 0 0.1 0 0
+1048576 0 2 0 0 5242880 5898240 5242880 0.05 0 0.125 0 0
+1048576 0 2 0 0 5242880 6029312 5242880 0.05 0 0.15 0 0
+1048576 0 2 0 0 5242880 6160384 5242880 0.05 0 0.175 0 0
+1048576 0 2 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0
+1048576 0 2 0 0 5242880 6422528 5242880 0.05 0 0.225 0 0
+1048576 0 2 0 0 5242880 6553600 5242880 0.05 0 0.25 0 0
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 3932160 5242880 0.05625 0 -0.25 0 0
+1179648 0 2 0 0 5242880 4063232 5242880 0.05625 0 -0.225 0 0
+1179648 0 2 0 0 5242880 4194304 5242880 0.05625 0 -0.2 0 0
+1179648 0 2 0 0 5242880 4325376 5242880 0.05625 0 -0.175 0 0
+1179648 0 2 0 0 5242880 4456448 5242880 0.05625 0 -0.15 0 0
+1179648 0 2 0 0 5242880 4587520 5242880 0.05625 0 -0.125 0 0
+1179648 0 2 0 0 5242880 4718592 5242880 0.05625 0 -0.1 0 0
+1179648 0 2 0 0 5242880 4849664 5242880 0.05625 0 -0.075 0 0
+1179648 0 2 0 0 5242880 4980736 5242880 0.05625 0 -0.05 0 0
+1179648 0 2 0 0 5242880 5111808 5242880 0.05625 0 -0.025 0 0
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5242880 5373952 5242880 0.05625 0 0.025 0 0
+1179648 0 2 0 0 5242880 5505024 5242880 0.05625 0 0.05 0 0
+1179648 0 2 0 0 5242880 5636096 5242880 0.05625 0 0.075 0 0
+1179648 0 2 0 0 5242880 5767168 5242880 0.05625 0 0.1 0 0
+1179648 0 2 0 0 5242880 5898240 5242880 0.05625 0 0.125 0 0
+1179648 0 2 0 0 5242880 6029312 5242880 0.05625 0 0.15 0 0
+1179648 0 2 0 0 5242880 6160384 5242880 0.05625 0 0.175 0 0
+1179648 0 2 0 0 5242880 6291456 5242880 0.05625 0 0.2 0 0
+1179648 0 2 0 0 5242880 6422528 5242880 0.05625 0 0.225 0 0
+1179648 0 2 0 0 5242880 6553600 5242880 0.05625 0 0.25 0 0
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 2621440 5242880 0.0625 0 -0.5 0 0
+1310720 0 1 0 0 5242880 2883584 5242880 0.0625 0 -0.45 0 0
+1310720 0 1 0 0 5242880 3145728 5242880 0.0625 0 -0.4 0 0
+1310720 0 1 0 0 5242880 3407872 5242880 0.0625 0 -0.35 0 0
+1310720 0 1 0 0 5242880 3670016 5242880 0.0625 0 -0.3 0 0
+1310720 0 1 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 0
+1310720 0 1 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 0
+1310720 0 1 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 0
+1310720 0 1 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 0
+1310720 0 1 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 0
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 0
+1310720 0 1 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 0
+1310720 0 1 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 0
+1310720 0 1 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 0
+1310720 0 1 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 0
+1310720 0 1 0 0 5242880 6815744 5242880 0.0625 0 0.3 0 0
+1310720 0 1 0 0 5242880 7077888 5242880 0.0625 0 0.35 0 0
+1310720 0 1 0 0 5242880 7340032 5242880 0.0625 0 0.4 0 0
+1310720 0 1 0 0 5242880 7602176 5242880 0.0625 0 0.45 0 0
+1310720 0 1 0 0 5242880 7864320 5242880 0.0625 0 0.5 0 0
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 0
+1310720 0 2 0 0 5242880 4063232 5242880 0.0625 0 -0.225 0 0
+1310720 0 2 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 0
+1310720 0 2 0 0 5242880 4325376 5242880 0.0625 0 -0.175 0 0
+1310720 0 2 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 0
+1310720 0 2 0 0 5242880 4587520 5242880 0.0625 0 -0.125 0 0
+1310720 0 2 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 0
+1310720 0 2 0 0 5242880 4849664 5242880 0.0625 0 -0.075 0 0
+1310720 0 2 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 0
+1310720 0 2 0 0 5242880 5111808 5242880 0.0625 0 -0.025 0 0
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5242880 5373952 5242880 0.0625 0 0.025 0 0
+1310720 0 2 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 0
+1310720 0 2 0 0 5242880 5636096 5242880 0.0625 0 0.075 0 0
+1310720 0 2 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 0
+1310720 0 2 0 0 5242880 5898240 5242880 0.0625 0 0.125 0 0
+1310720 0 2 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 0
+1310720 0 2 0 0 5242880 6160384 5242880 0.0625 0 0.175 0 0
+1310720 0 2 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 0
+1310720 0 2 0 0 5242880 6422528 5242880 0.0625 0 0.225 0 0
+1310720 0 2 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 0
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 3932160 5242880 0.06875 0 -0.25 0 0
+1441792 0 2 0 0 5242880 4063232 5242880 0.06875 0 -0.225 0 0
+1441792 0 2 0 0 5242880 4194304 5242880 0.06875 0 -0.2 0 0
+1441792 0 2 0 0 5242880 4325376 5242880 0.06875 0 -0.175 0 0
+1441792 0 2 0 0 5242880 4456448 5242880 0.06875 0 -0.15 0 0
+1441792 0 2 0 0 5242880 4587520 5242880 0.06875 0 -0.125 0 0
+1441792 0 2 0 0 5242880 4718592 5242880 0.06875 0 -0.1 0 0
+1441792 0 2 0 0 5242880 4849664 5242880 0.06875 0 -0.075 0 0
+1441792 0 2 0 0 5242880 4980736 5242880 0.06875 0 -0.05 0 0
+1441792 0 2 0 0 5242880 5111808 5242880 0.06875 0 -0.025 0 0
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5242880 5373952 5242880 0.06875 0 0.025 0 0
+1441792 0 2 0 0 5242880 5505024 5242880 0.06875 0 0.05 0 0
+1441792 0 2 0 0 5242880 5636096 5242880 0.06875 0 0.075 0 0
+1441792 0 2 0 0 5242880 5767168 5242880 0.06875 0 0.1 0 0
+1441792 0 2 0 0 5242880 5898240 5242880 0.06875 0 0.125 0 0
+1441792 0 2 0 0 5242880 6029312 5242880 0.06875 0 0.15 0 0
+1441792 0 2 0 0 5242880 6160384 5242880 0.06875 0 0.175 0 0
+1441792 0 2 0 0 5242880 6291456 5242880 0.06875 0 0.2 0 0
+1441792 0 2 0 0 5242880 6422528 5242880 0.06875 0 0.225 0 0
+1441792 0 2 0 0 5242880 6553600 5242880 0.06875 0 0.25 0 0
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 0 5242880 0.075 0 -1 0 0
+1572864 0 0 0 0 5242880 524288 5242880 0.075 0 -0.9 0 0
+1572864 0 0 0 0 5242880 1048576 5242880 0.075 0 -0.8 0 0
+1572864 0 0 0 0 5242880 1572864 5242880 0.075 0 -0.7 0 0
+1572864 0 0 0 0 5242880 2097152 5242880 0.075 0 -0.6 0 0
+1572864 0 0 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 0
+1572864 0 0 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 0
+1572864 0 0 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 0
+1572864 0 0 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 0
+1572864 0 0 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 0
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5242880 5767168 5242880 0.075 0 0.1 0 0
+1572864 0 0 0 0 5242880 6291456 5242880 0.075 0 0.2 0 0
+1572864 0 0 0 0 5242880 6815744 5242880 0.075 0 0.3 0 0
+1572864 0 0 0 0 5242880 7340032 5242880 0.075 0 0.4 0 0
+1572864 0 0 0 0 5242880 7864320 5242880 0.075 0 0.5 0 0
+1572864 0 0 0 0 5242880 8388608 5242880 0.075 0 0.6 0 0
+1572864 0 0 0 0 5242880 8912896 5242880 0.075 0 0.7 0 0
+1572864 0 0 0 0 5242880 9437184 5242880 0.075 0 0.8 0 0
+1572864 0 0 0 0 5242880 9961472 5242880 0.075 0 0.9 0 0
+1572864 0 0 0 0 5242880 10485760 5242880 0.075 0 1 0 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 0
+1572864 0 1 0 0 5242880 2883584 5242880 0.075 0 -0.45 0 0
+1572864 0 1 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 0
+1572864 0 1 0 0 5242880 3407872 5242880 0.075 0 -0.35 0 0
+1572864 0 1 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 0
+1572864 0 1 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 0
+1572864 0 1 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 0
+1572864 0 1 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 0
+1572864 0 1 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 0
+1572864 0 1 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 0
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5242880 5505024 5242880 0.075 0 0.05 0 0
+1572864 0 1 0 0 5242880 5767168 5242880 0.075 0 0.1 0 0
+1572864 0 1 0 0 5242880 6029312 5242880 0.075 0 0.15 0 0
+1572864 0 1 0 0 5242880 6291456 5242880 0.075 0 0.2 0 0
+1572864 0 1 0 0 5242880 6553600 5242880 0.075 0 0.25 0 0
+1572864 0 1 0 0 5242880 6815744 5242880 0.075 0 0.3 0 0
+1572864 0 1 0 0 5242880 7077888 5242880 0.075 0 0.35 0 0
+1572864 0 1 0 0 5242880 7340032 5242880 0.075 0 0.4 0 0
+1572864 0 1 0 0 5242880 7602176 5242880 0.075 0 0.45 0 0
+1572864 0 1 0 0 5242880 7864320 5242880 0.075 0 0.5 0 0
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 0
+1572864 0 2 0 0 5242880 4063232 5242880 0.075 0 -0.225 0 0
+1572864 0 2 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 0
+1572864 0 2 0 0 5242880 4325376 5242880 0.075 0 -0.175 0 0
+1572864 0 2 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 0
+1572864 0 2 0 0 5242880 4587520 5242880 0.075 0 -0.125 0 0
+1572864 0 2 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 0
+1572864 0 2 0 0 5242880 4849664 5242880 0.075 0 -0.075 0 0
+1572864 0 2 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 0
+1572864 0 2 0 0 5242880 5111808 5242880 0.075 0 -0.025 0 0
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5242880 5373952 5242880 0.075 0 0.025 0 0
+1572864 0 2 0 0 5242880 5505024 5242880 0.075 0 0.05 0 0
+1572864 0 2 0 0 5242880 5636096 5242880 0.075 0 0.075 0 0
+1572864 0 2 0 0 5242880 5767168 5242880 0.075 0 0.1 0 0
+1572864 0 2 0 0 5242880 5898240 5242880 0.075 0 0.125 0 0
+1572864 0 2 0 0 5242880 6029312 5242880 0.075 0 0.15 0 0
+1572864 0 2 0 0 5242880 6160384 5242880 0.075 0 0.175 0 0
+1572864 0 2 0 0 5242880 6291456 5242880 0.075 0 0.2 0 0
+1572864 0 2 0 0 5242880 6422528 5242880 0.075 0 0.225 0 0
+1572864 0 2 0 0 5242880 6553600 5242880 0.075 0 0.25 0 0
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 3932160 5242880 0.08125 0 -0.25 0 0
+1703936 0 2 0 0 5242880 4063232 5242880 0.08125 0 -0.225 0 0
+1703936 0 2 0 0 5242880 4194304 5242880 0.08125 0 -0.2 0 0
+1703936 0 2 0 0 5242880 4325376 5242880 0.08125 0 -0.175 0 0
+1703936 0 2 0 0 5242880 4456448 5242880 0.08125 0 -0.15 0 0
+1703936 0 2 0 0 5242880 4587520 5242880 0.08125 0 -0.125 0 0
+1703936 0 2 0 0 5242880 4718592 5242880 0.08125 0 -0.1 0 0
+1703936 0 2 0 0 5242880 4849664 5242880 0.08125 0 -0.075 0 0
+1703936 0 2 0 0 5242880 4980736 5242880 0.08125 0 -0.05 0 0
+1703936 0 2 0 0 5242880 5111808 5242880 0.08125 0 -0.025 0 0
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5242880 5373952 5242880 0.08125 0 0.025 0 0
+1703936 0 2 0 0 5242880 5505024 5242880 0.08125 0 0.05 0 0
+1703936 0 2 0 0 5242880 5636096 5242880 0.08125 0 0.075 0 0
+1703936 0 2 0 0 5242880 5767168 5242880 0.08125 0 0.1 0 0
+1703936 0 2 0 0 5242880 5898240 5242880 0.08125 0 0.125 0 0
+1703936 0 2 0 0 5242880 6029312 5242880 0.08125 0 0.15 0 0
+1703936 0 2 0 0 5242880 6160384 5242880 0.08125 0 0.175 0 0
+1703936 0 2 0 0 5242880 6291456 5242880 0.08125 0 0.2 0 0
+1703936 0 2 0 0 5242880 6422528 5242880 0.08125 0 0.225 0 0
+1703936 0 2 0 0 5242880 6553600 5242880 0.08125 0 0.25 0 0
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 2621440 5242880 0.0875 0 -0.5 0 0
+1835008 0 1 0 0 5242880 2883584 5242880 0.0875 0 -0.45 0 0
+1835008 0 1 0 0 5242880 3145728 5242880 0.0875 0 -0.4 0 0
+1835008 0 1 0 0 5242880 3407872 5242880 0.0875 0 -0.35 0 0
+1835008 0 1 0 0 5242880 3670016 5242880 0.0875 0 -0.3 0 0
+1835008 0 1 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 0
+1835008 0 1 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 0
+1835008 0 1 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 0
+1835008 0 1 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 0
+1835008 0 1 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 0
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 0
+1835008 0 1 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 0
+1835008 0 1 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 0
+1835008 0 1 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 0
+1835008 0 1 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 0
+1835008 0 1 0 0 5242880 6815744 5242880 0.0875 0 0.3 0 0
+1835008 0 1 0 0 5242880 7077888 5242880 0.0875 0 0.35 0 0
+1835008 0 1 0 0 5242880 7340032 5242880 0.0875 0 0.4 0 0
+1835008 0 1 0 0 5242880 7602176 5242880 0.0875 0 0.45 0 0
+1835008 0 1 0 0 5242880 7864320 5242880 0.0875 0 0.5 0 0
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 0
+1835008 0 2 0 0 5242880 4063232 5242880 0.0875 0 -0.225 0 0
+1835008 0 2 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 0
+1835008 0 2 0 0 5242880 4325376 5242880 0.0875 0 -0.175 0 0
+1835008 0 2 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 0
+1835008 0 2 0 0 5242880 4587520 5242880 0.0875 0 -0.125 0 0
+1835008 0 2 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 0
+1835008 0 2 0 0 5242880 4849664 5242880 0.0875 0 -0.075 0 0
+1835008 0 2 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 0
+1835008 0 2 0 0 5242880 5111808 5242880 0.0875 0 -0.025 0 0
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5242880 5373952 5242880 0.0875 0 0.025 0 0
+1835008 0 2 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 0
+1835008 0 2 0 0 5242880 5636096 5242880 0.0875 0 0.075 0 0
+1835008 0 2 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 0
+1835008 0 2 0 0 5242880 5898240 5242880 0.0875 0 0.125 0 0
+1835008 0 2 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 0
+1835008 0 2 0 0 5242880 6160384 5242880 0.0875 0 0.175 0 0
+1835008 0 2 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 0
+1835008 0 2 0 0 5242880 6422528 5242880 0.0875 0 0.225 0 0
+1835008 0 2 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 0
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 3932160 5242880 0.09375 0 -0.25 0 0
+1966080 0 2 0 0 5242880 4063232 5242880 0.09375 0 -0.225 0 0
+1966080 0 2 0 0 5242880 4194304 5242880 0.09375 0 -0.2 0 0
+1966080 0 2 0 0 5242880 4325376 5242880 0.09375 0 -0.175 0 0
+1966080 0 2 0 0 5242880 4456448 5242880 0.09375 0 -0.15 0 0
+1966080 0 2 0 0 5242880 4587520 5242880 0.09375 0 -0.125 0 0
+1966080 0 2 0 0 5242880 4718592 5242880 0.09375 0 -0.1 0 0
+1966080 0 2 0 0 5242880 4849664 5242880 0.09375 0 -0.075 0 0
+1966080 0 2 0 0 5242880 4980736 5242880 0.09375 0 -0.05 0 0
+1966080 0 2 0 0 5242880 5111808 5242880 0.09375 0 -0.025 0 0
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5242880 5373952 5242880 0.09375 0 0.025 0 0
+1966080 0 2 0 0 5242880 5505024 5242880 0.09375 0 0.05 0 0
+1966080 0 2 0 0 5242880 5636096 5242880 0.09375 0 0.075 0 0
+1966080 0 2 0 0 5242880 5767168 5242880 0.09375 0 0.1 0 0
+1966080 0 2 0 0 5242880 5898240 5242880 0.09375 0 0.125 0 0
+1966080 0 2 0 0 5242880 6029312 5242880 0.09375 0 0.15 0 0
+1966080 0 2 0 0 5242880 6160384 5242880 0.09375 0 0.175 0 0
+1966080 0 2 0 0 5242880 6291456 5242880 0.09375 0 0.2 0 0
+1966080 0 2 0 0 5242880 6422528 5242880 0.09375 0 0.225 0 0
+1966080 0 2 0 0 5242880 6553600 5242880 0.09375 0 0.25 0 0
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 0 5242880 0.1 0 -1 0 0
+2097152 0 0 0 0 5242880 524288 5242880 0.1 0 -0.9 0 0
+2097152 0 0 0 0 5242880 1048576 5242880 0.1 0 -0.8 0 0
+2097152 0 0 0 0 5242880 1572864 5242880 0.1 0 -0.7 0 0
+2097152 0 0 0 0 5242880 2097152 5242880 0.1 0 -0.6 0 0
+2097152 0 0 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 0
+2097152 0 0 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 0
+2097152 0 0 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 0
+2097152 0 0 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 0
+2097152 0 0 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 0
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5242880 5767168 5242880 0.1 0 0.1 0 0
+2097152 0 0 0 0 5242880 6291456 5242880 0.1 0 0.2 0 0
+2097152 0 0 0 0 5242880 6815744 5242880 0.1 0 0.3 0 0
+2097152 0 0 0 0 5242880 7340032 5242880 0.1 0 0.4 0 0
+2097152 0 0 0 0 5242880 7864320 5242880 0.1 0 0.5 0 0
+2097152 0 0 0 0 5242880 8388608 5242880 0.1 0 0.6 0 0
+2097152 0 0 0 0 5242880 8912896 5242880 0.1 0 0.7 0 0
+2097152 0 0 0 0 5242880 9437184 5242880 0.1 0 0.8 0 0
+2097152 0 0 0 0 5242880 9961472 5242880 0.1 0 0.9 0 0
+2097152 0 0 0 0 5242880 10485760 5242880 0.1 0 1 0 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 0
+2097152 0 1 0 0 5242880 2883584 5242880 0.1 0 -0.45 0 0
+2097152 0 1 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 0
+2097152 0 1 0 0 5242880 3407872 5242880 0.1 0 -0.35 0 0
+2097152 0 1 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 0
+2097152 0 1 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 0
+2097152 0 1 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 0
+2097152 0 1 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 0
+2097152 0 1 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 0
+2097152 0 1 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 0
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5242880 5505024 5242880 0.1 0 0.05 0 0
+2097152 0 1 0 0 5242880 5767168 5242880 0.1 0 0.1 0 0
+2097152 0 1 0 0 5242880 6029312 5242880 0.1 0 0.15 0 0
+2097152 0 1 0 0 5242880 6291456 5242880 0.1 0 0.2 0 0
+2097152 0 1 0 0 5242880 6553600 5242880 0.1 0 0.25 0 0
+2097152 0 1 0 0 5242880 6815744 5242880 0.1 0 0.3 0 0
+2097152 0 1 0 0 5242880 7077888 5242880 0.1 0 0.35 0 0
+2097152 0 1 0 0 5242880 7340032 5242880 0.1 0 0.4 0 0
+2097152 0 1 0 0 5242880 7602176 5242880 0.1 0 0.45 0 0
+2097152 0 1 0 0 5242880 7864320 5242880 0.1 0 0.5 0 0
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 0
+2097152 0 2 0 0 5242880 4063232 5242880 0.1 0 -0.225 0 0
+2097152 0 2 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 0
+2097152 0 2 0 0 5242880 4325376 5242880 0.1 0 -0.175 0 0
+2097152 0 2 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 0
+2097152 0 2 0 0 5242880 4587520 5242880 0.1 0 -0.125 0 0
+2097152 0 2 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 0
+2097152 0 2 0 0 5242880 4849664 5242880 0.1 0 -0.075 0 0
+2097152 0 2 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 0
+2097152 0 2 0 0 5242880 5111808 5242880 0.1 0 -0.025 0 0
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5242880 5373952 5242880 0.1 0 0.025 0 0
+2097152 0 2 0 0 5242880 5505024 5242880 0.1 0 0.05 0 0
+2097152 0 2 0 0 5242880 5636096 5242880 0.1 0 0.075 0 0
+2097152 0 2 0 0 5242880 5767168 5242880 0.1 0 0.1 0 0
+2097152 0 2 0 0 5242880 5898240 5242880 0.1 0 0.125 0 0
+2097152 0 2 0 0 5242880 6029312 5242880 0.1 0 0.15 0 0
+2097152 0 2 0 0 5242880 6160384 5242880 0.1 0 0.175 0 0
+2097152 0 2 0 0 5242880 6291456 5242880 0.1 0 0.2 0 0
+2097152 0 2 0 0 5242880 6422528 5242880 0.1 0 0.225 0 0
+2097152 0 2 0 0 5242880 6553600 5242880 0.1 0 0.25 0 0
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phix.z.asc b/Carpet/CarpetInterp/test/waveinterp/phix.z.asc
new file mode 100644
index 000000000..530732f83
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phix.z.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phix z (phix)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 0 0 0 0 -1 0
+0 0 0 0 0 5242880 5242880 524288 0 0 0 -0.9 0
+0 0 0 0 0 5242880 5242880 1048576 0 0 0 -0.8 0
+0 0 0 0 0 5242880 5242880 1572864 0 0 0 -0.7 0
+0 0 0 0 0 5242880 5242880 2097152 0 0 0 -0.6 0
+0 0 0 0 0 5242880 5242880 2621440 0 0 0 -0.5 0
+0 0 0 0 0 5242880 5242880 3145728 0 0 0 -0.4 0
+0 0 0 0 0 5242880 5242880 3670016 0 0 0 -0.3 0
+0 0 0 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 0 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 0 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 0 0 0 5242880 5242880 6815744 0 0 0 0.3 0
+0 0 0 0 0 5242880 5242880 7340032 0 0 0 0.4 0
+0 0 0 0 0 5242880 5242880 7864320 0 0 0 0.5 0
+0 0 0 0 0 5242880 5242880 8388608 0 0 0 0.6 0
+0 0 0 0 0 5242880 5242880 8912896 0 0 0 0.7 0
+0 0 0 0 0 5242880 5242880 9437184 0 0 0 0.8 0
+0 0 0 0 0 5242880 5242880 9961472 0 0 0 0.9 0
+0 0 0 0 0 5242880 5242880 10485760 0 0 0 1 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 2621440 0 0 0 -0.5 0
+0 0 1 0 0 5242880 5242880 2883584 0 0 0 -0.45 0
+0 0 1 0 0 5242880 5242880 3145728 0 0 0 -0.4 0
+0 0 1 0 0 5242880 5242880 3407872 0 0 0 -0.35 0
+0 0 1 0 0 5242880 5242880 3670016 0 0 0 -0.3 0
+0 0 1 0 0 5242880 5242880 3932160 0 0 0 -0.25 0
+0 0 1 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 1 0 0 5242880 5242880 4456448 0 0 0 -0.15 0
+0 0 1 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 1 0 0 5242880 5242880 4980736 0 0 0 -0.05 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5242880 5242880 5505024 0 0 0 0.05 0
+0 0 1 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 1 0 0 5242880 5242880 6029312 0 0 0 0.15 0
+0 0 1 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 1 0 0 5242880 5242880 6553600 0 0 0 0.25 0
+0 0 1 0 0 5242880 5242880 6815744 0 0 0 0.3 0
+0 0 1 0 0 5242880 5242880 7077888 0 0 0 0.35 0
+0 0 1 0 0 5242880 5242880 7340032 0 0 0 0.4 0
+0 0 1 0 0 5242880 5242880 7602176 0 0 0 0.45 0
+0 0 1 0 0 5242880 5242880 7864320 0 0 0 0.5 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 3932160 0 0 0 -0.25 0
+0 0 2 0 0 5242880 5242880 4063232 0 0 0 -0.225 0
+0 0 2 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 2 0 0 5242880 5242880 4325376 0 0 0 -0.175 0
+0 0 2 0 0 5242880 5242880 4456448 0 0 0 -0.15 0
+0 0 2 0 0 5242880 5242880 4587520 0 0 0 -0.125 0
+0 0 2 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 2 0 0 5242880 5242880 4849664 0 0 0 -0.075 0
+0 0 2 0 0 5242880 5242880 4980736 0 0 0 -0.05 0
+0 0 2 0 0 5242880 5242880 5111808 0 0 0 -0.025 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5242880 5242880 5373952 0 0 0 0.025 0
+0 0 2 0 0 5242880 5242880 5505024 0 0 0 0.05 0
+0 0 2 0 0 5242880 5242880 5636096 0 0 0 0.075 0
+0 0 2 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 2 0 0 5242880 5242880 5898240 0 0 0 0.125 0
+0 0 2 0 0 5242880 5242880 6029312 0 0 0 0.15 0
+0 0 2 0 0 5242880 5242880 6160384 0 0 0 0.175 0
+0 0 2 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 2 0 0 5242880 5242880 6422528 0 0 0 0.225 0
+0 0 2 0 0 5242880 5242880 6553600 0 0 0 0.25 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 3932160 0.00625 0 0 -0.25 0
+131072 0 2 0 0 5242880 5242880 4063232 0.00625 0 0 -0.225 0
+131072 0 2 0 0 5242880 5242880 4194304 0.00625 0 0 -0.2 0
+131072 0 2 0 0 5242880 5242880 4325376 0.00625 0 0 -0.175 0
+131072 0 2 0 0 5242880 5242880 4456448 0.00625 0 0 -0.15 0
+131072 0 2 0 0 5242880 5242880 4587520 0.00625 0 0 -0.125 0
+131072 0 2 0 0 5242880 5242880 4718592 0.00625 0 0 -0.1 0
+131072 0 2 0 0 5242880 5242880 4849664 0.00625 0 0 -0.075 0
+131072 0 2 0 0 5242880 5242880 4980736 0.00625 0 0 -0.05 0
+131072 0 2 0 0 5242880 5242880 5111808 0.00625 0 0 -0.025 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5242880 5242880 5373952 0.00625 0 0 0.025 0
+131072 0 2 0 0 5242880 5242880 5505024 0.00625 0 0 0.05 0
+131072 0 2 0 0 5242880 5242880 5636096 0.00625 0 0 0.075 0
+131072 0 2 0 0 5242880 5242880 5767168 0.00625 0 0 0.1 0
+131072 0 2 0 0 5242880 5242880 5898240 0.00625 0 0 0.125 0
+131072 0 2 0 0 5242880 5242880 6029312 0.00625 0 0 0.15 0
+131072 0 2 0 0 5242880 5242880 6160384 0.00625 0 0 0.175 0
+131072 0 2 0 0 5242880 5242880 6291456 0.00625 0 0 0.2 0
+131072 0 2 0 0 5242880 5242880 6422528 0.00625 0 0 0.225 0
+131072 0 2 0 0 5242880 5242880 6553600 0.00625 0 0 0.25 0
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 2621440 0.0125 0 0 -0.5 0
+262144 0 1 0 0 5242880 5242880 2883584 0.0125 0 0 -0.45 0
+262144 0 1 0 0 5242880 5242880 3145728 0.0125 0 0 -0.4 0
+262144 0 1 0 0 5242880 5242880 3407872 0.0125 0 0 -0.35 0
+262144 0 1 0 0 5242880 5242880 3670016 0.0125 0 0 -0.3 0
+262144 0 1 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 0
+262144 0 1 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 0
+262144 0 1 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 0
+262144 0 1 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 0
+262144 0 1 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 0
+262144 0 1 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 0
+262144 0 1 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 0
+262144 0 1 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 0
+262144 0 1 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 0
+262144 0 1 0 0 5242880 5242880 6815744 0.0125 0 0 0.3 0
+262144 0 1 0 0 5242880 5242880 7077888 0.0125 0 0 0.35 0
+262144 0 1 0 0 5242880 5242880 7340032 0.0125 0 0 0.4 0
+262144 0 1 0 0 5242880 5242880 7602176 0.0125 0 0 0.45 0
+262144 0 1 0 0 5242880 5242880 7864320 0.0125 0 0 0.5 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 0
+262144 0 2 0 0 5242880 5242880 4063232 0.0125 0 0 -0.225 0
+262144 0 2 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 0
+262144 0 2 0 0 5242880 5242880 4325376 0.0125 0 0 -0.175 0
+262144 0 2 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 0
+262144 0 2 0 0 5242880 5242880 4587520 0.0125 0 0 -0.125 0
+262144 0 2 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 0
+262144 0 2 0 0 5242880 5242880 4849664 0.0125 0 0 -0.075 0
+262144 0 2 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 0
+262144 0 2 0 0 5242880 5242880 5111808 0.0125 0 0 -0.025 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5242880 5242880 5373952 0.0125 0 0 0.025 0
+262144 0 2 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 0
+262144 0 2 0 0 5242880 5242880 5636096 0.0125 0 0 0.075 0
+262144 0 2 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 0
+262144 0 2 0 0 5242880 5242880 5898240 0.0125 0 0 0.125 0
+262144 0 2 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 0
+262144 0 2 0 0 5242880 5242880 6160384 0.0125 0 0 0.175 0
+262144 0 2 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 0
+262144 0 2 0 0 5242880 5242880 6422528 0.0125 0 0 0.225 0
+262144 0 2 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 0
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 3932160 0.01875 0 0 -0.25 0
+393216 0 2 0 0 5242880 5242880 4063232 0.01875 0 0 -0.225 0
+393216 0 2 0 0 5242880 5242880 4194304 0.01875 0 0 -0.2 0
+393216 0 2 0 0 5242880 5242880 4325376 0.01875 0 0 -0.175 0
+393216 0 2 0 0 5242880 5242880 4456448 0.01875 0 0 -0.15 0
+393216 0 2 0 0 5242880 5242880 4587520 0.01875 0 0 -0.125 0
+393216 0 2 0 0 5242880 5242880 4718592 0.01875 0 0 -0.1 0
+393216 0 2 0 0 5242880 5242880 4849664 0.01875 0 0 -0.075 0
+393216 0 2 0 0 5242880 5242880 4980736 0.01875 0 0 -0.05 0
+393216 0 2 0 0 5242880 5242880 5111808 0.01875 0 0 -0.025 0
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5242880 5242880 5373952 0.01875 0 0 0.025 0
+393216 0 2 0 0 5242880 5242880 5505024 0.01875 0 0 0.05 0
+393216 0 2 0 0 5242880 5242880 5636096 0.01875 0 0 0.075 0
+393216 0 2 0 0 5242880 5242880 5767168 0.01875 0 0 0.1 0
+393216 0 2 0 0 5242880 5242880 5898240 0.01875 0 0 0.125 0
+393216 0 2 0 0 5242880 5242880 6029312 0.01875 0 0 0.15 0
+393216 0 2 0 0 5242880 5242880 6160384 0.01875 0 0 0.175 0
+393216 0 2 0 0 5242880 5242880 6291456 0.01875 0 0 0.2 0
+393216 0 2 0 0 5242880 5242880 6422528 0.01875 0 0 0.225 0
+393216 0 2 0 0 5242880 5242880 6553600 0.01875 0 0 0.25 0
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 0 0.025 0 0 -1 0
+524288 0 0 0 0 5242880 5242880 524288 0.025 0 0 -0.9 0
+524288 0 0 0 0 5242880 5242880 1048576 0.025 0 0 -0.8 0
+524288 0 0 0 0 5242880 5242880 1572864 0.025 0 0 -0.7 0
+524288 0 0 0 0 5242880 5242880 2097152 0.025 0 0 -0.6 0
+524288 0 0 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 0
+524288 0 0 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 0
+524288 0 0 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 0
+524288 0 0 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0
+524288 0 0 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 0
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5242880 5242880 5767168 0.025 0 0 0.1 0
+524288 0 0 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0
+524288 0 0 0 0 5242880 5242880 6815744 0.025 0 0 0.3 0
+524288 0 0 0 0 5242880 5242880 7340032 0.025 0 0 0.4 0
+524288 0 0 0 0 5242880 5242880 7864320 0.025 0 0 0.5 0
+524288 0 0 0 0 5242880 5242880 8388608 0.025 0 0 0.6 0
+524288 0 0 0 0 5242880 5242880 8912896 0.025 0 0 0.7 0
+524288 0 0 0 0 5242880 5242880 9437184 0.025 0 0 0.8 0
+524288 0 0 0 0 5242880 5242880 9961472 0.025 0 0 0.9 0
+524288 0 0 0 0 5242880 5242880 10485760 0.025 0 0 1 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 0
+524288 0 1 0 0 5242880 5242880 2883584 0.025 0 0 -0.45 0
+524288 0 1 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 0
+524288 0 1 0 0 5242880 5242880 3407872 0.025 0 0 -0.35 0
+524288 0 1 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 0
+524288 0 1 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 0
+524288 0 1 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0
+524288 0 1 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 0
+524288 0 1 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 0
+524288 0 1 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 0
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5242880 5242880 5505024 0.025 0 0 0.05 0
+524288 0 1 0 0 5242880 5242880 5767168 0.025 0 0 0.1 0
+524288 0 1 0 0 5242880 5242880 6029312 0.025 0 0 0.15 0
+524288 0 1 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0
+524288 0 1 0 0 5242880 5242880 6553600 0.025 0 0 0.25 0
+524288 0 1 0 0 5242880 5242880 6815744 0.025 0 0 0.3 0
+524288 0 1 0 0 5242880 5242880 7077888 0.025 0 0 0.35 0
+524288 0 1 0 0 5242880 5242880 7340032 0.025 0 0 0.4 0
+524288 0 1 0 0 5242880 5242880 7602176 0.025 0 0 0.45 0
+524288 0 1 0 0 5242880 5242880 7864320 0.025 0 0 0.5 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 0
+524288 0 2 0 0 5242880 5242880 4063232 0.025 0 0 -0.225 0
+524288 0 2 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0
+524288 0 2 0 0 5242880 5242880 4325376 0.025 0 0 -0.175 0
+524288 0 2 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 0
+524288 0 2 0 0 5242880 5242880 4587520 0.025 0 0 -0.125 0
+524288 0 2 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 0
+524288 0 2 0 0 5242880 5242880 4849664 0.025 0 0 -0.075 0
+524288 0 2 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 0
+524288 0 2 0 0 5242880 5242880 5111808 0.025 0 0 -0.025 0
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5242880 5242880 5373952 0.025 0 0 0.025 0
+524288 0 2 0 0 5242880 5242880 5505024 0.025 0 0 0.05 0
+524288 0 2 0 0 5242880 5242880 5636096 0.025 0 0 0.075 0
+524288 0 2 0 0 5242880 5242880 5767168 0.025 0 0 0.1 0
+524288 0 2 0 0 5242880 5242880 5898240 0.025 0 0 0.125 0
+524288 0 2 0 0 5242880 5242880 6029312 0.025 0 0 0.15 0
+524288 0 2 0 0 5242880 5242880 6160384 0.025 0 0 0.175 0
+524288 0 2 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0
+524288 0 2 0 0 5242880 5242880 6422528 0.025 0 0 0.225 0
+524288 0 2 0 0 5242880 5242880 6553600 0.025 0 0 0.25 0
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 3932160 0.03125 0 0 -0.25 0
+655360 0 2 0 0 5242880 5242880 4063232 0.03125 0 0 -0.225 0
+655360 0 2 0 0 5242880 5242880 4194304 0.03125 0 0 -0.2 0
+655360 0 2 0 0 5242880 5242880 4325376 0.03125 0 0 -0.175 0
+655360 0 2 0 0 5242880 5242880 4456448 0.03125 0 0 -0.15 0
+655360 0 2 0 0 5242880 5242880 4587520 0.03125 0 0 -0.125 0
+655360 0 2 0 0 5242880 5242880 4718592 0.03125 0 0 -0.1 0
+655360 0 2 0 0 5242880 5242880 4849664 0.03125 0 0 -0.075 0
+655360 0 2 0 0 5242880 5242880 4980736 0.03125 0 0 -0.05 0
+655360 0 2 0 0 5242880 5242880 5111808 0.03125 0 0 -0.025 0
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5242880 5242880 5373952 0.03125 0 0 0.025 0
+655360 0 2 0 0 5242880 5242880 5505024 0.03125 0 0 0.05 0
+655360 0 2 0 0 5242880 5242880 5636096 0.03125 0 0 0.075 0
+655360 0 2 0 0 5242880 5242880 5767168 0.03125 0 0 0.1 0
+655360 0 2 0 0 5242880 5242880 5898240 0.03125 0 0 0.125 0
+655360 0 2 0 0 5242880 5242880 6029312 0.03125 0 0 0.15 0
+655360 0 2 0 0 5242880 5242880 6160384 0.03125 0 0 0.175 0
+655360 0 2 0 0 5242880 5242880 6291456 0.03125 0 0 0.2 0
+655360 0 2 0 0 5242880 5242880 6422528 0.03125 0 0 0.225 0
+655360 0 2 0 0 5242880 5242880 6553600 0.03125 0 0 0.25 0
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 2621440 0.0375 0 0 -0.5 0
+786432 0 1 0 0 5242880 5242880 2883584 0.0375 0 0 -0.45 0
+786432 0 1 0 0 5242880 5242880 3145728 0.0375 0 0 -0.4 0
+786432 0 1 0 0 5242880 5242880 3407872 0.0375 0 0 -0.35 0
+786432 0 1 0 0 5242880 5242880 3670016 0.0375 0 0 -0.3 0
+786432 0 1 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 0
+786432 0 1 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 0
+786432 0 1 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 0
+786432 0 1 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 0
+786432 0 1 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 0
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 0
+786432 0 1 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 0
+786432 0 1 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 0
+786432 0 1 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 0
+786432 0 1 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 0
+786432 0 1 0 0 5242880 5242880 6815744 0.0375 0 0 0.3 0
+786432 0 1 0 0 5242880 5242880 7077888 0.0375 0 0 0.35 0
+786432 0 1 0 0 5242880 5242880 7340032 0.0375 0 0 0.4 0
+786432 0 1 0 0 5242880 5242880 7602176 0.0375 0 0 0.45 0
+786432 0 1 0 0 5242880 5242880 7864320 0.0375 0 0 0.5 0
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 0
+786432 0 2 0 0 5242880 5242880 4063232 0.0375 0 0 -0.225 0
+786432 0 2 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 0
+786432 0 2 0 0 5242880 5242880 4325376 0.0375 0 0 -0.175 0
+786432 0 2 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 0
+786432 0 2 0 0 5242880 5242880 4587520 0.0375 0 0 -0.125 0
+786432 0 2 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 0
+786432 0 2 0 0 5242880 5242880 4849664 0.0375 0 0 -0.075 0
+786432 0 2 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 0
+786432 0 2 0 0 5242880 5242880 5111808 0.0375 0 0 -0.025 0
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5242880 5242880 5373952 0.0375 0 0 0.025 0
+786432 0 2 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 0
+786432 0 2 0 0 5242880 5242880 5636096 0.0375 0 0 0.075 0
+786432 0 2 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 0
+786432 0 2 0 0 5242880 5242880 5898240 0.0375 0 0 0.125 0
+786432 0 2 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 0
+786432 0 2 0 0 5242880 5242880 6160384 0.0375 0 0 0.175 0
+786432 0 2 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 0
+786432 0 2 0 0 5242880 5242880 6422528 0.0375 0 0 0.225 0
+786432 0 2 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 0
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 3932160 0.04375 0 0 -0.25 0
+917504 0 2 0 0 5242880 5242880 4063232 0.04375 0 0 -0.225 0
+917504 0 2 0 0 5242880 5242880 4194304 0.04375 0 0 -0.2 0
+917504 0 2 0 0 5242880 5242880 4325376 0.04375 0 0 -0.175 0
+917504 0 2 0 0 5242880 5242880 4456448 0.04375 0 0 -0.15 0
+917504 0 2 0 0 5242880 5242880 4587520 0.04375 0 0 -0.125 0
+917504 0 2 0 0 5242880 5242880 4718592 0.04375 0 0 -0.1 0
+917504 0 2 0 0 5242880 5242880 4849664 0.04375 0 0 -0.075 0
+917504 0 2 0 0 5242880 5242880 4980736 0.04375 0 0 -0.05 0
+917504 0 2 0 0 5242880 5242880 5111808 0.04375 0 0 -0.025 0
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5242880 5242880 5373952 0.04375 0 0 0.025 0
+917504 0 2 0 0 5242880 5242880 5505024 0.04375 0 0 0.05 0
+917504 0 2 0 0 5242880 5242880 5636096 0.04375 0 0 0.075 0
+917504 0 2 0 0 5242880 5242880 5767168 0.04375 0 0 0.1 0
+917504 0 2 0 0 5242880 5242880 5898240 0.04375 0 0 0.125 0
+917504 0 2 0 0 5242880 5242880 6029312 0.04375 0 0 0.15 0
+917504 0 2 0 0 5242880 5242880 6160384 0.04375 0 0 0.175 0
+917504 0 2 0 0 5242880 5242880 6291456 0.04375 0 0 0.2 0
+917504 0 2 0 0 5242880 5242880 6422528 0.04375 0 0 0.225 0
+917504 0 2 0 0 5242880 5242880 6553600 0.04375 0 0 0.25 0
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 0 0.05 0 0 -1 0
+1048576 0 0 0 0 5242880 5242880 524288 0.05 0 0 -0.9 0
+1048576 0 0 0 0 5242880 5242880 1048576 0.05 0 0 -0.8 0
+1048576 0 0 0 0 5242880 5242880 1572864 0.05 0 0 -0.7 0
+1048576 0 0 0 0 5242880 5242880 2097152 0.05 0 0 -0.6 0
+1048576 0 0 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 0
+1048576 0 0 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 0
+1048576 0 0 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 0
+1048576 0 0 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0
+1048576 0 0 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 0
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5242880 5242880 5767168 0.05 0 0 0.1 0
+1048576 0 0 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0
+1048576 0 0 0 0 5242880 5242880 6815744 0.05 0 0 0.3 0
+1048576 0 0 0 0 5242880 5242880 7340032 0.05 0 0 0.4 0
+1048576 0 0 0 0 5242880 5242880 7864320 0.05 0 0 0.5 0
+1048576 0 0 0 0 5242880 5242880 8388608 0.05 0 0 0.6 0
+1048576 0 0 0 0 5242880 5242880 8912896 0.05 0 0 0.7 0
+1048576 0 0 0 0 5242880 5242880 9437184 0.05 0 0 0.8 0
+1048576 0 0 0 0 5242880 5242880 9961472 0.05 0 0 0.9 0
+1048576 0 0 0 0 5242880 5242880 10485760 0.05 0 0 1 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 0
+1048576 0 1 0 0 5242880 5242880 2883584 0.05 0 0 -0.45 0
+1048576 0 1 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 0
+1048576 0 1 0 0 5242880 5242880 3407872 0.05 0 0 -0.35 0
+1048576 0 1 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 0
+1048576 0 1 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 0
+1048576 0 1 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0
+1048576 0 1 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 0
+1048576 0 1 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 0
+1048576 0 1 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 0
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5242880 5242880 5505024 0.05 0 0 0.05 0
+1048576 0 1 0 0 5242880 5242880 5767168 0.05 0 0 0.1 0
+1048576 0 1 0 0 5242880 5242880 6029312 0.05 0 0 0.15 0
+1048576 0 1 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0
+1048576 0 1 0 0 5242880 5242880 6553600 0.05 0 0 0.25 0
+1048576 0 1 0 0 5242880 5242880 6815744 0.05 0 0 0.3 0
+1048576 0 1 0 0 5242880 5242880 7077888 0.05 0 0 0.35 0
+1048576 0 1 0 0 5242880 5242880 7340032 0.05 0 0 0.4 0
+1048576 0 1 0 0 5242880 5242880 7602176 0.05 0 0 0.45 0
+1048576 0 1 0 0 5242880 5242880 7864320 0.05 0 0 0.5 0
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 0
+1048576 0 2 0 0 5242880 5242880 4063232 0.05 0 0 -0.225 0
+1048576 0 2 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0
+1048576 0 2 0 0 5242880 5242880 4325376 0.05 0 0 -0.175 0
+1048576 0 2 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 0
+1048576 0 2 0 0 5242880 5242880 4587520 0.05 0 0 -0.125 0
+1048576 0 2 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 0
+1048576 0 2 0 0 5242880 5242880 4849664 0.05 0 0 -0.075 0
+1048576 0 2 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 0
+1048576 0 2 0 0 5242880 5242880 5111808 0.05 0 0 -0.025 0
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5242880 5242880 5373952 0.05 0 0 0.025 0
+1048576 0 2 0 0 5242880 5242880 5505024 0.05 0 0 0.05 0
+1048576 0 2 0 0 5242880 5242880 5636096 0.05 0 0 0.075 0
+1048576 0 2 0 0 5242880 5242880 5767168 0.05 0 0 0.1 0
+1048576 0 2 0 0 5242880 5242880 5898240 0.05 0 0 0.125 0
+1048576 0 2 0 0 5242880 5242880 6029312 0.05 0 0 0.15 0
+1048576 0 2 0 0 5242880 5242880 6160384 0.05 0 0 0.175 0
+1048576 0 2 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0
+1048576 0 2 0 0 5242880 5242880 6422528 0.05 0 0 0.225 0
+1048576 0 2 0 0 5242880 5242880 6553600 0.05 0 0 0.25 0
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 3932160 0.05625 0 0 -0.25 0
+1179648 0 2 0 0 5242880 5242880 4063232 0.05625 0 0 -0.225 0
+1179648 0 2 0 0 5242880 5242880 4194304 0.05625 0 0 -0.2 0
+1179648 0 2 0 0 5242880 5242880 4325376 0.05625 0 0 -0.175 0
+1179648 0 2 0 0 5242880 5242880 4456448 0.05625 0 0 -0.15 0
+1179648 0 2 0 0 5242880 5242880 4587520 0.05625 0 0 -0.125 0
+1179648 0 2 0 0 5242880 5242880 4718592 0.05625 0 0 -0.1 0
+1179648 0 2 0 0 5242880 5242880 4849664 0.05625 0 0 -0.075 0
+1179648 0 2 0 0 5242880 5242880 4980736 0.05625 0 0 -0.05 0
+1179648 0 2 0 0 5242880 5242880 5111808 0.05625 0 0 -0.025 0
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5242880 5242880 5373952 0.05625 0 0 0.025 0
+1179648 0 2 0 0 5242880 5242880 5505024 0.05625 0 0 0.05 0
+1179648 0 2 0 0 5242880 5242880 5636096 0.05625 0 0 0.075 0
+1179648 0 2 0 0 5242880 5242880 5767168 0.05625 0 0 0.1 0
+1179648 0 2 0 0 5242880 5242880 5898240 0.05625 0 0 0.125 0
+1179648 0 2 0 0 5242880 5242880 6029312 0.05625 0 0 0.15 0
+1179648 0 2 0 0 5242880 5242880 6160384 0.05625 0 0 0.175 0
+1179648 0 2 0 0 5242880 5242880 6291456 0.05625 0 0 0.2 0
+1179648 0 2 0 0 5242880 5242880 6422528 0.05625 0 0 0.225 0
+1179648 0 2 0 0 5242880 5242880 6553600 0.05625 0 0 0.25 0
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 2621440 0.0625 0 0 -0.5 0
+1310720 0 1 0 0 5242880 5242880 2883584 0.0625 0 0 -0.45 0
+1310720 0 1 0 0 5242880 5242880 3145728 0.0625 0 0 -0.4 0
+1310720 0 1 0 0 5242880 5242880 3407872 0.0625 0 0 -0.35 0
+1310720 0 1 0 0 5242880 5242880 3670016 0.0625 0 0 -0.3 0
+1310720 0 1 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 0
+1310720 0 1 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 0
+1310720 0 1 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 0
+1310720 0 1 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 0
+1310720 0 1 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 0
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 0
+1310720 0 1 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 0
+1310720 0 1 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 0
+1310720 0 1 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 0
+1310720 0 1 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 0
+1310720 0 1 0 0 5242880 5242880 6815744 0.0625 0 0 0.3 0
+1310720 0 1 0 0 5242880 5242880 7077888 0.0625 0 0 0.35 0
+1310720 0 1 0 0 5242880 5242880 7340032 0.0625 0 0 0.4 0
+1310720 0 1 0 0 5242880 5242880 7602176 0.0625 0 0 0.45 0
+1310720 0 1 0 0 5242880 5242880 7864320 0.0625 0 0 0.5 0
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 0
+1310720 0 2 0 0 5242880 5242880 4063232 0.0625 0 0 -0.225 0
+1310720 0 2 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 0
+1310720 0 2 0 0 5242880 5242880 4325376 0.0625 0 0 -0.175 0
+1310720 0 2 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 0
+1310720 0 2 0 0 5242880 5242880 4587520 0.0625 0 0 -0.125 0
+1310720 0 2 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 0
+1310720 0 2 0 0 5242880 5242880 4849664 0.0625 0 0 -0.075 0
+1310720 0 2 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 0
+1310720 0 2 0 0 5242880 5242880 5111808 0.0625 0 0 -0.025 0
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5242880 5242880 5373952 0.0625 0 0 0.025 0
+1310720 0 2 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 0
+1310720 0 2 0 0 5242880 5242880 5636096 0.0625 0 0 0.075 0
+1310720 0 2 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 0
+1310720 0 2 0 0 5242880 5242880 5898240 0.0625 0 0 0.125 0
+1310720 0 2 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 0
+1310720 0 2 0 0 5242880 5242880 6160384 0.0625 0 0 0.175 0
+1310720 0 2 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 0
+1310720 0 2 0 0 5242880 5242880 6422528 0.0625 0 0 0.225 0
+1310720 0 2 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 0
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 3932160 0.06875 0 0 -0.25 0
+1441792 0 2 0 0 5242880 5242880 4063232 0.06875 0 0 -0.225 0
+1441792 0 2 0 0 5242880 5242880 4194304 0.06875 0 0 -0.2 0
+1441792 0 2 0 0 5242880 5242880 4325376 0.06875 0 0 -0.175 0
+1441792 0 2 0 0 5242880 5242880 4456448 0.06875 0 0 -0.15 0
+1441792 0 2 0 0 5242880 5242880 4587520 0.06875 0 0 -0.125 0
+1441792 0 2 0 0 5242880 5242880 4718592 0.06875 0 0 -0.1 0
+1441792 0 2 0 0 5242880 5242880 4849664 0.06875 0 0 -0.075 0
+1441792 0 2 0 0 5242880 5242880 4980736 0.06875 0 0 -0.05 0
+1441792 0 2 0 0 5242880 5242880 5111808 0.06875 0 0 -0.025 0
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5242880 5242880 5373952 0.06875 0 0 0.025 0
+1441792 0 2 0 0 5242880 5242880 5505024 0.06875 0 0 0.05 0
+1441792 0 2 0 0 5242880 5242880 5636096 0.06875 0 0 0.075 0
+1441792 0 2 0 0 5242880 5242880 5767168 0.06875 0 0 0.1 0
+1441792 0 2 0 0 5242880 5242880 5898240 0.06875 0 0 0.125 0
+1441792 0 2 0 0 5242880 5242880 6029312 0.06875 0 0 0.15 0
+1441792 0 2 0 0 5242880 5242880 6160384 0.06875 0 0 0.175 0
+1441792 0 2 0 0 5242880 5242880 6291456 0.06875 0 0 0.2 0
+1441792 0 2 0 0 5242880 5242880 6422528 0.06875 0 0 0.225 0
+1441792 0 2 0 0 5242880 5242880 6553600 0.06875 0 0 0.25 0
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 0 0.075 0 0 -1 0
+1572864 0 0 0 0 5242880 5242880 524288 0.075 0 0 -0.9 0
+1572864 0 0 0 0 5242880 5242880 1048576 0.075 0 0 -0.8 0
+1572864 0 0 0 0 5242880 5242880 1572864 0.075 0 0 -0.7 0
+1572864 0 0 0 0 5242880 5242880 2097152 0.075 0 0 -0.6 0
+1572864 0 0 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 0
+1572864 0 0 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 0
+1572864 0 0 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 0
+1572864 0 0 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 0
+1572864 0 0 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 0
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5242880 5242880 5767168 0.075 0 0 0.1 0
+1572864 0 0 0 0 5242880 5242880 6291456 0.075 0 0 0.2 0
+1572864 0 0 0 0 5242880 5242880 6815744 0.075 0 0 0.3 0
+1572864 0 0 0 0 5242880 5242880 7340032 0.075 0 0 0.4 0
+1572864 0 0 0 0 5242880 5242880 7864320 0.075 0 0 0.5 0
+1572864 0 0 0 0 5242880 5242880 8388608 0.075 0 0 0.6 0
+1572864 0 0 0 0 5242880 5242880 8912896 0.075 0 0 0.7 0
+1572864 0 0 0 0 5242880 5242880 9437184 0.075 0 0 0.8 0
+1572864 0 0 0 0 5242880 5242880 9961472 0.075 0 0 0.9 0
+1572864 0 0 0 0 5242880 5242880 10485760 0.075 0 0 1 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 0
+1572864 0 1 0 0 5242880 5242880 2883584 0.075 0 0 -0.45 0
+1572864 0 1 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 0
+1572864 0 1 0 0 5242880 5242880 3407872 0.075 0 0 -0.35 0
+1572864 0 1 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 0
+1572864 0 1 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 0
+1572864 0 1 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 0
+1572864 0 1 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 0
+1572864 0 1 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 0
+1572864 0 1 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 0
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5242880 5242880 5505024 0.075 0 0 0.05 0
+1572864 0 1 0 0 5242880 5242880 5767168 0.075 0 0 0.1 0
+1572864 0 1 0 0 5242880 5242880 6029312 0.075 0 0 0.15 0
+1572864 0 1 0 0 5242880 5242880 6291456 0.075 0 0 0.2 0
+1572864 0 1 0 0 5242880 5242880 6553600 0.075 0 0 0.25 0
+1572864 0 1 0 0 5242880 5242880 6815744 0.075 0 0 0.3 0
+1572864 0 1 0 0 5242880 5242880 7077888 0.075 0 0 0.35 0
+1572864 0 1 0 0 5242880 5242880 7340032 0.075 0 0 0.4 0
+1572864 0 1 0 0 5242880 5242880 7602176 0.075 0 0 0.45 0
+1572864 0 1 0 0 5242880 5242880 7864320 0.075 0 0 0.5 0
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 0
+1572864 0 2 0 0 5242880 5242880 4063232 0.075 0 0 -0.225 0
+1572864 0 2 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 0
+1572864 0 2 0 0 5242880 5242880 4325376 0.075 0 0 -0.175 0
+1572864 0 2 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 0
+1572864 0 2 0 0 5242880 5242880 4587520 0.075 0 0 -0.125 0
+1572864 0 2 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 0
+1572864 0 2 0 0 5242880 5242880 4849664 0.075 0 0 -0.075 0
+1572864 0 2 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 0
+1572864 0 2 0 0 5242880 5242880 5111808 0.075 0 0 -0.025 0
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5242880 5242880 5373952 0.075 0 0 0.025 0
+1572864 0 2 0 0 5242880 5242880 5505024 0.075 0 0 0.05 0
+1572864 0 2 0 0 5242880 5242880 5636096 0.075 0 0 0.075 0
+1572864 0 2 0 0 5242880 5242880 5767168 0.075 0 0 0.1 0
+1572864 0 2 0 0 5242880 5242880 5898240 0.075 0 0 0.125 0
+1572864 0 2 0 0 5242880 5242880 6029312 0.075 0 0 0.15 0
+1572864 0 2 0 0 5242880 5242880 6160384 0.075 0 0 0.175 0
+1572864 0 2 0 0 5242880 5242880 6291456 0.075 0 0 0.2 0
+1572864 0 2 0 0 5242880 5242880 6422528 0.075 0 0 0.225 0
+1572864 0 2 0 0 5242880 5242880 6553600 0.075 0 0 0.25 0
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 3932160 0.08125 0 0 -0.25 0
+1703936 0 2 0 0 5242880 5242880 4063232 0.08125 0 0 -0.225 0
+1703936 0 2 0 0 5242880 5242880 4194304 0.08125 0 0 -0.2 0
+1703936 0 2 0 0 5242880 5242880 4325376 0.08125 0 0 -0.175 0
+1703936 0 2 0 0 5242880 5242880 4456448 0.08125 0 0 -0.15 0
+1703936 0 2 0 0 5242880 5242880 4587520 0.08125 0 0 -0.125 0
+1703936 0 2 0 0 5242880 5242880 4718592 0.08125 0 0 -0.1 0
+1703936 0 2 0 0 5242880 5242880 4849664 0.08125 0 0 -0.075 0
+1703936 0 2 0 0 5242880 5242880 4980736 0.08125 0 0 -0.05 0
+1703936 0 2 0 0 5242880 5242880 5111808 0.08125 0 0 -0.025 0
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5242880 5242880 5373952 0.08125 0 0 0.025 0
+1703936 0 2 0 0 5242880 5242880 5505024 0.08125 0 0 0.05 0
+1703936 0 2 0 0 5242880 5242880 5636096 0.08125 0 0 0.075 0
+1703936 0 2 0 0 5242880 5242880 5767168 0.08125 0 0 0.1 0
+1703936 0 2 0 0 5242880 5242880 5898240 0.08125 0 0 0.125 0
+1703936 0 2 0 0 5242880 5242880 6029312 0.08125 0 0 0.15 0
+1703936 0 2 0 0 5242880 5242880 6160384 0.08125 0 0 0.175 0
+1703936 0 2 0 0 5242880 5242880 6291456 0.08125 0 0 0.2 0
+1703936 0 2 0 0 5242880 5242880 6422528 0.08125 0 0 0.225 0
+1703936 0 2 0 0 5242880 5242880 6553600 0.08125 0 0 0.25 0
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 2621440 0.0875 0 0 -0.5 0
+1835008 0 1 0 0 5242880 5242880 2883584 0.0875 0 0 -0.45 0
+1835008 0 1 0 0 5242880 5242880 3145728 0.0875 0 0 -0.4 0
+1835008 0 1 0 0 5242880 5242880 3407872 0.0875 0 0 -0.35 0
+1835008 0 1 0 0 5242880 5242880 3670016 0.0875 0 0 -0.3 0
+1835008 0 1 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 0
+1835008 0 1 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 0
+1835008 0 1 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 0
+1835008 0 1 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 0
+1835008 0 1 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 0
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 0
+1835008 0 1 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 0
+1835008 0 1 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 0
+1835008 0 1 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 0
+1835008 0 1 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 0
+1835008 0 1 0 0 5242880 5242880 6815744 0.0875 0 0 0.3 0
+1835008 0 1 0 0 5242880 5242880 7077888 0.0875 0 0 0.35 0
+1835008 0 1 0 0 5242880 5242880 7340032 0.0875 0 0 0.4 0
+1835008 0 1 0 0 5242880 5242880 7602176 0.0875 0 0 0.45 0
+1835008 0 1 0 0 5242880 5242880 7864320 0.0875 0 0 0.5 0
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 0
+1835008 0 2 0 0 5242880 5242880 4063232 0.0875 0 0 -0.225 0
+1835008 0 2 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 0
+1835008 0 2 0 0 5242880 5242880 4325376 0.0875 0 0 -0.175 0
+1835008 0 2 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 0
+1835008 0 2 0 0 5242880 5242880 4587520 0.0875 0 0 -0.125 0
+1835008 0 2 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 0
+1835008 0 2 0 0 5242880 5242880 4849664 0.0875 0 0 -0.075 0
+1835008 0 2 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 0
+1835008 0 2 0 0 5242880 5242880 5111808 0.0875 0 0 -0.025 0
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5242880 5242880 5373952 0.0875 0 0 0.025 0
+1835008 0 2 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 0
+1835008 0 2 0 0 5242880 5242880 5636096 0.0875 0 0 0.075 0
+1835008 0 2 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 0
+1835008 0 2 0 0 5242880 5242880 5898240 0.0875 0 0 0.125 0
+1835008 0 2 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 0
+1835008 0 2 0 0 5242880 5242880 6160384 0.0875 0 0 0.175 0
+1835008 0 2 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 0
+1835008 0 2 0 0 5242880 5242880 6422528 0.0875 0 0 0.225 0
+1835008 0 2 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 0
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 3932160 0.09375 0 0 -0.25 0
+1966080 0 2 0 0 5242880 5242880 4063232 0.09375 0 0 -0.225 0
+1966080 0 2 0 0 5242880 5242880 4194304 0.09375 0 0 -0.2 0
+1966080 0 2 0 0 5242880 5242880 4325376 0.09375 0 0 -0.175 0
+1966080 0 2 0 0 5242880 5242880 4456448 0.09375 0 0 -0.15 0
+1966080 0 2 0 0 5242880 5242880 4587520 0.09375 0 0 -0.125 0
+1966080 0 2 0 0 5242880 5242880 4718592 0.09375 0 0 -0.1 0
+1966080 0 2 0 0 5242880 5242880 4849664 0.09375 0 0 -0.075 0
+1966080 0 2 0 0 5242880 5242880 4980736 0.09375 0 0 -0.05 0
+1966080 0 2 0 0 5242880 5242880 5111808 0.09375 0 0 -0.025 0
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5242880 5242880 5373952 0.09375 0 0 0.025 0
+1966080 0 2 0 0 5242880 5242880 5505024 0.09375 0 0 0.05 0
+1966080 0 2 0 0 5242880 5242880 5636096 0.09375 0 0 0.075 0
+1966080 0 2 0 0 5242880 5242880 5767168 0.09375 0 0 0.1 0
+1966080 0 2 0 0 5242880 5242880 5898240 0.09375 0 0 0.125 0
+1966080 0 2 0 0 5242880 5242880 6029312 0.09375 0 0 0.15 0
+1966080 0 2 0 0 5242880 5242880 6160384 0.09375 0 0 0.175 0
+1966080 0 2 0 0 5242880 5242880 6291456 0.09375 0 0 0.2 0
+1966080 0 2 0 0 5242880 5242880 6422528 0.09375 0 0 0.225 0
+1966080 0 2 0 0 5242880 5242880 6553600 0.09375 0 0 0.25 0
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 0 0.1 0 0 -1 0
+2097152 0 0 0 0 5242880 5242880 524288 0.1 0 0 -0.9 0
+2097152 0 0 0 0 5242880 5242880 1048576 0.1 0 0 -0.8 0
+2097152 0 0 0 0 5242880 5242880 1572864 0.1 0 0 -0.7 0
+2097152 0 0 0 0 5242880 5242880 2097152 0.1 0 0 -0.6 0
+2097152 0 0 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 0
+2097152 0 0 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 0
+2097152 0 0 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 0
+2097152 0 0 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 0
+2097152 0 0 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 0
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5242880 5242880 5767168 0.1 0 0 0.1 0
+2097152 0 0 0 0 5242880 5242880 6291456 0.1 0 0 0.2 0
+2097152 0 0 0 0 5242880 5242880 6815744 0.1 0 0 0.3 0
+2097152 0 0 0 0 5242880 5242880 7340032 0.1 0 0 0.4 0
+2097152 0 0 0 0 5242880 5242880 7864320 0.1 0 0 0.5 0
+2097152 0 0 0 0 5242880 5242880 8388608 0.1 0 0 0.6 0
+2097152 0 0 0 0 5242880 5242880 8912896 0.1 0 0 0.7 0
+2097152 0 0 0 0 5242880 5242880 9437184 0.1 0 0 0.8 0
+2097152 0 0 0 0 5242880 5242880 9961472 0.1 0 0 0.9 0
+2097152 0 0 0 0 5242880 5242880 10485760 0.1 0 0 1 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 0
+2097152 0 1 0 0 5242880 5242880 2883584 0.1 0 0 -0.45 0
+2097152 0 1 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 0
+2097152 0 1 0 0 5242880 5242880 3407872 0.1 0 0 -0.35 0
+2097152 0 1 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 0
+2097152 0 1 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 0
+2097152 0 1 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 0
+2097152 0 1 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 0
+2097152 0 1 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 0
+2097152 0 1 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 0
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5242880 5242880 5505024 0.1 0 0 0.05 0
+2097152 0 1 0 0 5242880 5242880 5767168 0.1 0 0 0.1 0
+2097152 0 1 0 0 5242880 5242880 6029312 0.1 0 0 0.15 0
+2097152 0 1 0 0 5242880 5242880 6291456 0.1 0 0 0.2 0
+2097152 0 1 0 0 5242880 5242880 6553600 0.1 0 0 0.25 0
+2097152 0 1 0 0 5242880 5242880 6815744 0.1 0 0 0.3 0
+2097152 0 1 0 0 5242880 5242880 7077888 0.1 0 0 0.35 0
+2097152 0 1 0 0 5242880 5242880 7340032 0.1 0 0 0.4 0
+2097152 0 1 0 0 5242880 5242880 7602176 0.1 0 0 0.45 0
+2097152 0 1 0 0 5242880 5242880 7864320 0.1 0 0 0.5 0
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 0
+2097152 0 2 0 0 5242880 5242880 4063232 0.1 0 0 -0.225 0
+2097152 0 2 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 0
+2097152 0 2 0 0 5242880 5242880 4325376 0.1 0 0 -0.175 0
+2097152 0 2 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 0
+2097152 0 2 0 0 5242880 5242880 4587520 0.1 0 0 -0.125 0
+2097152 0 2 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 0
+2097152 0 2 0 0 5242880 5242880 4849664 0.1 0 0 -0.075 0
+2097152 0 2 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 0
+2097152 0 2 0 0 5242880 5242880 5111808 0.1 0 0 -0.025 0
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5242880 5242880 5373952 0.1 0 0 0.025 0
+2097152 0 2 0 0 5242880 5242880 5505024 0.1 0 0 0.05 0
+2097152 0 2 0 0 5242880 5242880 5636096 0.1 0 0 0.075 0
+2097152 0 2 0 0 5242880 5242880 5767168 0.1 0 0 0.1 0
+2097152 0 2 0 0 5242880 5242880 5898240 0.1 0 0 0.125 0
+2097152 0 2 0 0 5242880 5242880 6029312 0.1 0 0 0.15 0
+2097152 0 2 0 0 5242880 5242880 6160384 0.1 0 0 0.175 0
+2097152 0 2 0 0 5242880 5242880 6291456 0.1 0 0 0.2 0
+2097152 0 2 0 0 5242880 5242880 6422528 0.1 0 0 0.225 0
+2097152 0 2 0 0 5242880 5242880 6553600 0.1 0 0 0.25 0
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy..asc b/Carpet/CarpetInterp/test/waveinterp/phiy..asc
new file mode 100644
index 000000000..25d5ed573
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy..asc
@@ -0,0 +1,157 @@
+# WAVEMOL::phiy (phiy)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.average.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.average.asc
new file mode 100644
index 000000000..e3facff8a
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.average.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 -4.97771231194458e-29
+262144 0.0125 5.42393148298285e-29
+393216 0.01875 -8.45274320705629e-30
+524288 0.025 1.04255857234009e-29
+655360 0.03125 1.21169035041947e-29
+786432 0.0375 1.50291191212862e-29
+917504 0.04375 -7.67403888599e-30
+1048576 0.05 1.48818609769944e-29
+1179648 0.05625 -2.06739735659665e-29
+1310720 0.0625 -4.06520732059149e-29
+1441792 0.06875 -2.15690348705529e-29
+1572864 0.075 3.12069429800906e-29
+1703936 0.08125 1.57405360723275e-29
+1835008 0.0875 5.40961365755309e-30
+1966080 0.09375 5.98780925803483e-29
+2097152 0.1 8.62406407414767e-29
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.count.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.count.asc
new file mode 100644
index 000000000..4f23278b6
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.count.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 8000
+131072 0.00625 8000
+262144 0.0125 8000
+393216 0.01875 8000
+524288 0.025 8000
+655360 0.03125 8000
+786432 0.0375 8000
+917504 0.04375 8000
+1048576 0.05 8000
+1179648 0.05625 8000
+1310720 0.0625 8000
+1441792 0.06875 8000
+1572864 0.075 8000
+1703936 0.08125 8000
+1835008 0.0875 8000
+1966080 0.09375 8000
+2097152 0.1 8000
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.maximum.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.maximum.asc
new file mode 100644
index 000000000..bfe7f8578
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.maximum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 2.52330210059881e-08
+262144 0.0125 2.59751686828268e-09
+393216 0.01875 1.94813765121201e-09
+524288 0.025 1.13718142310167e-09
+655360 0.03125 1.49819814627278e-09
+786432 0.0375 1.92004376518377e-09
+917504 0.04375 2.25411963198039e-09
+1048576 0.05 2.51675670350412e-09
+1179648 0.05625 2.6865148826614e-09
+1310720 0.0625 2.77054086848342e-09
+1441792 0.06875 2.7710016315662e-09
+1572864 0.075 2.71062697591515e-09
+1703936 0.08125 2.68229908058895e-09
+1835008 0.0875 2.6295740571891e-09
+1966080 0.09375 2.53181084986157e-09
+2097152 0.1 2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.minimum.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.minimum.asc
new file mode 100644
index 000000000..9d5a6bb7a
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.minimum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 -2.52330210059881e-08
+262144 0.0125 -2.59751686828268e-09
+393216 0.01875 -1.94813765121201e-09
+524288 0.025 -1.13718142310167e-09
+655360 0.03125 -1.49819814627278e-09
+786432 0.0375 -1.92004376518377e-09
+917504 0.04375 -2.25411963198039e-09
+1048576 0.05 -2.51675670350412e-09
+1179648 0.05625 -2.6865148826614e-09
+1310720 0.0625 -2.77054086848342e-09
+1441792 0.06875 -2.7710016315662e-09
+1572864 0.075 -2.71062697591515e-09
+1703936 0.08125 -2.68229908058895e-09
+1835008 0.0875 -2.6295740571891e-09
+1966080 0.09375 -2.53181084986157e-09
+2097152 0.1 -2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.norm1.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.norm1.asc
new file mode 100644
index 000000000..d80c8aa98
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.norm1.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 1.8276409322037e-11
+262144 0.0125 7.34649051893125e-12
+393216 0.01875 5.91041345682555e-12
+524288 0.025 1.24242890027224e-12
+655360 0.03125 2.57713743237751e-12
+786432 0.0375 2.36124801524171e-12
+917504 0.04375 2.980572995517e-12
+1048576 0.05 3.03589049525507e-12
+1179648 0.05625 3.36169643546458e-12
+1310720 0.0625 3.61334864722834e-12
+1441792 0.06875 3.84089322924322e-12
+1572864 0.075 3.76844870942373e-12
+1703936 0.08125 3.84025109025803e-12
+1835008 0.0875 3.86147640814427e-12
+1966080 0.09375 3.97285273972382e-12
+2097152 0.1 4.30036623573871e-12
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.norm2.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.norm2.asc
new file mode 100644
index 000000000..032a35f63
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.norm2.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 5.18343779507329e-10
+262144 0.0125 1.13025459173354e-10
+393216 0.01875 8.58024498955012e-11
+524288 0.025 2.48311121202448e-11
+655360 0.03125 3.76969874645362e-11
+786432 0.0375 4.28591265832086e-11
+917504 0.04375 5.05689775131339e-11
+1048576 0.05 5.53837109993038e-11
+1179648 0.05625 5.9781605763834e-11
+1310720 0.0625 6.2162612218398e-11
+1441792 0.06875 6.40118017073292e-11
+1572864 0.075 6.41185856980847e-11
+1703936 0.08125 6.40670662348222e-11
+1835008 0.0875 6.32168941306762e-11
+1966080 0.09375 6.25609573472936e-11
+2097152 0.1 6.19448146789359e-11
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.norm_inf.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.norm_inf.asc
new file mode 100644
index 000000000..bfe7f8578
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.norm_inf.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 2.52330210059881e-08
+262144 0.0125 2.59751686828268e-09
+393216 0.01875 1.94813765121201e-09
+524288 0.025 1.13718142310167e-09
+655360 0.03125 1.49819814627278e-09
+786432 0.0375 1.92004376518377e-09
+917504 0.04375 2.25411963198039e-09
+1048576 0.05 2.51675670350412e-09
+1179648 0.05625 2.6865148826614e-09
+1310720 0.0625 2.77054086848342e-09
+1441792 0.06875 2.7710016315662e-09
+1572864 0.075 2.71062697591515e-09
+1703936 0.08125 2.68229908058895e-09
+1835008 0.0875 2.6295740571891e-09
+1966080 0.09375 2.53181084986157e-09
+2097152 0.1 2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.sum.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.sum.asc
new file mode 100644
index 000000000..968fb02cf
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.sum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiy (phiy)
+# iteration time data
+0 0 0
+131072 0.00625 -3.98216984955567e-25
+262144 0.0125 4.33914518638628e-25
+393216 0.01875 -6.76219456564504e-26
+524288 0.025 8.34046857872071e-26
+655360 0.03125 9.69352280335579e-26
+786432 0.0375 1.2023295297029e-25
+917504 0.04375 -6.139231108792e-26
+1048576 0.05 1.19054887815955e-25
+1179648 0.05625 -1.65391788527732e-25
+1310720 0.0625 -3.2521658564732e-25
+1441792 0.06875 -1.72552278964423e-25
+1572864 0.075 2.49655543840725e-25
+1703936 0.08125 1.2592428857862e-25
+1835008 0.0875 4.32769092604247e-26
+1966080 0.09375 4.79024740642786e-25
+2097152 0.1 6.89925125931813e-25
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.x.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.x.asc
new file mode 100644
index 000000000..7ff84590b
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.x.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phiy x (phiy)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 0 5242880 5242880 0 -1 0 0 0
+0 0 0 0 0 524288 5242880 5242880 0 -0.9 0 0 0
+0 0 0 0 0 1048576 5242880 5242880 0 -0.8 0 0 0
+0 0 0 0 0 1572864 5242880 5242880 0 -0.7 0 0 0
+0 0 0 0 0 2097152 5242880 5242880 0 -0.6 0 0 0
+0 0 0 0 0 2621440 5242880 5242880 0 -0.5 0 0 0
+0 0 0 0 0 3145728 5242880 5242880 0 -0.4 0 0 0
+0 0 0 0 0 3670016 5242880 5242880 0 -0.3 0 0 0
+0 0 0 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 0 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 0 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 0 0 0 6815744 5242880 5242880 0 0.3 0 0 0
+0 0 0 0 0 7340032 5242880 5242880 0 0.4 0 0 0
+0 0 0 0 0 7864320 5242880 5242880 0 0.5 0 0 0
+0 0 0 0 0 8388608 5242880 5242880 0 0.6 0 0 0
+0 0 0 0 0 8912896 5242880 5242880 0 0.7 0 0 0
+0 0 0 0 0 9437184 5242880 5242880 0 0.8 0 0 0
+0 0 0 0 0 9961472 5242880 5242880 0 0.9 0 0 0
+0 0 0 0 0 10485760 5242880 5242880 0 1 0 0 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 2621440 5242880 5242880 0 -0.5 0 0 0
+0 0 1 0 0 2883584 5242880 5242880 0 -0.45 0 0 0
+0 0 1 0 0 3145728 5242880 5242880 0 -0.4 0 0 0
+0 0 1 0 0 3407872 5242880 5242880 0 -0.35 0 0 0
+0 0 1 0 0 3670016 5242880 5242880 0 -0.3 0 0 0
+0 0 1 0 0 3932160 5242880 5242880 0 -0.25 0 0 0
+0 0 1 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 1 0 0 4456448 5242880 5242880 0 -0.15 0 0 0
+0 0 1 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 1 0 0 4980736 5242880 5242880 0 -0.05 0 0 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5505024 5242880 5242880 0 0.05 0 0 0
+0 0 1 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 1 0 0 6029312 5242880 5242880 0 0.15 0 0 0
+0 0 1 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 1 0 0 6553600 5242880 5242880 0 0.25 0 0 0
+0 0 1 0 0 6815744 5242880 5242880 0 0.3 0 0 0
+0 0 1 0 0 7077888 5242880 5242880 0 0.35 0 0 0
+0 0 1 0 0 7340032 5242880 5242880 0 0.4 0 0 0
+0 0 1 0 0 7602176 5242880 5242880 0 0.45 0 0 0
+0 0 1 0 0 7864320 5242880 5242880 0 0.5 0 0 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 3932160 5242880 5242880 0 -0.25 0 0 0
+0 0 2 0 0 4063232 5242880 5242880 0 -0.225 0 0 0
+0 0 2 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 2 0 0 4325376 5242880 5242880 0 -0.175 0 0 0
+0 0 2 0 0 4456448 5242880 5242880 0 -0.15 0 0 0
+0 0 2 0 0 4587520 5242880 5242880 0 -0.125 0 0 0
+0 0 2 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 2 0 0 4849664 5242880 5242880 0 -0.075 0 0 0
+0 0 2 0 0 4980736 5242880 5242880 0 -0.05 0 0 0
+0 0 2 0 0 5111808 5242880 5242880 0 -0.025 0 0 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5373952 5242880 5242880 0 0.025 0 0 0
+0 0 2 0 0 5505024 5242880 5242880 0 0.05 0 0 0
+0 0 2 0 0 5636096 5242880 5242880 0 0.075 0 0 0
+0 0 2 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 2 0 0 5898240 5242880 5242880 0 0.125 0 0 0
+0 0 2 0 0 6029312 5242880 5242880 0 0.15 0 0 0
+0 0 2 0 0 6160384 5242880 5242880 0 0.175 0 0 0
+0 0 2 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 2 0 0 6422528 5242880 5242880 0 0.225 0 0 0
+0 0 2 0 0 6553600 5242880 5242880 0 0.25 0 0 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 3932160 5242880 5242880 0.00625 -0.25 0 0 0
+131072 0 2 0 0 4063232 5242880 5242880 0.00625 -0.225 0 0 0
+131072 0 2 0 0 4194304 5242880 5242880 0.00625 -0.2 0 0 0
+131072 0 2 0 0 4325376 5242880 5242880 0.00625 -0.175 0 0 0
+131072 0 2 0 0 4456448 5242880 5242880 0.00625 -0.15 0 0 0
+131072 0 2 0 0 4587520 5242880 5242880 0.00625 -0.125 0 0 0
+131072 0 2 0 0 4718592 5242880 5242880 0.00625 -0.1 0 0 0
+131072 0 2 0 0 4849664 5242880 5242880 0.00625 -0.075 0 0 0
+131072 0 2 0 0 4980736 5242880 5242880 0.00625 -0.05 0 0 0
+131072 0 2 0 0 5111808 5242880 5242880 0.00625 -0.025 0 0 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5373952 5242880 5242880 0.00625 0.025 0 0 0
+131072 0 2 0 0 5505024 5242880 5242880 0.00625 0.05 0 0 0
+131072 0 2 0 0 5636096 5242880 5242880 0.00625 0.075 0 0 0
+131072 0 2 0 0 5767168 5242880 5242880 0.00625 0.1 0 0 0
+131072 0 2 0 0 5898240 5242880 5242880 0.00625 0.125 0 0 0
+131072 0 2 0 0 6029312 5242880 5242880 0.00625 0.15 0 0 0
+131072 0 2 0 0 6160384 5242880 5242880 0.00625 0.175 0 0 0
+131072 0 2 0 0 6291456 5242880 5242880 0.00625 0.2 0 0 0
+131072 0 2 0 0 6422528 5242880 5242880 0.00625 0.225 0 0 0
+131072 0 2 0 0 6553600 5242880 5242880 0.00625 0.25 0 0 0
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 2621440 5242880 5242880 0.0125 -0.5 0 0 0
+262144 0 1 0 0 2883584 5242880 5242880 0.0125 -0.45 0 0 0
+262144 0 1 0 0 3145728 5242880 5242880 0.0125 -0.4 0 0 0
+262144 0 1 0 0 3407872 5242880 5242880 0.0125 -0.35 0 0 0
+262144 0 1 0 0 3670016 5242880 5242880 0.0125 -0.3 0 0 0
+262144 0 1 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 0
+262144 0 1 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 0
+262144 0 1 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 0
+262144 0 1 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 0
+262144 0 1 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 0
+262144 0 1 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 0
+262144 0 1 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 0
+262144 0 1 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 0
+262144 0 1 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 0
+262144 0 1 0 0 6815744 5242880 5242880 0.0125 0.3 0 0 0
+262144 0 1 0 0 7077888 5242880 5242880 0.0125 0.35 0 0 0
+262144 0 1 0 0 7340032 5242880 5242880 0.0125 0.4 0 0 0
+262144 0 1 0 0 7602176 5242880 5242880 0.0125 0.45 0 0 0
+262144 0 1 0 0 7864320 5242880 5242880 0.0125 0.5 0 0 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 0
+262144 0 2 0 0 4063232 5242880 5242880 0.0125 -0.225 0 0 0
+262144 0 2 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 0
+262144 0 2 0 0 4325376 5242880 5242880 0.0125 -0.175 0 0 0
+262144 0 2 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 0
+262144 0 2 0 0 4587520 5242880 5242880 0.0125 -0.125 0 0 0
+262144 0 2 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 0
+262144 0 2 0 0 4849664 5242880 5242880 0.0125 -0.075 0 0 0
+262144 0 2 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 0
+262144 0 2 0 0 5111808 5242880 5242880 0.0125 -0.025 0 0 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5373952 5242880 5242880 0.0125 0.025 0 0 0
+262144 0 2 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 0
+262144 0 2 0 0 5636096 5242880 5242880 0.0125 0.075 0 0 0
+262144 0 2 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 0
+262144 0 2 0 0 5898240 5242880 5242880 0.0125 0.125 0 0 0
+262144 0 2 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 0
+262144 0 2 0 0 6160384 5242880 5242880 0.0125 0.175 0 0 0
+262144 0 2 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 0
+262144 0 2 0 0 6422528 5242880 5242880 0.0125 0.225 0 0 0
+262144 0 2 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 0
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 3932160 5242880 5242880 0.01875 -0.25 0 0 0
+393216 0 2 0 0 4063232 5242880 5242880 0.01875 -0.225 0 0 0
+393216 0 2 0 0 4194304 5242880 5242880 0.01875 -0.2 0 0 0
+393216 0 2 0 0 4325376 5242880 5242880 0.01875 -0.175 0 0 0
+393216 0 2 0 0 4456448 5242880 5242880 0.01875 -0.15 0 0 0
+393216 0 2 0 0 4587520 5242880 5242880 0.01875 -0.125 0 0 0
+393216 0 2 0 0 4718592 5242880 5242880 0.01875 -0.1 0 0 0
+393216 0 2 0 0 4849664 5242880 5242880 0.01875 -0.075 0 0 0
+393216 0 2 0 0 4980736 5242880 5242880 0.01875 -0.05 0 0 0
+393216 0 2 0 0 5111808 5242880 5242880 0.01875 -0.025 0 0 0
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5373952 5242880 5242880 0.01875 0.025 0 0 0
+393216 0 2 0 0 5505024 5242880 5242880 0.01875 0.05 0 0 0
+393216 0 2 0 0 5636096 5242880 5242880 0.01875 0.075 0 0 0
+393216 0 2 0 0 5767168 5242880 5242880 0.01875 0.1 0 0 0
+393216 0 2 0 0 5898240 5242880 5242880 0.01875 0.125 0 0 0
+393216 0 2 0 0 6029312 5242880 5242880 0.01875 0.15 0 0 0
+393216 0 2 0 0 6160384 5242880 5242880 0.01875 0.175 0 0 0
+393216 0 2 0 0 6291456 5242880 5242880 0.01875 0.2 0 0 0
+393216 0 2 0 0 6422528 5242880 5242880 0.01875 0.225 0 0 0
+393216 0 2 0 0 6553600 5242880 5242880 0.01875 0.25 0 0 0
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 0 5242880 5242880 0.025 -1 0 0 0
+524288 0 0 0 0 524288 5242880 5242880 0.025 -0.9 0 0 0
+524288 0 0 0 0 1048576 5242880 5242880 0.025 -0.8 0 0 0
+524288 0 0 0 0 1572864 5242880 5242880 0.025 -0.7 0 0 0
+524288 0 0 0 0 2097152 5242880 5242880 0.025 -0.6 0 0 0
+524288 0 0 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 0
+524288 0 0 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 0
+524288 0 0 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 0
+524288 0 0 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0
+524288 0 0 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 0
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5767168 5242880 5242880 0.025 0.1 0 0 0
+524288 0 0 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0
+524288 0 0 0 0 6815744 5242880 5242880 0.025 0.3 0 0 0
+524288 0 0 0 0 7340032 5242880 5242880 0.025 0.4 0 0 0
+524288 0 0 0 0 7864320 5242880 5242880 0.025 0.5 0 0 0
+524288 0 0 0 0 8388608 5242880 5242880 0.025 0.6 0 0 0
+524288 0 0 0 0 8912896 5242880 5242880 0.025 0.7 0 0 0
+524288 0 0 0 0 9437184 5242880 5242880 0.025 0.8 0 0 0
+524288 0 0 0 0 9961472 5242880 5242880 0.025 0.9 0 0 0
+524288 0 0 0 0 10485760 5242880 5242880 0.025 1 0 0 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 0
+524288 0 1 0 0 2883584 5242880 5242880 0.025 -0.45 0 0 0
+524288 0 1 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 0
+524288 0 1 0 0 3407872 5242880 5242880 0.025 -0.35 0 0 0
+524288 0 1 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 0
+524288 0 1 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 0
+524288 0 1 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0
+524288 0 1 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 0
+524288 0 1 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 0
+524288 0 1 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 0
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5505024 5242880 5242880 0.025 0.05 0 0 0
+524288 0 1 0 0 5767168 5242880 5242880 0.025 0.1 0 0 0
+524288 0 1 0 0 6029312 5242880 5242880 0.025 0.15 0 0 0
+524288 0 1 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0
+524288 0 1 0 0 6553600 5242880 5242880 0.025 0.25 0 0 0
+524288 0 1 0 0 6815744 5242880 5242880 0.025 0.3 0 0 0
+524288 0 1 0 0 7077888 5242880 5242880 0.025 0.35 0 0 0
+524288 0 1 0 0 7340032 5242880 5242880 0.025 0.4 0 0 0
+524288 0 1 0 0 7602176 5242880 5242880 0.025 0.45 0 0 0
+524288 0 1 0 0 7864320 5242880 5242880 0.025 0.5 0 0 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 0
+524288 0 2 0 0 4063232 5242880 5242880 0.025 -0.225 0 0 0
+524288 0 2 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0
+524288 0 2 0 0 4325376 5242880 5242880 0.025 -0.175 0 0 0
+524288 0 2 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 0
+524288 0 2 0 0 4587520 5242880 5242880 0.025 -0.125 0 0 0
+524288 0 2 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 0
+524288 0 2 0 0 4849664 5242880 5242880 0.025 -0.075 0 0 0
+524288 0 2 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 0
+524288 0 2 0 0 5111808 5242880 5242880 0.025 -0.025 0 0 0
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5373952 5242880 5242880 0.025 0.025 0 0 0
+524288 0 2 0 0 5505024 5242880 5242880 0.025 0.05 0 0 0
+524288 0 2 0 0 5636096 5242880 5242880 0.025 0.075 0 0 0
+524288 0 2 0 0 5767168 5242880 5242880 0.025 0.1 0 0 0
+524288 0 2 0 0 5898240 5242880 5242880 0.025 0.125 0 0 0
+524288 0 2 0 0 6029312 5242880 5242880 0.025 0.15 0 0 0
+524288 0 2 0 0 6160384 5242880 5242880 0.025 0.175 0 0 0
+524288 0 2 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0
+524288 0 2 0 0 6422528 5242880 5242880 0.025 0.225 0 0 0
+524288 0 2 0 0 6553600 5242880 5242880 0.025 0.25 0 0 0
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 3932160 5242880 5242880 0.03125 -0.25 0 0 0
+655360 0 2 0 0 4063232 5242880 5242880 0.03125 -0.225 0 0 0
+655360 0 2 0 0 4194304 5242880 5242880 0.03125 -0.2 0 0 0
+655360 0 2 0 0 4325376 5242880 5242880 0.03125 -0.175 0 0 0
+655360 0 2 0 0 4456448 5242880 5242880 0.03125 -0.15 0 0 0
+655360 0 2 0 0 4587520 5242880 5242880 0.03125 -0.125 0 0 0
+655360 0 2 0 0 4718592 5242880 5242880 0.03125 -0.1 0 0 0
+655360 0 2 0 0 4849664 5242880 5242880 0.03125 -0.075 0 0 0
+655360 0 2 0 0 4980736 5242880 5242880 0.03125 -0.05 0 0 0
+655360 0 2 0 0 5111808 5242880 5242880 0.03125 -0.025 0 0 0
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5373952 5242880 5242880 0.03125 0.025 0 0 0
+655360 0 2 0 0 5505024 5242880 5242880 0.03125 0.05 0 0 0
+655360 0 2 0 0 5636096 5242880 5242880 0.03125 0.075 0 0 0
+655360 0 2 0 0 5767168 5242880 5242880 0.03125 0.1 0 0 0
+655360 0 2 0 0 5898240 5242880 5242880 0.03125 0.125 0 0 0
+655360 0 2 0 0 6029312 5242880 5242880 0.03125 0.15 0 0 0
+655360 0 2 0 0 6160384 5242880 5242880 0.03125 0.175 0 0 0
+655360 0 2 0 0 6291456 5242880 5242880 0.03125 0.2 0 0 0
+655360 0 2 0 0 6422528 5242880 5242880 0.03125 0.225 0 0 0
+655360 0 2 0 0 6553600 5242880 5242880 0.03125 0.25 0 0 0
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 2621440 5242880 5242880 0.0375 -0.5 0 0 0
+786432 0 1 0 0 2883584 5242880 5242880 0.0375 -0.45 0 0 0
+786432 0 1 0 0 3145728 5242880 5242880 0.0375 -0.4 0 0 0
+786432 0 1 0 0 3407872 5242880 5242880 0.0375 -0.35 0 0 0
+786432 0 1 0 0 3670016 5242880 5242880 0.0375 -0.3 0 0 0
+786432 0 1 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 0
+786432 0 1 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 0
+786432 0 1 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 0
+786432 0 1 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 0
+786432 0 1 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 0
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 0
+786432 0 1 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 0
+786432 0 1 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 0
+786432 0 1 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 0
+786432 0 1 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 0
+786432 0 1 0 0 6815744 5242880 5242880 0.0375 0.3 0 0 0
+786432 0 1 0 0 7077888 5242880 5242880 0.0375 0.35 0 0 0
+786432 0 1 0 0 7340032 5242880 5242880 0.0375 0.4 0 0 0
+786432 0 1 0 0 7602176 5242880 5242880 0.0375 0.45 0 0 0
+786432 0 1 0 0 7864320 5242880 5242880 0.0375 0.5 0 0 0
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 0
+786432 0 2 0 0 4063232 5242880 5242880 0.0375 -0.225 0 0 0
+786432 0 2 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 0
+786432 0 2 0 0 4325376 5242880 5242880 0.0375 -0.175 0 0 0
+786432 0 2 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 0
+786432 0 2 0 0 4587520 5242880 5242880 0.0375 -0.125 0 0 0
+786432 0 2 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 0
+786432 0 2 0 0 4849664 5242880 5242880 0.0375 -0.075 0 0 0
+786432 0 2 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 0
+786432 0 2 0 0 5111808 5242880 5242880 0.0375 -0.025 0 0 0
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5373952 5242880 5242880 0.0375 0.025 0 0 0
+786432 0 2 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 0
+786432 0 2 0 0 5636096 5242880 5242880 0.0375 0.075 0 0 0
+786432 0 2 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 0
+786432 0 2 0 0 5898240 5242880 5242880 0.0375 0.125 0 0 0
+786432 0 2 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 0
+786432 0 2 0 0 6160384 5242880 5242880 0.0375 0.175 0 0 0
+786432 0 2 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 0
+786432 0 2 0 0 6422528 5242880 5242880 0.0375 0.225 0 0 0
+786432 0 2 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 0
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 3932160 5242880 5242880 0.04375 -0.25 0 0 0
+917504 0 2 0 0 4063232 5242880 5242880 0.04375 -0.225 0 0 0
+917504 0 2 0 0 4194304 5242880 5242880 0.04375 -0.2 0 0 0
+917504 0 2 0 0 4325376 5242880 5242880 0.04375 -0.175 0 0 0
+917504 0 2 0 0 4456448 5242880 5242880 0.04375 -0.15 0 0 0
+917504 0 2 0 0 4587520 5242880 5242880 0.04375 -0.125 0 0 0
+917504 0 2 0 0 4718592 5242880 5242880 0.04375 -0.1 0 0 0
+917504 0 2 0 0 4849664 5242880 5242880 0.04375 -0.075 0 0 0
+917504 0 2 0 0 4980736 5242880 5242880 0.04375 -0.05 0 0 0
+917504 0 2 0 0 5111808 5242880 5242880 0.04375 -0.025 0 0 0
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5373952 5242880 5242880 0.04375 0.025 0 0 0
+917504 0 2 0 0 5505024 5242880 5242880 0.04375 0.05 0 0 0
+917504 0 2 0 0 5636096 5242880 5242880 0.04375 0.075 0 0 0
+917504 0 2 0 0 5767168 5242880 5242880 0.04375 0.1 0 0 0
+917504 0 2 0 0 5898240 5242880 5242880 0.04375 0.125 0 0 0
+917504 0 2 0 0 6029312 5242880 5242880 0.04375 0.15 0 0 0
+917504 0 2 0 0 6160384 5242880 5242880 0.04375 0.175 0 0 0
+917504 0 2 0 0 6291456 5242880 5242880 0.04375 0.2 0 0 0
+917504 0 2 0 0 6422528 5242880 5242880 0.04375 0.225 0 0 0
+917504 0 2 0 0 6553600 5242880 5242880 0.04375 0.25 0 0 0
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 0 5242880 5242880 0.05 -1 0 0 0
+1048576 0 0 0 0 524288 5242880 5242880 0.05 -0.9 0 0 0
+1048576 0 0 0 0 1048576 5242880 5242880 0.05 -0.8 0 0 0
+1048576 0 0 0 0 1572864 5242880 5242880 0.05 -0.7 0 0 0
+1048576 0 0 0 0 2097152 5242880 5242880 0.05 -0.6 0 0 0
+1048576 0 0 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 0
+1048576 0 0 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 0
+1048576 0 0 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 0
+1048576 0 0 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0
+1048576 0 0 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 0
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5767168 5242880 5242880 0.05 0.1 0 0 0
+1048576 0 0 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0
+1048576 0 0 0 0 6815744 5242880 5242880 0.05 0.3 0 0 0
+1048576 0 0 0 0 7340032 5242880 5242880 0.05 0.4 0 0 0
+1048576 0 0 0 0 7864320 5242880 5242880 0.05 0.5 0 0 0
+1048576 0 0 0 0 8388608 5242880 5242880 0.05 0.6 0 0 0
+1048576 0 0 0 0 8912896 5242880 5242880 0.05 0.7 0 0 0
+1048576 0 0 0 0 9437184 5242880 5242880 0.05 0.8 0 0 0
+1048576 0 0 0 0 9961472 5242880 5242880 0.05 0.9 0 0 0
+1048576 0 0 0 0 10485760 5242880 5242880 0.05 1 0 0 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 0
+1048576 0 1 0 0 2883584 5242880 5242880 0.05 -0.45 0 0 0
+1048576 0 1 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 0
+1048576 0 1 0 0 3407872 5242880 5242880 0.05 -0.35 0 0 0
+1048576 0 1 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 0
+1048576 0 1 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 0
+1048576 0 1 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0
+1048576 0 1 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 0
+1048576 0 1 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 0
+1048576 0 1 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 0
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5505024 5242880 5242880 0.05 0.05 0 0 0
+1048576 0 1 0 0 5767168 5242880 5242880 0.05 0.1 0 0 0
+1048576 0 1 0 0 6029312 5242880 5242880 0.05 0.15 0 0 0
+1048576 0 1 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0
+1048576 0 1 0 0 6553600 5242880 5242880 0.05 0.25 0 0 0
+1048576 0 1 0 0 6815744 5242880 5242880 0.05 0.3 0 0 0
+1048576 0 1 0 0 7077888 5242880 5242880 0.05 0.35 0 0 0
+1048576 0 1 0 0 7340032 5242880 5242880 0.05 0.4 0 0 0
+1048576 0 1 0 0 7602176 5242880 5242880 0.05 0.45 0 0 0
+1048576 0 1 0 0 7864320 5242880 5242880 0.05 0.5 0 0 0
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 0
+1048576 0 2 0 0 4063232 5242880 5242880 0.05 -0.225 0 0 0
+1048576 0 2 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0
+1048576 0 2 0 0 4325376 5242880 5242880 0.05 -0.175 0 0 0
+1048576 0 2 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 0
+1048576 0 2 0 0 4587520 5242880 5242880 0.05 -0.125 0 0 0
+1048576 0 2 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 0
+1048576 0 2 0 0 4849664 5242880 5242880 0.05 -0.075 0 0 0
+1048576 0 2 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 0
+1048576 0 2 0 0 5111808 5242880 5242880 0.05 -0.025 0 0 0
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5373952 5242880 5242880 0.05 0.025 0 0 0
+1048576 0 2 0 0 5505024 5242880 5242880 0.05 0.05 0 0 0
+1048576 0 2 0 0 5636096 5242880 5242880 0.05 0.075 0 0 0
+1048576 0 2 0 0 5767168 5242880 5242880 0.05 0.1 0 0 0
+1048576 0 2 0 0 5898240 5242880 5242880 0.05 0.125 0 0 0
+1048576 0 2 0 0 6029312 5242880 5242880 0.05 0.15 0 0 0
+1048576 0 2 0 0 6160384 5242880 5242880 0.05 0.175 0 0 0
+1048576 0 2 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0
+1048576 0 2 0 0 6422528 5242880 5242880 0.05 0.225 0 0 0
+1048576 0 2 0 0 6553600 5242880 5242880 0.05 0.25 0 0 0
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 3932160 5242880 5242880 0.05625 -0.25 0 0 0
+1179648 0 2 0 0 4063232 5242880 5242880 0.05625 -0.225 0 0 0
+1179648 0 2 0 0 4194304 5242880 5242880 0.05625 -0.2 0 0 0
+1179648 0 2 0 0 4325376 5242880 5242880 0.05625 -0.175 0 0 0
+1179648 0 2 0 0 4456448 5242880 5242880 0.05625 -0.15 0 0 0
+1179648 0 2 0 0 4587520 5242880 5242880 0.05625 -0.125 0 0 0
+1179648 0 2 0 0 4718592 5242880 5242880 0.05625 -0.1 0 0 0
+1179648 0 2 0 0 4849664 5242880 5242880 0.05625 -0.075 0 0 0
+1179648 0 2 0 0 4980736 5242880 5242880 0.05625 -0.05 0 0 0
+1179648 0 2 0 0 5111808 5242880 5242880 0.05625 -0.025 0 0 0
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5373952 5242880 5242880 0.05625 0.025 0 0 0
+1179648 0 2 0 0 5505024 5242880 5242880 0.05625 0.05 0 0 0
+1179648 0 2 0 0 5636096 5242880 5242880 0.05625 0.075 0 0 0
+1179648 0 2 0 0 5767168 5242880 5242880 0.05625 0.1 0 0 0
+1179648 0 2 0 0 5898240 5242880 5242880 0.05625 0.125 0 0 0
+1179648 0 2 0 0 6029312 5242880 5242880 0.05625 0.15 0 0 0
+1179648 0 2 0 0 6160384 5242880 5242880 0.05625 0.175 0 0 0
+1179648 0 2 0 0 6291456 5242880 5242880 0.05625 0.2 0 0 0
+1179648 0 2 0 0 6422528 5242880 5242880 0.05625 0.225 0 0 0
+1179648 0 2 0 0 6553600 5242880 5242880 0.05625 0.25 0 0 0
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 2621440 5242880 5242880 0.0625 -0.5 0 0 0
+1310720 0 1 0 0 2883584 5242880 5242880 0.0625 -0.45 0 0 0
+1310720 0 1 0 0 3145728 5242880 5242880 0.0625 -0.4 0 0 0
+1310720 0 1 0 0 3407872 5242880 5242880 0.0625 -0.35 0 0 0
+1310720 0 1 0 0 3670016 5242880 5242880 0.0625 -0.3 0 0 0
+1310720 0 1 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 0
+1310720 0 1 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 0
+1310720 0 1 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 0
+1310720 0 1 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 0
+1310720 0 1 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 0
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 0
+1310720 0 1 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 0
+1310720 0 1 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 0
+1310720 0 1 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 0
+1310720 0 1 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 0
+1310720 0 1 0 0 6815744 5242880 5242880 0.0625 0.3 0 0 0
+1310720 0 1 0 0 7077888 5242880 5242880 0.0625 0.35 0 0 0
+1310720 0 1 0 0 7340032 5242880 5242880 0.0625 0.4 0 0 0
+1310720 0 1 0 0 7602176 5242880 5242880 0.0625 0.45 0 0 0
+1310720 0 1 0 0 7864320 5242880 5242880 0.0625 0.5 0 0 0
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 0
+1310720 0 2 0 0 4063232 5242880 5242880 0.0625 -0.225 0 0 0
+1310720 0 2 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 0
+1310720 0 2 0 0 4325376 5242880 5242880 0.0625 -0.175 0 0 0
+1310720 0 2 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 0
+1310720 0 2 0 0 4587520 5242880 5242880 0.0625 -0.125 0 0 0
+1310720 0 2 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 0
+1310720 0 2 0 0 4849664 5242880 5242880 0.0625 -0.075 0 0 0
+1310720 0 2 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 0
+1310720 0 2 0 0 5111808 5242880 5242880 0.0625 -0.025 0 0 0
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5373952 5242880 5242880 0.0625 0.025 0 0 0
+1310720 0 2 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 0
+1310720 0 2 0 0 5636096 5242880 5242880 0.0625 0.075 0 0 0
+1310720 0 2 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 0
+1310720 0 2 0 0 5898240 5242880 5242880 0.0625 0.125 0 0 0
+1310720 0 2 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 0
+1310720 0 2 0 0 6160384 5242880 5242880 0.0625 0.175 0 0 0
+1310720 0 2 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 0
+1310720 0 2 0 0 6422528 5242880 5242880 0.0625 0.225 0 0 0
+1310720 0 2 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 0
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 3932160 5242880 5242880 0.06875 -0.25 0 0 0
+1441792 0 2 0 0 4063232 5242880 5242880 0.06875 -0.225 0 0 0
+1441792 0 2 0 0 4194304 5242880 5242880 0.06875 -0.2 0 0 0
+1441792 0 2 0 0 4325376 5242880 5242880 0.06875 -0.175 0 0 0
+1441792 0 2 0 0 4456448 5242880 5242880 0.06875 -0.15 0 0 0
+1441792 0 2 0 0 4587520 5242880 5242880 0.06875 -0.125 0 0 0
+1441792 0 2 0 0 4718592 5242880 5242880 0.06875 -0.1 0 0 0
+1441792 0 2 0 0 4849664 5242880 5242880 0.06875 -0.075 0 0 0
+1441792 0 2 0 0 4980736 5242880 5242880 0.06875 -0.05 0 0 0
+1441792 0 2 0 0 5111808 5242880 5242880 0.06875 -0.025 0 0 0
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5373952 5242880 5242880 0.06875 0.025 0 0 0
+1441792 0 2 0 0 5505024 5242880 5242880 0.06875 0.05 0 0 0
+1441792 0 2 0 0 5636096 5242880 5242880 0.06875 0.075 0 0 0
+1441792 0 2 0 0 5767168 5242880 5242880 0.06875 0.1 0 0 0
+1441792 0 2 0 0 5898240 5242880 5242880 0.06875 0.125 0 0 0
+1441792 0 2 0 0 6029312 5242880 5242880 0.06875 0.15 0 0 0
+1441792 0 2 0 0 6160384 5242880 5242880 0.06875 0.175 0 0 0
+1441792 0 2 0 0 6291456 5242880 5242880 0.06875 0.2 0 0 0
+1441792 0 2 0 0 6422528 5242880 5242880 0.06875 0.225 0 0 0
+1441792 0 2 0 0 6553600 5242880 5242880 0.06875 0.25 0 0 0
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 0 5242880 5242880 0.075 -1 0 0 0
+1572864 0 0 0 0 524288 5242880 5242880 0.075 -0.9 0 0 0
+1572864 0 0 0 0 1048576 5242880 5242880 0.075 -0.8 0 0 0
+1572864 0 0 0 0 1572864 5242880 5242880 0.075 -0.7 0 0 0
+1572864 0 0 0 0 2097152 5242880 5242880 0.075 -0.6 0 0 0
+1572864 0 0 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 0
+1572864 0 0 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 0
+1572864 0 0 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 0
+1572864 0 0 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 0
+1572864 0 0 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 0
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5767168 5242880 5242880 0.075 0.1 0 0 0
+1572864 0 0 0 0 6291456 5242880 5242880 0.075 0.2 0 0 0
+1572864 0 0 0 0 6815744 5242880 5242880 0.075 0.3 0 0 0
+1572864 0 0 0 0 7340032 5242880 5242880 0.075 0.4 0 0 0
+1572864 0 0 0 0 7864320 5242880 5242880 0.075 0.5 0 0 0
+1572864 0 0 0 0 8388608 5242880 5242880 0.075 0.6 0 0 0
+1572864 0 0 0 0 8912896 5242880 5242880 0.075 0.7 0 0 0
+1572864 0 0 0 0 9437184 5242880 5242880 0.075 0.8 0 0 0
+1572864 0 0 0 0 9961472 5242880 5242880 0.075 0.9 0 0 0
+1572864 0 0 0 0 10485760 5242880 5242880 0.075 1 0 0 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 0
+1572864 0 1 0 0 2883584 5242880 5242880 0.075 -0.45 0 0 0
+1572864 0 1 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 0
+1572864 0 1 0 0 3407872 5242880 5242880 0.075 -0.35 0 0 0
+1572864 0 1 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 0
+1572864 0 1 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 0
+1572864 0 1 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 0
+1572864 0 1 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 0
+1572864 0 1 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 0
+1572864 0 1 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 0
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5505024 5242880 5242880 0.075 0.05 0 0 0
+1572864 0 1 0 0 5767168 5242880 5242880 0.075 0.1 0 0 0
+1572864 0 1 0 0 6029312 5242880 5242880 0.075 0.15 0 0 0
+1572864 0 1 0 0 6291456 5242880 5242880 0.075 0.2 0 0 0
+1572864 0 1 0 0 6553600 5242880 5242880 0.075 0.25 0 0 0
+1572864 0 1 0 0 6815744 5242880 5242880 0.075 0.3 0 0 0
+1572864 0 1 0 0 7077888 5242880 5242880 0.075 0.35 0 0 0
+1572864 0 1 0 0 7340032 5242880 5242880 0.075 0.4 0 0 0
+1572864 0 1 0 0 7602176 5242880 5242880 0.075 0.45 0 0 0
+1572864 0 1 0 0 7864320 5242880 5242880 0.075 0.5 0 0 0
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 0
+1572864 0 2 0 0 4063232 5242880 5242880 0.075 -0.225 0 0 0
+1572864 0 2 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 0
+1572864 0 2 0 0 4325376 5242880 5242880 0.075 -0.175 0 0 0
+1572864 0 2 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 0
+1572864 0 2 0 0 4587520 5242880 5242880 0.075 -0.125 0 0 0
+1572864 0 2 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 0
+1572864 0 2 0 0 4849664 5242880 5242880 0.075 -0.075 0 0 0
+1572864 0 2 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 0
+1572864 0 2 0 0 5111808 5242880 5242880 0.075 -0.025 0 0 0
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5373952 5242880 5242880 0.075 0.025 0 0 0
+1572864 0 2 0 0 5505024 5242880 5242880 0.075 0.05 0 0 0
+1572864 0 2 0 0 5636096 5242880 5242880 0.075 0.075 0 0 0
+1572864 0 2 0 0 5767168 5242880 5242880 0.075 0.1 0 0 0
+1572864 0 2 0 0 5898240 5242880 5242880 0.075 0.125 0 0 0
+1572864 0 2 0 0 6029312 5242880 5242880 0.075 0.15 0 0 0
+1572864 0 2 0 0 6160384 5242880 5242880 0.075 0.175 0 0 0
+1572864 0 2 0 0 6291456 5242880 5242880 0.075 0.2 0 0 0
+1572864 0 2 0 0 6422528 5242880 5242880 0.075 0.225 0 0 0
+1572864 0 2 0 0 6553600 5242880 5242880 0.075 0.25 0 0 0
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 3932160 5242880 5242880 0.08125 -0.25 0 0 0
+1703936 0 2 0 0 4063232 5242880 5242880 0.08125 -0.225 0 0 0
+1703936 0 2 0 0 4194304 5242880 5242880 0.08125 -0.2 0 0 0
+1703936 0 2 0 0 4325376 5242880 5242880 0.08125 -0.175 0 0 0
+1703936 0 2 0 0 4456448 5242880 5242880 0.08125 -0.15 0 0 0
+1703936 0 2 0 0 4587520 5242880 5242880 0.08125 -0.125 0 0 0
+1703936 0 2 0 0 4718592 5242880 5242880 0.08125 -0.1 0 0 0
+1703936 0 2 0 0 4849664 5242880 5242880 0.08125 -0.075 0 0 0
+1703936 0 2 0 0 4980736 5242880 5242880 0.08125 -0.05 0 0 0
+1703936 0 2 0 0 5111808 5242880 5242880 0.08125 -0.025 0 0 0
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5373952 5242880 5242880 0.08125 0.025 0 0 0
+1703936 0 2 0 0 5505024 5242880 5242880 0.08125 0.05 0 0 0
+1703936 0 2 0 0 5636096 5242880 5242880 0.08125 0.075 0 0 0
+1703936 0 2 0 0 5767168 5242880 5242880 0.08125 0.1 0 0 0
+1703936 0 2 0 0 5898240 5242880 5242880 0.08125 0.125 0 0 0
+1703936 0 2 0 0 6029312 5242880 5242880 0.08125 0.15 0 0 0
+1703936 0 2 0 0 6160384 5242880 5242880 0.08125 0.175 0 0 0
+1703936 0 2 0 0 6291456 5242880 5242880 0.08125 0.2 0 0 0
+1703936 0 2 0 0 6422528 5242880 5242880 0.08125 0.225 0 0 0
+1703936 0 2 0 0 6553600 5242880 5242880 0.08125 0.25 0 0 0
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 2621440 5242880 5242880 0.0875 -0.5 0 0 0
+1835008 0 1 0 0 2883584 5242880 5242880 0.0875 -0.45 0 0 0
+1835008 0 1 0 0 3145728 5242880 5242880 0.0875 -0.4 0 0 0
+1835008 0 1 0 0 3407872 5242880 5242880 0.0875 -0.35 0 0 0
+1835008 0 1 0 0 3670016 5242880 5242880 0.0875 -0.3 0 0 0
+1835008 0 1 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 0
+1835008 0 1 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 0
+1835008 0 1 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 0
+1835008 0 1 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 0
+1835008 0 1 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 0
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 0
+1835008 0 1 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 0
+1835008 0 1 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 0
+1835008 0 1 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 0
+1835008 0 1 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 0
+1835008 0 1 0 0 6815744 5242880 5242880 0.0875 0.3 0 0 0
+1835008 0 1 0 0 7077888 5242880 5242880 0.0875 0.35 0 0 0
+1835008 0 1 0 0 7340032 5242880 5242880 0.0875 0.4 0 0 0
+1835008 0 1 0 0 7602176 5242880 5242880 0.0875 0.45 0 0 0
+1835008 0 1 0 0 7864320 5242880 5242880 0.0875 0.5 0 0 0
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 0
+1835008 0 2 0 0 4063232 5242880 5242880 0.0875 -0.225 0 0 0
+1835008 0 2 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 0
+1835008 0 2 0 0 4325376 5242880 5242880 0.0875 -0.175 0 0 0
+1835008 0 2 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 0
+1835008 0 2 0 0 4587520 5242880 5242880 0.0875 -0.125 0 0 0
+1835008 0 2 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 0
+1835008 0 2 0 0 4849664 5242880 5242880 0.0875 -0.075 0 0 0
+1835008 0 2 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 0
+1835008 0 2 0 0 5111808 5242880 5242880 0.0875 -0.025 0 0 0
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5373952 5242880 5242880 0.0875 0.025 0 0 0
+1835008 0 2 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 0
+1835008 0 2 0 0 5636096 5242880 5242880 0.0875 0.075 0 0 0
+1835008 0 2 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 0
+1835008 0 2 0 0 5898240 5242880 5242880 0.0875 0.125 0 0 0
+1835008 0 2 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 0
+1835008 0 2 0 0 6160384 5242880 5242880 0.0875 0.175 0 0 0
+1835008 0 2 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 0
+1835008 0 2 0 0 6422528 5242880 5242880 0.0875 0.225 0 0 0
+1835008 0 2 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 0
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 3932160 5242880 5242880 0.09375 -0.25 0 0 0
+1966080 0 2 0 0 4063232 5242880 5242880 0.09375 -0.225 0 0 0
+1966080 0 2 0 0 4194304 5242880 5242880 0.09375 -0.2 0 0 0
+1966080 0 2 0 0 4325376 5242880 5242880 0.09375 -0.175 0 0 0
+1966080 0 2 0 0 4456448 5242880 5242880 0.09375 -0.15 0 0 0
+1966080 0 2 0 0 4587520 5242880 5242880 0.09375 -0.125 0 0 0
+1966080 0 2 0 0 4718592 5242880 5242880 0.09375 -0.1 0 0 0
+1966080 0 2 0 0 4849664 5242880 5242880 0.09375 -0.075 0 0 0
+1966080 0 2 0 0 4980736 5242880 5242880 0.09375 -0.05 0 0 0
+1966080 0 2 0 0 5111808 5242880 5242880 0.09375 -0.025 0 0 0
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5373952 5242880 5242880 0.09375 0.025 0 0 0
+1966080 0 2 0 0 5505024 5242880 5242880 0.09375 0.05 0 0 0
+1966080 0 2 0 0 5636096 5242880 5242880 0.09375 0.075 0 0 0
+1966080 0 2 0 0 5767168 5242880 5242880 0.09375 0.1 0 0 0
+1966080 0 2 0 0 5898240 5242880 5242880 0.09375 0.125 0 0 0
+1966080 0 2 0 0 6029312 5242880 5242880 0.09375 0.15 0 0 0
+1966080 0 2 0 0 6160384 5242880 5242880 0.09375 0.175 0 0 0
+1966080 0 2 0 0 6291456 5242880 5242880 0.09375 0.2 0 0 0
+1966080 0 2 0 0 6422528 5242880 5242880 0.09375 0.225 0 0 0
+1966080 0 2 0 0 6553600 5242880 5242880 0.09375 0.25 0 0 0
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 0 5242880 5242880 0.1 -1 0 0 0
+2097152 0 0 0 0 524288 5242880 5242880 0.1 -0.9 0 0 0
+2097152 0 0 0 0 1048576 5242880 5242880 0.1 -0.8 0 0 0
+2097152 0 0 0 0 1572864 5242880 5242880 0.1 -0.7 0 0 0
+2097152 0 0 0 0 2097152 5242880 5242880 0.1 -0.6 0 0 0
+2097152 0 0 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 0
+2097152 0 0 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 0
+2097152 0 0 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 0
+2097152 0 0 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 0
+2097152 0 0 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 0
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5767168 5242880 5242880 0.1 0.1 0 0 0
+2097152 0 0 0 0 6291456 5242880 5242880 0.1 0.2 0 0 0
+2097152 0 0 0 0 6815744 5242880 5242880 0.1 0.3 0 0 0
+2097152 0 0 0 0 7340032 5242880 5242880 0.1 0.4 0 0 0
+2097152 0 0 0 0 7864320 5242880 5242880 0.1 0.5 0 0 0
+2097152 0 0 0 0 8388608 5242880 5242880 0.1 0.6 0 0 0
+2097152 0 0 0 0 8912896 5242880 5242880 0.1 0.7 0 0 0
+2097152 0 0 0 0 9437184 5242880 5242880 0.1 0.8 0 0 0
+2097152 0 0 0 0 9961472 5242880 5242880 0.1 0.9 0 0 0
+2097152 0 0 0 0 10485760 5242880 5242880 0.1 1 0 0 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 0
+2097152 0 1 0 0 2883584 5242880 5242880 0.1 -0.45 0 0 0
+2097152 0 1 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 0
+2097152 0 1 0 0 3407872 5242880 5242880 0.1 -0.35 0 0 0
+2097152 0 1 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 0
+2097152 0 1 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 0
+2097152 0 1 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 0
+2097152 0 1 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 0
+2097152 0 1 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 0
+2097152 0 1 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 0
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5505024 5242880 5242880 0.1 0.05 0 0 0
+2097152 0 1 0 0 5767168 5242880 5242880 0.1 0.1 0 0 0
+2097152 0 1 0 0 6029312 5242880 5242880 0.1 0.15 0 0 0
+2097152 0 1 0 0 6291456 5242880 5242880 0.1 0.2 0 0 0
+2097152 0 1 0 0 6553600 5242880 5242880 0.1 0.25 0 0 0
+2097152 0 1 0 0 6815744 5242880 5242880 0.1 0.3 0 0 0
+2097152 0 1 0 0 7077888 5242880 5242880 0.1 0.35 0 0 0
+2097152 0 1 0 0 7340032 5242880 5242880 0.1 0.4 0 0 0
+2097152 0 1 0 0 7602176 5242880 5242880 0.1 0.45 0 0 0
+2097152 0 1 0 0 7864320 5242880 5242880 0.1 0.5 0 0 0
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 0
+2097152 0 2 0 0 4063232 5242880 5242880 0.1 -0.225 0 0 0
+2097152 0 2 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 0
+2097152 0 2 0 0 4325376 5242880 5242880 0.1 -0.175 0 0 0
+2097152 0 2 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 0
+2097152 0 2 0 0 4587520 5242880 5242880 0.1 -0.125 0 0 0
+2097152 0 2 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 0
+2097152 0 2 0 0 4849664 5242880 5242880 0.1 -0.075 0 0 0
+2097152 0 2 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 0
+2097152 0 2 0 0 5111808 5242880 5242880 0.1 -0.025 0 0 0
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5373952 5242880 5242880 0.1 0.025 0 0 0
+2097152 0 2 0 0 5505024 5242880 5242880 0.1 0.05 0 0 0
+2097152 0 2 0 0 5636096 5242880 5242880 0.1 0.075 0 0 0
+2097152 0 2 0 0 5767168 5242880 5242880 0.1 0.1 0 0 0
+2097152 0 2 0 0 5898240 5242880 5242880 0.1 0.125 0 0 0
+2097152 0 2 0 0 6029312 5242880 5242880 0.1 0.15 0 0 0
+2097152 0 2 0 0 6160384 5242880 5242880 0.1 0.175 0 0 0
+2097152 0 2 0 0 6291456 5242880 5242880 0.1 0.2 0 0 0
+2097152 0 2 0 0 6422528 5242880 5242880 0.1 0.225 0 0 0
+2097152 0 2 0 0 6553600 5242880 5242880 0.1 0.25 0 0 0
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.y.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.y.asc
new file mode 100644
index 000000000..a43d3a4c4
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.y.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phiy y (phiy)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 0 5242880 0 0 -1 0 0
+0 0 0 0 0 5242880 524288 5242880 0 0 -0.9 0 0
+0 0 0 0 0 5242880 1048576 5242880 0 0 -0.8 0 0
+0 0 0 0 0 5242880 1572864 5242880 0 0 -0.7 0 0
+0 0 0 0 0 5242880 2097152 5242880 0 0 -0.6 0 0
+0 0 0 0 0 5242880 2621440 5242880 0 0 -0.5 0 0
+0 0 0 0 0 5242880 3145728 5242880 0 0 -0.4 0 0
+0 0 0 0 0 5242880 3670016 5242880 0 0 -0.3 0 0
+0 0 0 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 0 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 0 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 0 0 0 5242880 6815744 5242880 0 0 0.3 0 0
+0 0 0 0 0 5242880 7340032 5242880 0 0 0.4 0 0
+0 0 0 0 0 5242880 7864320 5242880 0 0 0.5 0 0
+0 0 0 0 0 5242880 8388608 5242880 0 0 0.6 0 0
+0 0 0 0 0 5242880 8912896 5242880 0 0 0.7 0 0
+0 0 0 0 0 5242880 9437184 5242880 0 0 0.8 0 0
+0 0 0 0 0 5242880 9961472 5242880 0 0 0.9 0 0
+0 0 0 0 0 5242880 10485760 5242880 0 0 1 0 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 2621440 5242880 0 0 -0.5 0 0
+0 0 1 0 0 5242880 2883584 5242880 0 0 -0.45 0 0
+0 0 1 0 0 5242880 3145728 5242880 0 0 -0.4 0 0
+0 0 1 0 0 5242880 3407872 5242880 0 0 -0.35 0 0
+0 0 1 0 0 5242880 3670016 5242880 0 0 -0.3 0 0
+0 0 1 0 0 5242880 3932160 5242880 0 0 -0.25 0 0
+0 0 1 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 1 0 0 5242880 4456448 5242880 0 0 -0.15 0 0
+0 0 1 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 1 0 0 5242880 4980736 5242880 0 0 -0.05 0 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5242880 5505024 5242880 0 0 0.05 0 0
+0 0 1 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 1 0 0 5242880 6029312 5242880 0 0 0.15 0 0
+0 0 1 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 1 0 0 5242880 6553600 5242880 0 0 0.25 0 0
+0 0 1 0 0 5242880 6815744 5242880 0 0 0.3 0 0
+0 0 1 0 0 5242880 7077888 5242880 0 0 0.35 0 0
+0 0 1 0 0 5242880 7340032 5242880 0 0 0.4 0 0
+0 0 1 0 0 5242880 7602176 5242880 0 0 0.45 0 0
+0 0 1 0 0 5242880 7864320 5242880 0 0 0.5 0 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 3932160 5242880 0 0 -0.25 0 0
+0 0 2 0 0 5242880 4063232 5242880 0 0 -0.225 0 0
+0 0 2 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 2 0 0 5242880 4325376 5242880 0 0 -0.175 0 0
+0 0 2 0 0 5242880 4456448 5242880 0 0 -0.15 0 0
+0 0 2 0 0 5242880 4587520 5242880 0 0 -0.125 0 0
+0 0 2 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 2 0 0 5242880 4849664 5242880 0 0 -0.075 0 0
+0 0 2 0 0 5242880 4980736 5242880 0 0 -0.05 0 0
+0 0 2 0 0 5242880 5111808 5242880 0 0 -0.025 0 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5242880 5373952 5242880 0 0 0.025 0 0
+0 0 2 0 0 5242880 5505024 5242880 0 0 0.05 0 0
+0 0 2 0 0 5242880 5636096 5242880 0 0 0.075 0 0
+0 0 2 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 2 0 0 5242880 5898240 5242880 0 0 0.125 0 0
+0 0 2 0 0 5242880 6029312 5242880 0 0 0.15 0 0
+0 0 2 0 0 5242880 6160384 5242880 0 0 0.175 0 0
+0 0 2 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 2 0 0 5242880 6422528 5242880 0 0 0.225 0 0
+0 0 2 0 0 5242880 6553600 5242880 0 0 0.25 0 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 3932160 5242880 0.00625 0 -0.25 0 8.51287040805251e-10
+131072 0 2 0 0 5242880 4063232 5242880 0.00625 0 -0.225 0 4.78848960452953e-10
+131072 0 2 0 0 5242880 4194304 5242880 0.00625 0 -0.2 0 0
+131072 0 2 0 0 5242880 4325376 5242880 0.00625 0 -0.175 0 2.43032142559095e-09
+131072 0 2 0 0 5242880 4456448 5242880 0.00625 0 -0.15 0 0
+131072 0 2 0 0 5242880 4587520 5242880 0.00625 0 -0.125 0 -2.23517417907715e-08
+131072 0 2 0 0 5242880 4718592 5242880 0.00625 0 -0.1 0 0
+131072 0 2 0 0 5242880 4849664 5242880 0.00625 0 -0.075 0 0
+131072 0 2 0 0 5242880 4980736 5242880 0.00625 0 -0.05 0 0
+131072 0 2 0 0 5242880 5111808 5242880 0.00625 0 -0.025 0 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5242880 5373952 5242880 0.00625 0 0.025 0 0
+131072 0 2 0 0 5242880 5505024 5242880 0.00625 0 0.05 0 0
+131072 0 2 0 0 5242880 5636096 5242880 0.00625 0 0.075 0 0
+131072 0 2 0 0 5242880 5767168 5242880 0.00625 0 0.1 0 0
+131072 0 2 0 0 5242880 5898240 5242880 0.00625 0 0.125 0 2.23517417907715e-08
+131072 0 2 0 0 5242880 6029312 5242880 0.00625 0 0.15 0 0
+131072 0 2 0 0 5242880 6160384 5242880 0.00625 0 0.175 0 -2.43032142559095e-09
+131072 0 2 0 0 5242880 6291456 5242880 0.00625 0 0.2 0 0
+131072 0 2 0 0 5242880 6422528 5242880 0.00625 0 0.225 0 -4.78848960452953e-10
+131072 0 2 0 0 5242880 6553600 5242880 0.00625 0 0.25 0 -8.51287040805251e-10
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 2621440 5242880 0.0125 0 -0.5 0 0
+262144 0 1 0 0 5242880 2883584 5242880 0.0125 0 -0.45 0 0
+262144 0 1 0 0 5242880 3145728 5242880 0.0125 0 -0.4 0 0
+262144 0 1 0 0 5242880 3407872 5242880 0.0125 0 -0.35 0 1.94025536558925e-11
+262144 0 1 0 0 5242880 3670016 5242880 0.0125 0 -0.3 0 0
+262144 0 1 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 2.27009877548067e-09
+262144 0 1 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 0
+262144 0 1 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 0
+262144 0 1 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 3.88051095886096e-11
+262144 0 1 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 0
+262144 0 1 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 -3.88051095886096e-11
+262144 0 1 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 0
+262144 0 1 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 0
+262144 0 1 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 -2.27009877548067e-09
+262144 0 1 0 0 5242880 6815744 5242880 0.0125 0 0.3 0 0
+262144 0 1 0 0 5242880 7077888 5242880 0.0125 0 0.35 0 -1.94025536558925e-11
+262144 0 1 0 0 5242880 7340032 5242880 0.0125 0 0.4 0 0
+262144 0 1 0 0 5242880 7602176 5242880 0.0125 0 0.45 0 0
+262144 0 1 0 0 5242880 7864320 5242880 0.0125 0 0.5 0 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 2.27009877548067e-09
+262144 0 2 0 0 5242880 4063232 5242880 0.0125 0 -0.225 0 1.27693056120788e-09
+262144 0 2 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 0
+262144 0 2 0 0 5242880 4325376 5242880 0.0125 0 -0.175 0 -1.4430649281683e-10
+262144 0 2 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 0
+262144 0 2 0 0 5242880 4587520 5242880 0.0125 0 -0.125 0 2.18278741435929e-11
+262144 0 2 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 3.88051095886096e-11
+262144 0 2 0 0 5242880 4849664 5242880 0.0125 0 -0.075 0 -1.74622982740402e-10
+262144 0 2 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 0
+262144 0 2 0 0 5242880 5111808 5242880 0.0125 0 -0.025 0 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5242880 5373952 5242880 0.0125 0 0.025 0 0
+262144 0 2 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 0
+262144 0 2 0 0 5242880 5636096 5242880 0.0125 0 0.075 0 1.74622982740402e-10
+262144 0 2 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 -3.88051095886096e-11
+262144 0 2 0 0 5242880 5898240 5242880 0.0125 0 0.125 0 -2.18278741435929e-11
+262144 0 2 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 0
+262144 0 2 0 0 5242880 6160384 5242880 0.0125 0 0.175 0 1.4430649281683e-10
+262144 0 2 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 0
+262144 0 2 0 0 5242880 6422528 5242880 0.0125 0 0.225 0 -1.27693056120788e-09
+262144 0 2 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 -2.27009877548067e-09
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 3932160 5242880 0.01875 0 -0.25 0 1.7025740816105e-09
+393216 0 2 0 0 5242880 4063232 5242880 0.01875 0 -0.225 0 9.59262773157592e-10
+393216 0 2 0 0 5242880 4194304 5242880 0.01875 0 -0.2 0 1.80060419699424e-11
+393216 0 2 0 0 5242880 4325376 5242880 0.01875 0 -0.175 0 -2.20306178830874e-11
+393216 0 2 0 0 5242880 4456448 5242880 0.01875 0 -0.15 0 1.37016741702522e-10
+393216 0 2 0 0 5242880 4587520 5242880 0.01875 0 -0.125 0 1.09369182438833e-10
+393216 0 2 0 0 5242880 4718592 5242880 0.01875 0 -0.1 0 -1.55569968944095e-10
+393216 0 2 0 0 5242880 4849664 5242880 0.01875 0 -0.075 0 -5.14533776696524e-10
+393216 0 2 0 0 5242880 4980736 5242880 0.01875 0 -0.05 0 -1.05031724058809e-14
+393216 0 2 0 0 5242880 5111808 5242880 0.01875 0 -0.025 0 -3.1663930736651e-12
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5242880 5373952 5242880 0.01875 0 0.025 0 3.1663930736651e-12
+393216 0 2 0 0 5242880 5505024 5242880 0.01875 0 0.05 0 1.05031724058809e-14
+393216 0 2 0 0 5242880 5636096 5242880 0.01875 0 0.075 0 5.14533776696524e-10
+393216 0 2 0 0 5242880 5767168 5242880 0.01875 0 0.1 0 1.55569968944095e-10
+393216 0 2 0 0 5242880 5898240 5242880 0.01875 0 0.125 0 -1.09369182438833e-10
+393216 0 2 0 0 5242880 6029312 5242880 0.01875 0 0.15 0 -1.37016741702522e-10
+393216 0 2 0 0 5242880 6160384 5242880 0.01875 0 0.175 0 2.20306178830874e-11
+393216 0 2 0 0 5242880 6291456 5242880 0.01875 0 0.2 0 -1.80060419699424e-11
+393216 0 2 0 0 5242880 6422528 5242880 0.01875 0 0.225 0 -9.59262773157592e-10
+393216 0 2 0 0 5242880 6553600 5242880 0.01875 0 0.25 0 -1.7025740816105e-09
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 0 5242880 0.025 0 -1 0 0
+524288 0 0 0 0 5242880 524288 5242880 0.025 0 -0.9 0 0
+524288 0 0 0 0 5242880 1048576 5242880 0.025 0 -0.8 0 0
+524288 0 0 0 0 5242880 1572864 5242880 0.025 0 -0.7 0 0
+524288 0 0 0 0 5242880 2097152 5242880 0.025 0 -0.6 0 0
+524288 0 0 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 0
+524288 0 0 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 0
+524288 0 0 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 0
+524288 0 0 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 4.80161119198463e-11
+524288 0 0 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 -3.71976833594504e-10
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5242880 5767168 5242880 0.025 0 0.1 0 3.71976833594504e-10
+524288 0 0 0 0 5242880 6291456 5242880 0.025 0 0.2 0 -4.80161119198463e-11
+524288 0 0 0 0 5242880 6815744 5242880 0.025 0 0.3 0 0
+524288 0 0 0 0 5242880 7340032 5242880 0.025 0 0.4 0 0
+524288 0 0 0 0 5242880 7864320 5242880 0.025 0 0.5 0 0
+524288 0 0 0 0 5242880 8388608 5242880 0.025 0 0.6 0 0
+524288 0 0 0 0 5242880 8912896 5242880 0.025 0 0.7 0 0
+524288 0 0 0 0 5242880 9437184 5242880 0.025 0 0.8 0 0
+524288 0 0 0 0 5242880 9961472 5242880 0.025 0 0.9 0 0
+524288 0 0 0 0 5242880 10485760 5242880 0.025 0 1 0 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 0
+524288 0 1 0 0 5242880 2883584 5242880 0.025 0 -0.45 0 0
+524288 0 1 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 0
+524288 0 1 0 0 5242880 3407872 5242880 0.025 0 -0.35 0 -3.0010069949904e-12
+524288 0 1 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 0
+524288 0 1 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 5.02576150545701e-11
+524288 0 1 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 4.80161119198463e-11
+524288 0 1 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 3.65377977873393e-10
+524288 0 1 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 -3.71976833594504e-10
+524288 0 1 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 -2.64427137593633e-12
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5242880 5505024 5242880 0.025 0 0.05 0 2.64427137593633e-12
+524288 0 1 0 0 5242880 5767168 5242880 0.025 0 0.1 0 3.71976833594504e-10
+524288 0 1 0 0 5242880 6029312 5242880 0.025 0 0.15 0 -3.65377977873393e-10
+524288 0 1 0 0 5242880 6291456 5242880 0.025 0 0.2 0 -4.80161119198463e-11
+524288 0 1 0 0 5242880 6553600 5242880 0.025 0 0.25 0 -5.02576150545701e-11
+524288 0 1 0 0 5242880 6815744 5242880 0.025 0 0.3 0 0
+524288 0 1 0 0 5242880 7077888 5242880 0.025 0 0.35 0 3.0010069949904e-12
+524288 0 1 0 0 5242880 7340032 5242880 0.025 0 0.4 0 0
+524288 0 1 0 0 5242880 7602176 5242880 0.025 0 0.45 0 0
+524288 0 1 0 0 5242880 7864320 5242880 0.025 0 0.5 0 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 5.02576150545701e-11
+524288 0 2 0 0 5242880 4063232 5242880 0.025 0 -0.225 0 3.24428478060221e-11
+524288 0 2 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 4.80161119198463e-11
+524288 0 2 0 0 5242880 4325376 5242880 0.025 0 -0.175 0 2.52641626667443e-10
+524288 0 2 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 3.65377977873393e-10
+524288 0 2 0 0 5242880 4587520 5242880 0.025 0 -0.125 0 -6.54759637711926e-12
+524288 0 2 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 -3.71976833594504e-10
+524288 0 2 0 0 5242880 4849664 5242880 0.025 0 -0.075 0 -8.34775128651562e-10
+524288 0 2 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 -2.64427137593633e-12
+524288 0 2 0 0 5242880 5111808 5242880 0.025 0 -0.025 0 -1.42062519155791e-11
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5242880 5373952 5242880 0.025 0 0.025 0 1.42062519155791e-11
+524288 0 2 0 0 5242880 5505024 5242880 0.025 0 0.05 0 2.64427137593633e-12
+524288 0 2 0 0 5242880 5636096 5242880 0.025 0 0.075 0 8.34775128651562e-10
+524288 0 2 0 0 5242880 5767168 5242880 0.025 0 0.1 0 3.71976833594504e-10
+524288 0 2 0 0 5242880 5898240 5242880 0.025 0 0.125 0 6.54759637711926e-12
+524288 0 2 0 0 5242880 6029312 5242880 0.025 0 0.15 0 -3.65377977873393e-10
+524288 0 2 0 0 5242880 6160384 5242880 0.025 0 0.175 0 -2.52641626667443e-10
+524288 0 2 0 0 5242880 6291456 5242880 0.025 0 0.2 0 -4.80161119198463e-11
+524288 0 2 0 0 5242880 6422528 5242880 0.025 0 0.225 0 -3.24428478060221e-11
+524288 0 2 0 0 5242880 6553600 5242880 0.025 0 0.25 0 -5.02576150545701e-11
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 3932160 5242880 0.03125 0 -0.25 0 -2.03283184165604e-10
+655360 0 2 0 0 5242880 4063232 5242880 0.03125 0 -0.225 0 -1.10218192534204e-10
+655360 0 2 0 0 5242880 4194304 5242880 0.03125 0 -0.2 0 6.71560801759896e-11
+655360 0 2 0 0 5242880 4325376 5242880 0.03125 0 -0.175 0 3.81864711955078e-10
+655360 0 2 0 0 5242880 4456448 5242880 0.03125 0 -0.15 0 5.43200962509205e-10
+655360 0 2 0 0 5242880 4587520 5242880 0.03125 0 -0.125 0 7.64770232818818e-11
+655360 0 2 0 0 5242880 4718592 5242880 0.03125 0 -0.1 0 -5.39370936802896e-10
+655360 0 2 0 0 5242880 4849664 5242880 0.03125 0 -0.075 0 -1.12595637443332e-09
+655360 0 2 0 0 5242880 4980736 5242880 0.03125 0 -0.05 0 -1.12561372260049e-11
+655360 0 2 0 0 5242880 5111808 5242880 0.03125 0 -0.025 0 -3.75721814771524e-11
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5242880 5373952 5242880 0.03125 0 0.025 0 3.75721814771524e-11
+655360 0 2 0 0 5242880 5505024 5242880 0.03125 0 0.05 0 1.12561372260049e-11
+655360 0 2 0 0 5242880 5636096 5242880 0.03125 0 0.075 0 1.12595637443332e-09
+655360 0 2 0 0 5242880 5767168 5242880 0.03125 0 0.1 0 5.39370936802896e-10
+655360 0 2 0 0 5242880 5898240 5242880 0.03125 0 0.125 0 -7.64770232818818e-11
+655360 0 2 0 0 5242880 6029312 5242880 0.03125 0 0.15 0 -5.43200962509205e-10
+655360 0 2 0 0 5242880 6160384 5242880 0.03125 0 0.175 0 -3.81864711955078e-10
+655360 0 2 0 0 5242880 6291456 5242880 0.03125 0 0.2 0 -6.71560801759896e-11
+655360 0 2 0 0 5242880 6422528 5242880 0.03125 0 0.225 0 1.10218192534204e-10
+655360 0 2 0 0 5242880 6553600 5242880 0.03125 0 0.25 0 2.03283184165604e-10
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 2621440 5242880 0.0375 0 -0.5 0 -3.17246229286638e-14
+786432 0 1 0 0 5242880 2883584 5242880 0.0375 0 -0.45 0 1.04805866676244e-12
+786432 0 1 0 0 5242880 3145728 5242880 0.0375 0 -0.4 0 4.56771773182929e-13
+786432 0 1 0 0 5242880 3407872 5242880 0.0375 0 -0.35 0 -1.77414430260585e-11
+786432 0 1 0 0 5242880 3670016 5242880 0.0375 0 -0.3 0 -1.29435143159107e-11
+786432 0 1 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 1.14095870609471e-10
+786432 0 1 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 8.3050656629613e-11
+786432 0 1 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 7.1777994427776e-10
+786432 0 1 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 -6.90806513844085e-10
+786432 0 1 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 -2.86001292093552e-11
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 2.86001292093552e-11
+786432 0 1 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 6.90806513844085e-10
+786432 0 1 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 -7.1777994427776e-10
+786432 0 1 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 -8.3050656629613e-11
+786432 0 1 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 -1.14095870609471e-10
+786432 0 1 0 0 5242880 6815744 5242880 0.0375 0 0.3 0 1.29435143159107e-11
+786432 0 1 0 0 5242880 7077888 5242880 0.0375 0 0.35 0 1.77414430260585e-11
+786432 0 1 0 0 5242880 7340032 5242880 0.0375 0 0.4 0 -4.56771773182929e-13
+786432 0 1 0 0 5242880 7602176 5242880 0.0375 0 0.45 0 -1.04805866676244e-12
+786432 0 1 0 0 5242880 7864320 5242880 0.0375 0 0.5 0 3.17246229286638e-14
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 1.14095870609471e-10
+786432 0 2 0 0 5242880 4063232 5242880 0.0375 0 -0.225 0 6.68426446993694e-11
+786432 0 2 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 8.3050656629613e-11
+786432 0 2 0 0 5242880 4325376 5242880 0.0375 0 -0.175 0 4.8651162821256e-10
+786432 0 2 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 7.1777994427776e-10
+786432 0 2 0 0 5242880 4587520 5242880 0.0375 0 -0.125 0 1.17693966551757e-11
+786432 0 2 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 -6.90806513844085e-10
+786432 0 2 0 0 5242880 4849664 5242880 0.0375 0 -0.075 0 -1.37983248438278e-09
+786432 0 2 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 -2.86001292093552e-11
+786432 0 2 0 0 5242880 5111808 5242880 0.0375 0 -0.025 0 -7.6696357598216e-11
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5242880 5373952 5242880 0.0375 0 0.025 0 7.6696357598216e-11
+786432 0 2 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 2.86001292093552e-11
+786432 0 2 0 0 5242880 5636096 5242880 0.0375 0 0.075 0 1.37983248438278e-09
+786432 0 2 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 6.90806513844085e-10
+786432 0 2 0 0 5242880 5898240 5242880 0.0375 0 0.125 0 -1.17693966551757e-11
+786432 0 2 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 -7.1777994427776e-10
+786432 0 2 0 0 5242880 6160384 5242880 0.0375 0 0.175 0 -4.8651162821256e-10
+786432 0 2 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 -8.3050656629613e-11
+786432 0 2 0 0 5242880 6422528 5242880 0.0375 0 0.225 0 -6.68426446993694e-11
+786432 0 2 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 -1.14095870609471e-10
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 3932160 5242880 0.04375 0 -0.25 0 1.55692360393826e-10
+917504 0 2 0 0 5242880 4063232 5242880 0.04375 0 -0.225 0 8.98292153340505e-11
+917504 0 2 0 0 5242880 4194304 5242880 0.04375 0 -0.2 0 9.87482959985408e-11
+917504 0 2 0 0 5242880 4325376 5242880 0.04375 0 -0.175 0 5.82061050143167e-10
+917504 0 2 0 0 5242880 4456448 5242880 0.04375 0 -0.15 0 8.7534961223934e-10
+917504 0 2 0 0 5242880 4587520 5242880 0.04375 0 -0.125 0 9.97820270600842e-11
+917504 0 2 0 0 5242880 4718592 5242880 0.04375 0 -0.1 0 -7.99350738378557e-10
+917504 0 2 0 0 5242880 4849664 5242880 0.04375 0 -0.075 0 -1.58914841471199e-09
+917504 0 2 0 0 5242880 4980736 5242880 0.04375 0 -0.05 0 -5.6796509625053e-11
+917504 0 2 0 0 5242880 5111808 5242880 0.04375 0 -0.025 0 -1.33697386495157e-10
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5242880 5373952 5242880 0.04375 0 0.025 0 1.33697386495157e-10
+917504 0 2 0 0 5242880 5505024 5242880 0.04375 0 0.05 0 5.6796509625053e-11
+917504 0 2 0 0 5242880 5636096 5242880 0.04375 0 0.075 0 1.58914841471199e-09
+917504 0 2 0 0 5242880 5767168 5242880 0.04375 0 0.1 0 7.99350738378557e-10
+917504 0 2 0 0 5242880 5898240 5242880 0.04375 0 0.125 0 -9.97820270600842e-11
+917504 0 2 0 0 5242880 6029312 5242880 0.04375 0 0.15 0 -8.7534961223934e-10
+917504 0 2 0 0 5242880 6160384 5242880 0.04375 0 0.175 0 -5.82061050143167e-10
+917504 0 2 0 0 5242880 6291456 5242880 0.04375 0 0.2 0 -9.87482959985408e-11
+917504 0 2 0 0 5242880 6422528 5242880 0.04375 0 0.225 0 -8.98292153340505e-11
+917504 0 2 0 0 5242880 6553600 5242880 0.04375 0 0.25 0 -1.55692360393826e-10
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 0 5242880 0.05 0 -1 0 0
+1048576 0 0 0 0 5242880 524288 5242880 0.05 0 -0.9 0 0
+1048576 0 0 0 0 5242880 1048576 5242880 0.05 0 -0.8 0 0
+1048576 0 0 0 0 5242880 1572864 5242880 0.05 0 -0.7 0 0
+1048576 0 0 0 0 5242880 2097152 5242880 0.05 0 -0.6 0 0
+1048576 0 0 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 -8.45989944764369e-14
+1048576 0 0 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 1.21805806182114e-12
+1048576 0 0 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 -3.45160381757618e-11
+1048576 0 0 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 1.13232846710165e-10
+1048576 0 0 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 -8.77529424125889e-10
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5242880 5767168 5242880 0.05 0 0.1 0 8.77529424125889e-10
+1048576 0 0 0 0 5242880 6291456 5242880 0.05 0 0.2 0 -1.13232846710165e-10
+1048576 0 0 0 0 5242880 6815744 5242880 0.05 0 0.3 0 3.45160381757618e-11
+1048576 0 0 0 0 5242880 7340032 5242880 0.05 0 0.4 0 -1.21805806182114e-12
+1048576 0 0 0 0 5242880 7864320 5242880 0.05 0 0.5 0 8.45989944764369e-14
+1048576 0 0 0 0 5242880 8388608 5242880 0.05 0 0.6 0 0
+1048576 0 0 0 0 5242880 8912896 5242880 0.05 0 0.7 0 0
+1048576 0 0 0 0 5242880 9437184 5242880 0.05 0 0.8 0 0
+1048576 0 0 0 0 5242880 9961472 5242880 0.05 0 0.9 0 0
+1048576 0 0 0 0 5242880 10485760 5242880 0.05 0 1 0 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 -8.45989944764369e-14
+1048576 0 1 0 0 5242880 2883584 5242880 0.05 0 -0.45 0 2.79482311136651e-12
+1048576 0 1 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 1.21805806182114e-12
+1048576 0 1 0 0 5242880 3407872 5242880 0.05 0 -0.35 0 -2.58018792963222e-11
+1048576 0 1 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 -3.45160381757618e-11
+1048576 0 1 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 9.90476651796061e-11
+1048576 0 1 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 1.13232846710165e-10
+1048576 0 1 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 1.02049840337385e-09
+1048576 0 1 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 -8.77529424125889e-10
+1048576 0 1 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 -9.69948542780171e-11
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5242880 5505024 5242880 0.05 0 0.05 0 9.69948542780171e-11
+1048576 0 1 0 0 5242880 5767168 5242880 0.05 0 0.1 0 8.77529424125889e-10
+1048576 0 1 0 0 5242880 6029312 5242880 0.05 0 0.15 0 -1.02049840337385e-09
+1048576 0 1 0 0 5242880 6291456 5242880 0.05 0 0.2 0 -1.13232846710165e-10
+1048576 0 1 0 0 5242880 6553600 5242880 0.05 0 0.25 0 -9.90476651796061e-11
+1048576 0 1 0 0 5242880 6815744 5242880 0.05 0 0.3 0 3.45160381757618e-11
+1048576 0 1 0 0 5242880 7077888 5242880 0.05 0 0.35 0 2.58018792963222e-11
+1048576 0 1 0 0 5242880 7340032 5242880 0.05 0 0.4 0 -1.21805806182114e-12
+1048576 0 1 0 0 5242880 7602176 5242880 0.05 0 0.45 0 -2.79482311136651e-12
+1048576 0 1 0 0 5242880 7864320 5242880 0.05 0 0.5 0 8.45989944764369e-14
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 9.90476651796061e-11
+1048576 0 2 0 0 5242880 4063232 5242880 0.05 0 -0.225 0 5.77838901131156e-11
+1048576 0 2 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 1.13232846710165e-10
+1048576 0 2 0 0 5242880 4325376 5242880 0.05 0 -0.175 0 6.86378938106402e-10
+1048576 0 2 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 1.02049840337385e-09
+1048576 0 2 0 0 5242880 4587520 5242880 0.05 0 -0.125 0 7.940517629997e-11
+1048576 0 2 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 -8.77529424125889e-10
+1048576 0 2 0 0 5242880 4849664 5242880 0.05 0 -0.075 0 -1.74812777216834e-09
+1048576 0 2 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 -9.69948542780171e-11
+1048576 0 2 0 0 5242880 5111808 5242880 0.05 0 -0.025 0 -2.09176403050589e-10
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5242880 5373952 5242880 0.05 0 0.025 0 2.09176403050589e-10
+1048576 0 2 0 0 5242880 5505024 5242880 0.05 0 0.05 0 9.69948542780171e-11
+1048576 0 2 0 0 5242880 5636096 5242880 0.05 0 0.075 0 1.74812777216834e-09
+1048576 0 2 0 0 5242880 5767168 5242880 0.05 0 0.1 0 8.77529424125889e-10
+1048576 0 2 0 0 5242880 5898240 5242880 0.05 0 0.125 0 -7.940517629997e-11
+1048576 0 2 0 0 5242880 6029312 5242880 0.05 0 0.15 0 -1.02049840337385e-09
+1048576 0 2 0 0 5242880 6160384 5242880 0.05 0 0.175 0 -6.86378938106402e-10
+1048576 0 2 0 0 5242880 6291456 5242880 0.05 0 0.2 0 -1.13232846710165e-10
+1048576 0 2 0 0 5242880 6422528 5242880 0.05 0 0.225 0 -5.77838901131156e-11
+1048576 0 2 0 0 5242880 6553600 5242880 0.05 0 0.25 0 -9.90476651796061e-11
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 3932160 5242880 0.05625 0 -0.25 0 1.16100548303662e-10
+1179648 0 2 0 0 5242880 4063232 5242880 0.05625 0 -0.225 0 6.10234773446789e-11
+1179648 0 2 0 0 5242880 4194304 5242880 0.05625 0 -0.2 0 1.15569069071564e-10
+1179648 0 2 0 0 5242880 4325376 5242880 0.05625 0 -0.175 0 7.57218084160716e-10
+1179648 0 2 0 0 5242880 4456448 5242880 0.05625 0 -0.15 0 1.14978515973243e-09
+1179648 0 2 0 0 5242880 4587520 5242880 0.05625 0 -0.125 0 1.76389248042821e-10
+1179648 0 2 0 0 5242880 4718592 5242880 0.05625 0 -0.1 0 -9.02082302374948e-10
+1179648 0 2 0 0 5242880 4849664 5242880 0.05625 0 -0.075 0 -1.85227602700344e-09
+1179648 0 2 0 0 5242880 4980736 5242880 0.05625 0 -0.05 0 -1.4924199145024e-10
+1179648 0 2 0 0 5242880 5111808 5242880 0.05625 0 -0.025 0 -3.02089459928527e-10
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5242880 5373952 5242880 0.05625 0 0.025 0 3.02089459928527e-10
+1179648 0 2 0 0 5242880 5505024 5242880 0.05625 0 0.05 0 1.4924199145024e-10
+1179648 0 2 0 0 5242880 5636096 5242880 0.05625 0 0.075 0 1.85227602700344e-09
+1179648 0 2 0 0 5242880 5767168 5242880 0.05625 0 0.1 0 9.02082302374948e-10
+1179648 0 2 0 0 5242880 5898240 5242880 0.05625 0 0.125 0 -1.76389248042821e-10
+1179648 0 2 0 0 5242880 6029312 5242880 0.05625 0 0.15 0 -1.14978515973243e-09
+1179648 0 2 0 0 5242880 6160384 5242880 0.05625 0 0.175 0 -7.57218084160716e-10
+1179648 0 2 0 0 5242880 6291456 5242880 0.05625 0 0.2 0 -1.15569069071564e-10
+1179648 0 2 0 0 5242880 6422528 5242880 0.05625 0 0.225 0 -6.10234773446789e-11
+1179648 0 2 0 0 5242880 6553600 5242880 0.05625 0 0.25 0 -1.16100548303662e-10
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 2621440 5242880 0.0625 0 -0.5 0 -3.04437898501764e-13
+1310720 0 1 0 0 5242880 2883584 5242880 0.0625 0 -0.45 0 4.38967709837784e-12
+1310720 0 1 0 0 5242880 3145728 5242880 0.0625 0 -0.4 0 3.11205401726244e-12
+1310720 0 1 0 0 5242880 3407872 5242880 0.0625 0 -0.35 0 -3.66809800849549e-11
+1310720 0 1 0 0 5242880 3670016 5242880 0.0625 0 -0.3 0 -4.49737374078052e-11
+1310720 0 1 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 1.49538088653709e-10
+1310720 0 1 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 1.09402042980378e-10
+1310720 0 1 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 1.26435693396469e-09
+1310720 0 1 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 -8.82571386343993e-10
+1310720 0 1 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 -2.12154000385952e-10
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 2.12154000385952e-10
+1310720 0 1 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 8.82571386343993e-10
+1310720 0 1 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 -1.26435693396469e-09
+1310720 0 1 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 -1.09402042980378e-10
+1310720 0 1 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 -1.49538088653709e-10
+1310720 0 1 0 0 5242880 6815744 5242880 0.0625 0 0.3 0 4.49737374078052e-11
+1310720 0 1 0 0 5242880 7077888 5242880 0.0625 0 0.35 0 3.66809800849549e-11
+1310720 0 1 0 0 5242880 7340032 5242880 0.0625 0 0.4 0 -3.11205401726244e-12
+1310720 0 1 0 0 5242880 7602176 5242880 0.0625 0 0.45 0 -4.38967709837784e-12
+1310720 0 1 0 0 5242880 7864320 5242880 0.0625 0 0.5 0 3.04437898501764e-13
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 1.49538088653709e-10
+1310720 0 2 0 0 5242880 4063232 5242880 0.0625 0 -0.225 0 6.94423742593689e-11
+1310720 0 2 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 1.09402042980378e-10
+1310720 0 2 0 0 5242880 4325376 5242880 0.0625 0 -0.175 0 8.18554005637242e-10
+1310720 0 2 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 1.26435693396469e-09
+1310720 0 2 0 0 5242880 4587520 5242880 0.0625 0 -0.125 0 2.21176367874489e-10
+1310720 0 2 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 -8.82571386343993e-10
+1310720 0 2 0 0 5242880 4849664 5242880 0.0625 0 -0.075 0 -1.89863267700356e-09
+1310720 0 2 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 -2.12154000385952e-10
+1310720 0 2 0 0 5242880 5111808 5242880 0.0625 0 -0.025 0 -4.09720003295237e-10
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5242880 5373952 5242880 0.0625 0 0.025 0 4.09720003295237e-10
+1310720 0 2 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 2.12154000385952e-10
+1310720 0 2 0 0 5242880 5636096 5242880 0.0625 0 0.075 0 1.89863267700356e-09
+1310720 0 2 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 8.82571386343993e-10
+1310720 0 2 0 0 5242880 5898240 5242880 0.0625 0 0.125 0 -2.21176367874489e-10
+1310720 0 2 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 -1.26435693396469e-09
+1310720 0 2 0 0 5242880 6160384 5242880 0.0625 0 0.175 0 -8.18554005637242e-10
+1310720 0 2 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 -1.09402042980378e-10
+1310720 0 2 0 0 5242880 6422528 5242880 0.0625 0 0.225 0 -6.94423742593689e-11
+1310720 0 2 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 -1.49538088653709e-10
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 3932160 5242880 0.06875 0 -0.25 0 1.81307149993657e-10
+1441792 0 2 0 0 5242880 4063232 5242880 0.06875 0 -0.225 0 7.7773652278003e-11
+1441792 0 2 0 0 5242880 4194304 5242880 0.06875 0 -0.2 0 1.03259930987754e-10
+1441792 0 2 0 0 5242880 4325376 5242880 0.06875 0 -0.175 0 8.64003737307137e-10
+1441792 0 2 0 0 5242880 4456448 5242880 0.06875 0 -0.15 0 1.36522779944452e-09
+1441792 0 2 0 0 5242880 4587520 5242880 0.06875 0 -0.125 0 3.34266718489435e-10
+1441792 0 2 0 0 5242880 4718592 5242880 0.06875 0 -0.1 0 -8.06391597015418e-10
+1441792 0 2 0 0 5242880 4849664 5242880 0.06875 0 -0.075 0 -1.88530306181415e-09
+1441792 0 2 0 0 5242880 4980736 5242880 0.06875 0 -0.05 0 -2.82855130521546e-10
+1441792 0 2 0 0 5242880 5111808 5242880 0.06875 0 -0.025 0 -5.27734009270198e-10
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5242880 5373952 5242880 0.06875 0 0.025 0 5.27734009270198e-10
+1441792 0 2 0 0 5242880 5505024 5242880 0.06875 0 0.05 0 2.82855130521546e-10
+1441792 0 2 0 0 5242880 5636096 5242880 0.06875 0 0.075 0 1.88530306181415e-09
+1441792 0 2 0 0 5242880 5767168 5242880 0.06875 0 0.1 0 8.06391597015418e-10
+1441792 0 2 0 0 5242880 5898240 5242880 0.06875 0 0.125 0 -3.34266718489435e-10
+1441792 0 2 0 0 5242880 6029312 5242880 0.06875 0 0.15 0 -1.36522779944452e-09
+1441792 0 2 0 0 5242880 6160384 5242880 0.06875 0 0.175 0 -8.64003737307137e-10
+1441792 0 2 0 0 5242880 6291456 5242880 0.06875 0 0.2 0 -1.03259930987754e-10
+1441792 0 2 0 0 5242880 6422528 5242880 0.06875 0 0.225 0 -7.7773652278003e-11
+1441792 0 2 0 0 5242880 6553600 5242880 0.06875 0 0.25 0 -1.81307149993657e-10
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 0 5242880 0.075 0 -1 0 0
+1572864 0 0 0 0 5242880 524288 5242880 0.075 0 -0.9 0 0
+1572864 0 0 0 0 5242880 1048576 5242880 0.075 0 -0.8 0 0
+1572864 0 0 0 0 5242880 1572864 5242880 0.075 0 -0.7 0 -1.35771024053118e-15
+1572864 0 0 0 0 5242880 2097152 5242880 0.075 0 -0.6 0 1.98637402822518e-14
+1572864 0 0 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 -6.42636407051829e-13
+1572864 0 0 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 5.86269458905756e-12
+1572864 0 0 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 -5.08978900692902e-11
+1572864 0 0 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 9.43000122433091e-11
+1572864 0 0 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 -6.75829822660567e-10
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5242880 5767168 5242880 0.075 0 0.1 0 6.75829822660567e-10
+1572864 0 0 0 0 5242880 6291456 5242880 0.075 0 0.2 0 -9.43000122433091e-11
+1572864 0 0 0 0 5242880 6815744 5242880 0.075 0 0.3 0 5.08978900692902e-11
+1572864 0 0 0 0 5242880 7340032 5242880 0.075 0 0.4 0 -5.86269458905756e-12
+1572864 0 0 0 0 5242880 7864320 5242880 0.075 0 0.5 0 6.42636407051829e-13
+1572864 0 0 0 0 5242880 8388608 5242880 0.075 0 0.6 0 -1.98637402822518e-14
+1572864 0 0 0 0 5242880 8912896 5242880 0.075 0 0.7 0 1.35771024053118e-15
+1572864 0 0 0 0 5242880 9437184 5242880 0.075 0 0.8 0 0
+1572864 0 0 0 0 5242880 9961472 5242880 0.075 0 0.9 0 0
+1572864 0 0 0 0 5242880 10485760 5242880 0.075 0 1 0 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 -6.42636407051829e-13
+1572864 0 1 0 0 5242880 2883584 5242880 0.075 0 -0.45 0 6.11615937294123e-12
+1572864 0 1 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 5.86269458905756e-12
+1572864 0 1 0 0 5242880 3407872 5242880 0.075 0 -0.35 0 -3.1185883447397e-11
+1572864 0 1 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 -5.08978900692902e-11
+1572864 0 1 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 6.6286639227355e-11
+1572864 0 1 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 9.43000122433091e-11
+1572864 0 1 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 1.45205973171395e-09
+1572864 0 1 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 -6.75829822660567e-10
+1572864 0 1 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 -3.56851564501752e-10
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5242880 5505024 5242880 0.075 0 0.05 0 3.56851564501752e-10
+1572864 0 1 0 0 5242880 5767168 5242880 0.075 0 0.1 0 6.75829822660567e-10
+1572864 0 1 0 0 5242880 6029312 5242880 0.075 0 0.15 0 -1.45205973171395e-09
+1572864 0 1 0 0 5242880 6291456 5242880 0.075 0 0.2 0 -9.43000122433091e-11
+1572864 0 1 0 0 5242880 6553600 5242880 0.075 0 0.25 0 -6.6286639227355e-11
+1572864 0 1 0 0 5242880 6815744 5242880 0.075 0 0.3 0 5.08978900692902e-11
+1572864 0 1 0 0 5242880 7077888 5242880 0.075 0 0.35 0 3.1185883447397e-11
+1572864 0 1 0 0 5242880 7340032 5242880 0.075 0 0.4 0 -5.86269458905756e-12
+1572864 0 1 0 0 5242880 7602176 5242880 0.075 0 0.45 0 -6.11615937294123e-12
+1572864 0 1 0 0 5242880 7864320 5242880 0.075 0 0.5 0 6.42636407051829e-13
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 6.6286639227355e-11
+1572864 0 2 0 0 5242880 4063232 5242880 0.075 0 -0.225 0 2.75737634945702e-12
+1572864 0 2 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 9.43000122433091e-11
+1572864 0 2 0 0 5242880 4325376 5242880 0.075 0 -0.175 0 9.07923804940536e-10
+1572864 0 2 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 1.45205973171395e-09
+1572864 0 2 0 0 5242880 4587520 5242880 0.075 0 -0.125 0 4.53038795858683e-10
+1572864 0 2 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 -6.75829822660567e-10
+1572864 0 2 0 0 5242880 4849664 5242880 0.075 0 -0.075 0 -1.8117351507918e-09
+1572864 0 2 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 -3.56851564501752e-10
+1572864 0 2 0 0 5242880 5111808 5242880 0.075 0 -0.025 0 -6.50323827196727e-10
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5242880 5373952 5242880 0.075 0 0.025 0 6.50323827196727e-10
+1572864 0 2 0 0 5242880 5505024 5242880 0.075 0 0.05 0 3.56851564501752e-10
+1572864 0 2 0 0 5242880 5636096 5242880 0.075 0 0.075 0 1.8117351507918e-09
+1572864 0 2 0 0 5242880 5767168 5242880 0.075 0 0.1 0 6.75829822660567e-10
+1572864 0 2 0 0 5242880 5898240 5242880 0.075 0 0.125 0 -4.53038795858683e-10
+1572864 0 2 0 0 5242880 6029312 5242880 0.075 0 0.15 0 -1.45205973171395e-09
+1572864 0 2 0 0 5242880 6160384 5242880 0.075 0 0.175 0 -9.07923804940536e-10
+1572864 0 2 0 0 5242880 6291456 5242880 0.075 0 0.2 0 -9.43000122433091e-11
+1572864 0 2 0 0 5242880 6422528 5242880 0.075 0 0.225 0 -2.75737634945702e-12
+1572864 0 2 0 0 5242880 6553600 5242880 0.075 0 0.25 0 -6.6286639227355e-11
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 3932160 5242880 0.08125 0 -0.25 0 6.96062224198494e-11
+1703936 0 2 0 0 5242880 4063232 5242880 0.08125 0 -0.225 0 -1.10388286118339e-11
+1703936 0 2 0 0 5242880 4194304 5242880 0.08125 0 -0.2 0 7.52374759716012e-11
+1703936 0 2 0 0 5242880 4325376 5242880 0.08125 0 -0.175 0 9.3008305679465e-10
+1703936 0 2 0 0 5242880 4456448 5242880 0.08125 0 -0.15 0 1.52889975737573e-09
+1703936 0 2 0 0 5242880 4587520 5242880 0.08125 0 -0.125 0 5.89320989216024e-10
+1703936 0 2 0 0 5242880 4718592 5242880 0.08125 0 -0.1 0 -4.94475691873812e-10
+1703936 0 2 0 0 5242880 4849664 5242880 0.08125 0 -0.075 0 -1.67817614897074e-09
+1703936 0 2 0 0 5242880 4980736 5242880 0.08125 0 -0.05 0 -4.281106418443e-10
+1703936 0 2 0 0 5242880 5111808 5242880 0.08125 0 -0.025 0 -7.70426056284634e-10
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5242880 5373952 5242880 0.08125 0 0.025 0 7.70426056284634e-10
+1703936 0 2 0 0 5242880 5505024 5242880 0.08125 0 0.05 0 4.281106418443e-10
+1703936 0 2 0 0 5242880 5636096 5242880 0.08125 0 0.075 0 1.67817614897074e-09
+1703936 0 2 0 0 5242880 5767168 5242880 0.08125 0 0.1 0 4.94475691873812e-10
+1703936 0 2 0 0 5242880 5898240 5242880 0.08125 0 0.125 0 -5.89320989216024e-10
+1703936 0 2 0 0 5242880 6029312 5242880 0.08125 0 0.15 0 -1.52889975737573e-09
+1703936 0 2 0 0 5242880 6160384 5242880 0.08125 0 0.175 0 -9.3008305679465e-10
+1703936 0 2 0 0 5242880 6291456 5242880 0.08125 0 0.2 0 -7.52374759716012e-11
+1703936 0 2 0 0 5242880 6422528 5242880 0.08125 0 0.225 0 1.10388286118339e-11
+1703936 0 2 0 0 5242880 6553600 5242880 0.08125 0 0.25 0 -6.96062224198494e-11
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 2621440 5242880 0.0875 0 -0.5 0 -1.14959691072114e-12
+1835008 0 1 0 0 5242880 2883584 5242880 0.0875 0 -0.45 0 7.22601572039165e-12
+1835008 0 1 0 0 5242880 3145728 5242880 0.0875 0 -0.4 0 9.22265678178953e-12
+1835008 0 1 0 0 5242880 3407872 5242880 0.0875 0 -0.35 0 -2.91131087878753e-11
+1835008 0 1 0 0 5242880 3670016 5242880 0.0875 0 -0.3 0 -4.30227031662326e-11
+1835008 0 1 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 1.02889344216125e-10
+1835008 0 1 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 4.8500592431111e-11
+1835008 0 1 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 1.59439886756226e-09
+1835008 0 1 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 -2.54991675922393e-10
+1835008 0 1 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 -4.89255647569594e-10
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 4.89255647569594e-10
+1835008 0 1 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 2.54991675922393e-10
+1835008 0 1 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 -1.59439886756226e-09
+1835008 0 1 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 -4.8500592431111e-11
+1835008 0 1 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 -1.02889344216125e-10
+1835008 0 1 0 0 5242880 6815744 5242880 0.0875 0 0.3 0 4.30227031662326e-11
+1835008 0 1 0 0 5242880 7077888 5242880 0.0875 0 0.35 0 2.91131087878753e-11
+1835008 0 1 0 0 5242880 7340032 5242880 0.0875 0 0.4 0 -9.22265678178953e-12
+1835008 0 1 0 0 5242880 7602176 5242880 0.0875 0 0.45 0 -7.22601572039165e-12
+1835008 0 1 0 0 5242880 7864320 5242880 0.0875 0 0.5 0 1.14959691072114e-12
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 1.02889344216125e-10
+1835008 0 2 0 0 5242880 4063232 5242880 0.0875 0 -0.225 0 -1.18041709106814e-11
+1835008 0 2 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 4.8500592431111e-11
+1835008 0 2 0 0 5242880 4325376 5242880 0.0875 0 -0.175 0 9.33637341977913e-10
+1835008 0 2 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 1.59439886756226e-09
+1835008 0 2 0 0 5242880 4587520 5242880 0.0875 0 -0.125 0 7.8096373624358e-10
+1835008 0 2 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 -2.54991675922393e-10
+1835008 0 2 0 0 5242880 4849664 5242880 0.0875 0 -0.075 0 -1.48597429731427e-09
+1835008 0 2 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 -4.89255647569594e-10
+1835008 0 2 0 0 5242880 5111808 5242880 0.0875 0 -0.025 0 -8.8000695156835e-10
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5242880 5373952 5242880 0.0875 0 0.025 0 8.8000695156835e-10
+1835008 0 2 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 4.89255647569594e-10
+1835008 0 2 0 0 5242880 5636096 5242880 0.0875 0 0.075 0 1.48597429731427e-09
+1835008 0 2 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 2.54991675922393e-10
+1835008 0 2 0 0 5242880 5898240 5242880 0.0875 0 0.125 0 -7.8096373624358e-10
+1835008 0 2 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 -1.59439886756226e-09
+1835008 0 2 0 0 5242880 6160384 5242880 0.0875 0 0.175 0 -9.33637341977913e-10
+1835008 0 2 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 -4.8500592431111e-11
+1835008 0 2 0 0 5242880 6422528 5242880 0.0875 0 0.225 0 1.18041709106814e-11
+1835008 0 2 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 -1.02889344216125e-10
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 3932160 5242880 0.09375 0 -0.25 0 1.34436501201734e-10
+1966080 0 2 0 0 5242880 4063232 5242880 0.09375 0 -0.225 0 -1.03885846193062e-11
+1966080 0 2 0 0 5242880 4194304 5242880 0.09375 0 -0.2 0 2.69188612372906e-11
+1966080 0 2 0 0 5242880 4325376 5242880 0.09375 0 -0.175 0 9.38286274781054e-10
+1966080 0 2 0 0 5242880 4456448 5242880 0.09375 0 -0.15 0 1.65348419736237e-09
+1966080 0 2 0 0 5242880 4587520 5242880 0.09375 0 -0.125 0 9.42916074141038e-10
+1966080 0 2 0 0 5242880 4718592 5242880 0.09375 0 -0.1 0 2.10926091407752e-11
+1966080 0 2 0 0 5242880 4849664 5242880 0.09375 0 -0.075 0 -1.23712620703209e-09
+1966080 0 2 0 0 5242880 4980736 5242880 0.09375 0 -0.05 0 -5.31834245624345e-10
+1966080 0 2 0 0 5242880 5111808 5242880 0.09375 0 -0.025 0 -9.7040738870439e-10
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5242880 5373952 5242880 0.09375 0 0.025 0 9.7040738870439e-10
+1966080 0 2 0 0 5242880 5505024 5242880 0.09375 0 0.05 0 5.31834245624345e-10
+1966080 0 2 0 0 5242880 5636096 5242880 0.09375 0 0.075 0 1.23712620703209e-09
+1966080 0 2 0 0 5242880 5767168 5242880 0.09375 0 0.1 0 -2.10926091407752e-11
+1966080 0 2 0 0 5242880 5898240 5242880 0.09375 0 0.125 0 -9.42916074141038e-10
+1966080 0 2 0 0 5242880 6029312 5242880 0.09375 0 0.15 0 -1.65348419736237e-09
+1966080 0 2 0 0 5242880 6160384 5242880 0.09375 0 0.175 0 -9.38286274781054e-10
+1966080 0 2 0 0 5242880 6291456 5242880 0.09375 0 0.2 0 -2.69188612372906e-11
+1966080 0 2 0 0 5242880 6422528 5242880 0.09375 0 0.225 0 1.03885846193062e-11
+1966080 0 2 0 0 5242880 6553600 5242880 0.09375 0 0.25 0 -1.34436501201734e-10
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 0 5242880 0.1 0 -1 0 0
+2097152 0 0 0 0 5242880 524288 5242880 0.1 0 -0.9 0 -2.31296463463574e-17
+2097152 0 0 0 0 5242880 1048576 5242880 0.1 0 -0.8 0 3.46944695195361e-16
+2097152 0 0 0 0 5242880 1572864 5242880 0.1 0 -0.7 0 -1.33434929772136e-14
+2097152 0 0 0 0 5242880 2097152 5242880 0.1 0 -0.6 0 1.30913798320383e-13
+2097152 0 0 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 -1.80851861264486e-12
+2097152 0 0 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 1.32743815939307e-11
+2097152 0 0 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 -2.44367743632938e-11
+2097152 0 0 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 6.21578251832252e-12
+2097152 0 0 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 3.4977364523255e-10
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5242880 5767168 5242880 0.1 0 0.1 0 -3.4977364523255e-10
+2097152 0 0 0 0 5242880 6291456 5242880 0.1 0 0.2 0 -6.21578251832252e-12
+2097152 0 0 0 0 5242880 6815744 5242880 0.1 0 0.3 0 2.44367743632938e-11
+2097152 0 0 0 0 5242880 7340032 5242880 0.1 0 0.4 0 -1.32743815939307e-11
+2097152 0 0 0 0 5242880 7864320 5242880 0.1 0 0.5 0 1.80851861264486e-12
+2097152 0 0 0 0 5242880 8388608 5242880 0.1 0 0.6 0 -1.30913798320383e-13
+2097152 0 0 0 0 5242880 8912896 5242880 0.1 0 0.7 0 1.33434929772136e-14
+2097152 0 0 0 0 5242880 9437184 5242880 0.1 0 0.8 0 -3.46944695195361e-16
+2097152 0 0 0 0 5242880 9961472 5242880 0.1 0 0.9 0 2.31296463463574e-17
+2097152 0 0 0 0 5242880 10485760 5242880 0.1 0 1 0 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 -1.80851861264486e-12
+2097152 0 1 0 0 5242880 2883584 5242880 0.1 0 -0.45 0 7.96866421228411e-12
+2097152 0 1 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 1.32743815939307e-11
+2097152 0 1 0 0 5242880 3407872 5242880 0.1 0 -0.35 0 -6.55429992687158e-12
+2097152 0 1 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 -2.44367743632938e-11
+2097152 0 1 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 -3.29398095894514e-11
+2097152 0 1 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 6.21578251832252e-12
+2097152 0 1 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 1.70451336841312e-09
+2097152 0 1 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 3.4977364523255e-10
+2097152 0 1 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 -5.46878123804569e-10
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5242880 5505024 5242880 0.1 0 0.05 0 5.46878123804569e-10
+2097152 0 1 0 0 5242880 5767168 5242880 0.1 0 0.1 0 -3.4977364523255e-10
+2097152 0 1 0 0 5242880 6029312 5242880 0.1 0 0.15 0 -1.70451336841312e-09
+2097152 0 1 0 0 5242880 6291456 5242880 0.1 0 0.2 0 -6.21578251832252e-12
+2097152 0 1 0 0 5242880 6553600 5242880 0.1 0 0.25 0 3.29398095894514e-11
+2097152 0 1 0 0 5242880 6815744 5242880 0.1 0 0.3 0 2.44367743632938e-11
+2097152 0 1 0 0 5242880 7077888 5242880 0.1 0 0.35 0 6.55429992687158e-12
+2097152 0 1 0 0 5242880 7340032 5242880 0.1 0 0.4 0 -1.32743815939307e-11
+2097152 0 1 0 0 5242880 7602176 5242880 0.1 0 0.45 0 -7.96866421228411e-12
+2097152 0 1 0 0 5242880 7864320 5242880 0.1 0 0.5 0 1.80851861264486e-12
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 -3.29398095894514e-11
+2097152 0 2 0 0 5242880 4063232 5242880 0.1 0 -0.225 0 -1.20037052355624e-10
+2097152 0 2 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 6.21578251832252e-12
+2097152 0 2 0 0 5242880 4325376 5242880 0.1 0 -0.175 0 9.4248303267124e-10
+2097152 0 2 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 1.70451336841312e-09
+2097152 0 2 0 0 5242880 4587520 5242880 0.1 0 -0.125 0 1.18932784150608e-09
+2097152 0 2 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 3.4977364523255e-10
+2097152 0 2 0 0 5242880 4849664 5242880 0.1 0 -0.075 0 -9.3463225122233e-10
+2097152 0 2 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 -5.46878123804569e-10
+2097152 0 2 0 0 5242880 5111808 5242880 0.1 0 -0.025 0 -1.03273274654203e-09
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5242880 5373952 5242880 0.1 0 0.025 0 1.03273274654203e-09
+2097152 0 2 0 0 5242880 5505024 5242880 0.1 0 0.05 0 5.46878123804569e-10
+2097152 0 2 0 0 5242880 5636096 5242880 0.1 0 0.075 0 9.3463225122233e-10
+2097152 0 2 0 0 5242880 5767168 5242880 0.1 0 0.1 0 -3.4977364523255e-10
+2097152 0 2 0 0 5242880 5898240 5242880 0.1 0 0.125 0 -1.18932784150608e-09
+2097152 0 2 0 0 5242880 6029312 5242880 0.1 0 0.15 0 -1.70451336841312e-09
+2097152 0 2 0 0 5242880 6160384 5242880 0.1 0 0.175 0 -9.4248303267124e-10
+2097152 0 2 0 0 5242880 6291456 5242880 0.1 0 0.2 0 -6.21578251832252e-12
+2097152 0 2 0 0 5242880 6422528 5242880 0.1 0 0.225 0 1.20037052355624e-10
+2097152 0 2 0 0 5242880 6553600 5242880 0.1 0 0.25 0 3.29398095894514e-11
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiy.z.asc b/Carpet/CarpetInterp/test/waveinterp/phiy.z.asc
new file mode 100644
index 000000000..00d322570
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiy.z.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phiy z (phiy)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 0 0 0 0 -1 0
+0 0 0 0 0 5242880 5242880 524288 0 0 0 -0.9 0
+0 0 0 0 0 5242880 5242880 1048576 0 0 0 -0.8 0
+0 0 0 0 0 5242880 5242880 1572864 0 0 0 -0.7 0
+0 0 0 0 0 5242880 5242880 2097152 0 0 0 -0.6 0
+0 0 0 0 0 5242880 5242880 2621440 0 0 0 -0.5 0
+0 0 0 0 0 5242880 5242880 3145728 0 0 0 -0.4 0
+0 0 0 0 0 5242880 5242880 3670016 0 0 0 -0.3 0
+0 0 0 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 0 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 0 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 0 0 0 5242880 5242880 6815744 0 0 0 0.3 0
+0 0 0 0 0 5242880 5242880 7340032 0 0 0 0.4 0
+0 0 0 0 0 5242880 5242880 7864320 0 0 0 0.5 0
+0 0 0 0 0 5242880 5242880 8388608 0 0 0 0.6 0
+0 0 0 0 0 5242880 5242880 8912896 0 0 0 0.7 0
+0 0 0 0 0 5242880 5242880 9437184 0 0 0 0.8 0
+0 0 0 0 0 5242880 5242880 9961472 0 0 0 0.9 0
+0 0 0 0 0 5242880 5242880 10485760 0 0 0 1 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 2621440 0 0 0 -0.5 0
+0 0 1 0 0 5242880 5242880 2883584 0 0 0 -0.45 0
+0 0 1 0 0 5242880 5242880 3145728 0 0 0 -0.4 0
+0 0 1 0 0 5242880 5242880 3407872 0 0 0 -0.35 0
+0 0 1 0 0 5242880 5242880 3670016 0 0 0 -0.3 0
+0 0 1 0 0 5242880 5242880 3932160 0 0 0 -0.25 0
+0 0 1 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 1 0 0 5242880 5242880 4456448 0 0 0 -0.15 0
+0 0 1 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 1 0 0 5242880 5242880 4980736 0 0 0 -0.05 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5242880 5242880 5505024 0 0 0 0.05 0
+0 0 1 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 1 0 0 5242880 5242880 6029312 0 0 0 0.15 0
+0 0 1 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 1 0 0 5242880 5242880 6553600 0 0 0 0.25 0
+0 0 1 0 0 5242880 5242880 6815744 0 0 0 0.3 0
+0 0 1 0 0 5242880 5242880 7077888 0 0 0 0.35 0
+0 0 1 0 0 5242880 5242880 7340032 0 0 0 0.4 0
+0 0 1 0 0 5242880 5242880 7602176 0 0 0 0.45 0
+0 0 1 0 0 5242880 5242880 7864320 0 0 0 0.5 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 3932160 0 0 0 -0.25 0
+0 0 2 0 0 5242880 5242880 4063232 0 0 0 -0.225 0
+0 0 2 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 2 0 0 5242880 5242880 4325376 0 0 0 -0.175 0
+0 0 2 0 0 5242880 5242880 4456448 0 0 0 -0.15 0
+0 0 2 0 0 5242880 5242880 4587520 0 0 0 -0.125 0
+0 0 2 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 2 0 0 5242880 5242880 4849664 0 0 0 -0.075 0
+0 0 2 0 0 5242880 5242880 4980736 0 0 0 -0.05 0
+0 0 2 0 0 5242880 5242880 5111808 0 0 0 -0.025 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5242880 5242880 5373952 0 0 0 0.025 0
+0 0 2 0 0 5242880 5242880 5505024 0 0 0 0.05 0
+0 0 2 0 0 5242880 5242880 5636096 0 0 0 0.075 0
+0 0 2 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 2 0 0 5242880 5242880 5898240 0 0 0 0.125 0
+0 0 2 0 0 5242880 5242880 6029312 0 0 0 0.15 0
+0 0 2 0 0 5242880 5242880 6160384 0 0 0 0.175 0
+0 0 2 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 2 0 0 5242880 5242880 6422528 0 0 0 0.225 0
+0 0 2 0 0 5242880 5242880 6553600 0 0 0 0.25 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 3932160 0.00625 0 0 -0.25 0
+131072 0 2 0 0 5242880 5242880 4063232 0.00625 0 0 -0.225 0
+131072 0 2 0 0 5242880 5242880 4194304 0.00625 0 0 -0.2 0
+131072 0 2 0 0 5242880 5242880 4325376 0.00625 0 0 -0.175 0
+131072 0 2 0 0 5242880 5242880 4456448 0.00625 0 0 -0.15 0
+131072 0 2 0 0 5242880 5242880 4587520 0.00625 0 0 -0.125 0
+131072 0 2 0 0 5242880 5242880 4718592 0.00625 0 0 -0.1 0
+131072 0 2 0 0 5242880 5242880 4849664 0.00625 0 0 -0.075 0
+131072 0 2 0 0 5242880 5242880 4980736 0.00625 0 0 -0.05 0
+131072 0 2 0 0 5242880 5242880 5111808 0.00625 0 0 -0.025 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5242880 5242880 5373952 0.00625 0 0 0.025 0
+131072 0 2 0 0 5242880 5242880 5505024 0.00625 0 0 0.05 0
+131072 0 2 0 0 5242880 5242880 5636096 0.00625 0 0 0.075 0
+131072 0 2 0 0 5242880 5242880 5767168 0.00625 0 0 0.1 0
+131072 0 2 0 0 5242880 5242880 5898240 0.00625 0 0 0.125 0
+131072 0 2 0 0 5242880 5242880 6029312 0.00625 0 0 0.15 0
+131072 0 2 0 0 5242880 5242880 6160384 0.00625 0 0 0.175 0
+131072 0 2 0 0 5242880 5242880 6291456 0.00625 0 0 0.2 0
+131072 0 2 0 0 5242880 5242880 6422528 0.00625 0 0 0.225 0
+131072 0 2 0 0 5242880 5242880 6553600 0.00625 0 0 0.25 0
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 2621440 0.0125 0 0 -0.5 0
+262144 0 1 0 0 5242880 5242880 2883584 0.0125 0 0 -0.45 0
+262144 0 1 0 0 5242880 5242880 3145728 0.0125 0 0 -0.4 0
+262144 0 1 0 0 5242880 5242880 3407872 0.0125 0 0 -0.35 0
+262144 0 1 0 0 5242880 5242880 3670016 0.0125 0 0 -0.3 0
+262144 0 1 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 0
+262144 0 1 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 0
+262144 0 1 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 0
+262144 0 1 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 0
+262144 0 1 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 0
+262144 0 1 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 0
+262144 0 1 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 0
+262144 0 1 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 0
+262144 0 1 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 0
+262144 0 1 0 0 5242880 5242880 6815744 0.0125 0 0 0.3 0
+262144 0 1 0 0 5242880 5242880 7077888 0.0125 0 0 0.35 0
+262144 0 1 0 0 5242880 5242880 7340032 0.0125 0 0 0.4 0
+262144 0 1 0 0 5242880 5242880 7602176 0.0125 0 0 0.45 0
+262144 0 1 0 0 5242880 5242880 7864320 0.0125 0 0 0.5 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 0
+262144 0 2 0 0 5242880 5242880 4063232 0.0125 0 0 -0.225 0
+262144 0 2 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 0
+262144 0 2 0 0 5242880 5242880 4325376 0.0125 0 0 -0.175 0
+262144 0 2 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 0
+262144 0 2 0 0 5242880 5242880 4587520 0.0125 0 0 -0.125 0
+262144 0 2 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 0
+262144 0 2 0 0 5242880 5242880 4849664 0.0125 0 0 -0.075 0
+262144 0 2 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 0
+262144 0 2 0 0 5242880 5242880 5111808 0.0125 0 0 -0.025 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5242880 5242880 5373952 0.0125 0 0 0.025 0
+262144 0 2 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 0
+262144 0 2 0 0 5242880 5242880 5636096 0.0125 0 0 0.075 0
+262144 0 2 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 0
+262144 0 2 0 0 5242880 5242880 5898240 0.0125 0 0 0.125 0
+262144 0 2 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 0
+262144 0 2 0 0 5242880 5242880 6160384 0.0125 0 0 0.175 0
+262144 0 2 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 0
+262144 0 2 0 0 5242880 5242880 6422528 0.0125 0 0 0.225 0
+262144 0 2 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 0
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 3932160 0.01875 0 0 -0.25 0
+393216 0 2 0 0 5242880 5242880 4063232 0.01875 0 0 -0.225 0
+393216 0 2 0 0 5242880 5242880 4194304 0.01875 0 0 -0.2 0
+393216 0 2 0 0 5242880 5242880 4325376 0.01875 0 0 -0.175 0
+393216 0 2 0 0 5242880 5242880 4456448 0.01875 0 0 -0.15 0
+393216 0 2 0 0 5242880 5242880 4587520 0.01875 0 0 -0.125 0
+393216 0 2 0 0 5242880 5242880 4718592 0.01875 0 0 -0.1 0
+393216 0 2 0 0 5242880 5242880 4849664 0.01875 0 0 -0.075 0
+393216 0 2 0 0 5242880 5242880 4980736 0.01875 0 0 -0.05 0
+393216 0 2 0 0 5242880 5242880 5111808 0.01875 0 0 -0.025 0
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5242880 5242880 5373952 0.01875 0 0 0.025 0
+393216 0 2 0 0 5242880 5242880 5505024 0.01875 0 0 0.05 0
+393216 0 2 0 0 5242880 5242880 5636096 0.01875 0 0 0.075 0
+393216 0 2 0 0 5242880 5242880 5767168 0.01875 0 0 0.1 0
+393216 0 2 0 0 5242880 5242880 5898240 0.01875 0 0 0.125 0
+393216 0 2 0 0 5242880 5242880 6029312 0.01875 0 0 0.15 0
+393216 0 2 0 0 5242880 5242880 6160384 0.01875 0 0 0.175 0
+393216 0 2 0 0 5242880 5242880 6291456 0.01875 0 0 0.2 0
+393216 0 2 0 0 5242880 5242880 6422528 0.01875 0 0 0.225 0
+393216 0 2 0 0 5242880 5242880 6553600 0.01875 0 0 0.25 0
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 0 0.025 0 0 -1 0
+524288 0 0 0 0 5242880 5242880 524288 0.025 0 0 -0.9 0
+524288 0 0 0 0 5242880 5242880 1048576 0.025 0 0 -0.8 0
+524288 0 0 0 0 5242880 5242880 1572864 0.025 0 0 -0.7 0
+524288 0 0 0 0 5242880 5242880 2097152 0.025 0 0 -0.6 0
+524288 0 0 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 0
+524288 0 0 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 0
+524288 0 0 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 0
+524288 0 0 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0
+524288 0 0 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 0
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5242880 5242880 5767168 0.025 0 0 0.1 0
+524288 0 0 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0
+524288 0 0 0 0 5242880 5242880 6815744 0.025 0 0 0.3 0
+524288 0 0 0 0 5242880 5242880 7340032 0.025 0 0 0.4 0
+524288 0 0 0 0 5242880 5242880 7864320 0.025 0 0 0.5 0
+524288 0 0 0 0 5242880 5242880 8388608 0.025 0 0 0.6 0
+524288 0 0 0 0 5242880 5242880 8912896 0.025 0 0 0.7 0
+524288 0 0 0 0 5242880 5242880 9437184 0.025 0 0 0.8 0
+524288 0 0 0 0 5242880 5242880 9961472 0.025 0 0 0.9 0
+524288 0 0 0 0 5242880 5242880 10485760 0.025 0 0 1 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 0
+524288 0 1 0 0 5242880 5242880 2883584 0.025 0 0 -0.45 0
+524288 0 1 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 0
+524288 0 1 0 0 5242880 5242880 3407872 0.025 0 0 -0.35 0
+524288 0 1 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 0
+524288 0 1 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 0
+524288 0 1 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0
+524288 0 1 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 0
+524288 0 1 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 0
+524288 0 1 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 0
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5242880 5242880 5505024 0.025 0 0 0.05 0
+524288 0 1 0 0 5242880 5242880 5767168 0.025 0 0 0.1 0
+524288 0 1 0 0 5242880 5242880 6029312 0.025 0 0 0.15 0
+524288 0 1 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0
+524288 0 1 0 0 5242880 5242880 6553600 0.025 0 0 0.25 0
+524288 0 1 0 0 5242880 5242880 6815744 0.025 0 0 0.3 0
+524288 0 1 0 0 5242880 5242880 7077888 0.025 0 0 0.35 0
+524288 0 1 0 0 5242880 5242880 7340032 0.025 0 0 0.4 0
+524288 0 1 0 0 5242880 5242880 7602176 0.025 0 0 0.45 0
+524288 0 1 0 0 5242880 5242880 7864320 0.025 0 0 0.5 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 0
+524288 0 2 0 0 5242880 5242880 4063232 0.025 0 0 -0.225 0
+524288 0 2 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 0
+524288 0 2 0 0 5242880 5242880 4325376 0.025 0 0 -0.175 0
+524288 0 2 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 0
+524288 0 2 0 0 5242880 5242880 4587520 0.025 0 0 -0.125 0
+524288 0 2 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 0
+524288 0 2 0 0 5242880 5242880 4849664 0.025 0 0 -0.075 0
+524288 0 2 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 0
+524288 0 2 0 0 5242880 5242880 5111808 0.025 0 0 -0.025 0
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5242880 5242880 5373952 0.025 0 0 0.025 0
+524288 0 2 0 0 5242880 5242880 5505024 0.025 0 0 0.05 0
+524288 0 2 0 0 5242880 5242880 5636096 0.025 0 0 0.075 0
+524288 0 2 0 0 5242880 5242880 5767168 0.025 0 0 0.1 0
+524288 0 2 0 0 5242880 5242880 5898240 0.025 0 0 0.125 0
+524288 0 2 0 0 5242880 5242880 6029312 0.025 0 0 0.15 0
+524288 0 2 0 0 5242880 5242880 6160384 0.025 0 0 0.175 0
+524288 0 2 0 0 5242880 5242880 6291456 0.025 0 0 0.2 0
+524288 0 2 0 0 5242880 5242880 6422528 0.025 0 0 0.225 0
+524288 0 2 0 0 5242880 5242880 6553600 0.025 0 0 0.25 0
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 3932160 0.03125 0 0 -0.25 0
+655360 0 2 0 0 5242880 5242880 4063232 0.03125 0 0 -0.225 0
+655360 0 2 0 0 5242880 5242880 4194304 0.03125 0 0 -0.2 0
+655360 0 2 0 0 5242880 5242880 4325376 0.03125 0 0 -0.175 0
+655360 0 2 0 0 5242880 5242880 4456448 0.03125 0 0 -0.15 0
+655360 0 2 0 0 5242880 5242880 4587520 0.03125 0 0 -0.125 0
+655360 0 2 0 0 5242880 5242880 4718592 0.03125 0 0 -0.1 0
+655360 0 2 0 0 5242880 5242880 4849664 0.03125 0 0 -0.075 0
+655360 0 2 0 0 5242880 5242880 4980736 0.03125 0 0 -0.05 0
+655360 0 2 0 0 5242880 5242880 5111808 0.03125 0 0 -0.025 0
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5242880 5242880 5373952 0.03125 0 0 0.025 0
+655360 0 2 0 0 5242880 5242880 5505024 0.03125 0 0 0.05 0
+655360 0 2 0 0 5242880 5242880 5636096 0.03125 0 0 0.075 0
+655360 0 2 0 0 5242880 5242880 5767168 0.03125 0 0 0.1 0
+655360 0 2 0 0 5242880 5242880 5898240 0.03125 0 0 0.125 0
+655360 0 2 0 0 5242880 5242880 6029312 0.03125 0 0 0.15 0
+655360 0 2 0 0 5242880 5242880 6160384 0.03125 0 0 0.175 0
+655360 0 2 0 0 5242880 5242880 6291456 0.03125 0 0 0.2 0
+655360 0 2 0 0 5242880 5242880 6422528 0.03125 0 0 0.225 0
+655360 0 2 0 0 5242880 5242880 6553600 0.03125 0 0 0.25 0
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 2621440 0.0375 0 0 -0.5 0
+786432 0 1 0 0 5242880 5242880 2883584 0.0375 0 0 -0.45 0
+786432 0 1 0 0 5242880 5242880 3145728 0.0375 0 0 -0.4 0
+786432 0 1 0 0 5242880 5242880 3407872 0.0375 0 0 -0.35 0
+786432 0 1 0 0 5242880 5242880 3670016 0.0375 0 0 -0.3 0
+786432 0 1 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 0
+786432 0 1 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 0
+786432 0 1 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 0
+786432 0 1 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 0
+786432 0 1 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 0
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 0
+786432 0 1 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 0
+786432 0 1 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 0
+786432 0 1 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 0
+786432 0 1 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 0
+786432 0 1 0 0 5242880 5242880 6815744 0.0375 0 0 0.3 0
+786432 0 1 0 0 5242880 5242880 7077888 0.0375 0 0 0.35 0
+786432 0 1 0 0 5242880 5242880 7340032 0.0375 0 0 0.4 0
+786432 0 1 0 0 5242880 5242880 7602176 0.0375 0 0 0.45 0
+786432 0 1 0 0 5242880 5242880 7864320 0.0375 0 0 0.5 0
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 0
+786432 0 2 0 0 5242880 5242880 4063232 0.0375 0 0 -0.225 0
+786432 0 2 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 0
+786432 0 2 0 0 5242880 5242880 4325376 0.0375 0 0 -0.175 0
+786432 0 2 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 0
+786432 0 2 0 0 5242880 5242880 4587520 0.0375 0 0 -0.125 0
+786432 0 2 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 0
+786432 0 2 0 0 5242880 5242880 4849664 0.0375 0 0 -0.075 0
+786432 0 2 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 0
+786432 0 2 0 0 5242880 5242880 5111808 0.0375 0 0 -0.025 0
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5242880 5242880 5373952 0.0375 0 0 0.025 0
+786432 0 2 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 0
+786432 0 2 0 0 5242880 5242880 5636096 0.0375 0 0 0.075 0
+786432 0 2 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 0
+786432 0 2 0 0 5242880 5242880 5898240 0.0375 0 0 0.125 0
+786432 0 2 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 0
+786432 0 2 0 0 5242880 5242880 6160384 0.0375 0 0 0.175 0
+786432 0 2 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 0
+786432 0 2 0 0 5242880 5242880 6422528 0.0375 0 0 0.225 0
+786432 0 2 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 0
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 3932160 0.04375 0 0 -0.25 0
+917504 0 2 0 0 5242880 5242880 4063232 0.04375 0 0 -0.225 0
+917504 0 2 0 0 5242880 5242880 4194304 0.04375 0 0 -0.2 0
+917504 0 2 0 0 5242880 5242880 4325376 0.04375 0 0 -0.175 0
+917504 0 2 0 0 5242880 5242880 4456448 0.04375 0 0 -0.15 0
+917504 0 2 0 0 5242880 5242880 4587520 0.04375 0 0 -0.125 0
+917504 0 2 0 0 5242880 5242880 4718592 0.04375 0 0 -0.1 0
+917504 0 2 0 0 5242880 5242880 4849664 0.04375 0 0 -0.075 0
+917504 0 2 0 0 5242880 5242880 4980736 0.04375 0 0 -0.05 0
+917504 0 2 0 0 5242880 5242880 5111808 0.04375 0 0 -0.025 0
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5242880 5242880 5373952 0.04375 0 0 0.025 0
+917504 0 2 0 0 5242880 5242880 5505024 0.04375 0 0 0.05 0
+917504 0 2 0 0 5242880 5242880 5636096 0.04375 0 0 0.075 0
+917504 0 2 0 0 5242880 5242880 5767168 0.04375 0 0 0.1 0
+917504 0 2 0 0 5242880 5242880 5898240 0.04375 0 0 0.125 0
+917504 0 2 0 0 5242880 5242880 6029312 0.04375 0 0 0.15 0
+917504 0 2 0 0 5242880 5242880 6160384 0.04375 0 0 0.175 0
+917504 0 2 0 0 5242880 5242880 6291456 0.04375 0 0 0.2 0
+917504 0 2 0 0 5242880 5242880 6422528 0.04375 0 0 0.225 0
+917504 0 2 0 0 5242880 5242880 6553600 0.04375 0 0 0.25 0
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 0 0.05 0 0 -1 0
+1048576 0 0 0 0 5242880 5242880 524288 0.05 0 0 -0.9 0
+1048576 0 0 0 0 5242880 5242880 1048576 0.05 0 0 -0.8 0
+1048576 0 0 0 0 5242880 5242880 1572864 0.05 0 0 -0.7 0
+1048576 0 0 0 0 5242880 5242880 2097152 0.05 0 0 -0.6 0
+1048576 0 0 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 0
+1048576 0 0 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 0
+1048576 0 0 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 0
+1048576 0 0 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0
+1048576 0 0 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 0
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5242880 5242880 5767168 0.05 0 0 0.1 0
+1048576 0 0 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0
+1048576 0 0 0 0 5242880 5242880 6815744 0.05 0 0 0.3 0
+1048576 0 0 0 0 5242880 5242880 7340032 0.05 0 0 0.4 0
+1048576 0 0 0 0 5242880 5242880 7864320 0.05 0 0 0.5 0
+1048576 0 0 0 0 5242880 5242880 8388608 0.05 0 0 0.6 0
+1048576 0 0 0 0 5242880 5242880 8912896 0.05 0 0 0.7 0
+1048576 0 0 0 0 5242880 5242880 9437184 0.05 0 0 0.8 0
+1048576 0 0 0 0 5242880 5242880 9961472 0.05 0 0 0.9 0
+1048576 0 0 0 0 5242880 5242880 10485760 0.05 0 0 1 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 0
+1048576 0 1 0 0 5242880 5242880 2883584 0.05 0 0 -0.45 0
+1048576 0 1 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 0
+1048576 0 1 0 0 5242880 5242880 3407872 0.05 0 0 -0.35 0
+1048576 0 1 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 0
+1048576 0 1 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 0
+1048576 0 1 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0
+1048576 0 1 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 0
+1048576 0 1 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 0
+1048576 0 1 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 0
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5242880 5242880 5505024 0.05 0 0 0.05 0
+1048576 0 1 0 0 5242880 5242880 5767168 0.05 0 0 0.1 0
+1048576 0 1 0 0 5242880 5242880 6029312 0.05 0 0 0.15 0
+1048576 0 1 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0
+1048576 0 1 0 0 5242880 5242880 6553600 0.05 0 0 0.25 0
+1048576 0 1 0 0 5242880 5242880 6815744 0.05 0 0 0.3 0
+1048576 0 1 0 0 5242880 5242880 7077888 0.05 0 0 0.35 0
+1048576 0 1 0 0 5242880 5242880 7340032 0.05 0 0 0.4 0
+1048576 0 1 0 0 5242880 5242880 7602176 0.05 0 0 0.45 0
+1048576 0 1 0 0 5242880 5242880 7864320 0.05 0 0 0.5 0
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 0
+1048576 0 2 0 0 5242880 5242880 4063232 0.05 0 0 -0.225 0
+1048576 0 2 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 0
+1048576 0 2 0 0 5242880 5242880 4325376 0.05 0 0 -0.175 0
+1048576 0 2 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 0
+1048576 0 2 0 0 5242880 5242880 4587520 0.05 0 0 -0.125 0
+1048576 0 2 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 0
+1048576 0 2 0 0 5242880 5242880 4849664 0.05 0 0 -0.075 0
+1048576 0 2 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 0
+1048576 0 2 0 0 5242880 5242880 5111808 0.05 0 0 -0.025 0
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5242880 5242880 5373952 0.05 0 0 0.025 0
+1048576 0 2 0 0 5242880 5242880 5505024 0.05 0 0 0.05 0
+1048576 0 2 0 0 5242880 5242880 5636096 0.05 0 0 0.075 0
+1048576 0 2 0 0 5242880 5242880 5767168 0.05 0 0 0.1 0
+1048576 0 2 0 0 5242880 5242880 5898240 0.05 0 0 0.125 0
+1048576 0 2 0 0 5242880 5242880 6029312 0.05 0 0 0.15 0
+1048576 0 2 0 0 5242880 5242880 6160384 0.05 0 0 0.175 0
+1048576 0 2 0 0 5242880 5242880 6291456 0.05 0 0 0.2 0
+1048576 0 2 0 0 5242880 5242880 6422528 0.05 0 0 0.225 0
+1048576 0 2 0 0 5242880 5242880 6553600 0.05 0 0 0.25 0
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 3932160 0.05625 0 0 -0.25 0
+1179648 0 2 0 0 5242880 5242880 4063232 0.05625 0 0 -0.225 0
+1179648 0 2 0 0 5242880 5242880 4194304 0.05625 0 0 -0.2 0
+1179648 0 2 0 0 5242880 5242880 4325376 0.05625 0 0 -0.175 0
+1179648 0 2 0 0 5242880 5242880 4456448 0.05625 0 0 -0.15 0
+1179648 0 2 0 0 5242880 5242880 4587520 0.05625 0 0 -0.125 0
+1179648 0 2 0 0 5242880 5242880 4718592 0.05625 0 0 -0.1 0
+1179648 0 2 0 0 5242880 5242880 4849664 0.05625 0 0 -0.075 0
+1179648 0 2 0 0 5242880 5242880 4980736 0.05625 0 0 -0.05 0
+1179648 0 2 0 0 5242880 5242880 5111808 0.05625 0 0 -0.025 0
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5242880 5242880 5373952 0.05625 0 0 0.025 0
+1179648 0 2 0 0 5242880 5242880 5505024 0.05625 0 0 0.05 0
+1179648 0 2 0 0 5242880 5242880 5636096 0.05625 0 0 0.075 0
+1179648 0 2 0 0 5242880 5242880 5767168 0.05625 0 0 0.1 0
+1179648 0 2 0 0 5242880 5242880 5898240 0.05625 0 0 0.125 0
+1179648 0 2 0 0 5242880 5242880 6029312 0.05625 0 0 0.15 0
+1179648 0 2 0 0 5242880 5242880 6160384 0.05625 0 0 0.175 0
+1179648 0 2 0 0 5242880 5242880 6291456 0.05625 0 0 0.2 0
+1179648 0 2 0 0 5242880 5242880 6422528 0.05625 0 0 0.225 0
+1179648 0 2 0 0 5242880 5242880 6553600 0.05625 0 0 0.25 0
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 2621440 0.0625 0 0 -0.5 0
+1310720 0 1 0 0 5242880 5242880 2883584 0.0625 0 0 -0.45 0
+1310720 0 1 0 0 5242880 5242880 3145728 0.0625 0 0 -0.4 0
+1310720 0 1 0 0 5242880 5242880 3407872 0.0625 0 0 -0.35 0
+1310720 0 1 0 0 5242880 5242880 3670016 0.0625 0 0 -0.3 0
+1310720 0 1 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 0
+1310720 0 1 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 0
+1310720 0 1 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 0
+1310720 0 1 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 0
+1310720 0 1 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 0
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 0
+1310720 0 1 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 0
+1310720 0 1 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 0
+1310720 0 1 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 0
+1310720 0 1 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 0
+1310720 0 1 0 0 5242880 5242880 6815744 0.0625 0 0 0.3 0
+1310720 0 1 0 0 5242880 5242880 7077888 0.0625 0 0 0.35 0
+1310720 0 1 0 0 5242880 5242880 7340032 0.0625 0 0 0.4 0
+1310720 0 1 0 0 5242880 5242880 7602176 0.0625 0 0 0.45 0
+1310720 0 1 0 0 5242880 5242880 7864320 0.0625 0 0 0.5 0
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 0
+1310720 0 2 0 0 5242880 5242880 4063232 0.0625 0 0 -0.225 0
+1310720 0 2 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 0
+1310720 0 2 0 0 5242880 5242880 4325376 0.0625 0 0 -0.175 0
+1310720 0 2 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 0
+1310720 0 2 0 0 5242880 5242880 4587520 0.0625 0 0 -0.125 0
+1310720 0 2 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 0
+1310720 0 2 0 0 5242880 5242880 4849664 0.0625 0 0 -0.075 0
+1310720 0 2 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 0
+1310720 0 2 0 0 5242880 5242880 5111808 0.0625 0 0 -0.025 0
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5242880 5242880 5373952 0.0625 0 0 0.025 0
+1310720 0 2 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 0
+1310720 0 2 0 0 5242880 5242880 5636096 0.0625 0 0 0.075 0
+1310720 0 2 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 0
+1310720 0 2 0 0 5242880 5242880 5898240 0.0625 0 0 0.125 0
+1310720 0 2 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 0
+1310720 0 2 0 0 5242880 5242880 6160384 0.0625 0 0 0.175 0
+1310720 0 2 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 0
+1310720 0 2 0 0 5242880 5242880 6422528 0.0625 0 0 0.225 0
+1310720 0 2 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 0
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 3932160 0.06875 0 0 -0.25 0
+1441792 0 2 0 0 5242880 5242880 4063232 0.06875 0 0 -0.225 0
+1441792 0 2 0 0 5242880 5242880 4194304 0.06875 0 0 -0.2 0
+1441792 0 2 0 0 5242880 5242880 4325376 0.06875 0 0 -0.175 0
+1441792 0 2 0 0 5242880 5242880 4456448 0.06875 0 0 -0.15 0
+1441792 0 2 0 0 5242880 5242880 4587520 0.06875 0 0 -0.125 0
+1441792 0 2 0 0 5242880 5242880 4718592 0.06875 0 0 -0.1 0
+1441792 0 2 0 0 5242880 5242880 4849664 0.06875 0 0 -0.075 0
+1441792 0 2 0 0 5242880 5242880 4980736 0.06875 0 0 -0.05 0
+1441792 0 2 0 0 5242880 5242880 5111808 0.06875 0 0 -0.025 0
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5242880 5242880 5373952 0.06875 0 0 0.025 0
+1441792 0 2 0 0 5242880 5242880 5505024 0.06875 0 0 0.05 0
+1441792 0 2 0 0 5242880 5242880 5636096 0.06875 0 0 0.075 0
+1441792 0 2 0 0 5242880 5242880 5767168 0.06875 0 0 0.1 0
+1441792 0 2 0 0 5242880 5242880 5898240 0.06875 0 0 0.125 0
+1441792 0 2 0 0 5242880 5242880 6029312 0.06875 0 0 0.15 0
+1441792 0 2 0 0 5242880 5242880 6160384 0.06875 0 0 0.175 0
+1441792 0 2 0 0 5242880 5242880 6291456 0.06875 0 0 0.2 0
+1441792 0 2 0 0 5242880 5242880 6422528 0.06875 0 0 0.225 0
+1441792 0 2 0 0 5242880 5242880 6553600 0.06875 0 0 0.25 0
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 0 0.075 0 0 -1 0
+1572864 0 0 0 0 5242880 5242880 524288 0.075 0 0 -0.9 0
+1572864 0 0 0 0 5242880 5242880 1048576 0.075 0 0 -0.8 0
+1572864 0 0 0 0 5242880 5242880 1572864 0.075 0 0 -0.7 0
+1572864 0 0 0 0 5242880 5242880 2097152 0.075 0 0 -0.6 0
+1572864 0 0 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 0
+1572864 0 0 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 0
+1572864 0 0 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 0
+1572864 0 0 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 0
+1572864 0 0 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 0
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5242880 5242880 5767168 0.075 0 0 0.1 0
+1572864 0 0 0 0 5242880 5242880 6291456 0.075 0 0 0.2 0
+1572864 0 0 0 0 5242880 5242880 6815744 0.075 0 0 0.3 0
+1572864 0 0 0 0 5242880 5242880 7340032 0.075 0 0 0.4 0
+1572864 0 0 0 0 5242880 5242880 7864320 0.075 0 0 0.5 0
+1572864 0 0 0 0 5242880 5242880 8388608 0.075 0 0 0.6 0
+1572864 0 0 0 0 5242880 5242880 8912896 0.075 0 0 0.7 0
+1572864 0 0 0 0 5242880 5242880 9437184 0.075 0 0 0.8 0
+1572864 0 0 0 0 5242880 5242880 9961472 0.075 0 0 0.9 0
+1572864 0 0 0 0 5242880 5242880 10485760 0.075 0 0 1 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 0
+1572864 0 1 0 0 5242880 5242880 2883584 0.075 0 0 -0.45 0
+1572864 0 1 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 0
+1572864 0 1 0 0 5242880 5242880 3407872 0.075 0 0 -0.35 0
+1572864 0 1 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 0
+1572864 0 1 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 0
+1572864 0 1 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 0
+1572864 0 1 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 0
+1572864 0 1 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 0
+1572864 0 1 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 0
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5242880 5242880 5505024 0.075 0 0 0.05 0
+1572864 0 1 0 0 5242880 5242880 5767168 0.075 0 0 0.1 0
+1572864 0 1 0 0 5242880 5242880 6029312 0.075 0 0 0.15 0
+1572864 0 1 0 0 5242880 5242880 6291456 0.075 0 0 0.2 0
+1572864 0 1 0 0 5242880 5242880 6553600 0.075 0 0 0.25 0
+1572864 0 1 0 0 5242880 5242880 6815744 0.075 0 0 0.3 0
+1572864 0 1 0 0 5242880 5242880 7077888 0.075 0 0 0.35 0
+1572864 0 1 0 0 5242880 5242880 7340032 0.075 0 0 0.4 0
+1572864 0 1 0 0 5242880 5242880 7602176 0.075 0 0 0.45 0
+1572864 0 1 0 0 5242880 5242880 7864320 0.075 0 0 0.5 0
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 0
+1572864 0 2 0 0 5242880 5242880 4063232 0.075 0 0 -0.225 0
+1572864 0 2 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 0
+1572864 0 2 0 0 5242880 5242880 4325376 0.075 0 0 -0.175 0
+1572864 0 2 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 0
+1572864 0 2 0 0 5242880 5242880 4587520 0.075 0 0 -0.125 0
+1572864 0 2 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 0
+1572864 0 2 0 0 5242880 5242880 4849664 0.075 0 0 -0.075 0
+1572864 0 2 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 0
+1572864 0 2 0 0 5242880 5242880 5111808 0.075 0 0 -0.025 0
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5242880 5242880 5373952 0.075 0 0 0.025 0
+1572864 0 2 0 0 5242880 5242880 5505024 0.075 0 0 0.05 0
+1572864 0 2 0 0 5242880 5242880 5636096 0.075 0 0 0.075 0
+1572864 0 2 0 0 5242880 5242880 5767168 0.075 0 0 0.1 0
+1572864 0 2 0 0 5242880 5242880 5898240 0.075 0 0 0.125 0
+1572864 0 2 0 0 5242880 5242880 6029312 0.075 0 0 0.15 0
+1572864 0 2 0 0 5242880 5242880 6160384 0.075 0 0 0.175 0
+1572864 0 2 0 0 5242880 5242880 6291456 0.075 0 0 0.2 0
+1572864 0 2 0 0 5242880 5242880 6422528 0.075 0 0 0.225 0
+1572864 0 2 0 0 5242880 5242880 6553600 0.075 0 0 0.25 0
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 3932160 0.08125 0 0 -0.25 0
+1703936 0 2 0 0 5242880 5242880 4063232 0.08125 0 0 -0.225 0
+1703936 0 2 0 0 5242880 5242880 4194304 0.08125 0 0 -0.2 0
+1703936 0 2 0 0 5242880 5242880 4325376 0.08125 0 0 -0.175 0
+1703936 0 2 0 0 5242880 5242880 4456448 0.08125 0 0 -0.15 0
+1703936 0 2 0 0 5242880 5242880 4587520 0.08125 0 0 -0.125 0
+1703936 0 2 0 0 5242880 5242880 4718592 0.08125 0 0 -0.1 0
+1703936 0 2 0 0 5242880 5242880 4849664 0.08125 0 0 -0.075 0
+1703936 0 2 0 0 5242880 5242880 4980736 0.08125 0 0 -0.05 0
+1703936 0 2 0 0 5242880 5242880 5111808 0.08125 0 0 -0.025 0
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5242880 5242880 5373952 0.08125 0 0 0.025 0
+1703936 0 2 0 0 5242880 5242880 5505024 0.08125 0 0 0.05 0
+1703936 0 2 0 0 5242880 5242880 5636096 0.08125 0 0 0.075 0
+1703936 0 2 0 0 5242880 5242880 5767168 0.08125 0 0 0.1 0
+1703936 0 2 0 0 5242880 5242880 5898240 0.08125 0 0 0.125 0
+1703936 0 2 0 0 5242880 5242880 6029312 0.08125 0 0 0.15 0
+1703936 0 2 0 0 5242880 5242880 6160384 0.08125 0 0 0.175 0
+1703936 0 2 0 0 5242880 5242880 6291456 0.08125 0 0 0.2 0
+1703936 0 2 0 0 5242880 5242880 6422528 0.08125 0 0 0.225 0
+1703936 0 2 0 0 5242880 5242880 6553600 0.08125 0 0 0.25 0
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 2621440 0.0875 0 0 -0.5 0
+1835008 0 1 0 0 5242880 5242880 2883584 0.0875 0 0 -0.45 0
+1835008 0 1 0 0 5242880 5242880 3145728 0.0875 0 0 -0.4 0
+1835008 0 1 0 0 5242880 5242880 3407872 0.0875 0 0 -0.35 0
+1835008 0 1 0 0 5242880 5242880 3670016 0.0875 0 0 -0.3 0
+1835008 0 1 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 0
+1835008 0 1 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 0
+1835008 0 1 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 0
+1835008 0 1 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 0
+1835008 0 1 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 0
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 0
+1835008 0 1 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 0
+1835008 0 1 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 0
+1835008 0 1 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 0
+1835008 0 1 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 0
+1835008 0 1 0 0 5242880 5242880 6815744 0.0875 0 0 0.3 0
+1835008 0 1 0 0 5242880 5242880 7077888 0.0875 0 0 0.35 0
+1835008 0 1 0 0 5242880 5242880 7340032 0.0875 0 0 0.4 0
+1835008 0 1 0 0 5242880 5242880 7602176 0.0875 0 0 0.45 0
+1835008 0 1 0 0 5242880 5242880 7864320 0.0875 0 0 0.5 0
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 0
+1835008 0 2 0 0 5242880 5242880 4063232 0.0875 0 0 -0.225 0
+1835008 0 2 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 0
+1835008 0 2 0 0 5242880 5242880 4325376 0.0875 0 0 -0.175 0
+1835008 0 2 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 0
+1835008 0 2 0 0 5242880 5242880 4587520 0.0875 0 0 -0.125 0
+1835008 0 2 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 0
+1835008 0 2 0 0 5242880 5242880 4849664 0.0875 0 0 -0.075 0
+1835008 0 2 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 0
+1835008 0 2 0 0 5242880 5242880 5111808 0.0875 0 0 -0.025 0
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5242880 5242880 5373952 0.0875 0 0 0.025 0
+1835008 0 2 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 0
+1835008 0 2 0 0 5242880 5242880 5636096 0.0875 0 0 0.075 0
+1835008 0 2 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 0
+1835008 0 2 0 0 5242880 5242880 5898240 0.0875 0 0 0.125 0
+1835008 0 2 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 0
+1835008 0 2 0 0 5242880 5242880 6160384 0.0875 0 0 0.175 0
+1835008 0 2 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 0
+1835008 0 2 0 0 5242880 5242880 6422528 0.0875 0 0 0.225 0
+1835008 0 2 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 0
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 3932160 0.09375 0 0 -0.25 0
+1966080 0 2 0 0 5242880 5242880 4063232 0.09375 0 0 -0.225 0
+1966080 0 2 0 0 5242880 5242880 4194304 0.09375 0 0 -0.2 0
+1966080 0 2 0 0 5242880 5242880 4325376 0.09375 0 0 -0.175 0
+1966080 0 2 0 0 5242880 5242880 4456448 0.09375 0 0 -0.15 0
+1966080 0 2 0 0 5242880 5242880 4587520 0.09375 0 0 -0.125 0
+1966080 0 2 0 0 5242880 5242880 4718592 0.09375 0 0 -0.1 0
+1966080 0 2 0 0 5242880 5242880 4849664 0.09375 0 0 -0.075 0
+1966080 0 2 0 0 5242880 5242880 4980736 0.09375 0 0 -0.05 0
+1966080 0 2 0 0 5242880 5242880 5111808 0.09375 0 0 -0.025 0
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5242880 5242880 5373952 0.09375 0 0 0.025 0
+1966080 0 2 0 0 5242880 5242880 5505024 0.09375 0 0 0.05 0
+1966080 0 2 0 0 5242880 5242880 5636096 0.09375 0 0 0.075 0
+1966080 0 2 0 0 5242880 5242880 5767168 0.09375 0 0 0.1 0
+1966080 0 2 0 0 5242880 5242880 5898240 0.09375 0 0 0.125 0
+1966080 0 2 0 0 5242880 5242880 6029312 0.09375 0 0 0.15 0
+1966080 0 2 0 0 5242880 5242880 6160384 0.09375 0 0 0.175 0
+1966080 0 2 0 0 5242880 5242880 6291456 0.09375 0 0 0.2 0
+1966080 0 2 0 0 5242880 5242880 6422528 0.09375 0 0 0.225 0
+1966080 0 2 0 0 5242880 5242880 6553600 0.09375 0 0 0.25 0
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 0 0.1 0 0 -1 0
+2097152 0 0 0 0 5242880 5242880 524288 0.1 0 0 -0.9 0
+2097152 0 0 0 0 5242880 5242880 1048576 0.1 0 0 -0.8 0
+2097152 0 0 0 0 5242880 5242880 1572864 0.1 0 0 -0.7 0
+2097152 0 0 0 0 5242880 5242880 2097152 0.1 0 0 -0.6 0
+2097152 0 0 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 0
+2097152 0 0 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 0
+2097152 0 0 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 0
+2097152 0 0 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 0
+2097152 0 0 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 0
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5242880 5242880 5767168 0.1 0 0 0.1 0
+2097152 0 0 0 0 5242880 5242880 6291456 0.1 0 0 0.2 0
+2097152 0 0 0 0 5242880 5242880 6815744 0.1 0 0 0.3 0
+2097152 0 0 0 0 5242880 5242880 7340032 0.1 0 0 0.4 0
+2097152 0 0 0 0 5242880 5242880 7864320 0.1 0 0 0.5 0
+2097152 0 0 0 0 5242880 5242880 8388608 0.1 0 0 0.6 0
+2097152 0 0 0 0 5242880 5242880 8912896 0.1 0 0 0.7 0
+2097152 0 0 0 0 5242880 5242880 9437184 0.1 0 0 0.8 0
+2097152 0 0 0 0 5242880 5242880 9961472 0.1 0 0 0.9 0
+2097152 0 0 0 0 5242880 5242880 10485760 0.1 0 0 1 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 0
+2097152 0 1 0 0 5242880 5242880 2883584 0.1 0 0 -0.45 0
+2097152 0 1 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 0
+2097152 0 1 0 0 5242880 5242880 3407872 0.1 0 0 -0.35 0
+2097152 0 1 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 0
+2097152 0 1 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 0
+2097152 0 1 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 0
+2097152 0 1 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 0
+2097152 0 1 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 0
+2097152 0 1 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 0
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5242880 5242880 5505024 0.1 0 0 0.05 0
+2097152 0 1 0 0 5242880 5242880 5767168 0.1 0 0 0.1 0
+2097152 0 1 0 0 5242880 5242880 6029312 0.1 0 0 0.15 0
+2097152 0 1 0 0 5242880 5242880 6291456 0.1 0 0 0.2 0
+2097152 0 1 0 0 5242880 5242880 6553600 0.1 0 0 0.25 0
+2097152 0 1 0 0 5242880 5242880 6815744 0.1 0 0 0.3 0
+2097152 0 1 0 0 5242880 5242880 7077888 0.1 0 0 0.35 0
+2097152 0 1 0 0 5242880 5242880 7340032 0.1 0 0 0.4 0
+2097152 0 1 0 0 5242880 5242880 7602176 0.1 0 0 0.45 0
+2097152 0 1 0 0 5242880 5242880 7864320 0.1 0 0 0.5 0
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 0
+2097152 0 2 0 0 5242880 5242880 4063232 0.1 0 0 -0.225 0
+2097152 0 2 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 0
+2097152 0 2 0 0 5242880 5242880 4325376 0.1 0 0 -0.175 0
+2097152 0 2 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 0
+2097152 0 2 0 0 5242880 5242880 4587520 0.1 0 0 -0.125 0
+2097152 0 2 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 0
+2097152 0 2 0 0 5242880 5242880 4849664 0.1 0 0 -0.075 0
+2097152 0 2 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 0
+2097152 0 2 0 0 5242880 5242880 5111808 0.1 0 0 -0.025 0
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5242880 5242880 5373952 0.1 0 0 0.025 0
+2097152 0 2 0 0 5242880 5242880 5505024 0.1 0 0 0.05 0
+2097152 0 2 0 0 5242880 5242880 5636096 0.1 0 0 0.075 0
+2097152 0 2 0 0 5242880 5242880 5767168 0.1 0 0 0.1 0
+2097152 0 2 0 0 5242880 5242880 5898240 0.1 0 0 0.125 0
+2097152 0 2 0 0 5242880 5242880 6029312 0.1 0 0 0.15 0
+2097152 0 2 0 0 5242880 5242880 6160384 0.1 0 0 0.175 0
+2097152 0 2 0 0 5242880 5242880 6291456 0.1 0 0 0.2 0
+2097152 0 2 0 0 5242880 5242880 6422528 0.1 0 0 0.225 0
+2097152 0 2 0 0 5242880 5242880 6553600 0.1 0 0 0.25 0
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz..asc b/Carpet/CarpetInterp/test/waveinterp/phiz..asc
new file mode 100644
index 000000000..b938ba3ed
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz..asc
@@ -0,0 +1,157 @@
+# WAVEMOL::phiz (phiz)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.average.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.average.asc
new file mode 100644
index 000000000..fdac5eceb
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.average.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 -4.31055686718107e-28
+262144 0.0125 1.97543786872278e-28
+393216 0.01875 -3.36315957191392e-28
+524288 0.025 -2.28706553641676e-29
+655360 0.03125 4.46053510248169e-29
+786432 0.0375 6.59777376628402e-30
+917504 0.04375 5.43241173771398e-29
+1048576 0.05 -1.02955025601299e-28
+1179648 0.05625 1.41642046292309e-28
+1310720 0.0625 4.23095685753974e-30
+1441792 0.06875 -1.47532766494434e-29
+1572864 0.075 2.56533622073347e-29
+1703936 0.08125 -3.22222069651101e-29
+1835008 0.0875 4.50084589473848e-30
+1966080 0.09375 3.44325952215393e-29
+2097152 0.1 -4.57505404009262e-28
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.count.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.count.asc
new file mode 100644
index 000000000..633f23024
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.count.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 8000
+131072 0.00625 8000
+262144 0.0125 8000
+393216 0.01875 8000
+524288 0.025 8000
+655360 0.03125 8000
+786432 0.0375 8000
+917504 0.04375 8000
+1048576 0.05 8000
+1179648 0.05625 8000
+1310720 0.0625 8000
+1441792 0.06875 8000
+1572864 0.075 8000
+1703936 0.08125 8000
+1835008 0.0875 8000
+1966080 0.09375 8000
+2097152 0.1 8000
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.maximum.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.maximum.asc
new file mode 100644
index 000000000..aa3fe83ab
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.maximum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 2.52330210059881e-08
+262144 0.0125 2.59751686828268e-09
+393216 0.01875 1.94813765121201e-09
+524288 0.025 1.13718142310167e-09
+655360 0.03125 1.49819814627278e-09
+786432 0.0375 1.92004376518377e-09
+917504 0.04375 2.25411963198039e-09
+1048576 0.05 2.51675670350412e-09
+1179648 0.05625 2.6865148826614e-09
+1310720 0.0625 2.77054086848342e-09
+1441792 0.06875 2.7710016315662e-09
+1572864 0.075 2.71062697591515e-09
+1703936 0.08125 2.68229908058895e-09
+1835008 0.0875 2.6295740571891e-09
+1966080 0.09375 2.53181084986157e-09
+2097152 0.1 2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.minimum.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.minimum.asc
new file mode 100644
index 000000000..eb5814233
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.minimum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 -2.52330210059881e-08
+262144 0.0125 -2.59751686828268e-09
+393216 0.01875 -1.94813765121201e-09
+524288 0.025 -1.13718142310167e-09
+655360 0.03125 -1.49819814627278e-09
+786432 0.0375 -1.92004376518377e-09
+917504 0.04375 -2.25411963198039e-09
+1048576 0.05 -2.51675670350412e-09
+1179648 0.05625 -2.6865148826614e-09
+1310720 0.0625 -2.77054086848342e-09
+1441792 0.06875 -2.7710016315662e-09
+1572864 0.075 -2.71062697591515e-09
+1703936 0.08125 -2.68229908058895e-09
+1835008 0.0875 -2.6295740571891e-09
+1966080 0.09375 -2.53181084986157e-09
+2097152 0.1 -2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.norm1.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.norm1.asc
new file mode 100644
index 000000000..946c7d638
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.norm1.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 1.82764093220369e-11
+262144 0.0125 7.34649051893125e-12
+393216 0.01875 5.91041345682556e-12
+524288 0.025 1.24242890027223e-12
+655360 0.03125 2.57713743237751e-12
+786432 0.0375 2.36124801524173e-12
+917504 0.04375 2.98057299551699e-12
+1048576 0.05 3.03589049525507e-12
+1179648 0.05625 3.36169643546458e-12
+1310720 0.0625 3.61334864722836e-12
+1441792 0.06875 3.8408932292432e-12
+1572864 0.075 3.76844870942376e-12
+1703936 0.08125 3.84025109025805e-12
+1835008 0.0875 3.8614764081443e-12
+1966080 0.09375 3.97285273972385e-12
+2097152 0.1 4.30036623573869e-12
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.norm2.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.norm2.asc
new file mode 100644
index 000000000..ea8e612f8
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.norm2.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 5.18343779507329e-10
+262144 0.0125 1.13025459173354e-10
+393216 0.01875 8.58024498955012e-11
+524288 0.025 2.48311121202448e-11
+655360 0.03125 3.76969874645363e-11
+786432 0.0375 4.28591265832084e-11
+917504 0.04375 5.05689775131338e-11
+1048576 0.05 5.53837109993038e-11
+1179648 0.05625 5.97816057638341e-11
+1310720 0.0625 6.21626122183975e-11
+1441792 0.06875 6.40118017073293e-11
+1572864 0.075 6.41185856980847e-11
+1703936 0.08125 6.40670662348223e-11
+1835008 0.0875 6.32168941306763e-11
+1966080 0.09375 6.2560957347294e-11
+2097152 0.1 6.19448146789363e-11
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.norm_inf.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.norm_inf.asc
new file mode 100644
index 000000000..aa3fe83ab
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.norm_inf.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 2.52330210059881e-08
+262144 0.0125 2.59751686828268e-09
+393216 0.01875 1.94813765121201e-09
+524288 0.025 1.13718142310167e-09
+655360 0.03125 1.49819814627278e-09
+786432 0.0375 1.92004376518377e-09
+917504 0.04375 2.25411963198039e-09
+1048576 0.05 2.51675670350412e-09
+1179648 0.05625 2.6865148826614e-09
+1310720 0.0625 2.77054086848342e-09
+1441792 0.06875 2.7710016315662e-09
+1572864 0.075 2.71062697591515e-09
+1703936 0.08125 2.68229908058895e-09
+1835008 0.0875 2.6295740571891e-09
+1966080 0.09375 2.53181084986157e-09
+2097152 0.1 2.41338321187977e-09
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.sum.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.sum.asc
new file mode 100644
index 000000000..c9dff4e81
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.sum.asc
@@ -0,0 +1,19 @@
+# WAVEMOL::phiz (phiz)
+# iteration time data
+0 0 0
+131072 0.00625 -3.44844549374486e-24
+262144 0.0125 1.58035029497822e-24
+393216 0.01875 -2.69052765753114e-24
+524288 0.025 -1.82965242913341e-25
+655360 0.03125 3.56842808198535e-25
+786432 0.0375 5.27821901302721e-26
+917504 0.04375 4.34592939017118e-25
+1048576 0.05 -8.23640204810396e-25
+1179648 0.05625 1.13313637033847e-24
+1310720 0.0625 3.3847654860318e-26
+1441792 0.06875 -1.18026213195547e-25
+1572864 0.075 2.05226897658678e-25
+1703936 0.08125 -2.5777765572088e-25
+1835008 0.0875 3.60067671579079e-26
+1966080 0.09375 2.75460761772315e-25
+2097152 0.1 -3.6600432320741e-24
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.x.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.x.asc
new file mode 100644
index 000000000..d4e4efb6e
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.x.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phiz x (phiz)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 0 5242880 5242880 0 -1 0 0 0
+0 0 0 0 0 524288 5242880 5242880 0 -0.9 0 0 0
+0 0 0 0 0 1048576 5242880 5242880 0 -0.8 0 0 0
+0 0 0 0 0 1572864 5242880 5242880 0 -0.7 0 0 0
+0 0 0 0 0 2097152 5242880 5242880 0 -0.6 0 0 0
+0 0 0 0 0 2621440 5242880 5242880 0 -0.5 0 0 0
+0 0 0 0 0 3145728 5242880 5242880 0 -0.4 0 0 0
+0 0 0 0 0 3670016 5242880 5242880 0 -0.3 0 0 0
+0 0 0 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 0 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 0 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 0 0 0 6815744 5242880 5242880 0 0.3 0 0 0
+0 0 0 0 0 7340032 5242880 5242880 0 0.4 0 0 0
+0 0 0 0 0 7864320 5242880 5242880 0 0.5 0 0 0
+0 0 0 0 0 8388608 5242880 5242880 0 0.6 0 0 0
+0 0 0 0 0 8912896 5242880 5242880 0 0.7 0 0 0
+0 0 0 0 0 9437184 5242880 5242880 0 0.8 0 0 0
+0 0 0 0 0 9961472 5242880 5242880 0 0.9 0 0 0
+0 0 0 0 0 10485760 5242880 5242880 0 1 0 0 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 2621440 5242880 5242880 0 -0.5 0 0 0
+0 0 1 0 0 2883584 5242880 5242880 0 -0.45 0 0 0
+0 0 1 0 0 3145728 5242880 5242880 0 -0.4 0 0 0
+0 0 1 0 0 3407872 5242880 5242880 0 -0.35 0 0 0
+0 0 1 0 0 3670016 5242880 5242880 0 -0.3 0 0 0
+0 0 1 0 0 3932160 5242880 5242880 0 -0.25 0 0 0
+0 0 1 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 1 0 0 4456448 5242880 5242880 0 -0.15 0 0 0
+0 0 1 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 1 0 0 4980736 5242880 5242880 0 -0.05 0 0 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5505024 5242880 5242880 0 0.05 0 0 0
+0 0 1 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 1 0 0 6029312 5242880 5242880 0 0.15 0 0 0
+0 0 1 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 1 0 0 6553600 5242880 5242880 0 0.25 0 0 0
+0 0 1 0 0 6815744 5242880 5242880 0 0.3 0 0 0
+0 0 1 0 0 7077888 5242880 5242880 0 0.35 0 0 0
+0 0 1 0 0 7340032 5242880 5242880 0 0.4 0 0 0
+0 0 1 0 0 7602176 5242880 5242880 0 0.45 0 0 0
+0 0 1 0 0 7864320 5242880 5242880 0 0.5 0 0 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 3932160 5242880 5242880 0 -0.25 0 0 0
+0 0 2 0 0 4063232 5242880 5242880 0 -0.225 0 0 0
+0 0 2 0 0 4194304 5242880 5242880 0 -0.2 0 0 0
+0 0 2 0 0 4325376 5242880 5242880 0 -0.175 0 0 0
+0 0 2 0 0 4456448 5242880 5242880 0 -0.15 0 0 0
+0 0 2 0 0 4587520 5242880 5242880 0 -0.125 0 0 0
+0 0 2 0 0 4718592 5242880 5242880 0 -0.1 0 0 0
+0 0 2 0 0 4849664 5242880 5242880 0 -0.075 0 0 0
+0 0 2 0 0 4980736 5242880 5242880 0 -0.05 0 0 0
+0 0 2 0 0 5111808 5242880 5242880 0 -0.025 0 0 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5373952 5242880 5242880 0 0.025 0 0 0
+0 0 2 0 0 5505024 5242880 5242880 0 0.05 0 0 0
+0 0 2 0 0 5636096 5242880 5242880 0 0.075 0 0 0
+0 0 2 0 0 5767168 5242880 5242880 0 0.1 0 0 0
+0 0 2 0 0 5898240 5242880 5242880 0 0.125 0 0 0
+0 0 2 0 0 6029312 5242880 5242880 0 0.15 0 0 0
+0 0 2 0 0 6160384 5242880 5242880 0 0.175 0 0 0
+0 0 2 0 0 6291456 5242880 5242880 0 0.2 0 0 0
+0 0 2 0 0 6422528 5242880 5242880 0 0.225 0 0 0
+0 0 2 0 0 6553600 5242880 5242880 0 0.25 0 0 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 3932160 5242880 5242880 0.00625 -0.25 0 0 0
+131072 0 2 0 0 4063232 5242880 5242880 0.00625 -0.225 0 0 0
+131072 0 2 0 0 4194304 5242880 5242880 0.00625 -0.2 0 0 0
+131072 0 2 0 0 4325376 5242880 5242880 0.00625 -0.175 0 0 0
+131072 0 2 0 0 4456448 5242880 5242880 0.00625 -0.15 0 0 0
+131072 0 2 0 0 4587520 5242880 5242880 0.00625 -0.125 0 0 0
+131072 0 2 0 0 4718592 5242880 5242880 0.00625 -0.1 0 0 0
+131072 0 2 0 0 4849664 5242880 5242880 0.00625 -0.075 0 0 0
+131072 0 2 0 0 4980736 5242880 5242880 0.00625 -0.05 0 0 0
+131072 0 2 0 0 5111808 5242880 5242880 0.00625 -0.025 0 0 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5373952 5242880 5242880 0.00625 0.025 0 0 0
+131072 0 2 0 0 5505024 5242880 5242880 0.00625 0.05 0 0 0
+131072 0 2 0 0 5636096 5242880 5242880 0.00625 0.075 0 0 0
+131072 0 2 0 0 5767168 5242880 5242880 0.00625 0.1 0 0 0
+131072 0 2 0 0 5898240 5242880 5242880 0.00625 0.125 0 0 0
+131072 0 2 0 0 6029312 5242880 5242880 0.00625 0.15 0 0 0
+131072 0 2 0 0 6160384 5242880 5242880 0.00625 0.175 0 0 0
+131072 0 2 0 0 6291456 5242880 5242880 0.00625 0.2 0 0 0
+131072 0 2 0 0 6422528 5242880 5242880 0.00625 0.225 0 0 0
+131072 0 2 0 0 6553600 5242880 5242880 0.00625 0.25 0 0 0
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 2621440 5242880 5242880 0.0125 -0.5 0 0 0
+262144 0 1 0 0 2883584 5242880 5242880 0.0125 -0.45 0 0 0
+262144 0 1 0 0 3145728 5242880 5242880 0.0125 -0.4 0 0 0
+262144 0 1 0 0 3407872 5242880 5242880 0.0125 -0.35 0 0 0
+262144 0 1 0 0 3670016 5242880 5242880 0.0125 -0.3 0 0 0
+262144 0 1 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 0
+262144 0 1 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 0
+262144 0 1 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 0
+262144 0 1 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 0
+262144 0 1 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 0
+262144 0 1 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 0
+262144 0 1 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 0
+262144 0 1 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 0
+262144 0 1 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 0
+262144 0 1 0 0 6815744 5242880 5242880 0.0125 0.3 0 0 0
+262144 0 1 0 0 7077888 5242880 5242880 0.0125 0.35 0 0 0
+262144 0 1 0 0 7340032 5242880 5242880 0.0125 0.4 0 0 0
+262144 0 1 0 0 7602176 5242880 5242880 0.0125 0.45 0 0 0
+262144 0 1 0 0 7864320 5242880 5242880 0.0125 0.5 0 0 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 3932160 5242880 5242880 0.0125 -0.25 0 0 0
+262144 0 2 0 0 4063232 5242880 5242880 0.0125 -0.225 0 0 0
+262144 0 2 0 0 4194304 5242880 5242880 0.0125 -0.2 0 0 0
+262144 0 2 0 0 4325376 5242880 5242880 0.0125 -0.175 0 0 0
+262144 0 2 0 0 4456448 5242880 5242880 0.0125 -0.15 0 0 0
+262144 0 2 0 0 4587520 5242880 5242880 0.0125 -0.125 0 0 0
+262144 0 2 0 0 4718592 5242880 5242880 0.0125 -0.1 0 0 0
+262144 0 2 0 0 4849664 5242880 5242880 0.0125 -0.075 0 0 0
+262144 0 2 0 0 4980736 5242880 5242880 0.0125 -0.05 0 0 0
+262144 0 2 0 0 5111808 5242880 5242880 0.0125 -0.025 0 0 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5373952 5242880 5242880 0.0125 0.025 0 0 0
+262144 0 2 0 0 5505024 5242880 5242880 0.0125 0.05 0 0 0
+262144 0 2 0 0 5636096 5242880 5242880 0.0125 0.075 0 0 0
+262144 0 2 0 0 5767168 5242880 5242880 0.0125 0.1 0 0 0
+262144 0 2 0 0 5898240 5242880 5242880 0.0125 0.125 0 0 0
+262144 0 2 0 0 6029312 5242880 5242880 0.0125 0.15 0 0 0
+262144 0 2 0 0 6160384 5242880 5242880 0.0125 0.175 0 0 0
+262144 0 2 0 0 6291456 5242880 5242880 0.0125 0.2 0 0 0
+262144 0 2 0 0 6422528 5242880 5242880 0.0125 0.225 0 0 0
+262144 0 2 0 0 6553600 5242880 5242880 0.0125 0.25 0 0 0
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 3932160 5242880 5242880 0.01875 -0.25 0 0 0
+393216 0 2 0 0 4063232 5242880 5242880 0.01875 -0.225 0 0 0
+393216 0 2 0 0 4194304 5242880 5242880 0.01875 -0.2 0 0 0
+393216 0 2 0 0 4325376 5242880 5242880 0.01875 -0.175 0 0 0
+393216 0 2 0 0 4456448 5242880 5242880 0.01875 -0.15 0 0 0
+393216 0 2 0 0 4587520 5242880 5242880 0.01875 -0.125 0 0 0
+393216 0 2 0 0 4718592 5242880 5242880 0.01875 -0.1 0 0 0
+393216 0 2 0 0 4849664 5242880 5242880 0.01875 -0.075 0 0 0
+393216 0 2 0 0 4980736 5242880 5242880 0.01875 -0.05 0 0 0
+393216 0 2 0 0 5111808 5242880 5242880 0.01875 -0.025 0 0 0
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5373952 5242880 5242880 0.01875 0.025 0 0 0
+393216 0 2 0 0 5505024 5242880 5242880 0.01875 0.05 0 0 0
+393216 0 2 0 0 5636096 5242880 5242880 0.01875 0.075 0 0 0
+393216 0 2 0 0 5767168 5242880 5242880 0.01875 0.1 0 0 0
+393216 0 2 0 0 5898240 5242880 5242880 0.01875 0.125 0 0 0
+393216 0 2 0 0 6029312 5242880 5242880 0.01875 0.15 0 0 0
+393216 0 2 0 0 6160384 5242880 5242880 0.01875 0.175 0 0 0
+393216 0 2 0 0 6291456 5242880 5242880 0.01875 0.2 0 0 0
+393216 0 2 0 0 6422528 5242880 5242880 0.01875 0.225 0 0 0
+393216 0 2 0 0 6553600 5242880 5242880 0.01875 0.25 0 0 0
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 0 5242880 5242880 0.025 -1 0 0 0
+524288 0 0 0 0 524288 5242880 5242880 0.025 -0.9 0 0 0
+524288 0 0 0 0 1048576 5242880 5242880 0.025 -0.8 0 0 0
+524288 0 0 0 0 1572864 5242880 5242880 0.025 -0.7 0 0 0
+524288 0 0 0 0 2097152 5242880 5242880 0.025 -0.6 0 0 0
+524288 0 0 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 0
+524288 0 0 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 0
+524288 0 0 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 0
+524288 0 0 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0
+524288 0 0 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 0
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5767168 5242880 5242880 0.025 0.1 0 0 0
+524288 0 0 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0
+524288 0 0 0 0 6815744 5242880 5242880 0.025 0.3 0 0 0
+524288 0 0 0 0 7340032 5242880 5242880 0.025 0.4 0 0 0
+524288 0 0 0 0 7864320 5242880 5242880 0.025 0.5 0 0 0
+524288 0 0 0 0 8388608 5242880 5242880 0.025 0.6 0 0 0
+524288 0 0 0 0 8912896 5242880 5242880 0.025 0.7 0 0 0
+524288 0 0 0 0 9437184 5242880 5242880 0.025 0.8 0 0 0
+524288 0 0 0 0 9961472 5242880 5242880 0.025 0.9 0 0 0
+524288 0 0 0 0 10485760 5242880 5242880 0.025 1 0 0 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 2621440 5242880 5242880 0.025 -0.5 0 0 0
+524288 0 1 0 0 2883584 5242880 5242880 0.025 -0.45 0 0 0
+524288 0 1 0 0 3145728 5242880 5242880 0.025 -0.4 0 0 0
+524288 0 1 0 0 3407872 5242880 5242880 0.025 -0.35 0 0 0
+524288 0 1 0 0 3670016 5242880 5242880 0.025 -0.3 0 0 0
+524288 0 1 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 0
+524288 0 1 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0
+524288 0 1 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 0
+524288 0 1 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 0
+524288 0 1 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 0
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5505024 5242880 5242880 0.025 0.05 0 0 0
+524288 0 1 0 0 5767168 5242880 5242880 0.025 0.1 0 0 0
+524288 0 1 0 0 6029312 5242880 5242880 0.025 0.15 0 0 0
+524288 0 1 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0
+524288 0 1 0 0 6553600 5242880 5242880 0.025 0.25 0 0 0
+524288 0 1 0 0 6815744 5242880 5242880 0.025 0.3 0 0 0
+524288 0 1 0 0 7077888 5242880 5242880 0.025 0.35 0 0 0
+524288 0 1 0 0 7340032 5242880 5242880 0.025 0.4 0 0 0
+524288 0 1 0 0 7602176 5242880 5242880 0.025 0.45 0 0 0
+524288 0 1 0 0 7864320 5242880 5242880 0.025 0.5 0 0 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 3932160 5242880 5242880 0.025 -0.25 0 0 0
+524288 0 2 0 0 4063232 5242880 5242880 0.025 -0.225 0 0 0
+524288 0 2 0 0 4194304 5242880 5242880 0.025 -0.2 0 0 0
+524288 0 2 0 0 4325376 5242880 5242880 0.025 -0.175 0 0 0
+524288 0 2 0 0 4456448 5242880 5242880 0.025 -0.15 0 0 0
+524288 0 2 0 0 4587520 5242880 5242880 0.025 -0.125 0 0 0
+524288 0 2 0 0 4718592 5242880 5242880 0.025 -0.1 0 0 0
+524288 0 2 0 0 4849664 5242880 5242880 0.025 -0.075 0 0 0
+524288 0 2 0 0 4980736 5242880 5242880 0.025 -0.05 0 0 0
+524288 0 2 0 0 5111808 5242880 5242880 0.025 -0.025 0 0 0
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5373952 5242880 5242880 0.025 0.025 0 0 0
+524288 0 2 0 0 5505024 5242880 5242880 0.025 0.05 0 0 0
+524288 0 2 0 0 5636096 5242880 5242880 0.025 0.075 0 0 0
+524288 0 2 0 0 5767168 5242880 5242880 0.025 0.1 0 0 0
+524288 0 2 0 0 5898240 5242880 5242880 0.025 0.125 0 0 0
+524288 0 2 0 0 6029312 5242880 5242880 0.025 0.15 0 0 0
+524288 0 2 0 0 6160384 5242880 5242880 0.025 0.175 0 0 0
+524288 0 2 0 0 6291456 5242880 5242880 0.025 0.2 0 0 0
+524288 0 2 0 0 6422528 5242880 5242880 0.025 0.225 0 0 0
+524288 0 2 0 0 6553600 5242880 5242880 0.025 0.25 0 0 0
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 3932160 5242880 5242880 0.03125 -0.25 0 0 0
+655360 0 2 0 0 4063232 5242880 5242880 0.03125 -0.225 0 0 0
+655360 0 2 0 0 4194304 5242880 5242880 0.03125 -0.2 0 0 0
+655360 0 2 0 0 4325376 5242880 5242880 0.03125 -0.175 0 0 0
+655360 0 2 0 0 4456448 5242880 5242880 0.03125 -0.15 0 0 0
+655360 0 2 0 0 4587520 5242880 5242880 0.03125 -0.125 0 0 0
+655360 0 2 0 0 4718592 5242880 5242880 0.03125 -0.1 0 0 0
+655360 0 2 0 0 4849664 5242880 5242880 0.03125 -0.075 0 0 0
+655360 0 2 0 0 4980736 5242880 5242880 0.03125 -0.05 0 0 0
+655360 0 2 0 0 5111808 5242880 5242880 0.03125 -0.025 0 0 0
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5373952 5242880 5242880 0.03125 0.025 0 0 0
+655360 0 2 0 0 5505024 5242880 5242880 0.03125 0.05 0 0 0
+655360 0 2 0 0 5636096 5242880 5242880 0.03125 0.075 0 0 0
+655360 0 2 0 0 5767168 5242880 5242880 0.03125 0.1 0 0 0
+655360 0 2 0 0 5898240 5242880 5242880 0.03125 0.125 0 0 0
+655360 0 2 0 0 6029312 5242880 5242880 0.03125 0.15 0 0 0
+655360 0 2 0 0 6160384 5242880 5242880 0.03125 0.175 0 0 0
+655360 0 2 0 0 6291456 5242880 5242880 0.03125 0.2 0 0 0
+655360 0 2 0 0 6422528 5242880 5242880 0.03125 0.225 0 0 0
+655360 0 2 0 0 6553600 5242880 5242880 0.03125 0.25 0 0 0
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 2621440 5242880 5242880 0.0375 -0.5 0 0 0
+786432 0 1 0 0 2883584 5242880 5242880 0.0375 -0.45 0 0 0
+786432 0 1 0 0 3145728 5242880 5242880 0.0375 -0.4 0 0 0
+786432 0 1 0 0 3407872 5242880 5242880 0.0375 -0.35 0 0 0
+786432 0 1 0 0 3670016 5242880 5242880 0.0375 -0.3 0 0 0
+786432 0 1 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 0
+786432 0 1 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 0
+786432 0 1 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 0
+786432 0 1 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 0
+786432 0 1 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 0
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 0
+786432 0 1 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 0
+786432 0 1 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 0
+786432 0 1 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 0
+786432 0 1 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 0
+786432 0 1 0 0 6815744 5242880 5242880 0.0375 0.3 0 0 0
+786432 0 1 0 0 7077888 5242880 5242880 0.0375 0.35 0 0 0
+786432 0 1 0 0 7340032 5242880 5242880 0.0375 0.4 0 0 0
+786432 0 1 0 0 7602176 5242880 5242880 0.0375 0.45 0 0 0
+786432 0 1 0 0 7864320 5242880 5242880 0.0375 0.5 0 0 0
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 3932160 5242880 5242880 0.0375 -0.25 0 0 0
+786432 0 2 0 0 4063232 5242880 5242880 0.0375 -0.225 0 0 0
+786432 0 2 0 0 4194304 5242880 5242880 0.0375 -0.2 0 0 0
+786432 0 2 0 0 4325376 5242880 5242880 0.0375 -0.175 0 0 0
+786432 0 2 0 0 4456448 5242880 5242880 0.0375 -0.15 0 0 0
+786432 0 2 0 0 4587520 5242880 5242880 0.0375 -0.125 0 0 0
+786432 0 2 0 0 4718592 5242880 5242880 0.0375 -0.1 0 0 0
+786432 0 2 0 0 4849664 5242880 5242880 0.0375 -0.075 0 0 0
+786432 0 2 0 0 4980736 5242880 5242880 0.0375 -0.05 0 0 0
+786432 0 2 0 0 5111808 5242880 5242880 0.0375 -0.025 0 0 0
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5373952 5242880 5242880 0.0375 0.025 0 0 0
+786432 0 2 0 0 5505024 5242880 5242880 0.0375 0.05 0 0 0
+786432 0 2 0 0 5636096 5242880 5242880 0.0375 0.075 0 0 0
+786432 0 2 0 0 5767168 5242880 5242880 0.0375 0.1 0 0 0
+786432 0 2 0 0 5898240 5242880 5242880 0.0375 0.125 0 0 0
+786432 0 2 0 0 6029312 5242880 5242880 0.0375 0.15 0 0 0
+786432 0 2 0 0 6160384 5242880 5242880 0.0375 0.175 0 0 0
+786432 0 2 0 0 6291456 5242880 5242880 0.0375 0.2 0 0 0
+786432 0 2 0 0 6422528 5242880 5242880 0.0375 0.225 0 0 0
+786432 0 2 0 0 6553600 5242880 5242880 0.0375 0.25 0 0 0
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 3932160 5242880 5242880 0.04375 -0.25 0 0 0
+917504 0 2 0 0 4063232 5242880 5242880 0.04375 -0.225 0 0 0
+917504 0 2 0 0 4194304 5242880 5242880 0.04375 -0.2 0 0 0
+917504 0 2 0 0 4325376 5242880 5242880 0.04375 -0.175 0 0 0
+917504 0 2 0 0 4456448 5242880 5242880 0.04375 -0.15 0 0 0
+917504 0 2 0 0 4587520 5242880 5242880 0.04375 -0.125 0 0 0
+917504 0 2 0 0 4718592 5242880 5242880 0.04375 -0.1 0 0 0
+917504 0 2 0 0 4849664 5242880 5242880 0.04375 -0.075 0 0 0
+917504 0 2 0 0 4980736 5242880 5242880 0.04375 -0.05 0 0 0
+917504 0 2 0 0 5111808 5242880 5242880 0.04375 -0.025 0 0 0
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5373952 5242880 5242880 0.04375 0.025 0 0 0
+917504 0 2 0 0 5505024 5242880 5242880 0.04375 0.05 0 0 0
+917504 0 2 0 0 5636096 5242880 5242880 0.04375 0.075 0 0 0
+917504 0 2 0 0 5767168 5242880 5242880 0.04375 0.1 0 0 0
+917504 0 2 0 0 5898240 5242880 5242880 0.04375 0.125 0 0 0
+917504 0 2 0 0 6029312 5242880 5242880 0.04375 0.15 0 0 0
+917504 0 2 0 0 6160384 5242880 5242880 0.04375 0.175 0 0 0
+917504 0 2 0 0 6291456 5242880 5242880 0.04375 0.2 0 0 0
+917504 0 2 0 0 6422528 5242880 5242880 0.04375 0.225 0 0 0
+917504 0 2 0 0 6553600 5242880 5242880 0.04375 0.25 0 0 0
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 0 5242880 5242880 0.05 -1 0 0 0
+1048576 0 0 0 0 524288 5242880 5242880 0.05 -0.9 0 0 0
+1048576 0 0 0 0 1048576 5242880 5242880 0.05 -0.8 0 0 0
+1048576 0 0 0 0 1572864 5242880 5242880 0.05 -0.7 0 0 0
+1048576 0 0 0 0 2097152 5242880 5242880 0.05 -0.6 0 0 0
+1048576 0 0 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 0
+1048576 0 0 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 0
+1048576 0 0 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 0
+1048576 0 0 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0
+1048576 0 0 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 0
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5767168 5242880 5242880 0.05 0.1 0 0 0
+1048576 0 0 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0
+1048576 0 0 0 0 6815744 5242880 5242880 0.05 0.3 0 0 0
+1048576 0 0 0 0 7340032 5242880 5242880 0.05 0.4 0 0 0
+1048576 0 0 0 0 7864320 5242880 5242880 0.05 0.5 0 0 0
+1048576 0 0 0 0 8388608 5242880 5242880 0.05 0.6 0 0 0
+1048576 0 0 0 0 8912896 5242880 5242880 0.05 0.7 0 0 0
+1048576 0 0 0 0 9437184 5242880 5242880 0.05 0.8 0 0 0
+1048576 0 0 0 0 9961472 5242880 5242880 0.05 0.9 0 0 0
+1048576 0 0 0 0 10485760 5242880 5242880 0.05 1 0 0 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 2621440 5242880 5242880 0.05 -0.5 0 0 0
+1048576 0 1 0 0 2883584 5242880 5242880 0.05 -0.45 0 0 0
+1048576 0 1 0 0 3145728 5242880 5242880 0.05 -0.4 0 0 0
+1048576 0 1 0 0 3407872 5242880 5242880 0.05 -0.35 0 0 0
+1048576 0 1 0 0 3670016 5242880 5242880 0.05 -0.3 0 0 0
+1048576 0 1 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 0
+1048576 0 1 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0
+1048576 0 1 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 0
+1048576 0 1 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 0
+1048576 0 1 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 0
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5505024 5242880 5242880 0.05 0.05 0 0 0
+1048576 0 1 0 0 5767168 5242880 5242880 0.05 0.1 0 0 0
+1048576 0 1 0 0 6029312 5242880 5242880 0.05 0.15 0 0 0
+1048576 0 1 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0
+1048576 0 1 0 0 6553600 5242880 5242880 0.05 0.25 0 0 0
+1048576 0 1 0 0 6815744 5242880 5242880 0.05 0.3 0 0 0
+1048576 0 1 0 0 7077888 5242880 5242880 0.05 0.35 0 0 0
+1048576 0 1 0 0 7340032 5242880 5242880 0.05 0.4 0 0 0
+1048576 0 1 0 0 7602176 5242880 5242880 0.05 0.45 0 0 0
+1048576 0 1 0 0 7864320 5242880 5242880 0.05 0.5 0 0 0
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 3932160 5242880 5242880 0.05 -0.25 0 0 0
+1048576 0 2 0 0 4063232 5242880 5242880 0.05 -0.225 0 0 0
+1048576 0 2 0 0 4194304 5242880 5242880 0.05 -0.2 0 0 0
+1048576 0 2 0 0 4325376 5242880 5242880 0.05 -0.175 0 0 0
+1048576 0 2 0 0 4456448 5242880 5242880 0.05 -0.15 0 0 0
+1048576 0 2 0 0 4587520 5242880 5242880 0.05 -0.125 0 0 0
+1048576 0 2 0 0 4718592 5242880 5242880 0.05 -0.1 0 0 0
+1048576 0 2 0 0 4849664 5242880 5242880 0.05 -0.075 0 0 0
+1048576 0 2 0 0 4980736 5242880 5242880 0.05 -0.05 0 0 0
+1048576 0 2 0 0 5111808 5242880 5242880 0.05 -0.025 0 0 0
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5373952 5242880 5242880 0.05 0.025 0 0 0
+1048576 0 2 0 0 5505024 5242880 5242880 0.05 0.05 0 0 0
+1048576 0 2 0 0 5636096 5242880 5242880 0.05 0.075 0 0 0
+1048576 0 2 0 0 5767168 5242880 5242880 0.05 0.1 0 0 0
+1048576 0 2 0 0 5898240 5242880 5242880 0.05 0.125 0 0 0
+1048576 0 2 0 0 6029312 5242880 5242880 0.05 0.15 0 0 0
+1048576 0 2 0 0 6160384 5242880 5242880 0.05 0.175 0 0 0
+1048576 0 2 0 0 6291456 5242880 5242880 0.05 0.2 0 0 0
+1048576 0 2 0 0 6422528 5242880 5242880 0.05 0.225 0 0 0
+1048576 0 2 0 0 6553600 5242880 5242880 0.05 0.25 0 0 0
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 3932160 5242880 5242880 0.05625 -0.25 0 0 0
+1179648 0 2 0 0 4063232 5242880 5242880 0.05625 -0.225 0 0 0
+1179648 0 2 0 0 4194304 5242880 5242880 0.05625 -0.2 0 0 0
+1179648 0 2 0 0 4325376 5242880 5242880 0.05625 -0.175 0 0 0
+1179648 0 2 0 0 4456448 5242880 5242880 0.05625 -0.15 0 0 0
+1179648 0 2 0 0 4587520 5242880 5242880 0.05625 -0.125 0 0 0
+1179648 0 2 0 0 4718592 5242880 5242880 0.05625 -0.1 0 0 0
+1179648 0 2 0 0 4849664 5242880 5242880 0.05625 -0.075 0 0 0
+1179648 0 2 0 0 4980736 5242880 5242880 0.05625 -0.05 0 0 0
+1179648 0 2 0 0 5111808 5242880 5242880 0.05625 -0.025 0 0 0
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5373952 5242880 5242880 0.05625 0.025 0 0 0
+1179648 0 2 0 0 5505024 5242880 5242880 0.05625 0.05 0 0 0
+1179648 0 2 0 0 5636096 5242880 5242880 0.05625 0.075 0 0 0
+1179648 0 2 0 0 5767168 5242880 5242880 0.05625 0.1 0 0 0
+1179648 0 2 0 0 5898240 5242880 5242880 0.05625 0.125 0 0 0
+1179648 0 2 0 0 6029312 5242880 5242880 0.05625 0.15 0 0 0
+1179648 0 2 0 0 6160384 5242880 5242880 0.05625 0.175 0 0 0
+1179648 0 2 0 0 6291456 5242880 5242880 0.05625 0.2 0 0 0
+1179648 0 2 0 0 6422528 5242880 5242880 0.05625 0.225 0 0 0
+1179648 0 2 0 0 6553600 5242880 5242880 0.05625 0.25 0 0 0
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 2621440 5242880 5242880 0.0625 -0.5 0 0 0
+1310720 0 1 0 0 2883584 5242880 5242880 0.0625 -0.45 0 0 0
+1310720 0 1 0 0 3145728 5242880 5242880 0.0625 -0.4 0 0 0
+1310720 0 1 0 0 3407872 5242880 5242880 0.0625 -0.35 0 0 0
+1310720 0 1 0 0 3670016 5242880 5242880 0.0625 -0.3 0 0 0
+1310720 0 1 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 0
+1310720 0 1 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 0
+1310720 0 1 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 0
+1310720 0 1 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 0
+1310720 0 1 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 0
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 0
+1310720 0 1 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 0
+1310720 0 1 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 0
+1310720 0 1 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 0
+1310720 0 1 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 0
+1310720 0 1 0 0 6815744 5242880 5242880 0.0625 0.3 0 0 0
+1310720 0 1 0 0 7077888 5242880 5242880 0.0625 0.35 0 0 0
+1310720 0 1 0 0 7340032 5242880 5242880 0.0625 0.4 0 0 0
+1310720 0 1 0 0 7602176 5242880 5242880 0.0625 0.45 0 0 0
+1310720 0 1 0 0 7864320 5242880 5242880 0.0625 0.5 0 0 0
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 3932160 5242880 5242880 0.0625 -0.25 0 0 0
+1310720 0 2 0 0 4063232 5242880 5242880 0.0625 -0.225 0 0 0
+1310720 0 2 0 0 4194304 5242880 5242880 0.0625 -0.2 0 0 0
+1310720 0 2 0 0 4325376 5242880 5242880 0.0625 -0.175 0 0 0
+1310720 0 2 0 0 4456448 5242880 5242880 0.0625 -0.15 0 0 0
+1310720 0 2 0 0 4587520 5242880 5242880 0.0625 -0.125 0 0 0
+1310720 0 2 0 0 4718592 5242880 5242880 0.0625 -0.1 0 0 0
+1310720 0 2 0 0 4849664 5242880 5242880 0.0625 -0.075 0 0 0
+1310720 0 2 0 0 4980736 5242880 5242880 0.0625 -0.05 0 0 0
+1310720 0 2 0 0 5111808 5242880 5242880 0.0625 -0.025 0 0 0
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5373952 5242880 5242880 0.0625 0.025 0 0 0
+1310720 0 2 0 0 5505024 5242880 5242880 0.0625 0.05 0 0 0
+1310720 0 2 0 0 5636096 5242880 5242880 0.0625 0.075 0 0 0
+1310720 0 2 0 0 5767168 5242880 5242880 0.0625 0.1 0 0 0
+1310720 0 2 0 0 5898240 5242880 5242880 0.0625 0.125 0 0 0
+1310720 0 2 0 0 6029312 5242880 5242880 0.0625 0.15 0 0 0
+1310720 0 2 0 0 6160384 5242880 5242880 0.0625 0.175 0 0 0
+1310720 0 2 0 0 6291456 5242880 5242880 0.0625 0.2 0 0 0
+1310720 0 2 0 0 6422528 5242880 5242880 0.0625 0.225 0 0 0
+1310720 0 2 0 0 6553600 5242880 5242880 0.0625 0.25 0 0 0
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 3932160 5242880 5242880 0.06875 -0.25 0 0 0
+1441792 0 2 0 0 4063232 5242880 5242880 0.06875 -0.225 0 0 0
+1441792 0 2 0 0 4194304 5242880 5242880 0.06875 -0.2 0 0 0
+1441792 0 2 0 0 4325376 5242880 5242880 0.06875 -0.175 0 0 0
+1441792 0 2 0 0 4456448 5242880 5242880 0.06875 -0.15 0 0 0
+1441792 0 2 0 0 4587520 5242880 5242880 0.06875 -0.125 0 0 0
+1441792 0 2 0 0 4718592 5242880 5242880 0.06875 -0.1 0 0 0
+1441792 0 2 0 0 4849664 5242880 5242880 0.06875 -0.075 0 0 0
+1441792 0 2 0 0 4980736 5242880 5242880 0.06875 -0.05 0 0 0
+1441792 0 2 0 0 5111808 5242880 5242880 0.06875 -0.025 0 0 0
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5373952 5242880 5242880 0.06875 0.025 0 0 0
+1441792 0 2 0 0 5505024 5242880 5242880 0.06875 0.05 0 0 0
+1441792 0 2 0 0 5636096 5242880 5242880 0.06875 0.075 0 0 0
+1441792 0 2 0 0 5767168 5242880 5242880 0.06875 0.1 0 0 0
+1441792 0 2 0 0 5898240 5242880 5242880 0.06875 0.125 0 0 0
+1441792 0 2 0 0 6029312 5242880 5242880 0.06875 0.15 0 0 0
+1441792 0 2 0 0 6160384 5242880 5242880 0.06875 0.175 0 0 0
+1441792 0 2 0 0 6291456 5242880 5242880 0.06875 0.2 0 0 0
+1441792 0 2 0 0 6422528 5242880 5242880 0.06875 0.225 0 0 0
+1441792 0 2 0 0 6553600 5242880 5242880 0.06875 0.25 0 0 0
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 0 5242880 5242880 0.075 -1 0 0 0
+1572864 0 0 0 0 524288 5242880 5242880 0.075 -0.9 0 0 0
+1572864 0 0 0 0 1048576 5242880 5242880 0.075 -0.8 0 0 0
+1572864 0 0 0 0 1572864 5242880 5242880 0.075 -0.7 0 0 0
+1572864 0 0 0 0 2097152 5242880 5242880 0.075 -0.6 0 0 0
+1572864 0 0 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 0
+1572864 0 0 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 0
+1572864 0 0 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 0
+1572864 0 0 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 0
+1572864 0 0 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 0
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5767168 5242880 5242880 0.075 0.1 0 0 0
+1572864 0 0 0 0 6291456 5242880 5242880 0.075 0.2 0 0 0
+1572864 0 0 0 0 6815744 5242880 5242880 0.075 0.3 0 0 0
+1572864 0 0 0 0 7340032 5242880 5242880 0.075 0.4 0 0 0
+1572864 0 0 0 0 7864320 5242880 5242880 0.075 0.5 0 0 0
+1572864 0 0 0 0 8388608 5242880 5242880 0.075 0.6 0 0 0
+1572864 0 0 0 0 8912896 5242880 5242880 0.075 0.7 0 0 0
+1572864 0 0 0 0 9437184 5242880 5242880 0.075 0.8 0 0 0
+1572864 0 0 0 0 9961472 5242880 5242880 0.075 0.9 0 0 0
+1572864 0 0 0 0 10485760 5242880 5242880 0.075 1 0 0 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 2621440 5242880 5242880 0.075 -0.5 0 0 0
+1572864 0 1 0 0 2883584 5242880 5242880 0.075 -0.45 0 0 0
+1572864 0 1 0 0 3145728 5242880 5242880 0.075 -0.4 0 0 0
+1572864 0 1 0 0 3407872 5242880 5242880 0.075 -0.35 0 0 0
+1572864 0 1 0 0 3670016 5242880 5242880 0.075 -0.3 0 0 0
+1572864 0 1 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 0
+1572864 0 1 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 0
+1572864 0 1 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 0
+1572864 0 1 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 0
+1572864 0 1 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 0
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5505024 5242880 5242880 0.075 0.05 0 0 0
+1572864 0 1 0 0 5767168 5242880 5242880 0.075 0.1 0 0 0
+1572864 0 1 0 0 6029312 5242880 5242880 0.075 0.15 0 0 0
+1572864 0 1 0 0 6291456 5242880 5242880 0.075 0.2 0 0 0
+1572864 0 1 0 0 6553600 5242880 5242880 0.075 0.25 0 0 0
+1572864 0 1 0 0 6815744 5242880 5242880 0.075 0.3 0 0 0
+1572864 0 1 0 0 7077888 5242880 5242880 0.075 0.35 0 0 0
+1572864 0 1 0 0 7340032 5242880 5242880 0.075 0.4 0 0 0
+1572864 0 1 0 0 7602176 5242880 5242880 0.075 0.45 0 0 0
+1572864 0 1 0 0 7864320 5242880 5242880 0.075 0.5 0 0 0
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 3932160 5242880 5242880 0.075 -0.25 0 0 0
+1572864 0 2 0 0 4063232 5242880 5242880 0.075 -0.225 0 0 0
+1572864 0 2 0 0 4194304 5242880 5242880 0.075 -0.2 0 0 0
+1572864 0 2 0 0 4325376 5242880 5242880 0.075 -0.175 0 0 0
+1572864 0 2 0 0 4456448 5242880 5242880 0.075 -0.15 0 0 0
+1572864 0 2 0 0 4587520 5242880 5242880 0.075 -0.125 0 0 0
+1572864 0 2 0 0 4718592 5242880 5242880 0.075 -0.1 0 0 0
+1572864 0 2 0 0 4849664 5242880 5242880 0.075 -0.075 0 0 0
+1572864 0 2 0 0 4980736 5242880 5242880 0.075 -0.05 0 0 0
+1572864 0 2 0 0 5111808 5242880 5242880 0.075 -0.025 0 0 0
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5373952 5242880 5242880 0.075 0.025 0 0 0
+1572864 0 2 0 0 5505024 5242880 5242880 0.075 0.05 0 0 0
+1572864 0 2 0 0 5636096 5242880 5242880 0.075 0.075 0 0 0
+1572864 0 2 0 0 5767168 5242880 5242880 0.075 0.1 0 0 0
+1572864 0 2 0 0 5898240 5242880 5242880 0.075 0.125 0 0 0
+1572864 0 2 0 0 6029312 5242880 5242880 0.075 0.15 0 0 0
+1572864 0 2 0 0 6160384 5242880 5242880 0.075 0.175 0 0 0
+1572864 0 2 0 0 6291456 5242880 5242880 0.075 0.2 0 0 0
+1572864 0 2 0 0 6422528 5242880 5242880 0.075 0.225 0 0 0
+1572864 0 2 0 0 6553600 5242880 5242880 0.075 0.25 0 0 0
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 3932160 5242880 5242880 0.08125 -0.25 0 0 0
+1703936 0 2 0 0 4063232 5242880 5242880 0.08125 -0.225 0 0 0
+1703936 0 2 0 0 4194304 5242880 5242880 0.08125 -0.2 0 0 0
+1703936 0 2 0 0 4325376 5242880 5242880 0.08125 -0.175 0 0 0
+1703936 0 2 0 0 4456448 5242880 5242880 0.08125 -0.15 0 0 0
+1703936 0 2 0 0 4587520 5242880 5242880 0.08125 -0.125 0 0 0
+1703936 0 2 0 0 4718592 5242880 5242880 0.08125 -0.1 0 0 0
+1703936 0 2 0 0 4849664 5242880 5242880 0.08125 -0.075 0 0 0
+1703936 0 2 0 0 4980736 5242880 5242880 0.08125 -0.05 0 0 0
+1703936 0 2 0 0 5111808 5242880 5242880 0.08125 -0.025 0 0 0
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5373952 5242880 5242880 0.08125 0.025 0 0 0
+1703936 0 2 0 0 5505024 5242880 5242880 0.08125 0.05 0 0 0
+1703936 0 2 0 0 5636096 5242880 5242880 0.08125 0.075 0 0 0
+1703936 0 2 0 0 5767168 5242880 5242880 0.08125 0.1 0 0 0
+1703936 0 2 0 0 5898240 5242880 5242880 0.08125 0.125 0 0 0
+1703936 0 2 0 0 6029312 5242880 5242880 0.08125 0.15 0 0 0
+1703936 0 2 0 0 6160384 5242880 5242880 0.08125 0.175 0 0 0
+1703936 0 2 0 0 6291456 5242880 5242880 0.08125 0.2 0 0 0
+1703936 0 2 0 0 6422528 5242880 5242880 0.08125 0.225 0 0 0
+1703936 0 2 0 0 6553600 5242880 5242880 0.08125 0.25 0 0 0
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 2621440 5242880 5242880 0.0875 -0.5 0 0 0
+1835008 0 1 0 0 2883584 5242880 5242880 0.0875 -0.45 0 0 0
+1835008 0 1 0 0 3145728 5242880 5242880 0.0875 -0.4 0 0 0
+1835008 0 1 0 0 3407872 5242880 5242880 0.0875 -0.35 0 0 0
+1835008 0 1 0 0 3670016 5242880 5242880 0.0875 -0.3 0 0 0
+1835008 0 1 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 0
+1835008 0 1 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 0
+1835008 0 1 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 0
+1835008 0 1 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 0
+1835008 0 1 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 0
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 0
+1835008 0 1 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 0
+1835008 0 1 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 0
+1835008 0 1 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 0
+1835008 0 1 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 0
+1835008 0 1 0 0 6815744 5242880 5242880 0.0875 0.3 0 0 0
+1835008 0 1 0 0 7077888 5242880 5242880 0.0875 0.35 0 0 0
+1835008 0 1 0 0 7340032 5242880 5242880 0.0875 0.4 0 0 0
+1835008 0 1 0 0 7602176 5242880 5242880 0.0875 0.45 0 0 0
+1835008 0 1 0 0 7864320 5242880 5242880 0.0875 0.5 0 0 0
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 3932160 5242880 5242880 0.0875 -0.25 0 0 0
+1835008 0 2 0 0 4063232 5242880 5242880 0.0875 -0.225 0 0 0
+1835008 0 2 0 0 4194304 5242880 5242880 0.0875 -0.2 0 0 0
+1835008 0 2 0 0 4325376 5242880 5242880 0.0875 -0.175 0 0 0
+1835008 0 2 0 0 4456448 5242880 5242880 0.0875 -0.15 0 0 0
+1835008 0 2 0 0 4587520 5242880 5242880 0.0875 -0.125 0 0 0
+1835008 0 2 0 0 4718592 5242880 5242880 0.0875 -0.1 0 0 0
+1835008 0 2 0 0 4849664 5242880 5242880 0.0875 -0.075 0 0 0
+1835008 0 2 0 0 4980736 5242880 5242880 0.0875 -0.05 0 0 0
+1835008 0 2 0 0 5111808 5242880 5242880 0.0875 -0.025 0 0 0
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5373952 5242880 5242880 0.0875 0.025 0 0 0
+1835008 0 2 0 0 5505024 5242880 5242880 0.0875 0.05 0 0 0
+1835008 0 2 0 0 5636096 5242880 5242880 0.0875 0.075 0 0 0
+1835008 0 2 0 0 5767168 5242880 5242880 0.0875 0.1 0 0 0
+1835008 0 2 0 0 5898240 5242880 5242880 0.0875 0.125 0 0 0
+1835008 0 2 0 0 6029312 5242880 5242880 0.0875 0.15 0 0 0
+1835008 0 2 0 0 6160384 5242880 5242880 0.0875 0.175 0 0 0
+1835008 0 2 0 0 6291456 5242880 5242880 0.0875 0.2 0 0 0
+1835008 0 2 0 0 6422528 5242880 5242880 0.0875 0.225 0 0 0
+1835008 0 2 0 0 6553600 5242880 5242880 0.0875 0.25 0 0 0
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 3932160 5242880 5242880 0.09375 -0.25 0 0 0
+1966080 0 2 0 0 4063232 5242880 5242880 0.09375 -0.225 0 0 0
+1966080 0 2 0 0 4194304 5242880 5242880 0.09375 -0.2 0 0 0
+1966080 0 2 0 0 4325376 5242880 5242880 0.09375 -0.175 0 0 0
+1966080 0 2 0 0 4456448 5242880 5242880 0.09375 -0.15 0 0 0
+1966080 0 2 0 0 4587520 5242880 5242880 0.09375 -0.125 0 0 0
+1966080 0 2 0 0 4718592 5242880 5242880 0.09375 -0.1 0 0 0
+1966080 0 2 0 0 4849664 5242880 5242880 0.09375 -0.075 0 0 0
+1966080 0 2 0 0 4980736 5242880 5242880 0.09375 -0.05 0 0 0
+1966080 0 2 0 0 5111808 5242880 5242880 0.09375 -0.025 0 0 0
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5373952 5242880 5242880 0.09375 0.025 0 0 0
+1966080 0 2 0 0 5505024 5242880 5242880 0.09375 0.05 0 0 0
+1966080 0 2 0 0 5636096 5242880 5242880 0.09375 0.075 0 0 0
+1966080 0 2 0 0 5767168 5242880 5242880 0.09375 0.1 0 0 0
+1966080 0 2 0 0 5898240 5242880 5242880 0.09375 0.125 0 0 0
+1966080 0 2 0 0 6029312 5242880 5242880 0.09375 0.15 0 0 0
+1966080 0 2 0 0 6160384 5242880 5242880 0.09375 0.175 0 0 0
+1966080 0 2 0 0 6291456 5242880 5242880 0.09375 0.2 0 0 0
+1966080 0 2 0 0 6422528 5242880 5242880 0.09375 0.225 0 0 0
+1966080 0 2 0 0 6553600 5242880 5242880 0.09375 0.25 0 0 0
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 0 5242880 5242880 0.1 -1 0 0 0
+2097152 0 0 0 0 524288 5242880 5242880 0.1 -0.9 0 0 0
+2097152 0 0 0 0 1048576 5242880 5242880 0.1 -0.8 0 0 0
+2097152 0 0 0 0 1572864 5242880 5242880 0.1 -0.7 0 0 0
+2097152 0 0 0 0 2097152 5242880 5242880 0.1 -0.6 0 0 0
+2097152 0 0 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 0
+2097152 0 0 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 0
+2097152 0 0 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 0
+2097152 0 0 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 0
+2097152 0 0 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 0
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5767168 5242880 5242880 0.1 0.1 0 0 0
+2097152 0 0 0 0 6291456 5242880 5242880 0.1 0.2 0 0 0
+2097152 0 0 0 0 6815744 5242880 5242880 0.1 0.3 0 0 0
+2097152 0 0 0 0 7340032 5242880 5242880 0.1 0.4 0 0 0
+2097152 0 0 0 0 7864320 5242880 5242880 0.1 0.5 0 0 0
+2097152 0 0 0 0 8388608 5242880 5242880 0.1 0.6 0 0 0
+2097152 0 0 0 0 8912896 5242880 5242880 0.1 0.7 0 0 0
+2097152 0 0 0 0 9437184 5242880 5242880 0.1 0.8 0 0 0
+2097152 0 0 0 0 9961472 5242880 5242880 0.1 0.9 0 0 0
+2097152 0 0 0 0 10485760 5242880 5242880 0.1 1 0 0 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 2621440 5242880 5242880 0.1 -0.5 0 0 0
+2097152 0 1 0 0 2883584 5242880 5242880 0.1 -0.45 0 0 0
+2097152 0 1 0 0 3145728 5242880 5242880 0.1 -0.4 0 0 0
+2097152 0 1 0 0 3407872 5242880 5242880 0.1 -0.35 0 0 0
+2097152 0 1 0 0 3670016 5242880 5242880 0.1 -0.3 0 0 0
+2097152 0 1 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 0
+2097152 0 1 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 0
+2097152 0 1 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 0
+2097152 0 1 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 0
+2097152 0 1 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 0
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5505024 5242880 5242880 0.1 0.05 0 0 0
+2097152 0 1 0 0 5767168 5242880 5242880 0.1 0.1 0 0 0
+2097152 0 1 0 0 6029312 5242880 5242880 0.1 0.15 0 0 0
+2097152 0 1 0 0 6291456 5242880 5242880 0.1 0.2 0 0 0
+2097152 0 1 0 0 6553600 5242880 5242880 0.1 0.25 0 0 0
+2097152 0 1 0 0 6815744 5242880 5242880 0.1 0.3 0 0 0
+2097152 0 1 0 0 7077888 5242880 5242880 0.1 0.35 0 0 0
+2097152 0 1 0 0 7340032 5242880 5242880 0.1 0.4 0 0 0
+2097152 0 1 0 0 7602176 5242880 5242880 0.1 0.45 0 0 0
+2097152 0 1 0 0 7864320 5242880 5242880 0.1 0.5 0 0 0
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 3932160 5242880 5242880 0.1 -0.25 0 0 0
+2097152 0 2 0 0 4063232 5242880 5242880 0.1 -0.225 0 0 0
+2097152 0 2 0 0 4194304 5242880 5242880 0.1 -0.2 0 0 0
+2097152 0 2 0 0 4325376 5242880 5242880 0.1 -0.175 0 0 0
+2097152 0 2 0 0 4456448 5242880 5242880 0.1 -0.15 0 0 0
+2097152 0 2 0 0 4587520 5242880 5242880 0.1 -0.125 0 0 0
+2097152 0 2 0 0 4718592 5242880 5242880 0.1 -0.1 0 0 0
+2097152 0 2 0 0 4849664 5242880 5242880 0.1 -0.075 0 0 0
+2097152 0 2 0 0 4980736 5242880 5242880 0.1 -0.05 0 0 0
+2097152 0 2 0 0 5111808 5242880 5242880 0.1 -0.025 0 0 0
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5373952 5242880 5242880 0.1 0.025 0 0 0
+2097152 0 2 0 0 5505024 5242880 5242880 0.1 0.05 0 0 0
+2097152 0 2 0 0 5636096 5242880 5242880 0.1 0.075 0 0 0
+2097152 0 2 0 0 5767168 5242880 5242880 0.1 0.1 0 0 0
+2097152 0 2 0 0 5898240 5242880 5242880 0.1 0.125 0 0 0
+2097152 0 2 0 0 6029312 5242880 5242880 0.1 0.15 0 0 0
+2097152 0 2 0 0 6160384 5242880 5242880 0.1 0.175 0 0 0
+2097152 0 2 0 0 6291456 5242880 5242880 0.1 0.2 0 0 0
+2097152 0 2 0 0 6422528 5242880 5242880 0.1 0.225 0 0 0
+2097152 0 2 0 0 6553600 5242880 5242880 0.1 0.25 0 0 0
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.y.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.y.asc
new file mode 100644
index 000000000..b7e5ce4c4
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.y.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phiz y (phiz)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 0 5242880 0 0 -1 0 0
+0 0 0 0 0 5242880 524288 5242880 0 0 -0.9 0 0
+0 0 0 0 0 5242880 1048576 5242880 0 0 -0.8 0 0
+0 0 0 0 0 5242880 1572864 5242880 0 0 -0.7 0 0
+0 0 0 0 0 5242880 2097152 5242880 0 0 -0.6 0 0
+0 0 0 0 0 5242880 2621440 5242880 0 0 -0.5 0 0
+0 0 0 0 0 5242880 3145728 5242880 0 0 -0.4 0 0
+0 0 0 0 0 5242880 3670016 5242880 0 0 -0.3 0 0
+0 0 0 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 0 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 0 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 0 0 0 5242880 6815744 5242880 0 0 0.3 0 0
+0 0 0 0 0 5242880 7340032 5242880 0 0 0.4 0 0
+0 0 0 0 0 5242880 7864320 5242880 0 0 0.5 0 0
+0 0 0 0 0 5242880 8388608 5242880 0 0 0.6 0 0
+0 0 0 0 0 5242880 8912896 5242880 0 0 0.7 0 0
+0 0 0 0 0 5242880 9437184 5242880 0 0 0.8 0 0
+0 0 0 0 0 5242880 9961472 5242880 0 0 0.9 0 0
+0 0 0 0 0 5242880 10485760 5242880 0 0 1 0 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 2621440 5242880 0 0 -0.5 0 0
+0 0 1 0 0 5242880 2883584 5242880 0 0 -0.45 0 0
+0 0 1 0 0 5242880 3145728 5242880 0 0 -0.4 0 0
+0 0 1 0 0 5242880 3407872 5242880 0 0 -0.35 0 0
+0 0 1 0 0 5242880 3670016 5242880 0 0 -0.3 0 0
+0 0 1 0 0 5242880 3932160 5242880 0 0 -0.25 0 0
+0 0 1 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 1 0 0 5242880 4456448 5242880 0 0 -0.15 0 0
+0 0 1 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 1 0 0 5242880 4980736 5242880 0 0 -0.05 0 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5242880 5505024 5242880 0 0 0.05 0 0
+0 0 1 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 1 0 0 5242880 6029312 5242880 0 0 0.15 0 0
+0 0 1 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 1 0 0 5242880 6553600 5242880 0 0 0.25 0 0
+0 0 1 0 0 5242880 6815744 5242880 0 0 0.3 0 0
+0 0 1 0 0 5242880 7077888 5242880 0 0 0.35 0 0
+0 0 1 0 0 5242880 7340032 5242880 0 0 0.4 0 0
+0 0 1 0 0 5242880 7602176 5242880 0 0 0.45 0 0
+0 0 1 0 0 5242880 7864320 5242880 0 0 0.5 0 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 3932160 5242880 0 0 -0.25 0 0
+0 0 2 0 0 5242880 4063232 5242880 0 0 -0.225 0 0
+0 0 2 0 0 5242880 4194304 5242880 0 0 -0.2 0 0
+0 0 2 0 0 5242880 4325376 5242880 0 0 -0.175 0 0
+0 0 2 0 0 5242880 4456448 5242880 0 0 -0.15 0 0
+0 0 2 0 0 5242880 4587520 5242880 0 0 -0.125 0 0
+0 0 2 0 0 5242880 4718592 5242880 0 0 -0.1 0 0
+0 0 2 0 0 5242880 4849664 5242880 0 0 -0.075 0 0
+0 0 2 0 0 5242880 4980736 5242880 0 0 -0.05 0 0
+0 0 2 0 0 5242880 5111808 5242880 0 0 -0.025 0 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5242880 5373952 5242880 0 0 0.025 0 0
+0 0 2 0 0 5242880 5505024 5242880 0 0 0.05 0 0
+0 0 2 0 0 5242880 5636096 5242880 0 0 0.075 0 0
+0 0 2 0 0 5242880 5767168 5242880 0 0 0.1 0 0
+0 0 2 0 0 5242880 5898240 5242880 0 0 0.125 0 0
+0 0 2 0 0 5242880 6029312 5242880 0 0 0.15 0 0
+0 0 2 0 0 5242880 6160384 5242880 0 0 0.175 0 0
+0 0 2 0 0 5242880 6291456 5242880 0 0 0.2 0 0
+0 0 2 0 0 5242880 6422528 5242880 0 0 0.225 0 0
+0 0 2 0 0 5242880 6553600 5242880 0 0 0.25 0 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 3932160 5242880 0.00625 0 -0.25 0 0
+131072 0 2 0 0 5242880 4063232 5242880 0.00625 0 -0.225 0 0
+131072 0 2 0 0 5242880 4194304 5242880 0.00625 0 -0.2 0 0
+131072 0 2 0 0 5242880 4325376 5242880 0.00625 0 -0.175 0 0
+131072 0 2 0 0 5242880 4456448 5242880 0.00625 0 -0.15 0 0
+131072 0 2 0 0 5242880 4587520 5242880 0.00625 0 -0.125 0 0
+131072 0 2 0 0 5242880 4718592 5242880 0.00625 0 -0.1 0 0
+131072 0 2 0 0 5242880 4849664 5242880 0.00625 0 -0.075 0 0
+131072 0 2 0 0 5242880 4980736 5242880 0.00625 0 -0.05 0 0
+131072 0 2 0 0 5242880 5111808 5242880 0.00625 0 -0.025 0 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5242880 5373952 5242880 0.00625 0 0.025 0 0
+131072 0 2 0 0 5242880 5505024 5242880 0.00625 0 0.05 0 0
+131072 0 2 0 0 5242880 5636096 5242880 0.00625 0 0.075 0 0
+131072 0 2 0 0 5242880 5767168 5242880 0.00625 0 0.1 0 0
+131072 0 2 0 0 5242880 5898240 5242880 0.00625 0 0.125 0 0
+131072 0 2 0 0 5242880 6029312 5242880 0.00625 0 0.15 0 0
+131072 0 2 0 0 5242880 6160384 5242880 0.00625 0 0.175 0 0
+131072 0 2 0 0 5242880 6291456 5242880 0.00625 0 0.2 0 0
+131072 0 2 0 0 5242880 6422528 5242880 0.00625 0 0.225 0 0
+131072 0 2 0 0 5242880 6553600 5242880 0.00625 0 0.25 0 0
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 2621440 5242880 0.0125 0 -0.5 0 0
+262144 0 1 0 0 5242880 2883584 5242880 0.0125 0 -0.45 0 0
+262144 0 1 0 0 5242880 3145728 5242880 0.0125 0 -0.4 0 0
+262144 0 1 0 0 5242880 3407872 5242880 0.0125 0 -0.35 0 0
+262144 0 1 0 0 5242880 3670016 5242880 0.0125 0 -0.3 0 0
+262144 0 1 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 0
+262144 0 1 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 0
+262144 0 1 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 0
+262144 0 1 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 0
+262144 0 1 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 0
+262144 0 1 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 0
+262144 0 1 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 0
+262144 0 1 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 0
+262144 0 1 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 0
+262144 0 1 0 0 5242880 6815744 5242880 0.0125 0 0.3 0 0
+262144 0 1 0 0 5242880 7077888 5242880 0.0125 0 0.35 0 0
+262144 0 1 0 0 5242880 7340032 5242880 0.0125 0 0.4 0 0
+262144 0 1 0 0 5242880 7602176 5242880 0.0125 0 0.45 0 0
+262144 0 1 0 0 5242880 7864320 5242880 0.0125 0 0.5 0 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 3932160 5242880 0.0125 0 -0.25 0 0
+262144 0 2 0 0 5242880 4063232 5242880 0.0125 0 -0.225 0 0
+262144 0 2 0 0 5242880 4194304 5242880 0.0125 0 -0.2 0 0
+262144 0 2 0 0 5242880 4325376 5242880 0.0125 0 -0.175 0 0
+262144 0 2 0 0 5242880 4456448 5242880 0.0125 0 -0.15 0 0
+262144 0 2 0 0 5242880 4587520 5242880 0.0125 0 -0.125 0 0
+262144 0 2 0 0 5242880 4718592 5242880 0.0125 0 -0.1 0 0
+262144 0 2 0 0 5242880 4849664 5242880 0.0125 0 -0.075 0 0
+262144 0 2 0 0 5242880 4980736 5242880 0.0125 0 -0.05 0 0
+262144 0 2 0 0 5242880 5111808 5242880 0.0125 0 -0.025 0 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5242880 5373952 5242880 0.0125 0 0.025 0 0
+262144 0 2 0 0 5242880 5505024 5242880 0.0125 0 0.05 0 0
+262144 0 2 0 0 5242880 5636096 5242880 0.0125 0 0.075 0 0
+262144 0 2 0 0 5242880 5767168 5242880 0.0125 0 0.1 0 0
+262144 0 2 0 0 5242880 5898240 5242880 0.0125 0 0.125 0 0
+262144 0 2 0 0 5242880 6029312 5242880 0.0125 0 0.15 0 0
+262144 0 2 0 0 5242880 6160384 5242880 0.0125 0 0.175 0 0
+262144 0 2 0 0 5242880 6291456 5242880 0.0125 0 0.2 0 0
+262144 0 2 0 0 5242880 6422528 5242880 0.0125 0 0.225 0 0
+262144 0 2 0 0 5242880 6553600 5242880 0.0125 0 0.25 0 0
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 3932160 5242880 0.01875 0 -0.25 0 0
+393216 0 2 0 0 5242880 4063232 5242880 0.01875 0 -0.225 0 0
+393216 0 2 0 0 5242880 4194304 5242880 0.01875 0 -0.2 0 0
+393216 0 2 0 0 5242880 4325376 5242880 0.01875 0 -0.175 0 0
+393216 0 2 0 0 5242880 4456448 5242880 0.01875 0 -0.15 0 0
+393216 0 2 0 0 5242880 4587520 5242880 0.01875 0 -0.125 0 0
+393216 0 2 0 0 5242880 4718592 5242880 0.01875 0 -0.1 0 0
+393216 0 2 0 0 5242880 4849664 5242880 0.01875 0 -0.075 0 0
+393216 0 2 0 0 5242880 4980736 5242880 0.01875 0 -0.05 0 0
+393216 0 2 0 0 5242880 5111808 5242880 0.01875 0 -0.025 0 0
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5242880 5373952 5242880 0.01875 0 0.025 0 0
+393216 0 2 0 0 5242880 5505024 5242880 0.01875 0 0.05 0 0
+393216 0 2 0 0 5242880 5636096 5242880 0.01875 0 0.075 0 0
+393216 0 2 0 0 5242880 5767168 5242880 0.01875 0 0.1 0 0
+393216 0 2 0 0 5242880 5898240 5242880 0.01875 0 0.125 0 0
+393216 0 2 0 0 5242880 6029312 5242880 0.01875 0 0.15 0 0
+393216 0 2 0 0 5242880 6160384 5242880 0.01875 0 0.175 0 0
+393216 0 2 0 0 5242880 6291456 5242880 0.01875 0 0.2 0 0
+393216 0 2 0 0 5242880 6422528 5242880 0.01875 0 0.225 0 0
+393216 0 2 0 0 5242880 6553600 5242880 0.01875 0 0.25 0 0
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 0 5242880 0.025 0 -1 0 0
+524288 0 0 0 0 5242880 524288 5242880 0.025 0 -0.9 0 0
+524288 0 0 0 0 5242880 1048576 5242880 0.025 0 -0.8 0 0
+524288 0 0 0 0 5242880 1572864 5242880 0.025 0 -0.7 0 0
+524288 0 0 0 0 5242880 2097152 5242880 0.025 0 -0.6 0 0
+524288 0 0 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 0
+524288 0 0 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 0
+524288 0 0 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 0
+524288 0 0 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0
+524288 0 0 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 0
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5242880 5767168 5242880 0.025 0 0.1 0 0
+524288 0 0 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0
+524288 0 0 0 0 5242880 6815744 5242880 0.025 0 0.3 0 0
+524288 0 0 0 0 5242880 7340032 5242880 0.025 0 0.4 0 0
+524288 0 0 0 0 5242880 7864320 5242880 0.025 0 0.5 0 0
+524288 0 0 0 0 5242880 8388608 5242880 0.025 0 0.6 0 0
+524288 0 0 0 0 5242880 8912896 5242880 0.025 0 0.7 0 0
+524288 0 0 0 0 5242880 9437184 5242880 0.025 0 0.8 0 0
+524288 0 0 0 0 5242880 9961472 5242880 0.025 0 0.9 0 0
+524288 0 0 0 0 5242880 10485760 5242880 0.025 0 1 0 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 2621440 5242880 0.025 0 -0.5 0 0
+524288 0 1 0 0 5242880 2883584 5242880 0.025 0 -0.45 0 0
+524288 0 1 0 0 5242880 3145728 5242880 0.025 0 -0.4 0 0
+524288 0 1 0 0 5242880 3407872 5242880 0.025 0 -0.35 0 0
+524288 0 1 0 0 5242880 3670016 5242880 0.025 0 -0.3 0 0
+524288 0 1 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 0
+524288 0 1 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0
+524288 0 1 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 0
+524288 0 1 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 0
+524288 0 1 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 0
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5242880 5505024 5242880 0.025 0 0.05 0 0
+524288 0 1 0 0 5242880 5767168 5242880 0.025 0 0.1 0 0
+524288 0 1 0 0 5242880 6029312 5242880 0.025 0 0.15 0 0
+524288 0 1 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0
+524288 0 1 0 0 5242880 6553600 5242880 0.025 0 0.25 0 0
+524288 0 1 0 0 5242880 6815744 5242880 0.025 0 0.3 0 0
+524288 0 1 0 0 5242880 7077888 5242880 0.025 0 0.35 0 0
+524288 0 1 0 0 5242880 7340032 5242880 0.025 0 0.4 0 0
+524288 0 1 0 0 5242880 7602176 5242880 0.025 0 0.45 0 0
+524288 0 1 0 0 5242880 7864320 5242880 0.025 0 0.5 0 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 3932160 5242880 0.025 0 -0.25 0 0
+524288 0 2 0 0 5242880 4063232 5242880 0.025 0 -0.225 0 0
+524288 0 2 0 0 5242880 4194304 5242880 0.025 0 -0.2 0 0
+524288 0 2 0 0 5242880 4325376 5242880 0.025 0 -0.175 0 0
+524288 0 2 0 0 5242880 4456448 5242880 0.025 0 -0.15 0 0
+524288 0 2 0 0 5242880 4587520 5242880 0.025 0 -0.125 0 0
+524288 0 2 0 0 5242880 4718592 5242880 0.025 0 -0.1 0 0
+524288 0 2 0 0 5242880 4849664 5242880 0.025 0 -0.075 0 0
+524288 0 2 0 0 5242880 4980736 5242880 0.025 0 -0.05 0 0
+524288 0 2 0 0 5242880 5111808 5242880 0.025 0 -0.025 0 0
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5242880 5373952 5242880 0.025 0 0.025 0 0
+524288 0 2 0 0 5242880 5505024 5242880 0.025 0 0.05 0 0
+524288 0 2 0 0 5242880 5636096 5242880 0.025 0 0.075 0 0
+524288 0 2 0 0 5242880 5767168 5242880 0.025 0 0.1 0 0
+524288 0 2 0 0 5242880 5898240 5242880 0.025 0 0.125 0 0
+524288 0 2 0 0 5242880 6029312 5242880 0.025 0 0.15 0 0
+524288 0 2 0 0 5242880 6160384 5242880 0.025 0 0.175 0 0
+524288 0 2 0 0 5242880 6291456 5242880 0.025 0 0.2 0 0
+524288 0 2 0 0 5242880 6422528 5242880 0.025 0 0.225 0 0
+524288 0 2 0 0 5242880 6553600 5242880 0.025 0 0.25 0 0
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 3932160 5242880 0.03125 0 -0.25 0 0
+655360 0 2 0 0 5242880 4063232 5242880 0.03125 0 -0.225 0 0
+655360 0 2 0 0 5242880 4194304 5242880 0.03125 0 -0.2 0 0
+655360 0 2 0 0 5242880 4325376 5242880 0.03125 0 -0.175 0 0
+655360 0 2 0 0 5242880 4456448 5242880 0.03125 0 -0.15 0 0
+655360 0 2 0 0 5242880 4587520 5242880 0.03125 0 -0.125 0 0
+655360 0 2 0 0 5242880 4718592 5242880 0.03125 0 -0.1 0 0
+655360 0 2 0 0 5242880 4849664 5242880 0.03125 0 -0.075 0 0
+655360 0 2 0 0 5242880 4980736 5242880 0.03125 0 -0.05 0 0
+655360 0 2 0 0 5242880 5111808 5242880 0.03125 0 -0.025 0 0
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5242880 5373952 5242880 0.03125 0 0.025 0 0
+655360 0 2 0 0 5242880 5505024 5242880 0.03125 0 0.05 0 0
+655360 0 2 0 0 5242880 5636096 5242880 0.03125 0 0.075 0 0
+655360 0 2 0 0 5242880 5767168 5242880 0.03125 0 0.1 0 0
+655360 0 2 0 0 5242880 5898240 5242880 0.03125 0 0.125 0 0
+655360 0 2 0 0 5242880 6029312 5242880 0.03125 0 0.15 0 0
+655360 0 2 0 0 5242880 6160384 5242880 0.03125 0 0.175 0 0
+655360 0 2 0 0 5242880 6291456 5242880 0.03125 0 0.2 0 0
+655360 0 2 0 0 5242880 6422528 5242880 0.03125 0 0.225 0 0
+655360 0 2 0 0 5242880 6553600 5242880 0.03125 0 0.25 0 0
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 2621440 5242880 0.0375 0 -0.5 0 0
+786432 0 1 0 0 5242880 2883584 5242880 0.0375 0 -0.45 0 0
+786432 0 1 0 0 5242880 3145728 5242880 0.0375 0 -0.4 0 0
+786432 0 1 0 0 5242880 3407872 5242880 0.0375 0 -0.35 0 0
+786432 0 1 0 0 5242880 3670016 5242880 0.0375 0 -0.3 0 0
+786432 0 1 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 0
+786432 0 1 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 0
+786432 0 1 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 0
+786432 0 1 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 0
+786432 0 1 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 0
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 0
+786432 0 1 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 0
+786432 0 1 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 0
+786432 0 1 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 0
+786432 0 1 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 0
+786432 0 1 0 0 5242880 6815744 5242880 0.0375 0 0.3 0 0
+786432 0 1 0 0 5242880 7077888 5242880 0.0375 0 0.35 0 0
+786432 0 1 0 0 5242880 7340032 5242880 0.0375 0 0.4 0 0
+786432 0 1 0 0 5242880 7602176 5242880 0.0375 0 0.45 0 0
+786432 0 1 0 0 5242880 7864320 5242880 0.0375 0 0.5 0 0
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 3932160 5242880 0.0375 0 -0.25 0 0
+786432 0 2 0 0 5242880 4063232 5242880 0.0375 0 -0.225 0 0
+786432 0 2 0 0 5242880 4194304 5242880 0.0375 0 -0.2 0 0
+786432 0 2 0 0 5242880 4325376 5242880 0.0375 0 -0.175 0 0
+786432 0 2 0 0 5242880 4456448 5242880 0.0375 0 -0.15 0 0
+786432 0 2 0 0 5242880 4587520 5242880 0.0375 0 -0.125 0 0
+786432 0 2 0 0 5242880 4718592 5242880 0.0375 0 -0.1 0 0
+786432 0 2 0 0 5242880 4849664 5242880 0.0375 0 -0.075 0 0
+786432 0 2 0 0 5242880 4980736 5242880 0.0375 0 -0.05 0 0
+786432 0 2 0 0 5242880 5111808 5242880 0.0375 0 -0.025 0 0
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5242880 5373952 5242880 0.0375 0 0.025 0 0
+786432 0 2 0 0 5242880 5505024 5242880 0.0375 0 0.05 0 0
+786432 0 2 0 0 5242880 5636096 5242880 0.0375 0 0.075 0 0
+786432 0 2 0 0 5242880 5767168 5242880 0.0375 0 0.1 0 0
+786432 0 2 0 0 5242880 5898240 5242880 0.0375 0 0.125 0 0
+786432 0 2 0 0 5242880 6029312 5242880 0.0375 0 0.15 0 0
+786432 0 2 0 0 5242880 6160384 5242880 0.0375 0 0.175 0 0
+786432 0 2 0 0 5242880 6291456 5242880 0.0375 0 0.2 0 0
+786432 0 2 0 0 5242880 6422528 5242880 0.0375 0 0.225 0 0
+786432 0 2 0 0 5242880 6553600 5242880 0.0375 0 0.25 0 0
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 3932160 5242880 0.04375 0 -0.25 0 0
+917504 0 2 0 0 5242880 4063232 5242880 0.04375 0 -0.225 0 0
+917504 0 2 0 0 5242880 4194304 5242880 0.04375 0 -0.2 0 0
+917504 0 2 0 0 5242880 4325376 5242880 0.04375 0 -0.175 0 0
+917504 0 2 0 0 5242880 4456448 5242880 0.04375 0 -0.15 0 0
+917504 0 2 0 0 5242880 4587520 5242880 0.04375 0 -0.125 0 0
+917504 0 2 0 0 5242880 4718592 5242880 0.04375 0 -0.1 0 0
+917504 0 2 0 0 5242880 4849664 5242880 0.04375 0 -0.075 0 0
+917504 0 2 0 0 5242880 4980736 5242880 0.04375 0 -0.05 0 0
+917504 0 2 0 0 5242880 5111808 5242880 0.04375 0 -0.025 0 0
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5242880 5373952 5242880 0.04375 0 0.025 0 0
+917504 0 2 0 0 5242880 5505024 5242880 0.04375 0 0.05 0 0
+917504 0 2 0 0 5242880 5636096 5242880 0.04375 0 0.075 0 0
+917504 0 2 0 0 5242880 5767168 5242880 0.04375 0 0.1 0 0
+917504 0 2 0 0 5242880 5898240 5242880 0.04375 0 0.125 0 0
+917504 0 2 0 0 5242880 6029312 5242880 0.04375 0 0.15 0 0
+917504 0 2 0 0 5242880 6160384 5242880 0.04375 0 0.175 0 0
+917504 0 2 0 0 5242880 6291456 5242880 0.04375 0 0.2 0 0
+917504 0 2 0 0 5242880 6422528 5242880 0.04375 0 0.225 0 0
+917504 0 2 0 0 5242880 6553600 5242880 0.04375 0 0.25 0 0
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 0 5242880 0.05 0 -1 0 0
+1048576 0 0 0 0 5242880 524288 5242880 0.05 0 -0.9 0 0
+1048576 0 0 0 0 5242880 1048576 5242880 0.05 0 -0.8 0 0
+1048576 0 0 0 0 5242880 1572864 5242880 0.05 0 -0.7 0 0
+1048576 0 0 0 0 5242880 2097152 5242880 0.05 0 -0.6 0 0
+1048576 0 0 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 0
+1048576 0 0 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 0
+1048576 0 0 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 0
+1048576 0 0 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0
+1048576 0 0 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 0
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5242880 5767168 5242880 0.05 0 0.1 0 0
+1048576 0 0 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0
+1048576 0 0 0 0 5242880 6815744 5242880 0.05 0 0.3 0 0
+1048576 0 0 0 0 5242880 7340032 5242880 0.05 0 0.4 0 0
+1048576 0 0 0 0 5242880 7864320 5242880 0.05 0 0.5 0 0
+1048576 0 0 0 0 5242880 8388608 5242880 0.05 0 0.6 0 0
+1048576 0 0 0 0 5242880 8912896 5242880 0.05 0 0.7 0 0
+1048576 0 0 0 0 5242880 9437184 5242880 0.05 0 0.8 0 0
+1048576 0 0 0 0 5242880 9961472 5242880 0.05 0 0.9 0 0
+1048576 0 0 0 0 5242880 10485760 5242880 0.05 0 1 0 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 2621440 5242880 0.05 0 -0.5 0 0
+1048576 0 1 0 0 5242880 2883584 5242880 0.05 0 -0.45 0 0
+1048576 0 1 0 0 5242880 3145728 5242880 0.05 0 -0.4 0 0
+1048576 0 1 0 0 5242880 3407872 5242880 0.05 0 -0.35 0 0
+1048576 0 1 0 0 5242880 3670016 5242880 0.05 0 -0.3 0 0
+1048576 0 1 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 0
+1048576 0 1 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0
+1048576 0 1 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 0
+1048576 0 1 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 0
+1048576 0 1 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 0
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5242880 5505024 5242880 0.05 0 0.05 0 0
+1048576 0 1 0 0 5242880 5767168 5242880 0.05 0 0.1 0 0
+1048576 0 1 0 0 5242880 6029312 5242880 0.05 0 0.15 0 0
+1048576 0 1 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0
+1048576 0 1 0 0 5242880 6553600 5242880 0.05 0 0.25 0 0
+1048576 0 1 0 0 5242880 6815744 5242880 0.05 0 0.3 0 0
+1048576 0 1 0 0 5242880 7077888 5242880 0.05 0 0.35 0 0
+1048576 0 1 0 0 5242880 7340032 5242880 0.05 0 0.4 0 0
+1048576 0 1 0 0 5242880 7602176 5242880 0.05 0 0.45 0 0
+1048576 0 1 0 0 5242880 7864320 5242880 0.05 0 0.5 0 0
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 3932160 5242880 0.05 0 -0.25 0 0
+1048576 0 2 0 0 5242880 4063232 5242880 0.05 0 -0.225 0 0
+1048576 0 2 0 0 5242880 4194304 5242880 0.05 0 -0.2 0 0
+1048576 0 2 0 0 5242880 4325376 5242880 0.05 0 -0.175 0 0
+1048576 0 2 0 0 5242880 4456448 5242880 0.05 0 -0.15 0 0
+1048576 0 2 0 0 5242880 4587520 5242880 0.05 0 -0.125 0 0
+1048576 0 2 0 0 5242880 4718592 5242880 0.05 0 -0.1 0 0
+1048576 0 2 0 0 5242880 4849664 5242880 0.05 0 -0.075 0 0
+1048576 0 2 0 0 5242880 4980736 5242880 0.05 0 -0.05 0 0
+1048576 0 2 0 0 5242880 5111808 5242880 0.05 0 -0.025 0 0
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5242880 5373952 5242880 0.05 0 0.025 0 0
+1048576 0 2 0 0 5242880 5505024 5242880 0.05 0 0.05 0 0
+1048576 0 2 0 0 5242880 5636096 5242880 0.05 0 0.075 0 0
+1048576 0 2 0 0 5242880 5767168 5242880 0.05 0 0.1 0 0
+1048576 0 2 0 0 5242880 5898240 5242880 0.05 0 0.125 0 0
+1048576 0 2 0 0 5242880 6029312 5242880 0.05 0 0.15 0 0
+1048576 0 2 0 0 5242880 6160384 5242880 0.05 0 0.175 0 0
+1048576 0 2 0 0 5242880 6291456 5242880 0.05 0 0.2 0 0
+1048576 0 2 0 0 5242880 6422528 5242880 0.05 0 0.225 0 0
+1048576 0 2 0 0 5242880 6553600 5242880 0.05 0 0.25 0 0
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 3932160 5242880 0.05625 0 -0.25 0 0
+1179648 0 2 0 0 5242880 4063232 5242880 0.05625 0 -0.225 0 0
+1179648 0 2 0 0 5242880 4194304 5242880 0.05625 0 -0.2 0 0
+1179648 0 2 0 0 5242880 4325376 5242880 0.05625 0 -0.175 0 0
+1179648 0 2 0 0 5242880 4456448 5242880 0.05625 0 -0.15 0 0
+1179648 0 2 0 0 5242880 4587520 5242880 0.05625 0 -0.125 0 0
+1179648 0 2 0 0 5242880 4718592 5242880 0.05625 0 -0.1 0 0
+1179648 0 2 0 0 5242880 4849664 5242880 0.05625 0 -0.075 0 0
+1179648 0 2 0 0 5242880 4980736 5242880 0.05625 0 -0.05 0 0
+1179648 0 2 0 0 5242880 5111808 5242880 0.05625 0 -0.025 0 0
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5242880 5373952 5242880 0.05625 0 0.025 0 0
+1179648 0 2 0 0 5242880 5505024 5242880 0.05625 0 0.05 0 0
+1179648 0 2 0 0 5242880 5636096 5242880 0.05625 0 0.075 0 0
+1179648 0 2 0 0 5242880 5767168 5242880 0.05625 0 0.1 0 0
+1179648 0 2 0 0 5242880 5898240 5242880 0.05625 0 0.125 0 0
+1179648 0 2 0 0 5242880 6029312 5242880 0.05625 0 0.15 0 0
+1179648 0 2 0 0 5242880 6160384 5242880 0.05625 0 0.175 0 0
+1179648 0 2 0 0 5242880 6291456 5242880 0.05625 0 0.2 0 0
+1179648 0 2 0 0 5242880 6422528 5242880 0.05625 0 0.225 0 0
+1179648 0 2 0 0 5242880 6553600 5242880 0.05625 0 0.25 0 0
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 2621440 5242880 0.0625 0 -0.5 0 0
+1310720 0 1 0 0 5242880 2883584 5242880 0.0625 0 -0.45 0 0
+1310720 0 1 0 0 5242880 3145728 5242880 0.0625 0 -0.4 0 0
+1310720 0 1 0 0 5242880 3407872 5242880 0.0625 0 -0.35 0 0
+1310720 0 1 0 0 5242880 3670016 5242880 0.0625 0 -0.3 0 0
+1310720 0 1 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 0
+1310720 0 1 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 0
+1310720 0 1 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 0
+1310720 0 1 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 0
+1310720 0 1 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 0
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 0
+1310720 0 1 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 0
+1310720 0 1 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 0
+1310720 0 1 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 0
+1310720 0 1 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 0
+1310720 0 1 0 0 5242880 6815744 5242880 0.0625 0 0.3 0 0
+1310720 0 1 0 0 5242880 7077888 5242880 0.0625 0 0.35 0 0
+1310720 0 1 0 0 5242880 7340032 5242880 0.0625 0 0.4 0 0
+1310720 0 1 0 0 5242880 7602176 5242880 0.0625 0 0.45 0 0
+1310720 0 1 0 0 5242880 7864320 5242880 0.0625 0 0.5 0 0
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 3932160 5242880 0.0625 0 -0.25 0 0
+1310720 0 2 0 0 5242880 4063232 5242880 0.0625 0 -0.225 0 0
+1310720 0 2 0 0 5242880 4194304 5242880 0.0625 0 -0.2 0 0
+1310720 0 2 0 0 5242880 4325376 5242880 0.0625 0 -0.175 0 0
+1310720 0 2 0 0 5242880 4456448 5242880 0.0625 0 -0.15 0 0
+1310720 0 2 0 0 5242880 4587520 5242880 0.0625 0 -0.125 0 0
+1310720 0 2 0 0 5242880 4718592 5242880 0.0625 0 -0.1 0 0
+1310720 0 2 0 0 5242880 4849664 5242880 0.0625 0 -0.075 0 0
+1310720 0 2 0 0 5242880 4980736 5242880 0.0625 0 -0.05 0 0
+1310720 0 2 0 0 5242880 5111808 5242880 0.0625 0 -0.025 0 0
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5242880 5373952 5242880 0.0625 0 0.025 0 0
+1310720 0 2 0 0 5242880 5505024 5242880 0.0625 0 0.05 0 0
+1310720 0 2 0 0 5242880 5636096 5242880 0.0625 0 0.075 0 0
+1310720 0 2 0 0 5242880 5767168 5242880 0.0625 0 0.1 0 0
+1310720 0 2 0 0 5242880 5898240 5242880 0.0625 0 0.125 0 0
+1310720 0 2 0 0 5242880 6029312 5242880 0.0625 0 0.15 0 0
+1310720 0 2 0 0 5242880 6160384 5242880 0.0625 0 0.175 0 0
+1310720 0 2 0 0 5242880 6291456 5242880 0.0625 0 0.2 0 0
+1310720 0 2 0 0 5242880 6422528 5242880 0.0625 0 0.225 0 0
+1310720 0 2 0 0 5242880 6553600 5242880 0.0625 0 0.25 0 0
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 3932160 5242880 0.06875 0 -0.25 0 0
+1441792 0 2 0 0 5242880 4063232 5242880 0.06875 0 -0.225 0 0
+1441792 0 2 0 0 5242880 4194304 5242880 0.06875 0 -0.2 0 0
+1441792 0 2 0 0 5242880 4325376 5242880 0.06875 0 -0.175 0 0
+1441792 0 2 0 0 5242880 4456448 5242880 0.06875 0 -0.15 0 0
+1441792 0 2 0 0 5242880 4587520 5242880 0.06875 0 -0.125 0 0
+1441792 0 2 0 0 5242880 4718592 5242880 0.06875 0 -0.1 0 0
+1441792 0 2 0 0 5242880 4849664 5242880 0.06875 0 -0.075 0 0
+1441792 0 2 0 0 5242880 4980736 5242880 0.06875 0 -0.05 0 0
+1441792 0 2 0 0 5242880 5111808 5242880 0.06875 0 -0.025 0 0
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5242880 5373952 5242880 0.06875 0 0.025 0 0
+1441792 0 2 0 0 5242880 5505024 5242880 0.06875 0 0.05 0 0
+1441792 0 2 0 0 5242880 5636096 5242880 0.06875 0 0.075 0 0
+1441792 0 2 0 0 5242880 5767168 5242880 0.06875 0 0.1 0 0
+1441792 0 2 0 0 5242880 5898240 5242880 0.06875 0 0.125 0 0
+1441792 0 2 0 0 5242880 6029312 5242880 0.06875 0 0.15 0 0
+1441792 0 2 0 0 5242880 6160384 5242880 0.06875 0 0.175 0 0
+1441792 0 2 0 0 5242880 6291456 5242880 0.06875 0 0.2 0 0
+1441792 0 2 0 0 5242880 6422528 5242880 0.06875 0 0.225 0 0
+1441792 0 2 0 0 5242880 6553600 5242880 0.06875 0 0.25 0 0
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 0 5242880 0.075 0 -1 0 0
+1572864 0 0 0 0 5242880 524288 5242880 0.075 0 -0.9 0 0
+1572864 0 0 0 0 5242880 1048576 5242880 0.075 0 -0.8 0 0
+1572864 0 0 0 0 5242880 1572864 5242880 0.075 0 -0.7 0 0
+1572864 0 0 0 0 5242880 2097152 5242880 0.075 0 -0.6 0 0
+1572864 0 0 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 0
+1572864 0 0 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 0
+1572864 0 0 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 0
+1572864 0 0 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 0
+1572864 0 0 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 0
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5242880 5767168 5242880 0.075 0 0.1 0 0
+1572864 0 0 0 0 5242880 6291456 5242880 0.075 0 0.2 0 0
+1572864 0 0 0 0 5242880 6815744 5242880 0.075 0 0.3 0 0
+1572864 0 0 0 0 5242880 7340032 5242880 0.075 0 0.4 0 0
+1572864 0 0 0 0 5242880 7864320 5242880 0.075 0 0.5 0 0
+1572864 0 0 0 0 5242880 8388608 5242880 0.075 0 0.6 0 0
+1572864 0 0 0 0 5242880 8912896 5242880 0.075 0 0.7 0 0
+1572864 0 0 0 0 5242880 9437184 5242880 0.075 0 0.8 0 0
+1572864 0 0 0 0 5242880 9961472 5242880 0.075 0 0.9 0 0
+1572864 0 0 0 0 5242880 10485760 5242880 0.075 0 1 0 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 2621440 5242880 0.075 0 -0.5 0 0
+1572864 0 1 0 0 5242880 2883584 5242880 0.075 0 -0.45 0 0
+1572864 0 1 0 0 5242880 3145728 5242880 0.075 0 -0.4 0 0
+1572864 0 1 0 0 5242880 3407872 5242880 0.075 0 -0.35 0 0
+1572864 0 1 0 0 5242880 3670016 5242880 0.075 0 -0.3 0 0
+1572864 0 1 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 0
+1572864 0 1 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 0
+1572864 0 1 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 0
+1572864 0 1 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 0
+1572864 0 1 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 0
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5242880 5505024 5242880 0.075 0 0.05 0 0
+1572864 0 1 0 0 5242880 5767168 5242880 0.075 0 0.1 0 0
+1572864 0 1 0 0 5242880 6029312 5242880 0.075 0 0.15 0 0
+1572864 0 1 0 0 5242880 6291456 5242880 0.075 0 0.2 0 0
+1572864 0 1 0 0 5242880 6553600 5242880 0.075 0 0.25 0 0
+1572864 0 1 0 0 5242880 6815744 5242880 0.075 0 0.3 0 0
+1572864 0 1 0 0 5242880 7077888 5242880 0.075 0 0.35 0 0
+1572864 0 1 0 0 5242880 7340032 5242880 0.075 0 0.4 0 0
+1572864 0 1 0 0 5242880 7602176 5242880 0.075 0 0.45 0 0
+1572864 0 1 0 0 5242880 7864320 5242880 0.075 0 0.5 0 0
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 3932160 5242880 0.075 0 -0.25 0 0
+1572864 0 2 0 0 5242880 4063232 5242880 0.075 0 -0.225 0 0
+1572864 0 2 0 0 5242880 4194304 5242880 0.075 0 -0.2 0 0
+1572864 0 2 0 0 5242880 4325376 5242880 0.075 0 -0.175 0 0
+1572864 0 2 0 0 5242880 4456448 5242880 0.075 0 -0.15 0 0
+1572864 0 2 0 0 5242880 4587520 5242880 0.075 0 -0.125 0 0
+1572864 0 2 0 0 5242880 4718592 5242880 0.075 0 -0.1 0 0
+1572864 0 2 0 0 5242880 4849664 5242880 0.075 0 -0.075 0 0
+1572864 0 2 0 0 5242880 4980736 5242880 0.075 0 -0.05 0 0
+1572864 0 2 0 0 5242880 5111808 5242880 0.075 0 -0.025 0 0
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5242880 5373952 5242880 0.075 0 0.025 0 0
+1572864 0 2 0 0 5242880 5505024 5242880 0.075 0 0.05 0 0
+1572864 0 2 0 0 5242880 5636096 5242880 0.075 0 0.075 0 0
+1572864 0 2 0 0 5242880 5767168 5242880 0.075 0 0.1 0 0
+1572864 0 2 0 0 5242880 5898240 5242880 0.075 0 0.125 0 0
+1572864 0 2 0 0 5242880 6029312 5242880 0.075 0 0.15 0 0
+1572864 0 2 0 0 5242880 6160384 5242880 0.075 0 0.175 0 0
+1572864 0 2 0 0 5242880 6291456 5242880 0.075 0 0.2 0 0
+1572864 0 2 0 0 5242880 6422528 5242880 0.075 0 0.225 0 0
+1572864 0 2 0 0 5242880 6553600 5242880 0.075 0 0.25 0 0
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 3932160 5242880 0.08125 0 -0.25 0 0
+1703936 0 2 0 0 5242880 4063232 5242880 0.08125 0 -0.225 0 0
+1703936 0 2 0 0 5242880 4194304 5242880 0.08125 0 -0.2 0 0
+1703936 0 2 0 0 5242880 4325376 5242880 0.08125 0 -0.175 0 0
+1703936 0 2 0 0 5242880 4456448 5242880 0.08125 0 -0.15 0 0
+1703936 0 2 0 0 5242880 4587520 5242880 0.08125 0 -0.125 0 0
+1703936 0 2 0 0 5242880 4718592 5242880 0.08125 0 -0.1 0 0
+1703936 0 2 0 0 5242880 4849664 5242880 0.08125 0 -0.075 0 0
+1703936 0 2 0 0 5242880 4980736 5242880 0.08125 0 -0.05 0 0
+1703936 0 2 0 0 5242880 5111808 5242880 0.08125 0 -0.025 0 0
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5242880 5373952 5242880 0.08125 0 0.025 0 0
+1703936 0 2 0 0 5242880 5505024 5242880 0.08125 0 0.05 0 0
+1703936 0 2 0 0 5242880 5636096 5242880 0.08125 0 0.075 0 0
+1703936 0 2 0 0 5242880 5767168 5242880 0.08125 0 0.1 0 0
+1703936 0 2 0 0 5242880 5898240 5242880 0.08125 0 0.125 0 0
+1703936 0 2 0 0 5242880 6029312 5242880 0.08125 0 0.15 0 0
+1703936 0 2 0 0 5242880 6160384 5242880 0.08125 0 0.175 0 0
+1703936 0 2 0 0 5242880 6291456 5242880 0.08125 0 0.2 0 0
+1703936 0 2 0 0 5242880 6422528 5242880 0.08125 0 0.225 0 0
+1703936 0 2 0 0 5242880 6553600 5242880 0.08125 0 0.25 0 0
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 2621440 5242880 0.0875 0 -0.5 0 0
+1835008 0 1 0 0 5242880 2883584 5242880 0.0875 0 -0.45 0 0
+1835008 0 1 0 0 5242880 3145728 5242880 0.0875 0 -0.4 0 0
+1835008 0 1 0 0 5242880 3407872 5242880 0.0875 0 -0.35 0 0
+1835008 0 1 0 0 5242880 3670016 5242880 0.0875 0 -0.3 0 0
+1835008 0 1 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 0
+1835008 0 1 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 0
+1835008 0 1 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 0
+1835008 0 1 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 0
+1835008 0 1 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 0
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 0
+1835008 0 1 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 0
+1835008 0 1 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 0
+1835008 0 1 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 0
+1835008 0 1 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 0
+1835008 0 1 0 0 5242880 6815744 5242880 0.0875 0 0.3 0 0
+1835008 0 1 0 0 5242880 7077888 5242880 0.0875 0 0.35 0 0
+1835008 0 1 0 0 5242880 7340032 5242880 0.0875 0 0.4 0 0
+1835008 0 1 0 0 5242880 7602176 5242880 0.0875 0 0.45 0 0
+1835008 0 1 0 0 5242880 7864320 5242880 0.0875 0 0.5 0 0
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 3932160 5242880 0.0875 0 -0.25 0 0
+1835008 0 2 0 0 5242880 4063232 5242880 0.0875 0 -0.225 0 0
+1835008 0 2 0 0 5242880 4194304 5242880 0.0875 0 -0.2 0 0
+1835008 0 2 0 0 5242880 4325376 5242880 0.0875 0 -0.175 0 0
+1835008 0 2 0 0 5242880 4456448 5242880 0.0875 0 -0.15 0 0
+1835008 0 2 0 0 5242880 4587520 5242880 0.0875 0 -0.125 0 0
+1835008 0 2 0 0 5242880 4718592 5242880 0.0875 0 -0.1 0 0
+1835008 0 2 0 0 5242880 4849664 5242880 0.0875 0 -0.075 0 0
+1835008 0 2 0 0 5242880 4980736 5242880 0.0875 0 -0.05 0 0
+1835008 0 2 0 0 5242880 5111808 5242880 0.0875 0 -0.025 0 0
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5242880 5373952 5242880 0.0875 0 0.025 0 0
+1835008 0 2 0 0 5242880 5505024 5242880 0.0875 0 0.05 0 0
+1835008 0 2 0 0 5242880 5636096 5242880 0.0875 0 0.075 0 0
+1835008 0 2 0 0 5242880 5767168 5242880 0.0875 0 0.1 0 0
+1835008 0 2 0 0 5242880 5898240 5242880 0.0875 0 0.125 0 0
+1835008 0 2 0 0 5242880 6029312 5242880 0.0875 0 0.15 0 0
+1835008 0 2 0 0 5242880 6160384 5242880 0.0875 0 0.175 0 0
+1835008 0 2 0 0 5242880 6291456 5242880 0.0875 0 0.2 0 0
+1835008 0 2 0 0 5242880 6422528 5242880 0.0875 0 0.225 0 0
+1835008 0 2 0 0 5242880 6553600 5242880 0.0875 0 0.25 0 0
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 3932160 5242880 0.09375 0 -0.25 0 0
+1966080 0 2 0 0 5242880 4063232 5242880 0.09375 0 -0.225 0 0
+1966080 0 2 0 0 5242880 4194304 5242880 0.09375 0 -0.2 0 0
+1966080 0 2 0 0 5242880 4325376 5242880 0.09375 0 -0.175 0 0
+1966080 0 2 0 0 5242880 4456448 5242880 0.09375 0 -0.15 0 0
+1966080 0 2 0 0 5242880 4587520 5242880 0.09375 0 -0.125 0 0
+1966080 0 2 0 0 5242880 4718592 5242880 0.09375 0 -0.1 0 0
+1966080 0 2 0 0 5242880 4849664 5242880 0.09375 0 -0.075 0 0
+1966080 0 2 0 0 5242880 4980736 5242880 0.09375 0 -0.05 0 0
+1966080 0 2 0 0 5242880 5111808 5242880 0.09375 0 -0.025 0 0
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5242880 5373952 5242880 0.09375 0 0.025 0 0
+1966080 0 2 0 0 5242880 5505024 5242880 0.09375 0 0.05 0 0
+1966080 0 2 0 0 5242880 5636096 5242880 0.09375 0 0.075 0 0
+1966080 0 2 0 0 5242880 5767168 5242880 0.09375 0 0.1 0 0
+1966080 0 2 0 0 5242880 5898240 5242880 0.09375 0 0.125 0 0
+1966080 0 2 0 0 5242880 6029312 5242880 0.09375 0 0.15 0 0
+1966080 0 2 0 0 5242880 6160384 5242880 0.09375 0 0.175 0 0
+1966080 0 2 0 0 5242880 6291456 5242880 0.09375 0 0.2 0 0
+1966080 0 2 0 0 5242880 6422528 5242880 0.09375 0 0.225 0 0
+1966080 0 2 0 0 5242880 6553600 5242880 0.09375 0 0.25 0 0
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 0 5242880 0.1 0 -1 0 0
+2097152 0 0 0 0 5242880 524288 5242880 0.1 0 -0.9 0 0
+2097152 0 0 0 0 5242880 1048576 5242880 0.1 0 -0.8 0 0
+2097152 0 0 0 0 5242880 1572864 5242880 0.1 0 -0.7 0 0
+2097152 0 0 0 0 5242880 2097152 5242880 0.1 0 -0.6 0 0
+2097152 0 0 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 0
+2097152 0 0 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 0
+2097152 0 0 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 0
+2097152 0 0 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 0
+2097152 0 0 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 0
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5242880 5767168 5242880 0.1 0 0.1 0 0
+2097152 0 0 0 0 5242880 6291456 5242880 0.1 0 0.2 0 0
+2097152 0 0 0 0 5242880 6815744 5242880 0.1 0 0.3 0 0
+2097152 0 0 0 0 5242880 7340032 5242880 0.1 0 0.4 0 0
+2097152 0 0 0 0 5242880 7864320 5242880 0.1 0 0.5 0 0
+2097152 0 0 0 0 5242880 8388608 5242880 0.1 0 0.6 0 0
+2097152 0 0 0 0 5242880 8912896 5242880 0.1 0 0.7 0 0
+2097152 0 0 0 0 5242880 9437184 5242880 0.1 0 0.8 0 0
+2097152 0 0 0 0 5242880 9961472 5242880 0.1 0 0.9 0 0
+2097152 0 0 0 0 5242880 10485760 5242880 0.1 0 1 0 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 2621440 5242880 0.1 0 -0.5 0 0
+2097152 0 1 0 0 5242880 2883584 5242880 0.1 0 -0.45 0 0
+2097152 0 1 0 0 5242880 3145728 5242880 0.1 0 -0.4 0 0
+2097152 0 1 0 0 5242880 3407872 5242880 0.1 0 -0.35 0 0
+2097152 0 1 0 0 5242880 3670016 5242880 0.1 0 -0.3 0 0
+2097152 0 1 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 0
+2097152 0 1 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 0
+2097152 0 1 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 0
+2097152 0 1 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 0
+2097152 0 1 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 0
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5242880 5505024 5242880 0.1 0 0.05 0 0
+2097152 0 1 0 0 5242880 5767168 5242880 0.1 0 0.1 0 0
+2097152 0 1 0 0 5242880 6029312 5242880 0.1 0 0.15 0 0
+2097152 0 1 0 0 5242880 6291456 5242880 0.1 0 0.2 0 0
+2097152 0 1 0 0 5242880 6553600 5242880 0.1 0 0.25 0 0
+2097152 0 1 0 0 5242880 6815744 5242880 0.1 0 0.3 0 0
+2097152 0 1 0 0 5242880 7077888 5242880 0.1 0 0.35 0 0
+2097152 0 1 0 0 5242880 7340032 5242880 0.1 0 0.4 0 0
+2097152 0 1 0 0 5242880 7602176 5242880 0.1 0 0.45 0 0
+2097152 0 1 0 0 5242880 7864320 5242880 0.1 0 0.5 0 0
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 3932160 5242880 0.1 0 -0.25 0 0
+2097152 0 2 0 0 5242880 4063232 5242880 0.1 0 -0.225 0 0
+2097152 0 2 0 0 5242880 4194304 5242880 0.1 0 -0.2 0 0
+2097152 0 2 0 0 5242880 4325376 5242880 0.1 0 -0.175 0 0
+2097152 0 2 0 0 5242880 4456448 5242880 0.1 0 -0.15 0 0
+2097152 0 2 0 0 5242880 4587520 5242880 0.1 0 -0.125 0 0
+2097152 0 2 0 0 5242880 4718592 5242880 0.1 0 -0.1 0 0
+2097152 0 2 0 0 5242880 4849664 5242880 0.1 0 -0.075 0 0
+2097152 0 2 0 0 5242880 4980736 5242880 0.1 0 -0.05 0 0
+2097152 0 2 0 0 5242880 5111808 5242880 0.1 0 -0.025 0 0
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5242880 5373952 5242880 0.1 0 0.025 0 0
+2097152 0 2 0 0 5242880 5505024 5242880 0.1 0 0.05 0 0
+2097152 0 2 0 0 5242880 5636096 5242880 0.1 0 0.075 0 0
+2097152 0 2 0 0 5242880 5767168 5242880 0.1 0 0.1 0 0
+2097152 0 2 0 0 5242880 5898240 5242880 0.1 0 0.125 0 0
+2097152 0 2 0 0 5242880 6029312 5242880 0.1 0 0.15 0 0
+2097152 0 2 0 0 5242880 6160384 5242880 0.1 0 0.175 0 0
+2097152 0 2 0 0 5242880 6291456 5242880 0.1 0 0.2 0 0
+2097152 0 2 0 0 5242880 6422528 5242880 0.1 0 0.225 0 0
+2097152 0 2 0 0 5242880 6553600 5242880 0.1 0 0.25 0 0
+
+
diff --git a/Carpet/CarpetInterp/test/waveinterp/phiz.z.asc b/Carpet/CarpetInterp/test/waveinterp/phiz.z.asc
new file mode 100644
index 000000000..7c6d8e5da
--- /dev/null
+++ b/Carpet/CarpetInterp/test/waveinterp/phiz.z.asc
@@ -0,0 +1,808 @@
+# WAVEMOL::phiz z (phiz)
+#
+# iteration 0
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 0 0 0 5242880 5242880 0 0 0 0 -1 0
+0 0 0 0 0 5242880 5242880 524288 0 0 0 -0.9 0
+0 0 0 0 0 5242880 5242880 1048576 0 0 0 -0.8 0
+0 0 0 0 0 5242880 5242880 1572864 0 0 0 -0.7 0
+0 0 0 0 0 5242880 5242880 2097152 0 0 0 -0.6 0
+0 0 0 0 0 5242880 5242880 2621440 0 0 0 -0.5 0
+0 0 0 0 0 5242880 5242880 3145728 0 0 0 -0.4 0
+0 0 0 0 0 5242880 5242880 3670016 0 0 0 -0.3 0
+0 0 0 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 0 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 0 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 0 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 0 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 0 0 0 5242880 5242880 6815744 0 0 0 0.3 0
+0 0 0 0 0 5242880 5242880 7340032 0 0 0 0.4 0
+0 0 0 0 0 5242880 5242880 7864320 0 0 0 0.5 0
+0 0 0 0 0 5242880 5242880 8388608 0 0 0 0.6 0
+0 0 0 0 0 5242880 5242880 8912896 0 0 0 0.7 0
+0 0 0 0 0 5242880 5242880 9437184 0 0 0 0.8 0
+0 0 0 0 0 5242880 5242880 9961472 0 0 0 0.9 0
+0 0 0 0 0 5242880 5242880 10485760 0 0 0 1 0
+
+
+# iteration 0
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 1 0 0 5242880 5242880 2621440 0 0 0 -0.5 0
+0 0 1 0 0 5242880 5242880 2883584 0 0 0 -0.45 0
+0 0 1 0 0 5242880 5242880 3145728 0 0 0 -0.4 0
+0 0 1 0 0 5242880 5242880 3407872 0 0 0 -0.35 0
+0 0 1 0 0 5242880 5242880 3670016 0 0 0 -0.3 0
+0 0 1 0 0 5242880 5242880 3932160 0 0 0 -0.25 0
+0 0 1 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 1 0 0 5242880 5242880 4456448 0 0 0 -0.15 0
+0 0 1 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 1 0 0 5242880 5242880 4980736 0 0 0 -0.05 0
+0 0 1 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 1 0 0 5242880 5242880 5505024 0 0 0 0.05 0
+0 0 1 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 1 0 0 5242880 5242880 6029312 0 0 0 0.15 0
+0 0 1 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 1 0 0 5242880 5242880 6553600 0 0 0 0.25 0
+0 0 1 0 0 5242880 5242880 6815744 0 0 0 0.3 0
+0 0 1 0 0 5242880 5242880 7077888 0 0 0 0.35 0
+0 0 1 0 0 5242880 5242880 7340032 0 0 0 0.4 0
+0 0 1 0 0 5242880 5242880 7602176 0 0 0 0.45 0
+0 0 1 0 0 5242880 5242880 7864320 0 0 0 0.5 0
+
+
+# iteration 0
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+0 0 2 0 0 5242880 5242880 3932160 0 0 0 -0.25 0
+0 0 2 0 0 5242880 5242880 4063232 0 0 0 -0.225 0
+0 0 2 0 0 5242880 5242880 4194304 0 0 0 -0.2 0
+0 0 2 0 0 5242880 5242880 4325376 0 0 0 -0.175 0
+0 0 2 0 0 5242880 5242880 4456448 0 0 0 -0.15 0
+0 0 2 0 0 5242880 5242880 4587520 0 0 0 -0.125 0
+0 0 2 0 0 5242880 5242880 4718592 0 0 0 -0.1 0
+0 0 2 0 0 5242880 5242880 4849664 0 0 0 -0.075 0
+0 0 2 0 0 5242880 5242880 4980736 0 0 0 -0.05 0
+0 0 2 0 0 5242880 5242880 5111808 0 0 0 -0.025 0
+0 0 2 0 0 5242880 5242880 5242880 0 0 0 0 0
+0 0 2 0 0 5242880 5242880 5373952 0 0 0 0.025 0
+0 0 2 0 0 5242880 5242880 5505024 0 0 0 0.05 0
+0 0 2 0 0 5242880 5242880 5636096 0 0 0 0.075 0
+0 0 2 0 0 5242880 5242880 5767168 0 0 0 0.1 0
+0 0 2 0 0 5242880 5242880 5898240 0 0 0 0.125 0
+0 0 2 0 0 5242880 5242880 6029312 0 0 0 0.15 0
+0 0 2 0 0 5242880 5242880 6160384 0 0 0 0.175 0
+0 0 2 0 0 5242880 5242880 6291456 0 0 0 0.2 0
+0 0 2 0 0 5242880 5242880 6422528 0 0 0 0.225 0
+0 0 2 0 0 5242880 5242880 6553600 0 0 0 0.25 0
+
+
+# iteration 131072
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+131072 0 2 0 0 5242880 5242880 3932160 0.00625 0 0 -0.25 8.51287040805251e-10
+131072 0 2 0 0 5242880 5242880 4063232 0.00625 0 0 -0.225 4.78848960452953e-10
+131072 0 2 0 0 5242880 5242880 4194304 0.00625 0 0 -0.2 0
+131072 0 2 0 0 5242880 5242880 4325376 0.00625 0 0 -0.175 2.43032142559095e-09
+131072 0 2 0 0 5242880 5242880 4456448 0.00625 0 0 -0.15 0
+131072 0 2 0 0 5242880 5242880 4587520 0.00625 0 0 -0.125 -2.23517417907715e-08
+131072 0 2 0 0 5242880 5242880 4718592 0.00625 0 0 -0.1 0
+131072 0 2 0 0 5242880 5242880 4849664 0.00625 0 0 -0.075 0
+131072 0 2 0 0 5242880 5242880 4980736 0.00625 0 0 -0.05 0
+131072 0 2 0 0 5242880 5242880 5111808 0.00625 0 0 -0.025 0
+131072 0 2 0 0 5242880 5242880 5242880 0.00625 0 0 0 0
+131072 0 2 0 0 5242880 5242880 5373952 0.00625 0 0 0.025 0
+131072 0 2 0 0 5242880 5242880 5505024 0.00625 0 0 0.05 0
+131072 0 2 0 0 5242880 5242880 5636096 0.00625 0 0 0.075 0
+131072 0 2 0 0 5242880 5242880 5767168 0.00625 0 0 0.1 0
+131072 0 2 0 0 5242880 5242880 5898240 0.00625 0 0 0.125 2.23517417907715e-08
+131072 0 2 0 0 5242880 5242880 6029312 0.00625 0 0 0.15 0
+131072 0 2 0 0 5242880 5242880 6160384 0.00625 0 0 0.175 -2.43032142559095e-09
+131072 0 2 0 0 5242880 5242880 6291456 0.00625 0 0 0.2 0
+131072 0 2 0 0 5242880 5242880 6422528 0.00625 0 0 0.225 -4.78848960452953e-10
+131072 0 2 0 0 5242880 5242880 6553600 0.00625 0 0 0.25 -8.51287040805251e-10
+
+
+# iteration 262144
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 1 0 0 5242880 5242880 2621440 0.0125 0 0 -0.5 0
+262144 0 1 0 0 5242880 5242880 2883584 0.0125 0 0 -0.45 0
+262144 0 1 0 0 5242880 5242880 3145728 0.0125 0 0 -0.4 0
+262144 0 1 0 0 5242880 5242880 3407872 0.0125 0 0 -0.35 1.94025536558925e-11
+262144 0 1 0 0 5242880 5242880 3670016 0.0125 0 0 -0.3 0
+262144 0 1 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 2.27009877548067e-09
+262144 0 1 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 0
+262144 0 1 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 0
+262144 0 1 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 3.88051095886096e-11
+262144 0 1 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 0
+262144 0 1 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 1 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 0
+262144 0 1 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 -3.88051095886096e-11
+262144 0 1 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 0
+262144 0 1 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 0
+262144 0 1 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 -2.27009877548067e-09
+262144 0 1 0 0 5242880 5242880 6815744 0.0125 0 0 0.3 0
+262144 0 1 0 0 5242880 5242880 7077888 0.0125 0 0 0.35 -1.94025536558925e-11
+262144 0 1 0 0 5242880 5242880 7340032 0.0125 0 0 0.4 0
+262144 0 1 0 0 5242880 5242880 7602176 0.0125 0 0 0.45 0
+262144 0 1 0 0 5242880 5242880 7864320 0.0125 0 0 0.5 0
+
+
+# iteration 262144
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+262144 0 2 0 0 5242880 5242880 3932160 0.0125 0 0 -0.25 2.27009877548067e-09
+262144 0 2 0 0 5242880 5242880 4063232 0.0125 0 0 -0.225 1.27693056120788e-09
+262144 0 2 0 0 5242880 5242880 4194304 0.0125 0 0 -0.2 0
+262144 0 2 0 0 5242880 5242880 4325376 0.0125 0 0 -0.175 -1.4430649281683e-10
+262144 0 2 0 0 5242880 5242880 4456448 0.0125 0 0 -0.15 0
+262144 0 2 0 0 5242880 5242880 4587520 0.0125 0 0 -0.125 2.18278741435929e-11
+262144 0 2 0 0 5242880 5242880 4718592 0.0125 0 0 -0.1 3.88051095886096e-11
+262144 0 2 0 0 5242880 5242880 4849664 0.0125 0 0 -0.075 -1.74622982740402e-10
+262144 0 2 0 0 5242880 5242880 4980736 0.0125 0 0 -0.05 0
+262144 0 2 0 0 5242880 5242880 5111808 0.0125 0 0 -0.025 0
+262144 0 2 0 0 5242880 5242880 5242880 0.0125 0 0 0 0
+262144 0 2 0 0 5242880 5242880 5373952 0.0125 0 0 0.025 0
+262144 0 2 0 0 5242880 5242880 5505024 0.0125 0 0 0.05 0
+262144 0 2 0 0 5242880 5242880 5636096 0.0125 0 0 0.075 1.74622982740402e-10
+262144 0 2 0 0 5242880 5242880 5767168 0.0125 0 0 0.1 -3.88051095886096e-11
+262144 0 2 0 0 5242880 5242880 5898240 0.0125 0 0 0.125 -2.18278741435929e-11
+262144 0 2 0 0 5242880 5242880 6029312 0.0125 0 0 0.15 0
+262144 0 2 0 0 5242880 5242880 6160384 0.0125 0 0 0.175 1.4430649281683e-10
+262144 0 2 0 0 5242880 5242880 6291456 0.0125 0 0 0.2 0
+262144 0 2 0 0 5242880 5242880 6422528 0.0125 0 0 0.225 -1.27693056120788e-09
+262144 0 2 0 0 5242880 5242880 6553600 0.0125 0 0 0.25 -2.27009877548067e-09
+
+
+# iteration 393216
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+393216 0 2 0 0 5242880 5242880 3932160 0.01875 0 0 -0.25 1.7025740816105e-09
+393216 0 2 0 0 5242880 5242880 4063232 0.01875 0 0 -0.225 9.59262773157592e-10
+393216 0 2 0 0 5242880 5242880 4194304 0.01875 0 0 -0.2 1.80060419699424e-11
+393216 0 2 0 0 5242880 5242880 4325376 0.01875 0 0 -0.175 -2.20306178830874e-11
+393216 0 2 0 0 5242880 5242880 4456448 0.01875 0 0 -0.15 1.37016741702522e-10
+393216 0 2 0 0 5242880 5242880 4587520 0.01875 0 0 -0.125 1.09369182438833e-10
+393216 0 2 0 0 5242880 5242880 4718592 0.01875 0 0 -0.1 -1.55569968944095e-10
+393216 0 2 0 0 5242880 5242880 4849664 0.01875 0 0 -0.075 -5.14533776696524e-10
+393216 0 2 0 0 5242880 5242880 4980736 0.01875 0 0 -0.05 -1.05031724058809e-14
+393216 0 2 0 0 5242880 5242880 5111808 0.01875 0 0 -0.025 -3.1663930736651e-12
+393216 0 2 0 0 5242880 5242880 5242880 0.01875 0 0 0 0
+393216 0 2 0 0 5242880 5242880 5373952 0.01875 0 0 0.025 3.1663930736651e-12
+393216 0 2 0 0 5242880 5242880 5505024 0.01875 0 0 0.05 1.05031724058809e-14
+393216 0 2 0 0 5242880 5242880 5636096 0.01875 0 0 0.075 5.14533776696524e-10
+393216 0 2 0 0 5242880 5242880 5767168 0.01875 0 0 0.1 1.55569968944095e-10
+393216 0 2 0 0 5242880 5242880 5898240 0.01875 0 0 0.125 -1.09369182438833e-10
+393216 0 2 0 0 5242880 5242880 6029312 0.01875 0 0 0.15 -1.37016741702522e-10
+393216 0 2 0 0 5242880 5242880 6160384 0.01875 0 0 0.175 2.20306178830874e-11
+393216 0 2 0 0 5242880 5242880 6291456 0.01875 0 0 0.2 -1.80060419699424e-11
+393216 0 2 0 0 5242880 5242880 6422528 0.01875 0 0 0.225 -9.59262773157592e-10
+393216 0 2 0 0 5242880 5242880 6553600 0.01875 0 0 0.25 -1.7025740816105e-09
+
+
+# iteration 524288
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 0 0 0 5242880 5242880 0 0.025 0 0 -1 0
+524288 0 0 0 0 5242880 5242880 524288 0.025 0 0 -0.9 0
+524288 0 0 0 0 5242880 5242880 1048576 0.025 0 0 -0.8 0
+524288 0 0 0 0 5242880 5242880 1572864 0.025 0 0 -0.7 0
+524288 0 0 0 0 5242880 5242880 2097152 0.025 0 0 -0.6 0
+524288 0 0 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 0
+524288 0 0 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 0
+524288 0 0 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 0
+524288 0 0 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 4.80161119198463e-11
+524288 0 0 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 -3.71976833594504e-10
+524288 0 0 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 0 0 0 5242880 5242880 5767168 0.025 0 0 0.1 3.71976833594504e-10
+524288 0 0 0 0 5242880 5242880 6291456 0.025 0 0 0.2 -4.80161119198463e-11
+524288 0 0 0 0 5242880 5242880 6815744 0.025 0 0 0.3 0
+524288 0 0 0 0 5242880 5242880 7340032 0.025 0 0 0.4 0
+524288 0 0 0 0 5242880 5242880 7864320 0.025 0 0 0.5 0
+524288 0 0 0 0 5242880 5242880 8388608 0.025 0 0 0.6 0
+524288 0 0 0 0 5242880 5242880 8912896 0.025 0 0 0.7 0
+524288 0 0 0 0 5242880 5242880 9437184 0.025 0 0 0.8 0
+524288 0 0 0 0 5242880 5242880 9961472 0.025 0 0 0.9 0
+524288 0 0 0 0 5242880 5242880 10485760 0.025 0 0 1 0
+
+
+# iteration 524288
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 1 0 0 5242880 5242880 2621440 0.025 0 0 -0.5 0
+524288 0 1 0 0 5242880 5242880 2883584 0.025 0 0 -0.45 0
+524288 0 1 0 0 5242880 5242880 3145728 0.025 0 0 -0.4 0
+524288 0 1 0 0 5242880 5242880 3407872 0.025 0 0 -0.35 -3.0010069949904e-12
+524288 0 1 0 0 5242880 5242880 3670016 0.025 0 0 -0.3 0
+524288 0 1 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 5.02576150545701e-11
+524288 0 1 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 4.80161119198463e-11
+524288 0 1 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 3.65377977873393e-10
+524288 0 1 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 -3.71976833594504e-10
+524288 0 1 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 -2.64427137593633e-12
+524288 0 1 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 1 0 0 5242880 5242880 5505024 0.025 0 0 0.05 2.64427137593633e-12
+524288 0 1 0 0 5242880 5242880 5767168 0.025 0 0 0.1 3.71976833594504e-10
+524288 0 1 0 0 5242880 5242880 6029312 0.025 0 0 0.15 -3.65377977873393e-10
+524288 0 1 0 0 5242880 5242880 6291456 0.025 0 0 0.2 -4.80161119198463e-11
+524288 0 1 0 0 5242880 5242880 6553600 0.025 0 0 0.25 -5.02576150545701e-11
+524288 0 1 0 0 5242880 5242880 6815744 0.025 0 0 0.3 0
+524288 0 1 0 0 5242880 5242880 7077888 0.025 0 0 0.35 3.0010069949904e-12
+524288 0 1 0 0 5242880 5242880 7340032 0.025 0 0 0.4 0
+524288 0 1 0 0 5242880 5242880 7602176 0.025 0 0 0.45 0
+524288 0 1 0 0 5242880 5242880 7864320 0.025 0 0 0.5 0
+
+
+# iteration 524288
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+524288 0 2 0 0 5242880 5242880 3932160 0.025 0 0 -0.25 5.02576150545701e-11
+524288 0 2 0 0 5242880 5242880 4063232 0.025 0 0 -0.225 3.24428478060221e-11
+524288 0 2 0 0 5242880 5242880 4194304 0.025 0 0 -0.2 4.80161119198463e-11
+524288 0 2 0 0 5242880 5242880 4325376 0.025 0 0 -0.175 2.52641626667443e-10
+524288 0 2 0 0 5242880 5242880 4456448 0.025 0 0 -0.15 3.65377977873393e-10
+524288 0 2 0 0 5242880 5242880 4587520 0.025 0 0 -0.125 -6.54759637711926e-12
+524288 0 2 0 0 5242880 5242880 4718592 0.025 0 0 -0.1 -3.71976833594504e-10
+524288 0 2 0 0 5242880 5242880 4849664 0.025 0 0 -0.075 -8.34775128651562e-10
+524288 0 2 0 0 5242880 5242880 4980736 0.025 0 0 -0.05 -2.64427137593633e-12
+524288 0 2 0 0 5242880 5242880 5111808 0.025 0 0 -0.025 -1.42062519155791e-11
+524288 0 2 0 0 5242880 5242880 5242880 0.025 0 0 0 0
+524288 0 2 0 0 5242880 5242880 5373952 0.025 0 0 0.025 1.42062519155791e-11
+524288 0 2 0 0 5242880 5242880 5505024 0.025 0 0 0.05 2.64427137593633e-12
+524288 0 2 0 0 5242880 5242880 5636096 0.025 0 0 0.075 8.34775128651562e-10
+524288 0 2 0 0 5242880 5242880 5767168 0.025 0 0 0.1 3.71976833594504e-10
+524288 0 2 0 0 5242880 5242880 5898240 0.025 0 0 0.125 6.54759637711926e-12
+524288 0 2 0 0 5242880 5242880 6029312 0.025 0 0 0.15 -3.65377977873393e-10
+524288 0 2 0 0 5242880 5242880 6160384 0.025 0 0 0.175 -2.52641626667443e-10
+524288 0 2 0 0 5242880 5242880 6291456 0.025 0 0 0.2 -4.80161119198463e-11
+524288 0 2 0 0 5242880 5242880 6422528 0.025 0 0 0.225 -3.24428478060221e-11
+524288 0 2 0 0 5242880 5242880 6553600 0.025 0 0 0.25 -5.02576150545701e-11
+
+
+# iteration 655360
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+655360 0 2 0 0 5242880 5242880 3932160 0.03125 0 0 -0.25 -2.03283184165604e-10
+655360 0 2 0 0 5242880 5242880 4063232 0.03125 0 0 -0.225 -1.10218192534204e-10
+655360 0 2 0 0 5242880 5242880 4194304 0.03125 0 0 -0.2 6.71560801759896e-11
+655360 0 2 0 0 5242880 5242880 4325376 0.03125 0 0 -0.175 3.81864711955078e-10
+655360 0 2 0 0 5242880 5242880 4456448 0.03125 0 0 -0.15 5.43200962509205e-10
+655360 0 2 0 0 5242880 5242880 4587520 0.03125 0 0 -0.125 7.64770232818818e-11
+655360 0 2 0 0 5242880 5242880 4718592 0.03125 0 0 -0.1 -5.39370936802896e-10
+655360 0 2 0 0 5242880 5242880 4849664 0.03125 0 0 -0.075 -1.12595637443332e-09
+655360 0 2 0 0 5242880 5242880 4980736 0.03125 0 0 -0.05 -1.12561372260049e-11
+655360 0 2 0 0 5242880 5242880 5111808 0.03125 0 0 -0.025 -3.75721814771524e-11
+655360 0 2 0 0 5242880 5242880 5242880 0.03125 0 0 0 0
+655360 0 2 0 0 5242880 5242880 5373952 0.03125 0 0 0.025 3.75721814771524e-11
+655360 0 2 0 0 5242880 5242880 5505024 0.03125 0 0 0.05 1.12561372260049e-11
+655360 0 2 0 0 5242880 5242880 5636096 0.03125 0 0 0.075 1.12595637443332e-09
+655360 0 2 0 0 5242880 5242880 5767168 0.03125 0 0 0.1 5.39370936802896e-10
+655360 0 2 0 0 5242880 5242880 5898240 0.03125 0 0 0.125 -7.64770232818818e-11
+655360 0 2 0 0 5242880 5242880 6029312 0.03125 0 0 0.15 -5.43200962509205e-10
+655360 0 2 0 0 5242880 5242880 6160384 0.03125 0 0 0.175 -3.81864711955078e-10
+655360 0 2 0 0 5242880 5242880 6291456 0.03125 0 0 0.2 -6.71560801759896e-11
+655360 0 2 0 0 5242880 5242880 6422528 0.03125 0 0 0.225 1.10218192534204e-10
+655360 0 2 0 0 5242880 5242880 6553600 0.03125 0 0 0.25 2.03283184165604e-10
+
+
+# iteration 786432
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 1 0 0 5242880 5242880 2621440 0.0375 0 0 -0.5 -3.17246229286638e-14
+786432 0 1 0 0 5242880 5242880 2883584 0.0375 0 0 -0.45 1.04805866676244e-12
+786432 0 1 0 0 5242880 5242880 3145728 0.0375 0 0 -0.4 4.56771773182929e-13
+786432 0 1 0 0 5242880 5242880 3407872 0.0375 0 0 -0.35 -1.77414430260585e-11
+786432 0 1 0 0 5242880 5242880 3670016 0.0375 0 0 -0.3 -1.29435143159107e-11
+786432 0 1 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 1.14095870609471e-10
+786432 0 1 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 8.3050656629613e-11
+786432 0 1 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 7.1777994427776e-10
+786432 0 1 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 -6.90806513844085e-10
+786432 0 1 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 -2.86001292093552e-11
+786432 0 1 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 1 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 2.86001292093552e-11
+786432 0 1 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 6.90806513844085e-10
+786432 0 1 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 -7.1777994427776e-10
+786432 0 1 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 -8.3050656629613e-11
+786432 0 1 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 -1.14095870609471e-10
+786432 0 1 0 0 5242880 5242880 6815744 0.0375 0 0 0.3 1.29435143159107e-11
+786432 0 1 0 0 5242880 5242880 7077888 0.0375 0 0 0.35 1.77414430260585e-11
+786432 0 1 0 0 5242880 5242880 7340032 0.0375 0 0 0.4 -4.56771773182929e-13
+786432 0 1 0 0 5242880 5242880 7602176 0.0375 0 0 0.45 -1.04805866676244e-12
+786432 0 1 0 0 5242880 5242880 7864320 0.0375 0 0 0.5 3.17246229286638e-14
+
+
+# iteration 786432
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+786432 0 2 0 0 5242880 5242880 3932160 0.0375 0 0 -0.25 1.14095870609471e-10
+786432 0 2 0 0 5242880 5242880 4063232 0.0375 0 0 -0.225 6.68426446993694e-11
+786432 0 2 0 0 5242880 5242880 4194304 0.0375 0 0 -0.2 8.3050656629613e-11
+786432 0 2 0 0 5242880 5242880 4325376 0.0375 0 0 -0.175 4.8651162821256e-10
+786432 0 2 0 0 5242880 5242880 4456448 0.0375 0 0 -0.15 7.1777994427776e-10
+786432 0 2 0 0 5242880 5242880 4587520 0.0375 0 0 -0.125 1.17693966551757e-11
+786432 0 2 0 0 5242880 5242880 4718592 0.0375 0 0 -0.1 -6.90806513844085e-10
+786432 0 2 0 0 5242880 5242880 4849664 0.0375 0 0 -0.075 -1.37983248438278e-09
+786432 0 2 0 0 5242880 5242880 4980736 0.0375 0 0 -0.05 -2.86001292093552e-11
+786432 0 2 0 0 5242880 5242880 5111808 0.0375 0 0 -0.025 -7.6696357598216e-11
+786432 0 2 0 0 5242880 5242880 5242880 0.0375 0 0 0 0
+786432 0 2 0 0 5242880 5242880 5373952 0.0375 0 0 0.025 7.6696357598216e-11
+786432 0 2 0 0 5242880 5242880 5505024 0.0375 0 0 0.05 2.86001292093552e-11
+786432 0 2 0 0 5242880 5242880 5636096 0.0375 0 0 0.075 1.37983248438278e-09
+786432 0 2 0 0 5242880 5242880 5767168 0.0375 0 0 0.1 6.90806513844085e-10
+786432 0 2 0 0 5242880 5242880 5898240 0.0375 0 0 0.125 -1.17693966551757e-11
+786432 0 2 0 0 5242880 5242880 6029312 0.0375 0 0 0.15 -7.1777994427776e-10
+786432 0 2 0 0 5242880 5242880 6160384 0.0375 0 0 0.175 -4.8651162821256e-10
+786432 0 2 0 0 5242880 5242880 6291456 0.0375 0 0 0.2 -8.3050656629613e-11
+786432 0 2 0 0 5242880 5242880 6422528 0.0375 0 0 0.225 -6.68426446993694e-11
+786432 0 2 0 0 5242880 5242880 6553600 0.0375 0 0 0.25 -1.14095870609471e-10
+
+
+# iteration 917504
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+917504 0 2 0 0 5242880 5242880 3932160 0.04375 0 0 -0.25 1.55692360393826e-10
+917504 0 2 0 0 5242880 5242880 4063232 0.04375 0 0 -0.225 8.98292153340505e-11
+917504 0 2 0 0 5242880 5242880 4194304 0.04375 0 0 -0.2 9.87482959985408e-11
+917504 0 2 0 0 5242880 5242880 4325376 0.04375 0 0 -0.175 5.82061050143167e-10
+917504 0 2 0 0 5242880 5242880 4456448 0.04375 0 0 -0.15 8.7534961223934e-10
+917504 0 2 0 0 5242880 5242880 4587520 0.04375 0 0 -0.125 9.97820270600842e-11
+917504 0 2 0 0 5242880 5242880 4718592 0.04375 0 0 -0.1 -7.99350738378557e-10
+917504 0 2 0 0 5242880 5242880 4849664 0.04375 0 0 -0.075 -1.58914841471199e-09
+917504 0 2 0 0 5242880 5242880 4980736 0.04375 0 0 -0.05 -5.6796509625053e-11
+917504 0 2 0 0 5242880 5242880 5111808 0.04375 0 0 -0.025 -1.33697386495157e-10
+917504 0 2 0 0 5242880 5242880 5242880 0.04375 0 0 0 0
+917504 0 2 0 0 5242880 5242880 5373952 0.04375 0 0 0.025 1.33697386495157e-10
+917504 0 2 0 0 5242880 5242880 5505024 0.04375 0 0 0.05 5.6796509625053e-11
+917504 0 2 0 0 5242880 5242880 5636096 0.04375 0 0 0.075 1.58914841471199e-09
+917504 0 2 0 0 5242880 5242880 5767168 0.04375 0 0 0.1 7.99350738378557e-10
+917504 0 2 0 0 5242880 5242880 5898240 0.04375 0 0 0.125 -9.97820270600842e-11
+917504 0 2 0 0 5242880 5242880 6029312 0.04375 0 0 0.15 -8.7534961223934e-10
+917504 0 2 0 0 5242880 5242880 6160384 0.04375 0 0 0.175 -5.82061050143167e-10
+917504 0 2 0 0 5242880 5242880 6291456 0.04375 0 0 0.2 -9.87482959985408e-11
+917504 0 2 0 0 5242880 5242880 6422528 0.04375 0 0 0.225 -8.98292153340505e-11
+917504 0 2 0 0 5242880 5242880 6553600 0.04375 0 0 0.25 -1.55692360393826e-10
+
+
+# iteration 1048576
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 0 0 0 5242880 5242880 0 0.05 0 0 -1 0
+1048576 0 0 0 0 5242880 5242880 524288 0.05 0 0 -0.9 0
+1048576 0 0 0 0 5242880 5242880 1048576 0.05 0 0 -0.8 0
+1048576 0 0 0 0 5242880 5242880 1572864 0.05 0 0 -0.7 0
+1048576 0 0 0 0 5242880 5242880 2097152 0.05 0 0 -0.6 0
+1048576 0 0 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 -8.45989944764369e-14
+1048576 0 0 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 1.21805806182114e-12
+1048576 0 0 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 -3.45160381757618e-11
+1048576 0 0 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 1.13232846710165e-10
+1048576 0 0 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 -8.77529424125889e-10
+1048576 0 0 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 0 0 0 5242880 5242880 5767168 0.05 0 0 0.1 8.77529424125889e-10
+1048576 0 0 0 0 5242880 5242880 6291456 0.05 0 0 0.2 -1.13232846710165e-10
+1048576 0 0 0 0 5242880 5242880 6815744 0.05 0 0 0.3 3.45160381757618e-11
+1048576 0 0 0 0 5242880 5242880 7340032 0.05 0 0 0.4 -1.21805806182114e-12
+1048576 0 0 0 0 5242880 5242880 7864320 0.05 0 0 0.5 8.45989944764369e-14
+1048576 0 0 0 0 5242880 5242880 8388608 0.05 0 0 0.6 0
+1048576 0 0 0 0 5242880 5242880 8912896 0.05 0 0 0.7 0
+1048576 0 0 0 0 5242880 5242880 9437184 0.05 0 0 0.8 0
+1048576 0 0 0 0 5242880 5242880 9961472 0.05 0 0 0.9 0
+1048576 0 0 0 0 5242880 5242880 10485760 0.05 0 0 1 0
+
+
+# iteration 1048576
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 1 0 0 5242880 5242880 2621440 0.05 0 0 -0.5 -8.45989944764369e-14
+1048576 0 1 0 0 5242880 5242880 2883584 0.05 0 0 -0.45 2.79482311136651e-12
+1048576 0 1 0 0 5242880 5242880 3145728 0.05 0 0 -0.4 1.21805806182114e-12
+1048576 0 1 0 0 5242880 5242880 3407872 0.05 0 0 -0.35 -2.58018792963222e-11
+1048576 0 1 0 0 5242880 5242880 3670016 0.05 0 0 -0.3 -3.45160381757618e-11
+1048576 0 1 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 9.90476651796061e-11
+1048576 0 1 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 1.13232846710165e-10
+1048576 0 1 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 1.02049840337385e-09
+1048576 0 1 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 -8.77529424125889e-10
+1048576 0 1 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 -9.69948542780171e-11
+1048576 0 1 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 1 0 0 5242880 5242880 5505024 0.05 0 0 0.05 9.69948542780171e-11
+1048576 0 1 0 0 5242880 5242880 5767168 0.05 0 0 0.1 8.77529424125889e-10
+1048576 0 1 0 0 5242880 5242880 6029312 0.05 0 0 0.15 -1.02049840337385e-09
+1048576 0 1 0 0 5242880 5242880 6291456 0.05 0 0 0.2 -1.13232846710165e-10
+1048576 0 1 0 0 5242880 5242880 6553600 0.05 0 0 0.25 -9.90476651796061e-11
+1048576 0 1 0 0 5242880 5242880 6815744 0.05 0 0 0.3 3.45160381757618e-11
+1048576 0 1 0 0 5242880 5242880 7077888 0.05 0 0 0.35 2.58018792963222e-11
+1048576 0 1 0 0 5242880 5242880 7340032 0.05 0 0 0.4 -1.21805806182114e-12
+1048576 0 1 0 0 5242880 5242880 7602176 0.05 0 0 0.45 -2.79482311136651e-12
+1048576 0 1 0 0 5242880 5242880 7864320 0.05 0 0 0.5 8.45989944764369e-14
+
+
+# iteration 1048576
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1048576 0 2 0 0 5242880 5242880 3932160 0.05 0 0 -0.25 9.90476651796061e-11
+1048576 0 2 0 0 5242880 5242880 4063232 0.05 0 0 -0.225 5.77838901131156e-11
+1048576 0 2 0 0 5242880 5242880 4194304 0.05 0 0 -0.2 1.13232846710165e-10
+1048576 0 2 0 0 5242880 5242880 4325376 0.05 0 0 -0.175 6.86378938106402e-10
+1048576 0 2 0 0 5242880 5242880 4456448 0.05 0 0 -0.15 1.02049840337385e-09
+1048576 0 2 0 0 5242880 5242880 4587520 0.05 0 0 -0.125 7.940517629997e-11
+1048576 0 2 0 0 5242880 5242880 4718592 0.05 0 0 -0.1 -8.77529424125889e-10
+1048576 0 2 0 0 5242880 5242880 4849664 0.05 0 0 -0.075 -1.74812777216834e-09
+1048576 0 2 0 0 5242880 5242880 4980736 0.05 0 0 -0.05 -9.69948542780171e-11
+1048576 0 2 0 0 5242880 5242880 5111808 0.05 0 0 -0.025 -2.09176403050589e-10
+1048576 0 2 0 0 5242880 5242880 5242880 0.05 0 0 0 0
+1048576 0 2 0 0 5242880 5242880 5373952 0.05 0 0 0.025 2.09176403050589e-10
+1048576 0 2 0 0 5242880 5242880 5505024 0.05 0 0 0.05 9.69948542780171e-11
+1048576 0 2 0 0 5242880 5242880 5636096 0.05 0 0 0.075 1.74812777216834e-09
+1048576 0 2 0 0 5242880 5242880 5767168 0.05 0 0 0.1 8.77529424125889e-10
+1048576 0 2 0 0 5242880 5242880 5898240 0.05 0 0 0.125 -7.940517629997e-11
+1048576 0 2 0 0 5242880 5242880 6029312 0.05 0 0 0.15 -1.02049840337385e-09
+1048576 0 2 0 0 5242880 5242880 6160384 0.05 0 0 0.175 -6.86378938106402e-10
+1048576 0 2 0 0 5242880 5242880 6291456 0.05 0 0 0.2 -1.13232846710165e-10
+1048576 0 2 0 0 5242880 5242880 6422528 0.05 0 0 0.225 -5.77838901131156e-11
+1048576 0 2 0 0 5242880 5242880 6553600 0.05 0 0 0.25 -9.90476651796061e-11
+
+
+# iteration 1179648
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1179648 0 2 0 0 5242880 5242880 3932160 0.05625 0 0 -0.25 1.16100548303662e-10
+1179648 0 2 0 0 5242880 5242880 4063232 0.05625 0 0 -0.225 6.10234773446789e-11
+1179648 0 2 0 0 5242880 5242880 4194304 0.05625 0 0 -0.2 1.15569069071564e-10
+1179648 0 2 0 0 5242880 5242880 4325376 0.05625 0 0 -0.175 7.57218084160716e-10
+1179648 0 2 0 0 5242880 5242880 4456448 0.05625 0 0 -0.15 1.14978515973243e-09
+1179648 0 2 0 0 5242880 5242880 4587520 0.05625 0 0 -0.125 1.76389248042821e-10
+1179648 0 2 0 0 5242880 5242880 4718592 0.05625 0 0 -0.1 -9.02082302374948e-10
+1179648 0 2 0 0 5242880 5242880 4849664 0.05625 0 0 -0.075 -1.85227602700344e-09
+1179648 0 2 0 0 5242880 5242880 4980736 0.05625 0 0 -0.05 -1.4924199145024e-10
+1179648 0 2 0 0 5242880 5242880 5111808 0.05625 0 0 -0.025 -3.02089459928527e-10
+1179648 0 2 0 0 5242880 5242880 5242880 0.05625 0 0 0 0
+1179648 0 2 0 0 5242880 5242880 5373952 0.05625 0 0 0.025 3.02089459928527e-10
+1179648 0 2 0 0 5242880 5242880 5505024 0.05625 0 0 0.05 1.4924199145024e-10
+1179648 0 2 0 0 5242880 5242880 5636096 0.05625 0 0 0.075 1.85227602700344e-09
+1179648 0 2 0 0 5242880 5242880 5767168 0.05625 0 0 0.1 9.02082302374948e-10
+1179648 0 2 0 0 5242880 5242880 5898240 0.05625 0 0 0.125 -1.76389248042821e-10
+1179648 0 2 0 0 5242880 5242880 6029312 0.05625 0 0 0.15 -1.14978515973243e-09
+1179648 0 2 0 0 5242880 5242880 6160384 0.05625 0 0 0.175 -7.57218084160716e-10
+1179648 0 2 0 0 5242880 5242880 6291456 0.05625 0 0 0.2 -1.15569069071564e-10
+1179648 0 2 0 0 5242880 5242880 6422528 0.05625 0 0 0.225 -6.10234773446789e-11
+1179648 0 2 0 0 5242880 5242880 6553600 0.05625 0 0 0.25 -1.16100548303662e-10
+
+
+# iteration 1310720
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 1 0 0 5242880 5242880 2621440 0.0625 0 0 -0.5 -3.04437898501764e-13
+1310720 0 1 0 0 5242880 5242880 2883584 0.0625 0 0 -0.45 4.38967709837784e-12
+1310720 0 1 0 0 5242880 5242880 3145728 0.0625 0 0 -0.4 3.11205401726244e-12
+1310720 0 1 0 0 5242880 5242880 3407872 0.0625 0 0 -0.35 -3.66809800849549e-11
+1310720 0 1 0 0 5242880 5242880 3670016 0.0625 0 0 -0.3 -4.49737374078052e-11
+1310720 0 1 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 1.49538088653709e-10
+1310720 0 1 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 1.09402042980378e-10
+1310720 0 1 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 1.26435693396469e-09
+1310720 0 1 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 -8.82571386343993e-10
+1310720 0 1 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 -2.12154000385952e-10
+1310720 0 1 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 1 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 2.12154000385952e-10
+1310720 0 1 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 8.82571386343993e-10
+1310720 0 1 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 -1.26435693396469e-09
+1310720 0 1 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 -1.09402042980378e-10
+1310720 0 1 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 -1.49538088653709e-10
+1310720 0 1 0 0 5242880 5242880 6815744 0.0625 0 0 0.3 4.49737374078052e-11
+1310720 0 1 0 0 5242880 5242880 7077888 0.0625 0 0 0.35 3.66809800849549e-11
+1310720 0 1 0 0 5242880 5242880 7340032 0.0625 0 0 0.4 -3.11205401726244e-12
+1310720 0 1 0 0 5242880 5242880 7602176 0.0625 0 0 0.45 -4.38967709837784e-12
+1310720 0 1 0 0 5242880 5242880 7864320 0.0625 0 0 0.5 3.04437898501764e-13
+
+
+# iteration 1310720
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1310720 0 2 0 0 5242880 5242880 3932160 0.0625 0 0 -0.25 1.49538088653709e-10
+1310720 0 2 0 0 5242880 5242880 4063232 0.0625 0 0 -0.225 6.94423742593689e-11
+1310720 0 2 0 0 5242880 5242880 4194304 0.0625 0 0 -0.2 1.09402042980378e-10
+1310720 0 2 0 0 5242880 5242880 4325376 0.0625 0 0 -0.175 8.18554005637242e-10
+1310720 0 2 0 0 5242880 5242880 4456448 0.0625 0 0 -0.15 1.26435693396469e-09
+1310720 0 2 0 0 5242880 5242880 4587520 0.0625 0 0 -0.125 2.21176367874489e-10
+1310720 0 2 0 0 5242880 5242880 4718592 0.0625 0 0 -0.1 -8.82571386343993e-10
+1310720 0 2 0 0 5242880 5242880 4849664 0.0625 0 0 -0.075 -1.89863267700356e-09
+1310720 0 2 0 0 5242880 5242880 4980736 0.0625 0 0 -0.05 -2.12154000385952e-10
+1310720 0 2 0 0 5242880 5242880 5111808 0.0625 0 0 -0.025 -4.09720003295237e-10
+1310720 0 2 0 0 5242880 5242880 5242880 0.0625 0 0 0 0
+1310720 0 2 0 0 5242880 5242880 5373952 0.0625 0 0 0.025 4.09720003295237e-10
+1310720 0 2 0 0 5242880 5242880 5505024 0.0625 0 0 0.05 2.12154000385952e-10
+1310720 0 2 0 0 5242880 5242880 5636096 0.0625 0 0 0.075 1.89863267700356e-09
+1310720 0 2 0 0 5242880 5242880 5767168 0.0625 0 0 0.1 8.82571386343993e-10
+1310720 0 2 0 0 5242880 5242880 5898240 0.0625 0 0 0.125 -2.21176367874489e-10
+1310720 0 2 0 0 5242880 5242880 6029312 0.0625 0 0 0.15 -1.26435693396469e-09
+1310720 0 2 0 0 5242880 5242880 6160384 0.0625 0 0 0.175 -8.18554005637242e-10
+1310720 0 2 0 0 5242880 5242880 6291456 0.0625 0 0 0.2 -1.09402042980378e-10
+1310720 0 2 0 0 5242880 5242880 6422528 0.0625 0 0 0.225 -6.94423742593689e-11
+1310720 0 2 0 0 5242880 5242880 6553600 0.0625 0 0 0.25 -1.49538088653709e-10
+
+
+# iteration 1441792
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1441792 0 2 0 0 5242880 5242880 3932160 0.06875 0 0 -0.25 1.81307149993657e-10
+1441792 0 2 0 0 5242880 5242880 4063232 0.06875 0 0 -0.225 7.7773652278003e-11
+1441792 0 2 0 0 5242880 5242880 4194304 0.06875 0 0 -0.2 1.03259930987754e-10
+1441792 0 2 0 0 5242880 5242880 4325376 0.06875 0 0 -0.175 8.64003737307137e-10
+1441792 0 2 0 0 5242880 5242880 4456448 0.06875 0 0 -0.15 1.36522779944452e-09
+1441792 0 2 0 0 5242880 5242880 4587520 0.06875 0 0 -0.125 3.34266718489435e-10
+1441792 0 2 0 0 5242880 5242880 4718592 0.06875 0 0 -0.1 -8.06391597015418e-10
+1441792 0 2 0 0 5242880 5242880 4849664 0.06875 0 0 -0.075 -1.88530306181415e-09
+1441792 0 2 0 0 5242880 5242880 4980736 0.06875 0 0 -0.05 -2.82855130521546e-10
+1441792 0 2 0 0 5242880 5242880 5111808 0.06875 0 0 -0.025 -5.27734009270198e-10
+1441792 0 2 0 0 5242880 5242880 5242880 0.06875 0 0 0 0
+1441792 0 2 0 0 5242880 5242880 5373952 0.06875 0 0 0.025 5.27734009270198e-10
+1441792 0 2 0 0 5242880 5242880 5505024 0.06875 0 0 0.05 2.82855130521546e-10
+1441792 0 2 0 0 5242880 5242880 5636096 0.06875 0 0 0.075 1.88530306181415e-09
+1441792 0 2 0 0 5242880 5242880 5767168 0.06875 0 0 0.1 8.06391597015418e-10
+1441792 0 2 0 0 5242880 5242880 5898240 0.06875 0 0 0.125 -3.34266718489435e-10
+1441792 0 2 0 0 5242880 5242880 6029312 0.06875 0 0 0.15 -1.36522779944452e-09
+1441792 0 2 0 0 5242880 5242880 6160384 0.06875 0 0 0.175 -8.64003737307137e-10
+1441792 0 2 0 0 5242880 5242880 6291456 0.06875 0 0 0.2 -1.03259930987754e-10
+1441792 0 2 0 0 5242880 5242880 6422528 0.06875 0 0 0.225 -7.7773652278003e-11
+1441792 0 2 0 0 5242880 5242880 6553600 0.06875 0 0 0.25 -1.81307149993657e-10
+
+
+# iteration 1572864
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 0 0 0 5242880 5242880 0 0.075 0 0 -1 0
+1572864 0 0 0 0 5242880 5242880 524288 0.075 0 0 -0.9 0
+1572864 0 0 0 0 5242880 5242880 1048576 0.075 0 0 -0.8 0
+1572864 0 0 0 0 5242880 5242880 1572864 0.075 0 0 -0.7 -1.35771024053118e-15
+1572864 0 0 0 0 5242880 5242880 2097152 0.075 0 0 -0.6 1.98637402822518e-14
+1572864 0 0 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 -6.42636407051829e-13
+1572864 0 0 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 5.86269458905756e-12
+1572864 0 0 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 -5.08978900692902e-11
+1572864 0 0 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 9.43000122433091e-11
+1572864 0 0 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 -6.75829822660567e-10
+1572864 0 0 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 0 0 0 5242880 5242880 5767168 0.075 0 0 0.1 6.75829822660567e-10
+1572864 0 0 0 0 5242880 5242880 6291456 0.075 0 0 0.2 -9.43000122433091e-11
+1572864 0 0 0 0 5242880 5242880 6815744 0.075 0 0 0.3 5.08978900692902e-11
+1572864 0 0 0 0 5242880 5242880 7340032 0.075 0 0 0.4 -5.86269458905756e-12
+1572864 0 0 0 0 5242880 5242880 7864320 0.075 0 0 0.5 6.42636407051829e-13
+1572864 0 0 0 0 5242880 5242880 8388608 0.075 0 0 0.6 -1.98637402822518e-14
+1572864 0 0 0 0 5242880 5242880 8912896 0.075 0 0 0.7 1.35771024053118e-15
+1572864 0 0 0 0 5242880 5242880 9437184 0.075 0 0 0.8 0
+1572864 0 0 0 0 5242880 5242880 9961472 0.075 0 0 0.9 0
+1572864 0 0 0 0 5242880 5242880 10485760 0.075 0 0 1 0
+
+
+# iteration 1572864
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 1 0 0 5242880 5242880 2621440 0.075 0 0 -0.5 -6.42636407051829e-13
+1572864 0 1 0 0 5242880 5242880 2883584 0.075 0 0 -0.45 6.11615937294123e-12
+1572864 0 1 0 0 5242880 5242880 3145728 0.075 0 0 -0.4 5.86269458905756e-12
+1572864 0 1 0 0 5242880 5242880 3407872 0.075 0 0 -0.35 -3.1185883447397e-11
+1572864 0 1 0 0 5242880 5242880 3670016 0.075 0 0 -0.3 -5.08978900692902e-11
+1572864 0 1 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 6.6286639227355e-11
+1572864 0 1 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 9.43000122433091e-11
+1572864 0 1 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 1.45205973171395e-09
+1572864 0 1 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 -6.75829822660567e-10
+1572864 0 1 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 -3.56851564501752e-10
+1572864 0 1 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 1 0 0 5242880 5242880 5505024 0.075 0 0 0.05 3.56851564501752e-10
+1572864 0 1 0 0 5242880 5242880 5767168 0.075 0 0 0.1 6.75829822660567e-10
+1572864 0 1 0 0 5242880 5242880 6029312 0.075 0 0 0.15 -1.45205973171395e-09
+1572864 0 1 0 0 5242880 5242880 6291456 0.075 0 0 0.2 -9.43000122433091e-11
+1572864 0 1 0 0 5242880 5242880 6553600 0.075 0 0 0.25 -6.6286639227355e-11
+1572864 0 1 0 0 5242880 5242880 6815744 0.075 0 0 0.3 5.08978900692902e-11
+1572864 0 1 0 0 5242880 5242880 7077888 0.075 0 0 0.35 3.1185883447397e-11
+1572864 0 1 0 0 5242880 5242880 7340032 0.075 0 0 0.4 -5.86269458905756e-12
+1572864 0 1 0 0 5242880 5242880 7602176 0.075 0 0 0.45 -6.11615937294123e-12
+1572864 0 1 0 0 5242880 5242880 7864320 0.075 0 0 0.5 6.42636407051829e-13
+
+
+# iteration 1572864
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1572864 0 2 0 0 5242880 5242880 3932160 0.075 0 0 -0.25 6.6286639227355e-11
+1572864 0 2 0 0 5242880 5242880 4063232 0.075 0 0 -0.225 2.75737634945702e-12
+1572864 0 2 0 0 5242880 5242880 4194304 0.075 0 0 -0.2 9.43000122433091e-11
+1572864 0 2 0 0 5242880 5242880 4325376 0.075 0 0 -0.175 9.07923804940536e-10
+1572864 0 2 0 0 5242880 5242880 4456448 0.075 0 0 -0.15 1.45205973171395e-09
+1572864 0 2 0 0 5242880 5242880 4587520 0.075 0 0 -0.125 4.53038795858683e-10
+1572864 0 2 0 0 5242880 5242880 4718592 0.075 0 0 -0.1 -6.75829822660567e-10
+1572864 0 2 0 0 5242880 5242880 4849664 0.075 0 0 -0.075 -1.8117351507918e-09
+1572864 0 2 0 0 5242880 5242880 4980736 0.075 0 0 -0.05 -3.56851564501752e-10
+1572864 0 2 0 0 5242880 5242880 5111808 0.075 0 0 -0.025 -6.50323827196727e-10
+1572864 0 2 0 0 5242880 5242880 5242880 0.075 0 0 0 0
+1572864 0 2 0 0 5242880 5242880 5373952 0.075 0 0 0.025 6.50323827196727e-10
+1572864 0 2 0 0 5242880 5242880 5505024 0.075 0 0 0.05 3.56851564501752e-10
+1572864 0 2 0 0 5242880 5242880 5636096 0.075 0 0 0.075 1.8117351507918e-09
+1572864 0 2 0 0 5242880 5242880 5767168 0.075 0 0 0.1 6.75829822660567e-10
+1572864 0 2 0 0 5242880 5242880 5898240 0.075 0 0 0.125 -4.53038795858683e-10
+1572864 0 2 0 0 5242880 5242880 6029312 0.075 0 0 0.15 -1.45205973171395e-09
+1572864 0 2 0 0 5242880 5242880 6160384 0.075 0 0 0.175 -9.07923804940536e-10
+1572864 0 2 0 0 5242880 5242880 6291456 0.075 0 0 0.2 -9.43000122433091e-11
+1572864 0 2 0 0 5242880 5242880 6422528 0.075 0 0 0.225 -2.75737634945702e-12
+1572864 0 2 0 0 5242880 5242880 6553600 0.075 0 0 0.25 -6.6286639227355e-11
+
+
+# iteration 1703936
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1703936 0 2 0 0 5242880 5242880 3932160 0.08125 0 0 -0.25 6.96062224198494e-11
+1703936 0 2 0 0 5242880 5242880 4063232 0.08125 0 0 -0.225 -1.10388286118339e-11
+1703936 0 2 0 0 5242880 5242880 4194304 0.08125 0 0 -0.2 7.52374759716012e-11
+1703936 0 2 0 0 5242880 5242880 4325376 0.08125 0 0 -0.175 9.3008305679465e-10
+1703936 0 2 0 0 5242880 5242880 4456448 0.08125 0 0 -0.15 1.52889975737573e-09
+1703936 0 2 0 0 5242880 5242880 4587520 0.08125 0 0 -0.125 5.89320989216024e-10
+1703936 0 2 0 0 5242880 5242880 4718592 0.08125 0 0 -0.1 -4.94475691873812e-10
+1703936 0 2 0 0 5242880 5242880 4849664 0.08125 0 0 -0.075 -1.67817614897074e-09
+1703936 0 2 0 0 5242880 5242880 4980736 0.08125 0 0 -0.05 -4.281106418443e-10
+1703936 0 2 0 0 5242880 5242880 5111808 0.08125 0 0 -0.025 -7.70426056284634e-10
+1703936 0 2 0 0 5242880 5242880 5242880 0.08125 0 0 0 0
+1703936 0 2 0 0 5242880 5242880 5373952 0.08125 0 0 0.025 7.70426056284634e-10
+1703936 0 2 0 0 5242880 5242880 5505024 0.08125 0 0 0.05 4.281106418443e-10
+1703936 0 2 0 0 5242880 5242880 5636096 0.08125 0 0 0.075 1.67817614897074e-09
+1703936 0 2 0 0 5242880 5242880 5767168 0.08125 0 0 0.1 4.94475691873812e-10
+1703936 0 2 0 0 5242880 5242880 5898240 0.08125 0 0 0.125 -5.89320989216024e-10
+1703936 0 2 0 0 5242880 5242880 6029312 0.08125 0 0 0.15 -1.52889975737573e-09
+1703936 0 2 0 0 5242880 5242880 6160384 0.08125 0 0 0.175 -9.3008305679465e-10
+1703936 0 2 0 0 5242880 5242880 6291456 0.08125 0 0 0.2 -7.52374759716012e-11
+1703936 0 2 0 0 5242880 5242880 6422528 0.08125 0 0 0.225 1.10388286118339e-11
+1703936 0 2 0 0 5242880 5242880 6553600 0.08125 0 0 0.25 -6.96062224198494e-11
+
+
+# iteration 1835008
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 1 0 0 5242880 5242880 2621440 0.0875 0 0 -0.5 -1.14959691072114e-12
+1835008 0 1 0 0 5242880 5242880 2883584 0.0875 0 0 -0.45 7.22601572039165e-12
+1835008 0 1 0 0 5242880 5242880 3145728 0.0875 0 0 -0.4 9.22265678178953e-12
+1835008 0 1 0 0 5242880 5242880 3407872 0.0875 0 0 -0.35 -2.91131087878753e-11
+1835008 0 1 0 0 5242880 5242880 3670016 0.0875 0 0 -0.3 -4.30227031662326e-11
+1835008 0 1 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 1.02889344216125e-10
+1835008 0 1 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 4.8500592431111e-11
+1835008 0 1 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 1.59439886756226e-09
+1835008 0 1 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 -2.54991675922393e-10
+1835008 0 1 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 -4.89255647569594e-10
+1835008 0 1 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 1 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 4.89255647569594e-10
+1835008 0 1 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 2.54991675922393e-10
+1835008 0 1 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 -1.59439886756226e-09
+1835008 0 1 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 -4.8500592431111e-11
+1835008 0 1 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 -1.02889344216125e-10
+1835008 0 1 0 0 5242880 5242880 6815744 0.0875 0 0 0.3 4.30227031662326e-11
+1835008 0 1 0 0 5242880 5242880 7077888 0.0875 0 0 0.35 2.91131087878753e-11
+1835008 0 1 0 0 5242880 5242880 7340032 0.0875 0 0 0.4 -9.22265678178953e-12
+1835008 0 1 0 0 5242880 5242880 7602176 0.0875 0 0 0.45 -7.22601572039165e-12
+1835008 0 1 0 0 5242880 5242880 7864320 0.0875 0 0 0.5 1.14959691072114e-12
+
+
+# iteration 1835008
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1835008 0 2 0 0 5242880 5242880 3932160 0.0875 0 0 -0.25 1.02889344216125e-10
+1835008 0 2 0 0 5242880 5242880 4063232 0.0875 0 0 -0.225 -1.18041709106814e-11
+1835008 0 2 0 0 5242880 5242880 4194304 0.0875 0 0 -0.2 4.8500592431111e-11
+1835008 0 2 0 0 5242880 5242880 4325376 0.0875 0 0 -0.175 9.33637341977913e-10
+1835008 0 2 0 0 5242880 5242880 4456448 0.0875 0 0 -0.15 1.59439886756226e-09
+1835008 0 2 0 0 5242880 5242880 4587520 0.0875 0 0 -0.125 7.8096373624358e-10
+1835008 0 2 0 0 5242880 5242880 4718592 0.0875 0 0 -0.1 -2.54991675922393e-10
+1835008 0 2 0 0 5242880 5242880 4849664 0.0875 0 0 -0.075 -1.48597429731427e-09
+1835008 0 2 0 0 5242880 5242880 4980736 0.0875 0 0 -0.05 -4.89255647569594e-10
+1835008 0 2 0 0 5242880 5242880 5111808 0.0875 0 0 -0.025 -8.8000695156835e-10
+1835008 0 2 0 0 5242880 5242880 5242880 0.0875 0 0 0 0
+1835008 0 2 0 0 5242880 5242880 5373952 0.0875 0 0 0.025 8.8000695156835e-10
+1835008 0 2 0 0 5242880 5242880 5505024 0.0875 0 0 0.05 4.89255647569594e-10
+1835008 0 2 0 0 5242880 5242880 5636096 0.0875 0 0 0.075 1.48597429731427e-09
+1835008 0 2 0 0 5242880 5242880 5767168 0.0875 0 0 0.1 2.54991675922393e-10
+1835008 0 2 0 0 5242880 5242880 5898240 0.0875 0 0 0.125 -7.8096373624358e-10
+1835008 0 2 0 0 5242880 5242880 6029312 0.0875 0 0 0.15 -1.59439886756226e-09
+1835008 0 2 0 0 5242880 5242880 6160384 0.0875 0 0 0.175 -9.33637341977913e-10
+1835008 0 2 0 0 5242880 5242880 6291456 0.0875 0 0 0.2 -4.8500592431111e-11
+1835008 0 2 0 0 5242880 5242880 6422528 0.0875 0 0 0.225 1.18041709106814e-11
+1835008 0 2 0 0 5242880 5242880 6553600 0.0875 0 0 0.25 -1.02889344216125e-10
+
+
+# iteration 1966080
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+1966080 0 2 0 0 5242880 5242880 3932160 0.09375 0 0 -0.25 1.34436501201734e-10
+1966080 0 2 0 0 5242880 5242880 4063232 0.09375 0 0 -0.225 -1.03885846193062e-11
+1966080 0 2 0 0 5242880 5242880 4194304 0.09375 0 0 -0.2 2.69188612372906e-11
+1966080 0 2 0 0 5242880 5242880 4325376 0.09375 0 0 -0.175 9.38286274781054e-10
+1966080 0 2 0 0 5242880 5242880 4456448 0.09375 0 0 -0.15 1.65348419736237e-09
+1966080 0 2 0 0 5242880 5242880 4587520 0.09375 0 0 -0.125 9.42916074141038e-10
+1966080 0 2 0 0 5242880 5242880 4718592 0.09375 0 0 -0.1 2.10926091407752e-11
+1966080 0 2 0 0 5242880 5242880 4849664 0.09375 0 0 -0.075 -1.23712620703209e-09
+1966080 0 2 0 0 5242880 5242880 4980736 0.09375 0 0 -0.05 -5.31834245624345e-10
+1966080 0 2 0 0 5242880 5242880 5111808 0.09375 0 0 -0.025 -9.7040738870439e-10
+1966080 0 2 0 0 5242880 5242880 5242880 0.09375 0 0 0 0
+1966080 0 2 0 0 5242880 5242880 5373952 0.09375 0 0 0.025 9.7040738870439e-10
+1966080 0 2 0 0 5242880 5242880 5505024 0.09375 0 0 0.05 5.31834245624345e-10
+1966080 0 2 0 0 5242880 5242880 5636096 0.09375 0 0 0.075 1.23712620703209e-09
+1966080 0 2 0 0 5242880 5242880 5767168 0.09375 0 0 0.1 -2.10926091407752e-11
+1966080 0 2 0 0 5242880 5242880 5898240 0.09375 0 0 0.125 -9.42916074141038e-10
+1966080 0 2 0 0 5242880 5242880 6029312 0.09375 0 0 0.15 -1.65348419736237e-09
+1966080 0 2 0 0 5242880 5242880 6160384 0.09375 0 0 0.175 -9.38286274781054e-10
+1966080 0 2 0 0 5242880 5242880 6291456 0.09375 0 0 0.2 -2.69188612372906e-11
+1966080 0 2 0 0 5242880 5242880 6422528 0.09375 0 0 0.225 1.03885846193062e-11
+1966080 0 2 0 0 5242880 5242880 6553600 0.09375 0 0 0.25 -1.34436501201734e-10
+
+
+# iteration 2097152
+# refinement level 0 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 0 0 0 5242880 5242880 0 0.1 0 0 -1 0
+2097152 0 0 0 0 5242880 5242880 524288 0.1 0 0 -0.9 -2.31296463463574e-17
+2097152 0 0 0 0 5242880 5242880 1048576 0.1 0 0 -0.8 3.46944695195361e-16
+2097152 0 0 0 0 5242880 5242880 1572864 0.1 0 0 -0.7 -1.33434929772136e-14
+2097152 0 0 0 0 5242880 5242880 2097152 0.1 0 0 -0.6 1.30913798320383e-13
+2097152 0 0 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 -1.80851861264486e-12
+2097152 0 0 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 1.32743815939307e-11
+2097152 0 0 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 -2.44367743632938e-11
+2097152 0 0 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 6.21578251832252e-12
+2097152 0 0 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 3.4977364523255e-10
+2097152 0 0 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 0 0 0 5242880 5242880 5767168 0.1 0 0 0.1 -3.4977364523255e-10
+2097152 0 0 0 0 5242880 5242880 6291456 0.1 0 0 0.2 -6.21578251832252e-12
+2097152 0 0 0 0 5242880 5242880 6815744 0.1 0 0 0.3 2.44367743632938e-11
+2097152 0 0 0 0 5242880 5242880 7340032 0.1 0 0 0.4 -1.32743815939307e-11
+2097152 0 0 0 0 5242880 5242880 7864320 0.1 0 0 0.5 1.80851861264486e-12
+2097152 0 0 0 0 5242880 5242880 8388608 0.1 0 0 0.6 -1.30913798320383e-13
+2097152 0 0 0 0 5242880 5242880 8912896 0.1 0 0 0.7 1.33434929772136e-14
+2097152 0 0 0 0 5242880 5242880 9437184 0.1 0 0 0.8 -3.46944695195361e-16
+2097152 0 0 0 0 5242880 5242880 9961472 0.1 0 0 0.9 2.31296463463574e-17
+2097152 0 0 0 0 5242880 5242880 10485760 0.1 0 0 1 0
+
+
+# iteration 2097152
+# refinement level 1 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 1 0 0 5242880 5242880 2621440 0.1 0 0 -0.5 -1.80851861264486e-12
+2097152 0 1 0 0 5242880 5242880 2883584 0.1 0 0 -0.45 7.96866421228411e-12
+2097152 0 1 0 0 5242880 5242880 3145728 0.1 0 0 -0.4 1.32743815939307e-11
+2097152 0 1 0 0 5242880 5242880 3407872 0.1 0 0 -0.35 -6.55429992687158e-12
+2097152 0 1 0 0 5242880 5242880 3670016 0.1 0 0 -0.3 -2.44367743632938e-11
+2097152 0 1 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 -3.29398095894514e-11
+2097152 0 1 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 6.21578251832252e-12
+2097152 0 1 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 1.70451336841312e-09
+2097152 0 1 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 3.4977364523255e-10
+2097152 0 1 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 -5.46878123804569e-10
+2097152 0 1 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 1 0 0 5242880 5242880 5505024 0.1 0 0 0.05 5.46878123804569e-10
+2097152 0 1 0 0 5242880 5242880 5767168 0.1 0 0 0.1 -3.4977364523255e-10
+2097152 0 1 0 0 5242880 5242880 6029312 0.1 0 0 0.15 -1.70451336841312e-09
+2097152 0 1 0 0 5242880 5242880 6291456 0.1 0 0 0.2 -6.21578251832252e-12
+2097152 0 1 0 0 5242880 5242880 6553600 0.1 0 0 0.25 3.29398095894514e-11
+2097152 0 1 0 0 5242880 5242880 6815744 0.1 0 0 0.3 2.44367743632938e-11
+2097152 0 1 0 0 5242880 5242880 7077888 0.1 0 0 0.35 6.55429992687158e-12
+2097152 0 1 0 0 5242880 5242880 7340032 0.1 0 0 0.4 -1.32743815939307e-11
+2097152 0 1 0 0 5242880 5242880 7602176 0.1 0 0 0.45 -7.96866421228411e-12
+2097152 0 1 0 0 5242880 5242880 7864320 0.1 0 0 0.5 1.80851861264486e-12
+
+
+# iteration 2097152
+# refinement level 2 multigrid level 0 map 0 component 0 time level 0
+# column format: it tl rl c ml ix iy iz time x y z data
+2097152 0 2 0 0 5242880 5242880 3932160 0.1 0 0 -0.25 -3.29398095894514e-11
+2097152 0 2 0 0 5242880 5242880 4063232 0.1 0 0 -0.225 -1.20037052355624e-10
+2097152 0 2 0 0 5242880 5242880 4194304 0.1 0 0 -0.2 6.21578251832252e-12
+2097152 0 2 0 0 5242880 5242880 4325376 0.1 0 0 -0.175 9.4248303267124e-10
+2097152 0 2 0 0 5242880 5242880 4456448 0.1 0 0 -0.15 1.70451336841312e-09
+2097152 0 2 0 0 5242880 5242880 4587520 0.1 0 0 -0.125 1.18932784150608e-09
+2097152 0 2 0 0 5242880 5242880 4718592 0.1 0 0 -0.1 3.4977364523255e-10
+2097152 0 2 0 0 5242880 5242880 4849664 0.1 0 0 -0.075 -9.3463225122233e-10
+2097152 0 2 0 0 5242880 5242880 4980736 0.1 0 0 -0.05 -5.46878123804569e-10
+2097152 0 2 0 0 5242880 5242880 5111808 0.1 0 0 -0.025 -1.03273274654203e-09
+2097152 0 2 0 0 5242880 5242880 5242880 0.1 0 0 0 0
+2097152 0 2 0 0 5242880 5242880 5373952 0.1 0 0 0.025 1.03273274654203e-09
+2097152 0 2 0 0 5242880 5242880 5505024 0.1 0 0 0.05 5.46878123804569e-10
+2097152 0 2 0 0 5242880 5242880 5636096 0.1 0 0 0.075 9.3463225122233e-10
+2097152 0 2 0 0 5242880 5242880 5767168 0.1 0 0 0.1 -3.4977364523255e-10
+2097152 0 2 0 0 5242880 5242880 5898240 0.1 0 0 0.125 -1.18932784150608e-09
+2097152 0 2 0 0 5242880 5242880 6029312 0.1 0 0 0.15 -1.70451336841312e-09
+2097152 0 2 0 0 5242880 5242880 6160384 0.1 0 0 0.175 -9.4248303267124e-10
+2097152 0 2 0 0 5242880 5242880 6291456 0.1 0 0 0.2 -6.21578251832252e-12
+2097152 0 2 0 0 5242880 5242880 6422528 0.1 0 0 0.225 1.20037052355624e-10
+2097152 0 2 0 0 5242880 5242880 6553600 0.1 0 0 0.25 3.29398095894514e-11
+
+
diff --git a/Carpet/CarpetLib/COPYING b/Carpet/CarpetLib/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetLib/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetLib/README b/Carpet/CarpetLib/README
new file mode 100644
index 000000000..050a838b0
--- /dev/null
+++ b/Carpet/CarpetLib/README
@@ -0,0 +1,8 @@
+Cactus Code Thorn CarpetLib
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/README,v 1.3 2004/01/25 14:57:29 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn contains the backend library that provides mesh refinement.
diff --git a/Carpet/CarpetLib/configuration.ccl b/Carpet/CarpetLib/configuration.ccl
new file mode 100644
index 000000000..1e2583eda
--- /dev/null
+++ b/Carpet/CarpetLib/configuration.ccl
@@ -0,0 +1,8 @@
+# Configuration definitions for thorn CarpetLib
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/configuration.ccl,v 1.1 2004/04/18 14:09:59 schnetter Exp $
+
+PROVIDES CarpetLib
+{
+ SCRIPT
+ LANG
+}
diff --git a/Carpet/CarpetLib/interface.ccl b/Carpet/CarpetLib/interface.ccl
new file mode 100644
index 000000000..593228e75
--- /dev/null
+++ b/Carpet/CarpetLib/interface.ccl
@@ -0,0 +1,22 @@
+# Interface definition for thorn CarpetLib
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/interface.ccl,v 1.5 2004/05/04 22:09:54 schnetter Exp $
+
+IMPLEMENTS: CarpetLib
+
+includes header: defs.hh in defs.hh
+includes header: dist.hh in dist.hh
+
+includes header: bbox.hh in bbox.hh
+includes header: bboxset.hh in bboxset.hh
+includes header: vect.hh in vect.hh
+
+includes header: data.hh in data.hh
+includes header: gdata.hh in gdata.hh
+
+includes header: dh.hh in dh.hh
+includes header: gf.hh in gf.hh
+includes header: ggf.hh in ggf.hh
+includes header: gh.hh in gh.hh
+includes header: th.hh in th.hh
+
+includes header: operators.hh in operators.hh
diff --git a/Carpet/CarpetLib/param.ccl b/Carpet/CarpetLib/param.ccl
new file mode 100644
index 000000000..1b4e14a87
--- /dev/null
+++ b/Carpet/CarpetLib/param.ccl
@@ -0,0 +1,24 @@
+# Parameter definitions for thorn CarpetLib
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/param.ccl,v 1.8 2004/05/21 18:13:41 schnetter Exp $
+
+private:
+
+BOOLEAN verbose "Print info to the screen" STEERABLE=always
+{
+} "no"
+
+BOOLEAN check_array_accesses "Check all array accesses in Fortran" STEERABLE=always
+{
+} "no"
+
+BOOLEAN barriers "Insert barriers at strategic places for debugging purposes (slows down execution)" STEERABLE=always
+{
+} "no"
+
+BOOLEAN output_bboxes "Output bounding box information to the screen" STEERABLE=always
+{
+} "no"
+
+BOOLEAN save_memory_during_regridding "Save some memory during regridding at the expense of speed"
+{
+} "no"
diff --git a/Carpet/CarpetLib/schedule.ccl b/Carpet/CarpetLib/schedule.ccl
new file mode 100644
index 000000000..ef0ff81a6
--- /dev/null
+++ b/Carpet/CarpetLib/schedule.ccl
@@ -0,0 +1,2 @@
+# Schedule definitions for thorn CarpetLib
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/schedule.ccl,v 1.2 2003/09/19 16:06:41 schnetter Exp $
diff --git a/Carpet/CarpetLib/src/bbox.cc b/Carpet/CarpetLib/src/bbox.cc
new file mode 100644
index 000000000..9269e042d
--- /dev/null
+++ b/Carpet/CarpetLib/src/bbox.cc
@@ -0,0 +1,270 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.cc,v 1.26 2004/06/26 15:08:09 schnetter Exp $
+
+#include <assert.h>
+
+#include <iostream>
+#include <limits>
+
+#include "defs.hh"
+#include "vect.hh"
+
+#include "bbox.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<class T, int D>
+bbox<T,D>::bbox (): _lower(T(1)), _upper(T(0)), _stride(T(1)) { }
+
+template<class T, int D>
+bbox<T,D>::bbox (const bbox& b)
+ : _lower(b._lower), _upper(b._upper), _stride(b._stride)
+{ }
+
+template<class T, int D>
+bbox<T,D>& bbox<T,D>::operator= (const bbox& b) {
+ _lower=b._lower; _upper=b._upper; _stride=b._stride;
+ return *this;
+}
+
+template<class T, int D>
+bbox<T,D>::bbox (const vect<T,D>& lower, const vect<T,D>& upper,
+ const vect<T,D>& stride)
+ : _lower(lower), _upper(upper), _stride(stride)
+{
+ assert (all(_stride>T(0)));
+ assert (all((_upper-_lower)%_stride == T(0)));
+ if (numeric_limits<T>::is_integer && numeric_limits<T>::is_signed) {
+ // prevent accidental wrap-around
+ assert (all(_lower < numeric_limits<T>::max() / 2));
+ assert (all(_lower > numeric_limits<T>::min() / 2));
+ assert (all(_upper < numeric_limits<T>::max() / 2));
+ assert (all(_upper > numeric_limits<T>::min() / 2));
+ }
+}
+
+// Accessors
+template<class T, int D>
+T bbox<T,D>::size () const {
+ if (empty()) return 0;
+// return prod((shape()+stride()-1)/stride());
+ const vect<T,D> sh((shape()+stride()-1)/stride());
+ T sz = 1, max = numeric_limits<T>::max();
+ for (int d=0; d<D; ++d) {
+ assert (sh[d] <= max);
+ sz *= sh[d];
+ max /= sh[d];
+ }
+ return sz;
+}
+
+// Queries
+template<class T, int D>
+bool bbox<T,D>::contains (const vect<T,D>& x) const {
+ return all(x>=lower() && x<=upper());
+}
+
+// Operators
+template<class T, int D>
+bool bbox<T,D>::operator== (const bbox& b) const {
+ if (empty() && b.empty()) return true;
+ assert (all(stride()==b.stride()));
+ return all(lower()==b.lower() && upper()==b.upper());
+}
+
+template<class T, int D>
+bool bbox<T,D>::operator!= (const bbox& b) const {
+ return ! (*this == b);
+}
+
+template<class T, int D>
+bool bbox<T,D>::operator< (const bbox& b) const {
+ // An arbitraty order: empty boxes come first, then sorted by lower
+ // bound, then by upper bound, then by coarseness
+ if (b.empty()) return false;
+ if (empty()) return true;
+ for (int d=D-1; d>=0; --d) {
+ if (lower()[d] < b.lower()[d]) return true;
+ if (lower()[d] > b.lower()[d]) return false;
+ }
+ for (int d=D-1; d>=0; --d) {
+ if (upper()[d] < b.upper()[d]) return true;
+ if (upper()[d] > b.upper()[d]) return false;
+ }
+ for (int d=D-1; d>=0; --d) {
+ if (stride()[d] > b.stride()[d]) return true;
+ if (stride()[d] < b.stride()[d]) return false;
+ }
+ return false;
+}
+
+template<class T, int D>
+bool bbox<T,D>::operator> (const bbox& b) const {
+ return b < *this;
+}
+
+template<class T, int D>
+bool bbox<T,D>::operator<= (const bbox& b) const {
+ return ! (b > *this);
+}
+
+template<class T, int D>
+bool bbox<T,D>::operator>= (const bbox& b) const {
+ return b <= *this;
+}
+
+// Intersection
+template<class T, int D>
+bbox<T,D> bbox<T,D>::operator& (const bbox& b) const {
+ assert (all(stride()==b.stride()));
+ vect<T,D> lo = max(lower(),b.lower());
+ vect<T,D> up = min(upper(),b.upper());
+ return bbox(lo,up,stride());
+}
+
+// Containment
+template<class T, int D>
+bool bbox<T,D>::is_contained_in (const bbox& b) const {
+ if (empty()) return true;
+ // no alignment check
+ return all(lower()>=b.lower() && upper()<=b.upper());
+}
+
+// Alignment check
+template<class T, int D>
+bool bbox<T,D>::is_aligned_with (const bbox& b) const {
+ return all(stride()==b.stride() && (lower()-b.lower()) % stride() == T(0));
+}
+
+// Expand the bbox a little by multiples of the stride
+template<class T, int D>
+bbox<T,D> bbox<T,D>::expand (const vect<T,D>& lo, const vect<T,D>& hi) const {
+ // Allow expansion only into directions where the extent is not negative
+ assert (all(lower()<=upper() || (lo==T(0) && hi==T(0))));
+ const vect<T,D> str = stride();
+ const vect<T,D> lb = lower() - lo * str;
+ const vect<T,D> ub = upper() + hi * str;
+ return bbox(lb,ub,str);
+}
+
+// Find the smallest b-compatible box around *this
+template<class T, int D>
+bbox<T,D> bbox<T,D>::expanded_for (const bbox& b) const {
+ if (empty()) return bbox(b.lower(), b.lower()-b.stride(), b.stride());
+ const vect<T,D> str = b.stride();
+ const vect<T,D> loff = ((lower() - b.lower()) % str + str) % str;
+ const vect<T,D> uoff = ((upper() - b.lower()) % str + str) % str;
+ const vect<T,D> lo = lower() - loff; // go outwards
+ const vect<T,D> up = upper() + (str - uoff) % str;
+ return bbox(lo,up,str);
+}
+
+// Find the largest b-compatible box inside *this
+template<class T, int D>
+bbox<T,D> bbox<T,D>::contracted_for (const bbox& b) const {
+ if (empty()) return bbox(b.lower(), b.lower()-b.stride(), b.stride());
+ const vect<T,D> str = b.stride();
+ const vect<T,D> loff = ((lower() - b.lower()) % str + str) % str;
+ const vect<T,D> uoff = ((upper() - b.lower()) % str + str) % str;
+ const vect<T,D> lo = lower() + (str - loff) % str; // go inwards
+ const vect<T,D> up = upper() - uoff;
+ return bbox(lo,up,str);
+}
+
+// Smallest bbox containing both boxes
+template<class T, int D>
+bbox<T,D> bbox<T,D>::expanded_containing (const bbox& b) const {
+ if (empty()) return b;
+ if (b.empty()) return *this;
+ assert (is_aligned_with(b));
+ const vect<T,D> lo = min(lower(), b.lower());
+ const vect<T,D> up = max(upper(), b.upper());
+ const vect<T,D> str = min(stride(), b.stride());
+ return bbox(lo,up,str);
+}
+
+// Iterators
+template<class T, int D>
+bbox<T,D>::iterator::iterator (const bbox& box, const vect<T,D>& pos)
+ : box(box), pos(pos) {
+ if (box.empty()) this->pos=box.upper();
+}
+
+template<class T, int D>
+bool bbox<T,D>::iterator::operator!= (const iterator& i) const {
+ return any(pos!=i.pos);
+}
+
+template<class T, int D>
+typename bbox<T,D>::iterator& bbox<T,D>::iterator::operator++ () {
+ for (int d=0; d<D; ++d) {
+ pos[d]+=box.stride()[d];
+ if (pos[d]<=box.upper()[d]) break;
+ pos[d]=box.lower()[d];
+ }
+ return *this;
+}
+
+template<class T, int D>
+typename bbox<T,D>::iterator bbox<T,D>::begin () const {
+ return iterator(*this, lower());
+}
+
+template<class T, int D>
+typename bbox<T,D>::iterator bbox<T,D>::end () const {
+ return iterator(*this, lower());
+}
+
+
+
+// Input
+template<class T,int D>
+void bbox<T,D>::input (istream& is) {
+ try {
+ skipws (is);
+ consume (is, '(');
+ is >> _lower;
+ skipws (is);
+ consume (is, ':');
+ is >> _upper;
+ skipws (is);
+ consume (is, ':');
+ is >> _stride;
+ skipws (is);
+ consume (is, ')');
+ } catch (input_error &err) {
+ cout << "Input error while reading a bbox" << endl;
+ throw err;
+ }
+ if (any(_stride<=T(0))) {
+ cout << "While reading the bbox " << *this << ":" << endl
+ << " The stride is not positive." << endl;
+ throw input_error();
+ }
+ if (any((_upper-_lower)%_stride != T(0))) {
+ cout << "While reading the bbox " << *this << ":" << endl
+ << " The stride does not evenly divide the extent." << endl;
+ throw input_error();
+ }
+ assert (all(_stride>T(0)));
+ assert (all((_upper-_lower)%_stride == T(0)));
+}
+
+
+
+// Output
+template<class T,int D>
+void bbox<T,D>::output (ostream& os) const {
+ os << "(" << lower() << ":" << upper() << ":" << stride() << ")";
+}
+
+
+
+// Note: We need all dimensions all the time.
+template class bbox<int,0>;
+template class bbox<int,1>;
+template class bbox<int,2>;
+template class bbox<int,3>;
+template class bbox<double,3>;
diff --git a/Carpet/CarpetLib/src/bbox.hh b/Carpet/CarpetLib/src/bbox.hh
new file mode 100644
index 000000000..e23d000ac
--- /dev/null
+++ b/Carpet/CarpetLib/src/bbox.hh
@@ -0,0 +1,171 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bbox.hh,v 1.15 2004/04/18 13:03:44 schnetter Exp $
+
+#ifndef BBOX_HH
+#define BBOX_HH
+
+#include <iostream>
+
+#include "defs.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// Forward declaration
+template<class T, int D> class bbox;
+
+// Input/Output
+template<class T, int D>
+istream& operator>> (istream& is, bbox<T,D>& b);
+template<class T, int D>
+ostream& operator<< (ostream& os, const bbox<T,D>& b);
+
+
+
+/**
+ * A bounding box, i.e. a rectangle with lower and upper bound and a
+ * stride.
+ */
+template<class T, int D>
+class bbox {
+
+ // Fields
+
+ /** Bounding box bounds and stride. The bounds are inclusive. */
+ vect<T,D> _lower, _upper, _stride;
+
+public:
+
+ // Constructors
+
+ /** Construct an empty bbox. */
+ bbox ();
+
+ /** Copy constructor. */
+ bbox (const bbox& b);
+
+ /** Assignment operator. */
+ bbox& operator= (const bbox& b);
+
+ /** Create a bbox from bounds and stride. */
+ bbox (const vect<T,D>& lower, const vect<T,D>& upper,
+ const vect<T,D>& stride);
+
+ // Accessors
+ // (Don't return references; *this might be a temporary)
+
+ /** Get lower bound. */
+ vect<T,D> lower () const { return _lower; }
+
+ /** Get upper bound. */
+ vect<T,D> upper () const { return _upper; }
+
+ /** Get stride. */
+ vect<T,D> stride () const { return _stride; }
+
+ /** Get the shape (or extent). */
+ vect<T,D> shape () const { return _upper - _lower + _stride; }
+
+ /** Determine whether the bbox is empty. */
+ bool empty() const {
+ return any(lower()>upper());
+ }
+
+ /** Return the size, which is the product of the shape. */
+ T size () const;
+
+ // Queries
+
+ /** Find out whether the bbox contains the point x. */
+ bool contains (const vect<T,D>& x) const;
+
+ // Operators
+ bool operator== (const bbox& b) const;
+ bool operator!= (const bbox& b) const;
+ bool operator< (const bbox& b) const;
+ bool operator> (const bbox& b) const;
+ bool operator<= (const bbox& b) const;
+ bool operator>= (const bbox& b) const;
+
+ /** Calculate the intersection (the set of common points) with the
+ bbox b. */
+ bbox operator& (const bbox& b) const;
+
+ /** Find out whether this bbox is contained in the bbox b. */
+ bool is_contained_in (const bbox& b) const;
+
+ /** Find out whether this bbox is aligned with the bbox b.
+ ("aligned" means that both bboxes have the same stride and that
+ their boundaries are commesurate.) */
+ bool is_aligned_with (const bbox& b) const;
+
+ /** Expand (enlarge) the bbox by multiples of the stride. */
+ bbox expand (const vect<T,D>& lo, const vect<T,D>& hi) const;
+
+ /** Find the smallest b-compatible box around this bbox.
+ ("compatible" means having the same stride.) */
+ bbox expanded_for (const bbox& b) const;
+
+ /** Find the largest b-compatible box inside this bbox. */
+ bbox contracted_for (const bbox& b) const;
+
+ /** Find the smallest bbox containing both boxes. */
+ bbox expanded_containing (const bbox<T,D>& b) const;
+
+ // Iterators
+
+ /** An iterator over all points in a bbox. */
+ class iterator {
+ protected:
+ /** The bbox over which we iterate. */
+ const bbox& box;
+ /** Current position. */
+ vect<T,D> pos;
+ public:
+ /** Constructor. */
+ iterator (const bbox& box, const vect<T,D>& pos);
+ /** Accessor. */
+ const vect<T,D>& operator* () const { return pos; }
+ /** Check whether the position is the same. */
+ bool operator!= (const iterator& i) const;
+ /** Advance. */
+ iterator& operator++ ();
+ };
+
+ /** Create an iterator that points to the first point in a bbox. */
+ iterator begin () const;
+ /** Create an iterator that points "after the last point" in a bbox,
+ which means that it also points to the first point. */
+ iterator end () const;
+
+ // Input/Output helpers
+ void input (istream& is);
+ void output (ostream& os) const;
+};
+
+
+
+// Input
+
+/** Read a formatted bbox from a stream. */
+template<class T,int D>
+inline istream& operator>> (istream& is, bbox<T,D>& b) {
+ b.input(is);
+ return is;
+}
+
+
+
+// Output
+
+/** Write a bbox formatted to a stream. */
+template<class T,int D>
+inline ostream& operator<< (ostream& os, const bbox<T,D>& b) {
+ b.output(os);
+ return os;
+}
+
+
+
+#endif // BBOX_HH
diff --git a/Carpet/CarpetLib/src/bboxset.cc b/Carpet/CarpetLib/src/bboxset.cc
new file mode 100644
index 000000000..94cf1997e
--- /dev/null
+++ b/Carpet/CarpetLib/src/bboxset.cc
@@ -0,0 +1,393 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bboxset.cc,v 1.16 2004/06/13 22:46:48 schnetter Exp $
+
+#include <assert.h>
+
+#include <iostream>
+#include <limits>
+#include <set>
+#include <stack>
+
+#include "defs.hh"
+
+#include "bboxset.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<class T, int D>
+bboxset<T,D>::bboxset () {
+ assert (invariant());
+}
+
+template<class T, int D>
+bboxset<T,D>::bboxset (const box& b) {
+ if (!b.empty()) bs.insert(b);
+ assert (invariant());
+}
+
+template<class T, int D>
+bboxset<T,D>::bboxset (const bboxset& s): bs(s.bs) {
+ assert (invariant());
+}
+
+template<class T, int D>
+bboxset<T,D>::bboxset (const bset& bs): bs(bs) {
+ assert (invariant());
+}
+
+
+
+// Invariant
+template<class T, int D>
+bool bboxset<T,D>::invariant () const {
+ for (const_iterator bi=begin(); bi!=end(); ++bi) {
+ if ((*bi).empty()) return false;
+ if (! (*bi).is_aligned_with(*bs.begin())) return false;
+ // check for overlap (quadratic -- expensive)
+ for (const_iterator bi2=begin(); bi2!=bi; ++bi2) {
+ if (! ((*bi2) & (*bi)).empty()) return false;
+ }
+ }
+ return true;
+}
+
+
+
+// Normalisation
+template<class T, int D>
+void bboxset<T,D>::normalize () {
+ assert (invariant());
+ const int num_initial_boxes = bs.size();
+ int num_combined_boxes = 0;
+ stack<box> todo, done;
+ for (typename set<box>::const_iterator elt = bs.begin(); elt != bs.end(); ++elt) {
+ done.push (*elt);
+ }
+ // TODO: This will not catch all cases where bboxes can be combined.
+ for (int d=0; d<D; ++d) {
+ todo = done;
+ done = stack<box>();
+ while (! todo.empty()) {
+ restart:;
+ box item = todo.top();
+ todo.pop();
+ stack<box> work = done;
+ done = stack<box>();
+ while (! work.empty()) {
+ box comp = work.top();
+ work.pop();
+ {
+ assert (all(comp.stride() == item.stride()));
+ if (comp.upper()[d] + item.stride()[d] == item.lower()[d]) {
+ if (all((comp.lower() == item.lower()
+ && comp.upper() == item.upper()).replace (d, true))) {
+ box newbox = box(comp.lower(), item.upper(), item.stride());
+ todo.push (newbox);
+ while (! work.empty()) {
+ done.push (work.top());
+ work.pop();
+ }
+ ++num_combined_boxes;
+ goto restart;
+ }
+ }
+ if (item.upper()[d] + item.stride()[d] == comp.lower()[d]) {
+ if (all((comp.lower() == item.lower()
+ && comp.upper() == item.upper()).replace (d, true))) {
+ box newbox = box(item.lower(), comp.upper(), item.stride());
+ todo.push (newbox);
+ while (! work.empty()) {
+ done.push (work.top());
+ work.pop();
+ }
+ ++num_combined_boxes;
+ goto restart;
+ }
+ }
+ }
+ done.push (comp);
+ } // while work
+ done.push (item);
+ } // while todo
+ } // for d
+ bs.clear();
+ while (! done.empty()) {
+ bs.insert (done.top());
+ done.pop();
+ }
+ const int num_final_boxes = bs.size();
+ assert (num_initial_boxes - num_combined_boxes == num_final_boxes);
+ assert (invariant());
+}
+
+
+
+// Accessors
+template<class T, int D>
+T bboxset<T,D>::size () const {
+ T s=0;
+ for (const_iterator bi=begin(); bi!=end(); ++bi) {
+ const T bs = (*bi).size();
+ assert (numeric_limits<T>::max() - bs >= s);
+ s += bs;
+ }
+ return s;
+}
+
+
+
+// Add (bboxes that don't overlap)
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator+= (const box& b) {
+ if (b.empty()) return *this;
+ // check for overlap
+ for (const_iterator bi=begin(); bi!=end(); ++bi) {
+ assert ((*bi & b).empty());
+ }
+ bs.insert(b);
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator+= (const bboxset& s) {
+ for (const_iterator bi=s.begin(); bi!=s.end(); ++bi) {
+ *this += *bi;
+ }
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator+ (const box& b) const {
+ bboxset r(*this);
+ r += b;
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator+ (const bboxset& s) const {
+ bboxset r(*this);
+ r += s;
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::plus (const bbox<T,D>& b1, const bbox<T,D>& b2) {
+ return bboxset(b1) + b2;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::plus (const bbox<T,D>& b, const bboxset<T,D>& s) {
+ return s + b;
+}
+
+
+
+// Union
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator|= (const box& b) {
+ *this += b - *this;
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator|= (const bboxset& s) {
+ *this += s - *this;
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator| (const box& b) const {
+ bboxset r(*this);
+ r |= b;
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator| (const bboxset& s) const {
+ bboxset r(*this);
+ r |= s;
+ assert (r.invariant());
+ return r;
+}
+
+
+
+// Intersection
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator& (const box& b) const {
+ // start with an empty set
+ bboxset r;
+ // walk all my elements
+ for (const_iterator bi=begin(); bi!=end(); ++bi) {
+ // insert the intersection with the bbox
+ r += *bi & b;
+ }
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator& (const bboxset& s) const {
+ // start with an empty set
+ bboxset r;
+ // walk all the bboxes
+ for (const_iterator bi=s.begin(); bi!=s.end(); ++bi) {
+ // insert the intersection with this bbox
+ r += *this & *bi;
+ }
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator&= (const box& b) {
+ *this = *this & b;
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator&= (const bboxset& s) {
+ *this = *this & s;
+ assert (invariant());
+ return *this;
+}
+
+
+
+// Difference
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::minus (const bbox<T,D>& b1, const bbox<T,D>& b2) {
+ assert (b1.is_aligned_with(b2));
+ if (b1.empty()) return bboxset<T,D>();
+ if (b2.empty()) return bboxset<T,D>(b1);
+ const vect<T,D> str = b1.stride();
+ bboxset<T,D> r;
+ for (int d=0; d<D; ++d) {
+ // make resulting bboxes as large as possible in x-direction (for
+ // better consumption by Fortranly ordered arrays)
+ vect<T,D> lb, ub;
+ bbox<T,D> b;
+ for (int dd=0; dd<D; ++dd) {
+ if (dd<d) {
+ lb[dd] = b2.lower()[dd];
+ ub[dd] = b2.upper()[dd];
+ } else if (dd>d) {
+ lb[dd] = b1.lower()[dd];
+ ub[dd] = b1.upper()[dd];
+ }
+ }
+ lb[d] = b1.lower()[d];
+ ub[d] = b2.lower()[d] - str[d];
+ b = bbox<T,D>(lb,ub,str) & b1;
+ r += b;
+ lb[d] = b2.upper()[d] + str[d];
+ ub[d] = b1.upper()[d];
+ b = bbox<T,D>(lb,ub,str) & b1;
+ r += b;
+ }
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator- (const box& b) const {
+ // start with an empty set
+ bboxset r;
+ // walk all my elements
+ for (const_iterator bi=begin(); bi!=end(); ++bi) {
+ // insert the difference with the bbox
+ r += *bi - b;
+ }
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator-= (const box& b) {
+ *this = *this - b;
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D>& bboxset<T,D>::operator-= (const bboxset& s) {
+ for (const_iterator bi=s.begin(); bi!=s.end(); ++bi) {
+ *this -= *bi;
+ }
+ assert (invariant());
+ return *this;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::operator- (const bboxset& s) const {
+ bboxset r(*this);
+ r -= s;
+ assert (r.invariant());
+ return r;
+}
+
+template<class T, int D>
+bboxset<T,D> bboxset<T,D>::minus (const bbox<T,D>& b, const bboxset<T,D>& s) {
+ bboxset<T,D> r = bboxset<T,D>(b) - s;
+ assert (r.invariant());
+ return r;
+}
+
+
+
+// Equality
+template<class T, int D>
+bool bboxset<T,D>::operator<= (const bboxset<T,D>& s) const {
+ return (*this - s).empty();
+}
+
+template<class T, int D>
+bool bboxset<T,D>::operator< (const bboxset<T,D>& s) const {
+ return (*this - s).empty() && ! (s - *this).empty();
+}
+
+template<class T, int D>
+bool bboxset<T,D>::operator>= (const bboxset<T,D>& s) const {
+ return s <= *this;
+}
+
+template<class T, int D>
+bool bboxset<T,D>::operator> (const bboxset<T,D>& s) const {
+ return s < *this;
+}
+
+template<class T, int D>
+bool bboxset<T,D>::operator== (const bboxset<T,D>& s) const {
+ return (*this <= s) && (*this >= s);
+}
+
+template<class T, int D>
+bool bboxset<T,D>::operator!= (const bboxset<T,D>& s) const {
+ return ! (*this == s);
+}
+
+
+
+// Output
+template<class T,int D>
+void bboxset<T,D>::output (ostream& os) const {
+ T Tdummy;
+ os << "bboxset<" << typestring(Tdummy) << "," << D << ">:"
+ << "size=" << size() << ","
+ << "setsize=" << setsize() << ","
+ << "set=" << bs;
+}
+
+
+
+template class bboxset<int,3>;
diff --git a/Carpet/CarpetLib/src/bboxset.hh b/Carpet/CarpetLib/src/bboxset.hh
new file mode 100644
index 000000000..a94c8940a
--- /dev/null
+++ b/Carpet/CarpetLib/src/bboxset.hh
@@ -0,0 +1,156 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bboxset.hh,v 1.11 2003/09/19 16:06:41 schnetter Exp $
+
+#ifndef BBOXSET_HH
+#define BBOXSET_HH
+
+#include <assert.h>
+
+#include <iostream>
+#include <set>
+
+#include "bbox.hh"
+#include "defs.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// Forward declaration
+template<class T, int D> class bboxset;
+
+// template<class T,int D>
+// bboxset<T,D> operator+ (const bbox<T,D>& b1, const bbox<T,D>& b2);
+// template<class T,int D>
+// bboxset<T,D> operator+ (const bbox<T,D>& b, const bboxset<T,D>& s);
+
+// template<class T,int D>
+// bboxset<T,D> operator- (const bbox<T,D>& b1, const bbox<T,D>& b2);
+// template<class T,int D>
+// bboxset<T,D> operator- (const bbox<T,D>& b, const bboxset<T,D>& s);
+
+// Output
+template<class T,int D>
+ostream& operator<< (ostream& os, const bboxset<T,D>& s);
+
+
+
+// Bounding box class
+template<class T, int D>
+class bboxset {
+
+ // Types
+ typedef bbox<T,D> box;
+ typedef set<box> bset;
+
+ // Fields
+ bset bs;
+ // Invariant:
+ // All bboxes have the same stride.
+ // No bbox is empty.
+ // The bboxes don't overlap.
+
+public:
+
+ // Constructors
+ bboxset ();
+ bboxset (const box& b);
+ bboxset (const bboxset& s);
+ bboxset (const bset& bs);
+
+ // Invariant
+ bool invariant () const;
+
+ // Normalisation
+ void normalize ();
+
+ // Accessors
+ bool empty () const { return bs.empty(); }
+ T size () const;
+ int setsize () const { return bs.size(); }
+
+ // Add (bboxes that don't overlap)
+ bboxset& operator+= (const box& b);
+ bboxset& operator+= (const bboxset& s);
+ bboxset operator+ (const box& b) const;
+ bboxset operator+ (const bboxset& s) const;
+ static bboxset plus (const box& b1, const box& b2);
+ static bboxset plus (const box& b, const bboxset& s);
+
+ // Union
+ bboxset& operator|= (const box& b);
+ bboxset& operator|= (const bboxset& s);
+ bboxset operator| (const box& b) const;
+ bboxset operator| (const bboxset& s) const;
+
+ // Intersection
+ bboxset operator& (const box& b) const;
+ bboxset operator& (const bboxset& s) const;
+ bboxset& operator&= (const box& b);
+ bboxset& operator&= (const bboxset& s);
+
+ // Difference
+ // friend bboxset operator- <T,D>(const box& b1, const box& b2);
+ static bboxset minus (const box& b1, const box& b2);
+ bboxset operator- (const box& b) const;
+ bboxset& operator-= (const box& b);
+ bboxset& operator-= (const bboxset& s);
+ bboxset operator- (const bboxset& s) const;
+ // friend bboxset operator- <T,D>(const box& b, const bboxset& s);
+ static bboxset minus (const box& b, const bboxset& s);
+
+ // Equality
+ bool operator== (const bboxset& s) const;
+ bool operator!= (const bboxset& s) const;
+ bool operator< (const bboxset& s) const;
+ bool operator<= (const bboxset& s) const;
+ bool operator> (const bboxset& s) const;
+ bool operator>= (const bboxset& s) const;
+
+ // Iterators
+ typedef typename bset::const_iterator const_iterator;
+ typedef typename bset::iterator iterator;
+
+ const_iterator begin () const { return bs.begin(); }
+ const_iterator end () const { return bs.end(); }
+// iterator begin () const { return bs.begin(); }
+// iterator end () const { return bs.end(); }
+
+ // Output
+ void output (ostream& os) const;
+};
+
+
+
+template<class T,int D>
+inline bboxset<T,D> operator+ (const bbox<T,D>& b1, const bbox<T,D>& b2) {
+ return bboxset<T,D>::plus(b1,b2);
+}
+
+template<class T,int D>
+inline bboxset<T,D> operator+ (const bbox<T,D>& b, const bboxset<T,D>& s) {
+ return bboxset<T,D>::plus(b,s);
+}
+
+template<class T,int D>
+inline bboxset<T,D> operator- (const bbox<T,D>& b1, const bbox<T,D>& b2) {
+ return bboxset<T,D>::minus(b1,b2);
+}
+
+template<class T,int D>
+inline bboxset<T,D> operator- (const bbox<T,D>& b, const bboxset<T,D>& s) {
+ return bboxset<T,D>::minus(b,s);
+}
+
+
+
+// Output
+template<class T,int D>
+inline ostream& operator<< (ostream& os, const bboxset<T,D>& s) {
+ s.output(os);
+ return os;
+}
+
+
+
+#endif // BBOXSET_HH
diff --git a/Carpet/CarpetLib/src/checkindex.F77 b/Carpet/CarpetLib/src/checkindex.F77
new file mode 100644
index 000000000..e726a012b
--- /dev/null
+++ b/Carpet/CarpetLib/src/checkindex.F77
@@ -0,0 +1,23 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/checkindex.F77,v 1.1 2003/11/05 16:18:39 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+ subroutine checkindex (i,j,k, di,dj,dk, imax,jmax,kmax, where)
+ implicit none
+ integer i,j,k
+ integer di,dj,dk
+ integer imax,jmax,kmax
+ character*(*) where
+ character*1000 msg
+
+ if ( i.lt.1 .or. i+di-1.gt.imax
+ $ .or. j.lt.1 .or. j+dj-1.gt.jmax
+ $ .or. k.lt.1 .or. k+dk-1.gt.kmax) then
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,"), extent is (",i4,",",i4,",",i4,")")')
+ $ where, imax,jmax,kmax, i,j,k, di,dj,dk
+ call CCTK_WARN (0, msg(1:len_trim(msg)))
+ end if
+ end
diff --git a/Carpet/CarpetLib/src/copy_3d_complex16.F77 b/Carpet/CarpetLib/src/copy_3d_complex16.F77
new file mode 100644
index 000000000..2432e900c
--- /dev/null
+++ b/Carpet/CarpetLib/src/copy_3d_complex16.F77
@@ -0,0 +1,114 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/copy_3d_complex16.F77,v 1.2 2004/03/11 12:01:34 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine copy_3d_complex16 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ integer srciext, srcjext, srckext
+ CCTK_COMPLEX16 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_COMPLEX16 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).ne.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / srcbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / srcbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / srcbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over region
+ do k = 1, regkext
+ do j = 1, regjext
+ do i = 1, regiext
+
+ if (check_array_accesses.ne.0) then
+ call checkindex (srcioff+i, srcjoff+j+1, srckoff+k+1, 1,1,1,
+ $ "source")
+ call checkindex (dstioff+i, dstjoff+j+1, dstkoff+k+1, 1,1,1,
+ $ "destination")
+ end if
+
+ dst (dstioff+i, dstjoff+j, dstkoff+k)
+ $ = src (srcioff+i, srcjoff+j, srckoff+k)
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/copy_3d_int4.F77 b/Carpet/CarpetLib/src/copy_3d_int4.F77
new file mode 100644
index 000000000..b440a32b2
--- /dev/null
+++ b/Carpet/CarpetLib/src/copy_3d_int4.F77
@@ -0,0 +1,114 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/copy_3d_int4.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine copy_3d_int4 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ integer srciext, srcjext, srckext
+ CCTK_INT4 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_INT4 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).ne.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / srcbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / srcbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / srcbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over region
+ do k = 1, regkext
+ do j = 1, regjext
+ do i = 1, regiext
+
+ if (check_array_accesses.ne.0) then
+ call checkindex (srcioff+i, srcjoff+j+1, srckoff+k+1, 1,1,1,
+ $ "source")
+ call checkindex (dstioff+i, dstjoff+j+1, dstkoff+k+1, 1,1,1,
+ $ "destination")
+ end if
+
+ dst (dstioff+i, dstjoff+j, dstkoff+k)
+ $ = src (srcioff+i, srcjoff+j, srckoff+k)
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/copy_3d_real8.F77 b/Carpet/CarpetLib/src/copy_3d_real8.F77
new file mode 100644
index 000000000..716ffd135
--- /dev/null
+++ b/Carpet/CarpetLib/src/copy_3d_real8.F77
@@ -0,0 +1,114 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/copy_3d_real8.F77,v 1.8 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine copy_3d_real8 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).ne.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / srcbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / srcbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / srcbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over region
+ do k = 1, regkext
+ do j = 1, regjext
+ do i = 1, regiext
+
+ if (check_array_accesses.ne.0) then
+ call checkindex (srcioff+i, srcjoff+j+1, srckoff+k+1, 1,1,1,
+ $ "source")
+ call checkindex (dstioff+i, dstjoff+j+1, dstkoff+k+1, 1,1,1,
+ $ "destination")
+ end if
+
+ dst (dstioff+i, dstjoff+j, dstkoff+k)
+ $ = src (srcioff+i, srcjoff+j, srckoff+k)
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/data.cc b/Carpet/CarpetLib/src/data.cc
new file mode 100644
index 000000000..5c9d219e7
--- /dev/null
+++ b/Carpet/CarpetLib/src/data.cc
@@ -0,0 +1,1388 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/data.cc,v 1.55 2004/05/21 18:13:41 schnetter Exp $
+
+#include <assert.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <algorithm>
+#include <iostream>
+#include <limits>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <mpi.h>
+
+#include "cctk.h"
+
+#include "bbox.hh"
+#include "defs.hh"
+#include "dist.hh"
+#include "vect.hh"
+
+#include "data.hh"
+
+using namespace std;
+
+
+
+static size_t total_allocated_bytes; // total number of allocated bytes
+
+
+
+// Constructors
+template<class T, int D>
+data<T,D>::data (const int varindex_, const operator_type transport_operator_,
+ const int vectorlength, const int vectorindex,
+ data* const vectorleader)
+ : gdata<D>(varindex_, transport_operator_),
+ _storage(NULL), _allocated_bytes(0),
+ vectorlength(vectorlength), vectorindex(vectorindex),
+ vectorleader(vectorleader)
+{
+ assert (vectorlength>=1);
+ assert (vectorindex>=0 && vectorindex<vectorlength);
+ assert ((vectorindex==0 && !vectorleader)
+ || (vectorindex!=0 && vectorleader));
+ if (vectorindex==0) vectorclients.resize (vectorlength);
+ if (vectorleader) vectorleader->register_client (vectorindex);
+}
+
+template<class T, int D>
+data<T,D>::data (const int varindex_, const operator_type transport_operator_,
+ const int vectorlength, const int vectorindex,
+ data* const vectorleader,
+ const ibbox& extent_, const int proc_)
+ : gdata<D>(varindex_, transport_operator_),
+ _storage(NULL), _allocated_bytes(0),
+ vectorlength(vectorlength), vectorindex(vectorindex),
+ vectorleader(vectorleader)
+{
+ assert (vectorlength>=1);
+ assert (vectorindex>=0 && vectorindex<vectorlength);
+ assert ((vectorindex==0 && !vectorleader)
+ || (vectorindex!=0 && vectorleader));
+ if (vectorindex==0) vectorclients.resize (vectorlength);
+ if (vectorleader) vectorleader->register_client (vectorindex);
+ allocate(extent_, proc_);
+}
+
+// Destructors
+template<class T, int D>
+data<T,D>::~data ()
+{
+ if (vectorleader) vectorleader->unregister_client (vectorindex);
+ if (vectorindex==0) assert (! has_clients());
+ free();
+}
+
+// Pseudo constructors
+template<class T, int D>
+data<T,D>* data<T,D>::make_typed (const int varindex_,
+ const operator_type transport_operator_)
+ const
+{
+ return new data(varindex_, transport_operator_);
+}
+
+
+
+// Vector mamagement
+template<class T, int D>
+void data<T,D>::register_client (const int index)
+{
+ assert (! vectorclients.at(index));
+ vectorclients.at(index) = true;
+}
+
+template<class T, int D>
+void data<T,D>::unregister_client (const int index)
+{
+ assert (vectorclients.at(index));
+ vectorclients.at(index) = false;
+}
+
+template<class T, int D>
+bool data<T,D>::has_clients ()
+{
+ bool retval = false;
+ for (size_t n=0; n<vectorlength; ++n) {
+ retval |= vectorclients.at(n);
+ }
+ return retval;
+}
+
+
+
+// Storage management
+template<class T, int D>
+void data<T,D>::getmem (const size_t nelems)
+{
+ const size_t nbytes = nelems * sizeof(T);
+ try {
+ assert (this->_allocated_bytes == 0);
+ this->_storage = new T[nelems];
+ this->_allocated_bytes = nbytes;
+ } catch (...) {
+ T Tdummy;
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Failed to allocate %.0f bytes (%.3f MB) of memory for type %s. %.0f bytes (%.3f MB) are currently allocated.",
+ (double)nbytes, nbytes/1.0e6,
+ typestring(Tdummy),
+ (double)total_allocated_bytes, total_allocated_bytes/1.0e6);
+ }
+ total_allocated_bytes += nbytes;
+}
+
+
+
+template<class T, int D>
+void data<T,D>::freemem ()
+{
+ delete [] _storage;
+ total_allocated_bytes -= this->_allocated_bytes;
+ this->_allocated_bytes = 0;
+}
+
+
+
+template<class T, int D>
+void data<T,D>::allocate (const ibbox& extent_,
+ const int proc_,
+ void* const mem)
+{
+ assert (!this->_has_storage);
+ this->_has_storage = true;
+ // prevent accidental wrap-around
+ assert (all(extent_.lower() < numeric_limits<int>::max() / 2));
+ assert (all(extent_.lower() > numeric_limits<int>::min() / 2));
+ assert (all(extent_.upper() < numeric_limits<int>::max() / 2));
+ assert (all(extent_.upper() > numeric_limits<int>::min() / 2));
+ // data
+ this->_extent = extent_;
+ this->_shape = max(ivect(0), this->_extent.shape() / this->_extent.stride());
+ this->_size = 1;
+ for (int d=0; d<D; ++d) {
+ this->_stride[d] = this->_size;
+ assert (this->_shape[d]==0 || this->_size <= INT_MAX / this->_shape[d]);
+ this->_size *= this->_shape[d];
+ }
+ this->_proc = proc_;
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank==this->_proc) {
+ this->_owns_storage = !mem;
+ if (this->_owns_storage) {
+ if (this->vectorindex == 0) {
+ assert (! this->vectorleader);
+ getmem (this->vectorlength * this->_size);
+ } else {
+ assert (this->vectorleader);
+ this->_storage = this->vectorleader->vectordata (this->vectorindex);
+ }
+ } else {
+ this->_storage = (T*)mem;
+ }
+ } else {
+ assert (!mem);
+ }
+}
+
+template<class T, int D>
+void data<T,D>::free ()
+{
+ if (this->_storage && this->_owns_storage && this->vectorindex==0) {
+ freemem ();
+ }
+ _storage = 0;
+ this->_has_storage = false;
+}
+
+template<class T, int D>
+void data<T,D>::transfer_from (gdata<D>* gsrc)
+{
+ assert (this->vectorlength==1);
+ data* src = (data*)gsrc;
+ assert (src->vectorlength==1);
+ assert (!_storage);
+ *this = *src;
+ *src = data(this->varindex, this->transport_operator);
+}
+
+template<class T, int D>
+T* data<T,D>::vectordata (const int vectorindex) const
+{
+ assert (this->vectorindex==0);
+ assert (! this->vectorleader);
+ assert (vectorindex>=0 && vectorindex<this->vectorlength);
+ assert (this->_storage && this->_owns_storage);
+ return this->_storage + vectorindex * this->_size;
+}
+
+
+
+// Processor management
+template<class T, int D>
+void data<T,D>::change_processor (comm_state<D>& state,
+ const int newproc,
+ void* const mem)
+{
+ switch (state.thestate) {
+ case state_recv:
+ change_processor_recv (newproc, mem);
+ break;
+ case state_send:
+ change_processor_send (newproc, mem);
+ break;
+ case state_wait:
+ change_processor_wait (newproc, mem);
+ break;
+ default:
+ assert(0);
+ }
+}
+
+
+
+template<class T, int D>
+void data<T,D>::change_processor_recv (const int newproc, void* const mem)
+{
+ assert (!this->comm_active);
+ this->comm_active = true;
+
+ if (newproc == this->_proc) {
+ assert (!mem);
+ return;
+ }
+
+ if (this->_has_storage) {
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank == newproc) {
+ // copy from other processor
+
+ assert (!_storage);
+ this->_owns_storage = !mem;
+ if (this->_owns_storage) {
+ getmem (this->_size);
+ } else {
+ _storage = (T*)mem;
+ }
+
+ const double wtime1 = MPI_Wtime();
+ T dummy;
+ MPI_Irecv (_storage, this->_size, dist::datatype(dummy), this->_proc,
+ this->tag, dist::comm, &this->request);
+ const double wtime2 = MPI_Wtime();
+ this->wtime_irecv += wtime2 - wtime1;
+
+ } else if (rank == this->_proc) {
+ // copy to other processor
+
+ } else {
+ assert (!mem);
+ assert (!_storage);
+ }
+ }
+}
+
+
+
+template<class T, int D>
+void data<T,D>::change_processor_send (const int newproc, void* const mem)
+{
+ assert (this->comm_active);
+
+ if (newproc == this->_proc) {
+ assert (!mem);
+ return;
+ }
+
+ if (this->_has_storage) {
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank == newproc) {
+ // copy from other processor
+
+ } else if (rank == this->_proc) {
+ // copy to other processor
+
+ assert (!mem);
+ assert (_storage);
+
+ const double wtime1 = MPI_Wtime();
+ T dummy;
+ MPI_Isend (_storage, this->_size, dist::datatype(dummy), newproc,
+ this->tag, dist::comm, &this->request);
+ const double wtime2 = MPI_Wtime();
+ this->wtime_isend += wtime2 - wtime1;
+
+ } else {
+ assert (!mem);
+ assert (!_storage);
+ }
+ }
+}
+
+
+
+template<class T, int D>
+void data<T,D>::change_processor_wait (const int newproc, void* const mem)
+{
+ assert (this->comm_active);
+ this->comm_active = false;
+
+ if (newproc == this->_proc) {
+ assert (!mem);
+ return;
+ }
+
+ if (this->_has_storage) {
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank == newproc) {
+ // copy from other processor
+
+ const double wtime1 = MPI_Wtime();
+ MPI_Status status;
+ MPI_Wait (&this->request, &status);
+ const double wtime2 = MPI_Wtime();
+ this->wtime_irecvwait += wtime2 - wtime1;
+
+ } else if (rank == this->_proc) {
+ // copy to other processor
+
+ assert (!mem);
+ assert (_storage);
+
+ const double wtime1 = MPI_Wtime();
+ MPI_Status status;
+ MPI_Wait (&this->request, &status);
+ const double wtime2 = MPI_Wtime();
+ this->wtime_isendwait += wtime2 - wtime1;
+
+ if (this->_owns_storage) {
+ freemem ();
+ }
+ _storage = 0;
+
+ } else {
+ assert (!mem);
+ assert (!_storage);
+ }
+ }
+
+ this->_proc = newproc;
+}
+
+
+
+// Data manipulators
+template<class T, int D>
+void data<T,D>
+::copy_from_innerloop (const gdata<D>* gsrc, const ibbox& box)
+{
+ const data* src = (const data*)gsrc;
+ assert (this->has_storage() && src->has_storage());
+ assert (all(box.lower()>=this->extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=this->extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==this->extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-this->extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ assert (this->proc() == src->proc());
+
+ const int groupindex = CCTK_GroupIndexFromVarI(this->varindex);
+ const int group_tags_table = CCTK_GroupTagsTableI(groupindex);
+ assert (group_tags_table >= 0);
+
+ // Disallow this.
+ T Tdummy;
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "There is no copy operator available for the variable type %s, dimension %d.",
+ typestring(Tdummy), D);
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ assert (rank == this->proc());
+
+ for (typename ibbox::iterator it=box.begin(); it!=box.end(); ++it) {
+ const ivect index = *it;
+ (*this)[index] = (*src)[index];
+ }
+
+}
+
+
+
+template<class T, int D>
+void data<T,D>
+::interpolate_from_innerloop (const vector<const gdata<D>*> gsrcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ assert (this->has_storage());
+ assert (all(box.lower()>=this->extent().lower()));
+ assert (all(box.upper()<=this->extent().upper()));
+ assert (all(box.stride()==this->extent().stride()));
+ assert (all((box.lower()-this->extent().lower())%box.stride() == 0));
+ vector<const data*> srcs(gsrcs.size());
+ for (int t=0; t<(int)srcs.size(); ++t) srcs[t] = (const data*)gsrcs[t];
+ assert (srcs.size() == times.size() && srcs.size()>0);
+ for (int t=0; t<(int)srcs.size(); ++t) {
+ assert (srcs[t]->has_storage());
+ assert (all(box.lower()>=srcs[t]->extent().lower()));
+ assert (all(box.upper()<=srcs[t]->extent().upper()));
+ assert (this->proc() == srcs[t]->proc());
+ }
+ assert (order_space >= 0);
+ assert (order_time >= 0);
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ assert (rank == this->proc());
+
+ assert (this->varindex >= 0);
+ const int groupindex = CCTK_GroupIndexFromVarI (this->varindex);
+ assert (groupindex >= 0);
+ char* groupname = CCTK_GroupName(groupindex);
+ T Tdummy;
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "There is no interpolator available for the group \"%s\" with variable type %s, dimension %d, spatial interpolation order %d, temporal interpolation order %d.",
+ groupname, typestring(Tdummy), D, order_space, order_time);
+ ::free (groupname);
+}
+
+
+
+extern "C" {
+ void CCTK_FCALL CCTK_FNAME(copy_3d_int4)
+ (const CCTK_INT4* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_INT4* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(copy_3d_real8)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(copy_3d_complex16)
+ (const CCTK_COMPLEX16* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_COMPLEX16* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+}
+
+template<>
+void data<CCTK_INT4,3>
+::copy_from_innerloop (const gdata<3>* gsrc, const ibbox& box)
+{
+ const data* src = (const data*)gsrc;
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ assert (proc() == src->proc());
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ assert (rank == proc());
+
+ const ibbox& sext = src->extent();
+ const ibbox& dext = extent();
+
+ int srcshp[3], dstshp[3];
+ int srcbbox[3][3], dstbbox[3][3], regbbox[3][3];
+
+ for (int d=0; d<3; ++d) {
+ srcshp[d] = (sext.shape() / sext.stride())[d];
+ dstshp[d] = (dext.shape() / dext.stride())[d];
+
+ srcbbox[0][d] = sext.lower()[d];
+ srcbbox[1][d] = sext.upper()[d];
+ srcbbox[2][d] = sext.stride()[d];
+
+ dstbbox[0][d] = dext.lower()[d];
+ dstbbox[1][d] = dext.upper()[d];
+ dstbbox[2][d] = dext.stride()[d];
+
+ regbbox[0][d] = box.lower()[d];
+ regbbox[1][d] = box.upper()[d];
+ regbbox[2][d] = box.stride()[d];
+ }
+
+ assert (all(dext.stride() == box.stride()));
+ if (all(sext.stride() == dext.stride())) {
+ CCTK_FNAME(copy_3d_int4) ((const CCTK_INT4*)src->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_INT4*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox,
+ dstbbox,
+ regbbox);
+
+ } else {
+ assert (0);
+ }
+}
+
+template<>
+void data<CCTK_REAL8,3>
+::copy_from_innerloop (const gdata<3>* gsrc, const ibbox& box)
+{
+ const data* src = (const data*)gsrc;
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ assert (proc() == src->proc());
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ assert (rank == proc());
+
+ const ibbox& sext = src->extent();
+ const ibbox& dext = extent();
+
+ int srcshp[3], dstshp[3];
+ int srcbbox[3][3], dstbbox[3][3], regbbox[3][3];
+
+ for (int d=0; d<3; ++d) {
+ srcshp[d] = (sext.shape() / sext.stride())[d];
+ dstshp[d] = (dext.shape() / dext.stride())[d];
+
+ srcbbox[0][d] = sext.lower()[d];
+ srcbbox[1][d] = sext.upper()[d];
+ srcbbox[2][d] = sext.stride()[d];
+
+ dstbbox[0][d] = dext.lower()[d];
+ dstbbox[1][d] = dext.upper()[d];
+ dstbbox[2][d] = dext.stride()[d];
+
+ regbbox[0][d] = box.lower()[d];
+ regbbox[1][d] = box.upper()[d];
+ regbbox[2][d] = box.stride()[d];
+ }
+
+ assert (all(dext.stride() == box.stride()));
+ if (all(sext.stride() == dext.stride())) {
+ CCTK_FNAME(copy_3d_real8) ((const CCTK_REAL8*)src->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox,
+ dstbbox,
+ regbbox);
+
+ } else {
+ assert (0);
+ }
+}
+
+template<>
+void data<CCTK_COMPLEX16,3>
+::copy_from_innerloop (const gdata<3>* gsrc, const ibbox& box)
+{
+ const data* src = (const data*)gsrc;
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ assert (proc() == src->proc());
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ assert (rank == proc());
+
+ const ibbox& sext = src->extent();
+ const ibbox& dext = extent();
+
+ int srcshp[3], dstshp[3];
+ int srcbbox[3][3], dstbbox[3][3], regbbox[3][3];
+
+ for (int d=0; d<3; ++d) {
+ srcshp[d] = (sext.shape() / sext.stride())[d];
+ dstshp[d] = (dext.shape() / dext.stride())[d];
+
+ srcbbox[0][d] = sext.lower()[d];
+ srcbbox[1][d] = sext.upper()[d];
+ srcbbox[2][d] = sext.stride()[d];
+
+ dstbbox[0][d] = dext.lower()[d];
+ dstbbox[1][d] = dext.upper()[d];
+ dstbbox[2][d] = dext.stride()[d];
+
+ regbbox[0][d] = box.lower()[d];
+ regbbox[1][d] = box.upper()[d];
+ regbbox[2][d] = box.stride()[d];
+ }
+
+ assert (all(dext.stride() == box.stride()));
+ if (all(sext.stride() == dext.stride())) {
+ CCTK_FNAME(copy_3d_complex16) ((const CCTK_COMPLEX16*)src->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_COMPLEX16*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox,
+ dstbbox,
+ regbbox);
+
+ } else {
+ assert (0);
+ }
+}
+
+
+
+extern "C" {
+
+ void CCTK_FCALL CCTK_FNAME(restrict_3d_real8)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(restrict_3d_real8_rf2)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+
+
+
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_rf2)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_o3)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_o3_rf2)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_minmod)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_eno)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_o5)
+ (const CCTK_REAL8* src,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl_rf2)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl_o3)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl_o3_rf2)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl_minmod)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl_eno)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_2tl_o5)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl_rf2)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl_o3)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl_o3_rf2)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl_minmod)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl_eno)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+ void CCTK_FCALL CCTK_FNAME(prolongate_3d_real8_3tl_o5)
+ (const CCTK_REAL8* src1, const CCTK_REAL8& t1,
+ const CCTK_REAL8* src2, const CCTK_REAL8& t2,
+ const CCTK_REAL8* src3, const CCTK_REAL8& t3,
+ const int& srciext, const int& srcjext, const int& srckext,
+ CCTK_REAL8* dst, const CCTK_REAL8& t,
+ const int& dstiext, const int& dstjext, const int& dstkext,
+ const int srcbbox[3][3],
+ const int dstbbox[3][3],
+ const int regbbox[3][3]);
+}
+
+template<>
+void data<CCTK_REAL8,3>
+::interpolate_from_innerloop (const vector<const gdata<3>*> gsrcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ const CCTK_REAL eps = 1.0e-10;
+
+ assert (has_storage());
+ assert (all(box.lower()>=extent().lower()));
+ assert (all(box.upper()<=extent().upper()));
+ assert (all(box.stride()==extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0));
+ vector<const data*> srcs(gsrcs.size());
+ for (int t=0; t<(int)srcs.size(); ++t) srcs[t] = (const data*)gsrcs[t];
+ assert (srcs.size() == times.size() && srcs.size()>0);
+ for (int t=0; t<(int)srcs.size(); ++t) {
+ assert (srcs[t]->has_storage());
+ assert (all(box.lower()>=srcs[t]->extent().lower()));
+ assert (all(box.upper()<=srcs[t]->extent().upper()));
+ }
+
+ assert (proc() == srcs[0]->proc());
+
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ assert (rank == proc());
+
+ const ibbox& sext = srcs[0]->extent();
+ const ibbox& dext = extent();
+
+ int srcshp[3], dstshp[3];
+ int srcbbox[3][3], dstbbox[3][3], regbbox[3][3];
+
+ for (int d=0; d<3; ++d) {
+ srcshp[d] = (sext.shape() / sext.stride())[d];
+ dstshp[d] = (dext.shape() / dext.stride())[d];
+
+ srcbbox[0][d] = sext.lower()[d];
+ srcbbox[1][d] = sext.upper()[d];
+ srcbbox[2][d] = sext.stride()[d];
+
+ dstbbox[0][d] = dext.lower()[d];
+ dstbbox[1][d] = dext.upper()[d];
+ dstbbox[2][d] = dext.stride()[d];
+
+ regbbox[0][d] = box.lower()[d];
+ regbbox[1][d] = box.upper()[d];
+ regbbox[2][d] = box.stride()[d];
+ }
+
+ // Check that the times are consistent
+ assert (times.size() > 0);
+ CCTK_REAL min_time = times[0];
+ CCTK_REAL max_time = times[0];
+ for (size_t tl=1; tl<times.size(); ++tl) {
+ // Catch broken compilers that only know min(int) and max(int)
+ assert (min(1.3, 1.4) > 1.2);
+ min_time = min(min_time, times[tl]);
+ max_time = max(max_time, times[tl]);
+ }
+ if (time < min_time - eps || time > max_time + eps) {
+ ostringstream buf;
+ buf << "Internal error: extrapolation in time."
+ << " time=" << time
+ << " times=" << times;
+ CCTK_WARN (0, buf.str().c_str());
+ }
+
+ // Is it necessary to interpolate in time?
+ if (times.size() > 1) {
+ for (size_t tl=0; tl<times.size(); ++tl) {
+ // Catch broken compilers that only know abs(int)
+ assert (abs(1.5) > 1.4);
+ if (abs(times[tl] - time) < eps) {
+ // It is not.
+ vector<const gdata<3>*> my_gsrcs(1);
+ vector<CCTK_REAL> my_times(1);
+ my_gsrcs[0] = gsrcs[tl];
+ my_times[0] = times[tl];
+ const int my_order_time = 0;
+ this->interpolate_from_innerloop
+ (my_gsrcs, my_times, box, time, order_space, my_order_time);
+ return;
+ }
+ }
+ }
+
+ assert (all(dext.stride() == box.stride()));
+ if (all(sext.stride() < dext.stride())) {
+ // Restrict
+
+ assert (times.size() == 1);
+ assert (abs(times[0] - time) < eps);
+
+ switch (transport_operator) {
+
+ case op_Lagrange:
+ case op_TVD:
+ case op_ENO:
+ assert (srcs.size() == 1);
+ if (all (dext.stride() == sext.stride() * 2)) {
+ CCTK_FNAME(restrict_3d_real8_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(restrict_3d_real8)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+
+ default:
+ assert (0);
+
+ } // switch (transport_operator)
+
+ } else if (all(sext.stride() > dext.stride())) {
+ // Prolongate
+
+ switch (transport_operator) {
+
+ case op_Lagrange:
+ switch (order_time) {
+
+ case 0:
+ assert (times.size() == 1);
+ assert (abs(times[0] - time) < eps);
+ assert (srcs.size()>=1);
+ switch (order_space) {
+ case 0:
+ case 1:
+ if (all (sext.stride() == dext.stride() * 2)) {
+ CCTK_FNAME(prolongate_3d_real8_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(prolongate_3d_real8)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+ case 2:
+ case 3:
+ if (all (sext.stride() == dext.stride() * 2)) {
+ CCTK_FNAME(prolongate_3d_real8_o3_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(prolongate_3d_real8_o3)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+ case 4:
+ case 5:
+ CCTK_FNAME(prolongate_3d_real8_o5)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+
+ case 1:
+ assert (srcs.size()>=2);
+ switch (order_space) {
+ case 0:
+ case 1:
+ if (all (sext.stride() == dext.stride() * 2)) {
+ CCTK_FNAME(prolongate_3d_real8_2tl_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(prolongate_3d_real8_2tl)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+ case 2:
+ case 3:
+ if (all (sext.stride() == dext.stride() * 2)) {
+ CCTK_FNAME(prolongate_3d_real8_2tl_o3_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(prolongate_3d_real8_2tl_o3)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+ case 4:
+ case 5:
+ CCTK_FNAME(prolongate_3d_real8_2tl_o5)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+
+ case 2:
+ assert (srcs.size()>=3);
+ switch (order_space) {
+ case 0:
+ case 1:
+ if (all (sext.stride() == dext.stride() * 2)) {
+ CCTK_FNAME(prolongate_3d_real8_3tl_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(prolongate_3d_real8_3tl)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+ case 2:
+ case 3:
+ if (all (sext.stride() == dext.stride() * 2)) {
+ CCTK_FNAME(prolongate_3d_real8_3tl_o3_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ } else {
+ CCTK_FNAME(prolongate_3d_real8_3tl_o3)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ }
+ break;
+ case 4:
+ case 5:
+ CCTK_FNAME(prolongate_3d_real8_3tl_o5)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+
+ default:
+ assert (0);
+ } // switch (order_time)
+ break;
+
+ case op_TVD:
+ switch (order_time) {
+ case 0:
+ assert (times.size() == 1);
+ assert (abs(times[0] - time) < eps);
+ switch (order_space) {
+ case 0:
+ case 1:
+ CCTK_WARN (0, "There is no stencil for op=\"TVD\" with order_space=1");
+ break;
+ case 2:
+ case 3:
+ CCTK_FNAME(prolongate_3d_real8_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+// CCTK_FNAME(prolongate_3d_real8_minmod)
+// ((const CCTK_REAL8*)srcs[0]->storage(),
+// srcshp[0], srcshp[1], srcshp[2],
+// (CCTK_REAL8*)storage(),
+// dstshp[0], dstshp[1], dstshp[2],
+// srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ case 1:
+ switch (order_space) {
+ case 0:
+ case 1:
+ CCTK_WARN (0, "There is no stencil for op=\"TVD\" with order_space=1");
+ break;
+ case 2:
+ case 3:
+ CCTK_FNAME(prolongate_3d_real8_2tl_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+// CCTK_FNAME(prolongate_3d_real8_2tl_minmod)
+// ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+// (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+// srcshp[0], srcshp[1], srcshp[2],
+// (CCTK_REAL8*)storage(), time,
+// dstshp[0], dstshp[1], dstshp[2],
+// srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ case 2:
+ switch (order_space) {
+ case 0:
+ case 1:
+ CCTK_WARN (0, "There is no stencil for op=\"TVD\" with order_space=1");
+ break;
+ case 2:
+ case 3:
+ CCTK_FNAME(prolongate_3d_real8_3tl_rf2)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+// CCTK_FNAME(prolongate_3d_real8_3tl_minmod)
+// ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+// (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+// (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+// srcshp[0], srcshp[1], srcshp[2],
+// (CCTK_REAL8*)storage(), time,
+// dstshp[0], dstshp[1], dstshp[2],
+// srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ default:
+ assert (0);
+ } // switch (order_time)
+ break;
+
+ case op_ENO:
+ switch (order_time) {
+ case 0:
+ assert (times.size() == 1);
+ assert (abs(times[0] - time) < eps);
+ switch (order_space) {
+ case 0:
+ case 1:
+ CCTK_WARN (0, "There is no stencil for op=\"ENO\" with order_space=1");
+ break;
+ case 2:
+ case 3:
+ CCTK_FNAME(prolongate_3d_real8_eno)
+ ((const CCTK_REAL8*)srcs[0]->storage(),
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(),
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ case 1:
+ switch (order_space) {
+ case 0:
+ case 1:
+ CCTK_WARN (0, "There is no stencil for op=\"ENO\" with order_space=1");
+ break;
+ case 2:
+ case 3:
+ CCTK_FNAME(prolongate_3d_real8_2tl_eno)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ case 2:
+ switch (order_space) {
+ case 0:
+ case 1:
+ CCTK_WARN (0, "There is no stencil for op=\"ENO\" with order_space=1");
+ break;
+ case 2:
+ case 3:
+ CCTK_FNAME(prolongate_3d_real8_3tl_eno)
+ ((const CCTK_REAL8*)srcs[0]->storage(), times[0],
+ (const CCTK_REAL8*)srcs[1]->storage(), times[1],
+ (const CCTK_REAL8*)srcs[2]->storage(), times[2],
+ srcshp[0], srcshp[1], srcshp[2],
+ (CCTK_REAL8*)storage(), time,
+ dstshp[0], dstshp[1], dstshp[2],
+ srcbbox, dstbbox, regbbox);
+ break;
+ default:
+ assert (0);
+ }
+ break;
+ default:
+ assert (0);
+ } // switch (order_time)
+ break;
+
+ default:
+ assert(0);
+ } // switch (transport_operator)
+
+ } else {
+ assert (0);
+ }
+}
+
+
+
+
+
+// Output
+template<class T,int D>
+ostream& data<T,D>::output (ostream& os) const
+{
+ T Tdummy;
+ os << "data<" << typestring(Tdummy) << "," << D << ">:"
+ << "extent=" << this->extent() << ","
+ << "stride=" << this->stride() << ",size=" << this->size();
+ return os;
+}
+
+
+
+#define INSTANTIATE(T) \
+template class data<T,3>;
+
+#include "instantiate"
+
+#undef INSTANTIATE
diff --git a/Carpet/CarpetLib/src/data.hh b/Carpet/CarpetLib/src/data.hh
new file mode 100644
index 000000000..ba44556ff
--- /dev/null
+++ b/Carpet/CarpetLib/src/data.hh
@@ -0,0 +1,130 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/data.hh,v 1.23 2004/06/08 22:57:22 schnetter Exp $
+
+#ifndef DATA_HH
+#define DATA_HH
+
+#include <cassert>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "dist.hh"
+#include "bbox.hh"
+#include "gdata.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// A distributed multi-dimensional array
+template<class T,int D>
+class data: public gdata<D>
+{
+
+ // Types
+ typedef vect<int,D> ivect;
+ typedef bbox<int,D> ibbox;
+
+ // Fields
+ T* _storage; // the data (if located on this processor)
+ size_t _allocated_bytes; // number of allocated bytes
+
+ // For vector groups with contiguous storage
+ int vectorlength; // number of vector elements
+ int vectorindex; // index of this vector element
+ data* vectorleader; // if index!=0: first vector element
+ vector<bool> vectorclients; // if index==0: registered elements
+
+ void register_client (int index);
+ void unregister_client (int index);
+ bool has_clients ();
+
+public:
+
+ // Constructors
+ data (const int varindex = -1,
+ const operator_type transport_operator = op_error,
+ const int vectorlength = 1, const int vectorindex = 0,
+ data* const vectorleader = NULL);
+ data (const int varindex, const operator_type transport_operator,
+ const int vectorlength, const int vectorindex,
+ data* const vectorleader,
+ const ibbox& extent, const int proc);
+
+ // Destructors
+ virtual ~data ();
+
+ // Pseudo constructors
+ virtual data* make_typed (const int varindex,
+ const operator_type transport_operator) const;
+
+ // Storage management
+private:
+ void getmem (const size_t nelems);
+ void freemem ();
+public:
+ virtual void allocate (const ibbox& extent, const int proc,
+ void* const mem=0);
+ virtual void free ();
+ virtual void transfer_from (gdata<D>* gsrc);
+
+private:
+ T* vectordata (const int vectorindex) const;
+public:
+
+ // Processor management
+ virtual void change_processor (comm_state<D>& state,
+ const int newproc, void* const mem=0);
+private:
+ virtual void change_processor_recv (const int newproc, void* const mem=0);
+ virtual void change_processor_send (const int newproc, void* const mem=0);
+ virtual void change_processor_wait (const int newproc, void* const mem=0);
+public:
+
+ // Accessors
+ virtual const void* storage () const
+ {
+ assert (this->_has_storage);
+ return _storage;
+ }
+
+ virtual void* storage () {
+ assert (this->_has_storage);
+ return _storage;
+ }
+
+ // Data accessors
+ const T& operator[] (const ivect& index) const
+ {
+ assert (_storage);
+ return _storage[offset(index)];
+ }
+
+ T& operator[] (const ivect& index)
+ {
+ assert (_storage);
+ return _storage[offset(index)];
+ }
+
+ // Data manipulators
+ void copy_from_innerloop (const gdata<D>* gsrc,
+ const ibbox& box);
+ void interpolate_from_innerloop (const vector<const gdata<D>*> gsrcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time);
+
+public:
+
+ // Output
+ ostream& output (ostream& os) const;
+};
+
+
+
+#endif // DATA_HH
diff --git a/Carpet/CarpetLib/src/defs.cc b/Carpet/CarpetLib/src/defs.cc
new file mode 100644
index 000000000..69cd22fca
--- /dev/null
+++ b/Carpet/CarpetLib/src/defs.cc
@@ -0,0 +1,176 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.cc,v 1.19 2004/05/21 18:13:41 schnetter Exp $
+
+#include <assert.h>
+#include <ctype.h>
+
+#include <iostream>
+#include <list>
+#include <set>
+#include <stack>
+#include <vector>
+
+#include "cctk.h"
+
+#include "defs.hh"
+
+using namespace std;
+
+
+
+template<class T>
+T ipow (T x, int y) {
+ if (y<0) {
+ y = -y;
+ x = T(1)/x;
+ }
+ T res = T(1);
+ for (;;) {
+ if (y%2) res *= x;
+ y /= 2;
+ if (y==0) break;
+ x *= x;
+ }
+ return res;
+}
+
+
+
+void skipws (istream& is) {
+ while (is.good() && isspace(is.peek())) {
+ is.get();
+ }
+}
+
+
+
+void expect (istream& is, const char c) {
+ if (is.peek() == c) return;
+ cout << "While reading characters from a stream:" << endl
+ << " Character '" << c << "' expected, but not found." << endl
+ << " The next up to 100 available characters are \"";
+ for (int i=0; i<100; ++i) {
+ const int uc = is.get();
+ if (uc<0) break;
+ cout << (unsigned char)uc;
+ }
+ cout << "\"." << endl;
+ throw input_error();
+}
+
+
+
+void consume (istream& is, const char c) {
+ expect (is, c);
+ is.get();
+}
+
+
+
+// Vector input
+template<class T>
+istream& input (istream& is, vector<T>& v) {
+ v.clear();
+ try {
+ skipws (is);
+ consume (is, '[');
+ skipws (is);
+ while (is.good() && is.peek() != ']') {
+ T elem;
+ is >> elem;
+ v.push_back (elem);
+ skipws (is);
+ if (is.peek() != ',') break;
+ is.get();
+ skipws (is);
+ }
+ skipws (is);
+ consume (is, ']');
+ } catch (input_error &err) {
+ cout << "Input error while reading a vector<>" << endl
+ << " The following elements have been read so far: " << v << endl;
+ throw err;
+ }
+ return is;
+}
+
+
+
+// List output
+template<class T>
+ostream& output (ostream& os, const list<T>& l) {
+ os << "[";
+ for (typename list<T>::const_iterator ti=l.begin(); ti!=l.end(); ++ti) {
+ if (ti!=l.begin()) os << ",";
+ os << *ti;
+ }
+ os << "]";
+ return os;
+}
+
+// Set output
+template<class T>
+ostream& output (ostream& os, const set<T>& s) {
+ os << "{";
+ for (typename set<T>::const_iterator ti=s.begin(); ti!=s.end(); ++ti) {
+ if (ti!=s.begin()) os << ",";
+ os << *ti;
+ }
+ os << "}";
+ return os;
+}
+
+// Stack output
+template<class T>
+ostream& output (ostream& os, const stack<T>& s) {
+ stack<T> s2 (s);
+ list<T> l;
+ while (! s2.empty()) {
+ l.insert (l.begin(), s2.top());
+ s2.pop();
+ }
+ return output (os, l);
+}
+
+// Vector output
+template<class T>
+ostream& output (ostream& os, const vector<T>& v) {
+ os << "[";
+ int cnt=0;
+ for (typename vector<T>::const_iterator ti=v.begin(); ti!=v.end(); ++ti) {
+ if (ti!=v.begin()) os << ",";
+ os << cnt++ << ":" << *ti;
+ }
+ os << "]";
+ return os;
+}
+
+
+
+#include "bbox.hh"
+#include "bboxset.hh"
+
+template int ipow (int x, int y);
+
+template istream& input (istream& os, vector<bbox<int,3> >& v);
+template istream& input (istream& os, vector<bbox<CCTK_REAL,3> >& v);
+template istream& input (istream& os, vector<vector<bbox<int,3> > >& v);
+template istream& input (istream& os, vector<vector<bbox<CCTK_REAL,3> > >& v);
+template istream& input (istream& os, vector<vect<vect<bool,2>,3> >& v);
+template istream& input (istream& os, vector<vector<vect<vect<bool,2>,3> > >& v);
+
+template ostream& output (ostream& os, const list<bbox<int,3> >& l);
+template ostream& output (ostream& os, const set<bbox<int,3> >& s);
+template ostream& output (ostream& os, const set<bboxset<int,3> >& s);
+template ostream& output (ostream& os, const stack<bbox<int,3> >& s);
+template ostream& output (ostream& os, const vector<int>& v);
+template ostream& output (ostream& os, const vector<CCTK_REAL>& v);
+template ostream& output (ostream& os, const vector<bbox<int,3> >& v);
+template ostream& output (ostream& os, const vector<bbox<CCTK_REAL,3> >& v);
+template ostream& output (ostream& os, const vector<list<bbox<int,3> > >& v);
+template ostream& output (ostream& os, const vector<vector<int> >& v);
+template ostream& output (ostream& os, const vector<vector<CCTK_REAL> >& v);
+template ostream& output (ostream& os, const vector<vector<bbox<int,3> > >& v);
+template ostream& output (ostream& os, const vector<vector<bbox<CCTK_REAL,3> > >& v);
+template ostream& output (ostream& os, const vector<vector<vect<vect<bool,2>,3> > >& v);
+template ostream& output (ostream& os, const vector<vect<vect<bool,2>,3> >& v);
+template ostream& output (ostream& os, const vector<vector<vector<bbox<int,3> > > >& v);
diff --git a/Carpet/CarpetLib/src/defs.hh b/Carpet/CarpetLib/src/defs.hh
new file mode 100644
index 000000000..4297ba8c6
--- /dev/null
+++ b/Carpet/CarpetLib/src/defs.hh
@@ -0,0 +1,194 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/defs.hh,v 1.13 2004/03/01 19:43:08 schnetter Exp $
+
+#ifndef DEFS_HH
+#define DEFS_HH
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
+
+#include <algorithm>
+#include <complex>
+#include <iostream>
+#include <list>
+#include <set>
+#include <stack>
+#include <vector>
+
+#include "cctk.h"
+
+using namespace std;
+
+// A general type
+enum centering { vertex_centered, cell_centered };
+
+// Useful helper
+template<class T>
+inline T square (const T& x) { return x*x; }
+
+// Another useful helper
+template<class T>
+T ipow (T x, int y);
+
+
+
+// Input streams
+struct input_error { };
+void skipws (istream& is);
+void expect (istream& is, const char c);
+void consume (istream& is, const char c);
+
+
+
+// Names for types
+
+#if 0
+
+inline const char * typestring (const char& dummy)
+{ return "char"; }
+
+inline const char * typestring (const signed char& dummy)
+{ return "signed char"; }
+
+inline const char * typestring (const unsigned char& dummy)
+{ return "unsigned char"; }
+
+inline const char * typestring (const short& dummy)
+{ return "short"; }
+
+inline const char * typestring (const unsigned short& dummy)
+{ return "unsigned short"; }
+
+inline const char * typestring (const int& dummy)
+{ return "int"; }
+
+inline const char * typestring (const unsigned int& dummy)
+{ return "unsigned int"; }
+
+inline const char * typestring (const long& dummy)
+{ return "long"; }
+
+inline const char * typestring (const unsigned long& dummy)
+{ return "unsigned long"; }
+
+inline const char * typestring (const long long& dummy)
+{ return "long long"; }
+
+inline const char * typestring (const unsigned long long& dummy)
+{ return "unsigned long long"; }
+
+inline const char * typestring (const float& dummy)
+{ return "float"; }
+
+inline const char * typestring (const double& dummy)
+{ return "double"; }
+
+inline const char * typestring (const long double& dummy)
+{ return "long double"; }
+
+inline const char * typestring (const complex<float>& dummy)
+{ return "complex<float>"; }
+
+inline const char * typestring (const complex<double>& dummy)
+{ return "complex<double>"; }
+
+inline const char * typestring (const complex<long double>& dummy)
+{ return "complex<long double>"; }
+
+#else
+
+# ifdef CCTK_INT1
+inline const char * typestring (const CCTK_INT1& dummy)
+{ return "CCTK_INT1"; }
+# endif
+
+# ifdef CCTK_INT2
+inline const char * typestring (const CCTK_INT2& dummy)
+{ return "CCTK_INT2"; }
+# endif
+
+# ifdef CCTK_INT4
+inline const char * typestring (const CCTK_INT4& dummy)
+{ return "CCTK_INT4"; }
+# endif
+
+# ifdef CCTK_INT8
+inline const char * typestring (const CCTK_INT8& dummy)
+{ return "CCTK_INT8"; }
+# endif
+
+# ifdef CCTK_REAL4
+inline const char * typestring (const CCTK_REAL4& dummy)
+{ return "CCTK_REAL4"; }
+# endif
+
+# ifdef CCTK_REAL8
+inline const char * typestring (const CCTK_REAL8& dummy)
+{ return "CCTK_REAL8"; }
+# endif
+
+# ifdef CCTK_REAL16
+inline const char * typestring (const CCTK_REAL16& dummy)
+{ return "CCTK_REAL16"; }
+# endif
+
+# ifdef CCTK_REAL4
+inline const char * typestring (const CCTK_COMPLEX8& dummy)
+{ return "CCTK_COMPLEX8"; }
+# endif
+
+# ifdef CCTK_REAL8
+inline const char * typestring (const CCTK_COMPLEX16& dummy)
+{ return "CCTK_COMPLEX16"; }
+# endif
+
+# ifdef CCTK_REAL16
+inline const char * typestring (const CCTK_COMPLEX32& dummy)
+{ return "CCTK_COMPLEX32"; }
+# endif
+
+#endif
+
+
+
+// Container input
+template<class T> istream& input (istream& is, vector<T>& v);
+
+template<class T>
+inline istream& operator>> (istream& is, vector<T>& v) {
+ return input(is,v);
+}
+
+
+
+// Container output
+template<class T> ostream& output (ostream& os, const list<T>& l);
+template<class T> ostream& output (ostream& os, const set<T>& s);
+template<class T> ostream& output (ostream& os, const stack<T>& s);
+template<class T> ostream& output (ostream& os, const vector<T>& v);
+
+template<class T>
+inline ostream& operator<< (ostream& os, const list<T>& l) {
+ return output(os,l);
+}
+
+template<class T>
+inline ostream& operator<< (ostream& os, const set<T>& s) {
+ return output(os,s);
+}
+
+template<class T>
+inline ostream& operator<< (ostream& os, const stack<T>& s) {
+ return output(os,s);
+}
+
+template<class T>
+inline ostream& operator<< (ostream& os, const vector<T>& v) {
+ return output(os,v);
+}
+
+
+
+#endif // DEFS_HH
diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc
new file mode 100644
index 000000000..e7e8778ff
--- /dev/null
+++ b/Carpet/CarpetLib/src/dh.cc
@@ -0,0 +1,689 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.57 2004/09/17 16:37:26 schnetter Exp $
+
+#include <assert.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "defs.hh"
+#include "dist.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "dh.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<int D>
+dh<D>::dh (gh<D>& h,
+ const ivect& lghosts, const ivect& ughosts,
+ const int prolongation_order_space, const int buffer_width)
+ : h(h),
+ lghosts(lghosts), ughosts(ughosts),
+ prolongation_order_space(prolongation_order_space),
+ buffer_width(buffer_width)
+{
+ assert (all(lghosts>=0 && ughosts>=0));
+ assert (prolongation_order_space>=0);
+ assert (buffer_width>=0);
+ h.add(this);
+ CHECKPOINT;
+ recompose (false);
+}
+
+// Destructors
+template<int D>
+dh<D>::~dh ()
+{
+ CHECKPOINT;
+ h.remove(this);
+}
+
+// Helpers
+template<int D>
+int dh<D>::prolongation_stencil_size () const {
+ assert (prolongation_order_space>=0);
+ return prolongation_order_space/2;
+}
+
+// Modifiers
+template<int D>
+void dh<D>::recompose (const bool do_prolongate) {
+ DECLARE_CCTK_PARAMETERS;
+
+ CHECKPOINT;
+
+ boxes.clear();
+
+ boxes.resize(h.reflevels());
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ boxes.at(rl).resize(h.components(rl));
+ for (int c=0; c<h.components(rl); ++c) {
+ boxes.at(rl).at(c).resize(h.mglevels(rl,c));
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ const ibbox intr = h.extents.at(rl).at(c).at(ml);
+
+ // Interior
+ // (the interior of the grid has the extent as specified by
+ // the user)
+ boxes.at(rl).at(c).at(ml).interior = intr;
+
+ // Exterior (add ghost zones)
+ // (the content of the exterior is completely determined by
+ // the interior of this or other components; the content of
+ // the exterior is redundant)
+ ivect ldist(lghosts), udist(ughosts);
+ for (int d=0; d<D; ++d) {
+ if (h.outer_boundaries.at(rl).at(c)[d][0]) ldist[d] = 0;
+ if (h.outer_boundaries.at(rl).at(c)[d][1]) udist[d] = 0;
+ }
+ boxes.at(rl).at(c).at(ml).exterior = intr.expand(ldist, udist);
+
+ // Boundaries (ghost zones only)
+ // (interior + boundaries = exterior)
+ boxes.at(rl).at(c).at(ml).boundaries
+ = boxes.at(rl).at(c).at(ml).exterior - intr;
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+
+ // Sync boxes
+ const int cs = h.components(rl);
+ boxes.at(rl).at(c).at(ml).send_sync.resize(cs);
+ boxes.at(rl).at(c).at(ml).recv_sync.resize(cs);
+
+ // Refinement boxes
+ if (rl>0) {
+ const int csm1 = h.components(rl-1);
+ boxes.at(rl).at(c).at(ml).send_ref_coarse.resize(csm1);
+ boxes.at(rl).at(c).at(ml).recv_ref_coarse.resize(csm1);
+ boxes.at(rl).at(c).at(ml).recv_ref_bnd_coarse.resize(csm1);
+ }
+ if (rl<h.reflevels()-1) {
+ const int csp1 = h.components(rl+1);
+ boxes.at(rl).at(c).at(ml).recv_ref_fine.resize(csp1);
+ boxes.at(rl).at(c).at(ml).send_ref_fine.resize(csp1);
+ boxes.at(rl).at(c).at(ml).send_ref_bnd_fine.resize(csp1);
+ }
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ const ibset& bnds = boxes.at(rl).at(c).at(ml).boundaries;
+
+ // Sync boxes
+ for (int cc=0; cc<h.components(rl); ++cc) {
+ assert (ml<h.mglevels(rl,cc));
+ // intersect boundaries with interior of that component
+ ibset ovlp = bnds & boxes.at(rl).at(cc).at(ml).interior;
+ ovlp.normalize();
+ for (typename ibset::const_iterator b=ovlp.begin();
+ b!=ovlp.end(); ++b) {
+ boxes.at(rl).at(c ).at(ml).recv_sync.at(cc).push_back(*b);
+ boxes.at(rl).at(cc).at(ml).send_sync.at(c ).push_back(*b);
+ }
+ } // for cc
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ const ibbox& intr = boxes.at(rl).at(c).at(ml).interior;
+ const ibbox& extr = boxes.at(rl).at(c).at(ml).exterior;
+
+ // Multigrid boxes
+ if (ml>0) {
+ const ibbox intrf = boxes.at(rl).at(c).at(ml-1).interior;
+ const ibbox extrf = boxes.at(rl).at(c).at(ml-1).exterior;
+ // Restriction (interior)
+ {
+ // (the restriction must fill all of the interior of the
+ // coarse grid, and may use the exterior of the fine grid)
+ const ibbox recv = intr;
+ assert (intr.empty() || ! recv.empty());
+ const ibbox send = recv.expanded_for(extrf);
+ assert (intr.empty() || ! send.empty());
+ // TODO: put the check back in, taking outer boundaries
+ // into account
+#if 0
+ assert (send.is_contained_in(extrf));
+#endif
+ boxes.at(rl).at(c).at(ml-1).send_mg_coarse.push_back(send);
+ boxes.at(rl).at(c).at(ml ).recv_mg_fine .push_back(recv);
+ }
+ // Prolongation (interior)
+ {
+ // (the prolongation may use the exterior of the coarse
+ // grid, and may fill only the interior of the fine grid,
+ // and the bbox must be as large as possible)
+ const ibbox recv = extr.contracted_for(intrf) & intrf;
+ assert (intr.empty() || ! recv.empty());
+ const ibbox send = recv.expanded_for(extr);
+ assert (intr.empty() || ! send.empty());
+ boxes.at(rl).at(c).at(ml-1).recv_mg_coarse.push_back(recv);
+ boxes.at(rl).at(c).at(ml ).send_mg_fine .push_back(send);
+ }
+ } // if not finest multigrid level
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ const ibbox& intr = boxes.at(rl).at(c).at(ml).interior;
+ const ibbox& extr = boxes.at(rl).at(c).at(ml).exterior;
+
+ // Refinement boxes
+ if (rl<h.reflevels()-1) {
+ for (int cc=0; cc<h.components(rl+1); ++cc) {
+ const ibbox intrf = boxes.at(rl+1).at(cc).at(ml).interior;
+ // Prolongation (interior)
+ // TODO: prefer boxes from the same processor
+ {
+ // (the prolongation may use the exterior of the coarse
+ // grid, and must fill all of the interior of the fine
+ // grid)
+ const int pss = prolongation_stencil_size();
+ ibset recvs
+ = extr.expand(-pss,-pss).contracted_for(intrf) & intrf;
+ const iblistvect& rrc
+ = boxes.at(rl+1).at(cc).at(ml).recv_ref_coarse;
+ for (typename iblistvect::const_iterator lvi=rrc.begin();
+ lvi!=rrc.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ recvs -= *li;
+ }
+ }
+ recvs.normalize();
+ assert (recvs.setsize() <= 1);
+ if (recvs.setsize() == 1) {
+ const ibbox recv = *recvs.begin();
+ const ibbox send = recv.expanded_for(extr);
+ assert (! send.empty());
+ assert (send.is_contained_in(extr));
+ boxes.at(rl+1).at(cc).at(ml).recv_ref_coarse.at(c )
+ .push_back(recv);
+ boxes.at(rl ).at(c ).at(ml).send_ref_fine .at(cc)
+ .push_back(send);
+ }
+ }
+
+ } // for cc
+ } // if not finest refinement level
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ const ibbox& intr = boxes.at(rl).at(c).at(ml).interior;
+ const ibbox& extr = boxes.at(rl).at(c).at(ml).exterior;
+
+ // Refinement boxes
+ if (rl<h.reflevels()-1) {
+ for (int cc=0; cc<h.components(rl+1); ++cc) {
+ const ibbox intrf = boxes.at(rl+1).at(cc).at(ml).interior;
+ const ibbox& extrf = boxes.at(rl+1).at(cc).at(ml).exterior;
+ const ibset& bndsf = boxes.at(rl+1).at(cc).at(ml).boundaries;
+ // Prolongation (boundaries)
+ // TODO: prefer boxes from the same processor
+ {
+ // (the prolongation may use the exterior of the coarse
+ // grid, and must fill all of the boundary of the fine
+ // grid)
+ const int pss = prolongation_stencil_size();
+ // Prolongation boundaries
+ ibset pbndsf = bndsf;
+ {
+ // Do not count what is synced
+ const iblistvect& rs
+ = boxes.at(rl+1).at(cc).at(ml).recv_sync;
+ for (typename iblistvect::const_iterator lvi=rs.begin();
+ lvi!=rs.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ pbndsf -= *li;
+ }
+ }
+ pbndsf.normalize();
+ }
+ // Buffer zones
+ ibset buffers;
+ {
+ for (typename ibset::const_iterator pbi=pbndsf.begin();
+ pbi!=pbndsf.end(); ++pbi) {
+ buffers |= (*pbi).expand(buffer_width, buffer_width) & extrf;
+ }
+ buffers.normalize();
+ }
+ // Add boundaries
+ const ibbox maxrecvs
+ = extr.expand(-pss,-pss).contracted_for(extrf);
+ ibset recvs = buffers & maxrecvs;
+ recvs.normalize();
+ {
+ // Do not prolongate what is already prolongated
+ const iblistvect& rrbc
+ = boxes.at(rl+1).at(cc).at(ml).recv_ref_bnd_coarse;
+ for (typename iblistvect::const_iterator lvi=rrbc.begin();
+ lvi!=rrbc.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ recvs -= *li;
+ }
+ }
+ recvs.normalize();
+ }
+ {
+ for (typename ibset::const_iterator ri = recvs.begin();
+ ri != recvs.end(); ++ri) {
+ const ibbox & recv = *ri;
+ const ibbox send = recv.expanded_for(extr);
+ assert (! send.empty());
+ assert (send.is_contained_in(extr));
+ assert (send.is_contained_in(extr.expand(-pss,-pss)));
+ boxes.at(rl+1).at(cc).at(ml).recv_ref_bnd_coarse.at(c )
+ .push_back(recv);
+ boxes.at(rl ).at(c ).at(ml).send_ref_bnd_fine .at(cc)
+ .push_back(send);
+ }
+ }
+ }
+
+ } // for cc
+ } // if not finest refinement level
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ const ibbox& intr = boxes.at(rl).at(c).at(ml).interior;
+ const ibbox& extr = boxes.at(rl).at(c).at(ml).exterior;
+
+ // Refinement boxes
+ if (rl<h.reflevels()-1) {
+ for (int cc=0; cc<h.components(rl+1); ++cc) {
+ const ibbox intrf = boxes.at(rl+1).at(cc).at(ml).interior;
+ // Restriction (interior)
+ {
+ // (the restriction may fill the interior of the of the
+ // coarse grid, and may use the interior of the fine
+ // grid, and the bbox must be as large as possible)
+ // (the restriction must not use points that are filled
+ // by boundary prolongation)
+ ibset sends = intrf & intr.expanded_for(intrf);
+ // remove what is received during boundary prolongation
+ for (int ccc=0; ccc<h.components(rl); ++ccc) {
+ const iblist& sendlist
+ = boxes.at(rl+1).at(cc).at(ml).recv_ref_bnd_coarse.at(ccc);
+ for (typename iblist::const_iterator sli = sendlist.begin();
+ sli != sendlist.end(); ++sli) {
+ sends -= *sli;
+ }
+ }
+ sends.normalize();
+ for (typename ibset::const_iterator si = sends.begin();
+ si != sends.end(); ++si) {
+ const ibbox recv = (*si).contracted_for(intr);
+ if (! recv.empty()) {
+ const ibbox & send = recv.expanded_for(intrf);
+ assert (! send.empty());
+ boxes.at(rl+1).at(cc).at(ml).send_ref_coarse.at(c )
+ .push_back(send);
+ boxes.at(rl ).at(c ).at(ml).recv_ref_fine .at(cc)
+ .push_back(recv);
+ }
+ }
+ }
+
+ } // for cc
+ } // if not finest refinement level
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+
+ // Boundaries that are not synced, or are neither synced nor
+ // prolonged to from coarser grids (outer boundaries)
+ ibset& sync_not = boxes.at(rl).at(c).at(ml).sync_not;
+ ibset& recv_not = boxes.at(rl).at(c).at(ml).recv_not;
+
+ // The whole boundary
+ sync_not = boxes.at(rl).at(c).at(ml).boundaries;
+ recv_not = boxes.at(rl).at(c).at(ml).boundaries;
+
+ // Subtract boxes received during synchronisation
+ const iblistvect& recv_sync = boxes.at(rl).at(c).at(ml).recv_sync;
+ for (typename iblistvect::const_iterator lvi=recv_sync.begin();
+ lvi!=recv_sync.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ sync_not -= *li;
+ recv_not -= *li;
+ }
+ }
+
+ // Subtract boxes received during prolongation
+ const iblistvect& recv_ref_bnd_coarse
+ = boxes.at(rl).at(c).at(ml).recv_ref_bnd_coarse;
+ for (typename iblistvect::const_iterator
+ lvi=recv_ref_bnd_coarse.begin();
+ lvi!=recv_ref_bnd_coarse.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ recv_not -= *li;
+ }
+ }
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ // Calculate bases
+ bases.resize(h.reflevels());
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ if (h.components(rl)==0) {
+ bases.at(rl).resize(0);
+ } else {
+ bases.at(rl).resize(h.mglevels(rl,0));
+ for (int ml=0; ml<h.mglevels(rl,0); ++ml) {
+ bases.at(rl).at(ml).exterior = ibbox();
+ bases.at(rl).at(ml).interior = ibbox();
+ for (int c=0; c<h.components(rl); ++c) {
+ bases.at(rl).at(ml).exterior
+ = (bases.at(rl).at(ml).exterior
+ .expanded_containing(boxes.at(rl).at(c).at(ml).exterior));
+ bases.at(rl).at(ml).interior
+ = (bases.at(rl).at(ml).interior
+ .expanded_containing(boxes.at(rl).at(c).at(ml).interior));
+ }
+ bases.at(rl).at(ml).boundaries
+ = bases.at(rl).at(ml).exterior - bases.at(rl).at(ml).interior;
+ }
+ }
+ }
+
+ if (output_bboxes) {
+ cout << endl << h << endl;
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ cout << endl;
+ cout << "dh bboxes:" << endl;
+ cout << "rl=" << rl << " c=" << c << " ml=" << ml << endl;
+ cout << "exterior=" << boxes.at(rl).at(c).at(ml).exterior << endl;
+ cout << "interior=" << boxes.at(rl).at(c).at(ml).interior << endl;
+ cout << "send_mg_fine=" << boxes.at(rl).at(c).at(ml).send_mg_fine << endl;
+ cout << "send_mg_coarse=" << boxes.at(rl).at(c).at(ml).send_mg_coarse << endl;
+ cout << "recv_mg_fine=" << boxes.at(rl).at(c).at(ml).recv_mg_fine << endl;
+ cout << "recv_mg_coarse=" << boxes.at(rl).at(c).at(ml).recv_mg_coarse << endl;
+ cout << "send_ref_fine=" << boxes.at(rl).at(c).at(ml).send_ref_fine << endl;
+ cout << "send_ref_coarse=" << boxes.at(rl).at(c).at(ml).send_ref_coarse << endl;
+ cout << "recv_ref_fine=" << boxes.at(rl).at(c).at(ml).recv_ref_fine << endl;
+ cout << "recv_ref_coarse=" << boxes.at(rl).at(c).at(ml).recv_ref_coarse << endl;
+ cout << "send_sync=" << boxes.at(rl).at(c).at(ml).send_sync << endl;
+ cout << "send_ref_bnd_fine=" << boxes.at(rl).at(c).at(ml).send_ref_bnd_fine << endl;
+ cout << "boundaries=" << boxes.at(rl).at(c).at(ml).boundaries << endl;
+ cout << "recv_sync=" << boxes.at(rl).at(c).at(ml).recv_sync << endl;
+ cout << "recv_ref_bnd_coarse=" << boxes.at(rl).at(c).at(ml).recv_ref_bnd_coarse << endl;
+ cout << "sync_not=" << boxes.at(rl).at(c).at(ml).sync_not << endl;
+ cout << "recv_not=" << boxes.at(rl).at(c).at(ml).recv_not << endl;
+ }
+ }
+ }
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ if (h.components(rl)>0) {
+ for (int ml=0; ml<h.mglevels(rl,0); ++ml) {
+ cout << endl;
+ cout << "dh bases:" << endl;
+ cout << "rl=" << rl << " ml=" << ml << endl;
+ cout << "exterior=" << bases.at(rl).at(ml).exterior << endl;
+ cout << "interior=" << bases.at(rl).at(ml).interior << endl;
+ cout << "boundaries=" << bases.at(rl).at(ml).boundaries << endl;
+ }
+ }
+ }
+ } // if output_bboxes
+
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+
+ // Assert that all boundaries are synced or received
+ {
+ const ibset& sync_not = boxes.at(rl).at(c).at(ml).sync_not;
+#if 0
+ const ibset& recv_not = boxes.at(rl).at(c).at(ml).recv_not;
+#endif
+
+ // Check that no boundaries are left over
+ if (rl==0) assert (sync_not.empty());
+#if 0
+ assert (recv_not.empty());
+#endif
+ }
+
+ // Assert that the interior is received exactly once during
+ // prolongation, and that nothing else is received
+ {
+ if (rl==0) {
+ const iblistvect& recv_ref_coarse
+ = boxes.at(rl).at(c).at(ml).recv_ref_coarse;
+ assert (recv_ref_coarse.empty());
+ } else { // rl!=0
+ const iblistvect& recv_ref_coarse
+ = boxes.at(rl).at(c).at(ml).recv_ref_coarse;
+ ibset intr = boxes.at(rl).at(c).at(ml).interior;
+ for (typename iblistvect::const_iterator
+ lvi=recv_ref_coarse.begin();
+ lvi!=recv_ref_coarse.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ const int old_sz = intr.size();
+ const int this_sz = li->size();
+ intr -= *li;
+ const int new_sz = intr.size();
+ // TODO
+ assert (new_sz + this_sz == old_sz);
+ }
+ }
+ // TODO
+ // This need not be empty at outer boundaries. Check that
+ // those are indeed outer boundaries! But what size of the
+ // boundary region should be used for that?
+#if 0
+ assert (intr.empty());
+#endif
+ }
+ }
+
+ // Assert that the boundaries are received at most once during
+ // prolongation and synchronisation, and that nothing else is
+ // received
+ {
+ const iblistvect& recv_sync = boxes.at(rl).at(c).at(ml).recv_sync;
+ const iblistvect& recv_ref_bnd_coarse
+ = boxes.at(rl).at(c).at(ml).recv_ref_bnd_coarse;
+ ibset bnds = boxes.at(rl).at(c).at(ml).boundaries;
+ for (typename iblistvect::const_iterator lvi=recv_sync.begin();
+ lvi!=recv_sync.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ const int old_sz = bnds.size();
+ const int this_sz = li->size();
+ bnds -= *li;
+ const int new_sz = bnds.size();
+ assert (new_sz + this_sz == old_sz);
+ }
+ }
+ for (typename iblistvect::const_iterator
+ lvi=recv_ref_bnd_coarse.begin();
+ lvi!=recv_ref_bnd_coarse.end(); ++lvi) {
+ for (typename iblist::const_iterator li=lvi->begin();
+ li!=lvi->end(); ++li) {
+ const int old_sz = bnds.size();
+ const int this_sz = li->size();
+ bnds -= *li;
+ const int new_sz = bnds.size();
+ // TODO
+ // The new size can be larger if part of the
+ // prolongation went into the buffer zone.
+// assert (new_sz + this_sz == old_sz);
+ assert (new_sz + this_sz >= old_sz);
+ }
+ }
+ // TODO
+ // This need not be empty at outer boundaries. Check that
+ // those are indeed outer boundaries! But what size of the
+ // boundary region should be used for that?
+#if 0
+ assert (bnds.empty());
+#endif
+ }
+
+ } // for ml
+ } // for c
+ } // for rl
+
+ if (! save_memory_during_regridding) {
+
+ for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) {
+ (*f)->recompose_crop ();
+ }
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) {
+ (*f)->recompose_allocate (rl);
+ }
+ for (comm_state<D> state; !state.done(); state.step()) {
+ for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) {
+ (*f)->recompose_fill (state, rl, do_prolongate);
+ }
+ }
+ for (typename list<ggf<D>*>::reverse_iterator f=gfs.rbegin(); f!=gfs.rend(); ++f) {
+ (*f)->recompose_free (rl);
+ }
+ for (comm_state<D> state; !state.done(); state.step()) {
+ for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) {
+ (*f)->recompose_bnd_prolongate (state, rl, do_prolongate);
+ }
+ }
+ for (comm_state<D> state; !state.done(); state.step()) {
+ for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) {
+ (*f)->recompose_sync (state, rl, do_prolongate);
+ }
+ }
+ } // for rl
+
+ } else { // save memory
+
+ ggf<D>* vectorleader = NULL;
+ for (typename list<ggf<D>*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) {
+
+ (*f)->recompose_crop ();
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ (*f)->recompose_allocate (rl);
+ for (comm_state<D> state; !state.done(); state.step()) {
+ (*f)->recompose_fill (state, rl, do_prolongate);
+ }
+ assert ((*f)->vectorlength >= 1);
+ if ((*f)->vectorlength == 1) {
+ assert (! vectorleader);
+ (*f)->recompose_free (rl);
+ } else {
+ // treat vector groups specially: delete the leader only
+ // after all other elements have been deleted
+ if ((*f)->vectorindex == 0) {
+ // first element: delete nothing
+ if (rl == 0) {
+ assert (! vectorleader);
+ vectorleader = *f;
+ }
+ assert (vectorleader);
+ } else {
+ assert (vectorleader);
+ (*f)->recompose_free (rl);
+ if ((*f)->vectorindex == (*f)->vectorlength-1) {
+ // this was the last element: delete the leader as well
+ vectorleader->recompose_free (rl);
+ if (rl == h.reflevels()-1) {
+ vectorleader = NULL;
+ }
+ }
+ }
+ }
+ for (comm_state<D> state; !state.done(); state.step()) {
+ (*f)->recompose_bnd_prolongate (state, rl, do_prolongate);
+ }
+ for (comm_state<D> state; !state.done(); state.step()) {
+ (*f)->recompose_sync (state, rl, do_prolongate);
+ }
+ } // for rl
+
+ } // for gf
+ assert (! vectorleader);
+
+ } // save memory
+}
+
+
+
+// Grid function management
+template<int D>
+void dh<D>::add (ggf<D>* f) {
+ CHECKPOINT;
+ gfs.push_back(f);
+}
+
+template<int D>
+void dh<D>::remove (ggf<D>* f) {
+ CHECKPOINT;
+ gfs.remove(f);
+}
+
+
+
+// Output
+template<int D>
+void dh<D>::output (ostream& os) const {
+ os << "dh<" << D << ">:"
+ << "ghosts=[" << lghosts << "," << ughosts << "],"
+ << "gfs={";
+ int cnt=0;
+ for (typename list<ggf<D>*>::const_iterator f = gfs.begin();
+ f != gfs.end(); ++f) {
+ if (cnt++) os << ",";
+ (*f)->output(os);
+ }
+ os << "}";
+}
+
+
+
+template class dh<3>;
diff --git a/Carpet/CarpetLib/src/dh.hh b/Carpet/CarpetLib/src/dh.hh
new file mode 100644
index 000000000..22a9bd425
--- /dev/null
+++ b/Carpet/CarpetLib/src/dh.hh
@@ -0,0 +1,146 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.hh,v 1.20 2004/08/07 19:47:11 schnetter Exp $
+
+#ifndef DH_HH
+#define DH_HH
+
+#include <assert.h>
+
+#include <iostream>
+#include <list>
+#include <string>
+#include <vector>
+
+#include "bbox.hh"
+#include "bboxset.hh"
+#include "defs.hh"
+#include "gh.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// Forward declaration
+template<int D> class ggf;
+template<int D> class dh;
+
+// Output
+template<int D>
+ostream& operator<< (ostream& os, const dh<D>& d);
+
+
+
+// A data hierarchy (grid hierarchy plus ghost zones)
+template<int D>
+class dh {
+
+ // Types
+ typedef vect<int,D> ivect;
+ typedef bbox<int,D> ibbox;
+ typedef bboxset<int,D> ibset;
+ typedef list<ibbox> iblist;
+ typedef vector<iblist> iblistvect; // vector of lists
+
+public:
+
+ // in here, the term "boundary" means both ghost zones and
+ // refinement boundaries, but does not refer to outer (physical)
+ // boundaries.
+
+ // ghost zones, refinement boundaries, and outer boundaries are not
+ // used as sources for synchronisation. this design choice might
+ // not be good.
+
+ struct dboxes {
+ ibbox exterior; // whole region (including boundaries)
+
+ ibbox interior; // interior (without boundaries)
+ iblist send_mg_fine;
+ iblist send_mg_coarse;
+ iblist recv_mg_fine;
+ iblist recv_mg_coarse;
+ iblistvect send_ref_fine;
+ iblistvect send_ref_coarse;
+ iblistvect recv_ref_fine;
+ iblistvect recv_ref_coarse;
+ iblistvect send_sync; // send while syncing
+ iblistvect send_ref_bnd_fine; // sent to finer grids
+
+ ibset boundaries; // boundaries
+ iblistvect recv_sync; // received while syncing
+ iblistvect recv_ref_bnd_coarse; // received from coarser grids
+ ibset sync_not; // not received while syncing (outer boundary of that level)
+ ibset recv_not; // not received while syncing or prolongating (globally outer boundary)
+
+#if 0
+ // after regridding:
+ iblistvect prev_send; // sent from previous dh
+ iblistvect recv_prev; // received from previous dh
+ iblistvect send_prev_fine; // sent to finer
+ iblistvect recv_prev_coarse; // received from coarser
+#endif
+ };
+
+private:
+
+ struct dbases {
+ ibbox exterior; // whole region (including boundaries)
+ ibbox interior; // interior (without boundaries)
+ ibset boundaries; // boundaries
+ };
+
+ typedef vector<dboxes> mboxes; // ... for each multigrid level
+ typedef vector<mboxes> cboxes; // ... for each component
+ typedef vector<cboxes> rboxes; // ... for each refinement level
+
+ typedef vector<dbases> mbases; // ... for each multigrid level
+ typedef vector<mbases> rbases; // ... for each refinement level
+
+public: // should be readonly
+
+ // Fields
+ gh<D>& h; // hierarchy
+ ivect lghosts, ughosts; // ghost zones
+
+ int prolongation_order_space; // order of spatial prolongation operator
+ int buffer_width; // buffer inside refined grids
+
+ rboxes boxes;
+ rbases bases;
+
+ list<ggf<D>*> gfs; // list of all grid functions
+
+public:
+
+ // Constructors
+ dh (gh<D>& h, const ivect& lghosts, const ivect& ughosts,
+ int prolongation_order_space, int buffer_width);
+
+ // Destructors
+ virtual ~dh ();
+
+ // Helpers
+ int prolongation_stencil_size () const;
+
+ // Modifiers
+ void recompose (const bool do_prolongate);
+
+ // Grid function management
+ void add (ggf<D>* f);
+ void remove (ggf<D>* f);
+
+ // Output
+ virtual void output (ostream& os) const;
+};
+
+
+
+template<int D>
+inline ostream& operator<< (ostream& os, const dh<D>& d) {
+ d.output(os);
+ return os;
+}
+
+
+
+#endif // DH_HH
diff --git a/Carpet/CarpetLib/src/dist.cc b/Carpet/CarpetLib/src/dist.cc
new file mode 100644
index 000000000..7e41e3cdb
--- /dev/null
+++ b/Carpet/CarpetLib/src/dist.cc
@@ -0,0 +1,83 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dist.cc,v 1.8 2004/07/08 12:36:01 tradke Exp $
+
+#include <assert.h>
+
+#include <mpi.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "defs.hh"
+
+#include "dist.hh"
+
+using namespace std;
+
+
+
+namespace dist {
+
+ MPI_Comm comm = MPI_COMM_NULL;
+
+#if 0
+ MPI_Datatype mpi_complex_float;
+ MPI_Datatype mpi_complex_double;
+ MPI_Datatype mpi_complex_long_double;
+#else
+ MPI_Datatype mpi_complex8;
+ MPI_Datatype mpi_complex16;
+ MPI_Datatype mpi_complex32;
+#endif
+
+ void init (int& argc, char**& argv) {
+ MPI_Init (&argc, &argv);
+ pseudoinit();
+ }
+
+ void pseudoinit () {
+ comm = MPI_COMM_WORLD;
+
+#if 0
+ MPI_Type_contiguous (2, MPI_FLOAT, &mpi_complex_float);
+ MPI_Type_commit (&mpi_complex_float);
+ MPI_Type_contiguous (2, MPI_DOUBLE, &mpi_complex_double);
+ MPI_Type_commit (&mpi_complex_double);
+ MPI_Type_contiguous (2, MPI_LONG_DOUBLE, &mpi_complex_long_double);
+ MPI_Type_commit (&mpi_complex_long_double);
+#else
+# ifdef CCTK_REAL4
+ CCTK_REAL4 dummy4;
+ MPI_Type_contiguous (2, datatype(dummy4), &mpi_complex8);
+ MPI_Type_commit (&mpi_complex8);
+# endif
+# ifdef CCTK_REAL8
+ CCTK_REAL8 dummy8;
+ MPI_Type_contiguous (2, datatype(dummy8), &mpi_complex16);
+ MPI_Type_commit (&mpi_complex16);
+# endif
+# ifdef CCTK_REAL16
+ CCTK_REAL16 dummy16;
+ MPI_Type_contiguous (2, datatype(dummy16), &mpi_complex32);
+ MPI_Type_commit (&mpi_complex32);
+# endif
+#endif
+ }
+
+ void finalize () {
+ MPI_Finalize ();
+ }
+
+ void checkpoint (const char* file, int line) {
+ DECLARE_CCTK_PARAMETERS;
+ if (verbose) {
+ int rank;
+ MPI_Comm_rank (comm, &rank);
+ printf ("CHECKPOINT: processor %d, file %s, line %d\n",
+ rank, file, line);
+ }
+ if (barriers) {
+ MPI_Barrier (comm);
+ }
+ }
+
+} // namespace dist
diff --git a/Carpet/CarpetLib/src/dist.hh b/Carpet/CarpetLib/src/dist.hh
new file mode 100644
index 000000000..ab89ae580
--- /dev/null
+++ b/Carpet/CarpetLib/src/dist.hh
@@ -0,0 +1,120 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dist.hh,v 1.10 2004/03/01 19:43:39 schnetter Exp $
+
+#ifndef DIST_HH
+#define DIST_HH
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <complex>
+
+#include <mpi.h>
+
+#include "cctk.h"
+
+#include "defs.hh"
+
+using namespace std;
+
+
+
+namespace dist {
+
+ extern MPI_Comm comm;
+
+#if 0
+ extern MPI_Datatype mpi_complex_float;
+ extern MPI_Datatype mpi_complex_double;
+ extern MPI_Datatype mpi_complex_long_double;
+#else
+ extern MPI_Datatype mpi_complex8;
+ extern MPI_Datatype mpi_complex16;
+ extern MPI_Datatype mpi_complex32;
+#endif
+
+ void init (int& argc, char**& argv);
+ void pseudoinit ();
+ void finalize ();
+
+ // Debugging output
+#define CHECKPOINT dist::checkpoint(__FILE__, __LINE__)
+ void checkpoint (const char* file, int line);
+
+
+
+ // Datatype helpers
+ inline MPI_Datatype datatype (const char& dummy)
+ { return MPI_CHAR; }
+
+ inline MPI_Datatype datatype (const signed char& dummy)
+ { return MPI_UNSIGNED_CHAR; }
+
+ inline MPI_Datatype datatype (const unsigned char& dummy)
+ { return MPI_BYTE; }
+
+ inline MPI_Datatype datatype (const short& dummy)
+ { return MPI_SHORT; }
+
+ inline MPI_Datatype datatype (const unsigned short& dummy)
+ { return MPI_UNSIGNED_SHORT; }
+
+ inline MPI_Datatype datatype (const int& dummy)
+ { return MPI_INT; }
+
+ inline MPI_Datatype datatype (const unsigned int& dummy)
+ { return MPI_UNSIGNED; }
+
+ inline MPI_Datatype datatype (const long& dummy)
+ { return MPI_LONG; }
+
+ inline MPI_Datatype datatype (const unsigned long& dummy)
+ { return MPI_UNSIGNED_LONG; }
+
+ inline MPI_Datatype datatype (const long long& dummy)
+ { return MPI_LONG_LONG_INT; }
+
+ inline MPI_Datatype datatype (const float& dummy)
+ { return MPI_FLOAT; }
+
+ inline MPI_Datatype datatype (const double& dummy)
+ { return MPI_DOUBLE; }
+
+ inline MPI_Datatype datatype (const long double& dummy)
+ { return MPI_LONG_DOUBLE; }
+
+#if 0
+
+ inline MPI_Datatype datatype (const complex<float>& dummy)
+ { return mpi_complex_float; }
+
+ inline MPI_Datatype datatype (const complex<double>& dummy)
+ { return mpi_complex_double; }
+
+ inline MPI_Datatype datatype (const complex<long double>& dummy)
+ { return mpi_complex_long_double; }
+
+#else
+
+# ifdef CCTK_REAL4
+ inline MPI_Datatype datatype (const CCTK_COMPLEX8& dummy)
+ { return mpi_complex8; }
+# endif
+
+# ifdef CCTK_REAL8
+ inline MPI_Datatype datatype (const CCTK_COMPLEX16& dummy)
+ { return mpi_complex16; }
+# endif
+
+# ifdef CCTK_REAL16
+ inline MPI_Datatype datatype (const CCTK_COMPLEX32& dummy)
+ { return mpi_complex32; }
+# endif
+
+#endif
+
+} // namespace dist
+
+
+
+#endif // DIST_HH
diff --git a/Carpet/CarpetLib/src/gdata.cc b/Carpet/CarpetLib/src/gdata.cc
new file mode 100644
index 000000000..f05c88122
--- /dev/null
+++ b/Carpet/CarpetLib/src/gdata.cc
@@ -0,0 +1,438 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gdata.cc,v 1.29 2004/04/07 16:58:07 schnetter Exp $
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <iostream>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "util_ErrorCodes.h"
+#include "util_Table.h"
+
+#include "bbox.hh"
+#include "defs.hh"
+#include "dist.hh"
+#include "vect.hh"
+
+#include "gdata.hh"
+
+using namespace std;
+
+
+
+// Communication state control
+template<int D>
+comm_state<D>::comm_state ()
+ : thestate(state_recv),
+ current(0)
+{
+}
+
+template<int D>
+void comm_state<D>::step ()
+{
+ assert (thestate!=state_done);
+ assert (current==tmps.size());
+ thestate=astate(size_t(thestate)+1);
+ current=0;
+}
+
+template<int D>
+bool comm_state<D>::done ()
+{
+ return thestate==state_done;
+}
+
+template<int D>
+comm_state<D>::~comm_state ()
+{
+ assert (thestate==state_recv || thestate==state_done);
+}
+
+
+
+// Hand out the next MPI tag
+static int nexttag ()
+{
+ static int last = 100;
+ ++last;
+ if (last > 30000) last = 100;
+ return last;
+}
+
+
+
+// Constructors
+template<int D>
+gdata<D>::gdata (const int varindex_, const operator_type transport_operator_)
+ : varindex(varindex_), transport_operator(transport_operator_),
+ wtime_isend(0.0), wtime_isendwait(0.0),
+ wtime_irecv(0.0), wtime_irecvwait(0.0),
+ _has_storage(false),
+ comm_active(false),
+ tag(nexttag())
+{
+ DECLARE_CCTK_PARAMETERS;
+ if (barriers) {
+ MPI_Barrier (dist::comm);
+ }
+}
+
+// Destructors
+template<int D>
+gdata<D>::~gdata ()
+{
+ DECLARE_CCTK_PARAMETERS;
+ if (barriers) {
+ MPI_Barrier (dist::comm);
+ }
+}
+
+
+
+// Data manipulators
+template<int D>
+void gdata<D>::copy_from (comm_state<D>& state,
+ const gdata* src, const ibbox& box)
+{
+ switch (state.thestate) {
+ case state_recv:
+ copy_from_recv (state, src, box);
+ break;
+ case state_send:
+ copy_from_send (state, src, box);
+ break;
+ case state_wait:
+ copy_from_wait (state, src, box);
+ break;
+ default:
+ assert(0);
+ }
+}
+
+
+
+template<int D>
+void gdata<D>::copy_from_nocomm (const gdata* src, const ibbox& box)
+{
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ if (box.empty()) return;
+
+ assert (proc() == src->proc());
+
+ // copy on same processor
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank == proc()) {
+ copy_from_innerloop (src, box);
+ }
+}
+
+
+
+template<int D>
+void gdata<D>::copy_from_recv (comm_state<D>& state,
+ const gdata* src, const ibbox& box)
+{
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ if (box.empty()) return;
+
+ if (proc() == src->proc()) {
+ // copy on same processor
+
+ } else {
+
+ // copy to different processor
+ gdata<D>* const tmp = make_typed(varindex, transport_operator);
+ // TODO: is this efficient?
+ state.tmps.push_back (tmp);
+ ++state.current;
+ tmp->allocate (box, src->proc());
+ tmp->change_processor_recv (proc());
+
+ }
+}
+
+
+
+template<int D>
+void gdata<D>::copy_from_send (comm_state<D>& state,
+ const gdata* src, const ibbox& box)
+{
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ if (box.empty()) return;
+
+ if (proc() == src->proc()) {
+ // copy on same processor
+
+ copy_from_nocomm (src, box);
+
+ } else {
+
+ // copy to different processor
+ gdata<D>* const tmp = state.tmps.at(state.current++);
+ assert (tmp);
+ tmp->copy_from_nocomm (src, box);
+ tmp->change_processor_send (proc());
+
+ }
+}
+
+
+
+template<int D>
+void gdata<D>::copy_from_wait (comm_state<D>& state,
+ const gdata* src, const ibbox& box)
+{
+ assert (has_storage() && src->has_storage());
+ assert (all(box.lower()>=extent().lower()
+ && box.lower()>=src->extent().lower()));
+ assert (all(box.upper()<=extent().upper()
+ && box.upper()<=src->extent().upper()));
+ assert (all(box.stride()==extent().stride()
+ && box.stride()==src->extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0
+ && (box.lower()-src->extent().lower())%box.stride() == 0));
+
+ if (box.empty()) return;
+
+ if (proc() == src->proc()) {
+ // copy on same processor
+
+ } else {
+
+ // copy to different processor
+ gdata<D>* const tmp = state.tmps.at(state.current++);
+ assert (tmp);
+ tmp->change_processor_wait (proc());
+ copy_from_nocomm (tmp, box);
+ delete tmp;
+
+ }
+}
+
+
+
+template<int D>
+void gdata<D>
+::interpolate_from (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ assert (transport_operator != op_error);
+ if (transport_operator == op_none) return;
+ switch (state.thestate) {
+ case state_recv:
+ interpolate_from_recv (state, srcs, times, box, time, order_space, order_time);
+ break;
+ case state_send:
+ interpolate_from_send (state, srcs, times, box, time, order_space, order_time);
+ break;
+ case state_wait:
+ interpolate_from_wait (state, srcs, times, box, time, order_space, order_time);
+ break;
+ default:
+ assert(0);
+ }
+}
+
+
+
+template<int D>
+void gdata<D>
+::interpolate_from_nocomm (const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ assert (has_storage());
+ assert (all(box.lower()>=extent().lower()));
+ assert (all(box.upper()<=extent().upper()));
+ assert (all(box.stride()==extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0));
+ assert (srcs.size() == times.size() && srcs.size()>0);
+ for (int t=0; t<(int)srcs.size(); ++t) {
+ assert (srcs.at(t)->has_storage());
+ assert (all(box.lower()>=srcs.at(t)->extent().lower()));
+ assert (all(box.upper()<=srcs.at(t)->extent().upper()));
+ }
+
+ assert (! box.empty());
+ if (box.empty()) return;
+
+ assert (proc() == srcs.at(0)->proc());
+
+ assert (transport_operator != op_error);
+ assert (transport_operator != op_none);
+
+ // interpolate on same processor
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ if (rank == proc()) {
+ interpolate_from_innerloop
+ (srcs, times, box, time, order_space, order_time);
+ }
+}
+
+
+
+template<int D>
+void gdata<D>
+::interpolate_from_recv (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ assert (has_storage());
+ assert (all(box.lower()>=extent().lower()));
+ assert (all(box.upper()<=extent().upper()));
+ assert (all(box.stride()==extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0));
+ assert (srcs.size() == times.size() && srcs.size()>0);
+ for (int t=0; t<(int)srcs.size(); ++t) {
+ assert (srcs.at(t)->has_storage());
+ assert (all(box.lower()>=srcs.at(t)->extent().lower()));
+ assert (all(box.upper()<=srcs.at(t)->extent().upper()));
+ }
+
+ assert (! box.empty());
+ if (box.empty()) return;
+
+ if (proc() == srcs.at(0)->proc()) {
+ // interpolate on same processor
+
+ } else {
+ // interpolate from other processor
+
+ gdata<D>* const tmp = make_typed(varindex, transport_operator);
+ // TODO: is this efficient?
+ state.tmps.push_back (tmp);
+ ++state.current;
+ tmp->allocate (box, srcs.at(0)->proc());
+ tmp->change_processor_recv (proc());
+
+ }
+}
+
+
+
+template<int D>
+void gdata<D>
+::interpolate_from_send (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ assert (has_storage());
+ assert (all(box.lower()>=extent().lower()));
+ assert (all(box.upper()<=extent().upper()));
+ assert (all(box.stride()==extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0));
+ assert (srcs.size() == times.size() && srcs.size()>0);
+ for (int t=0; t<(int)srcs.size(); ++t) {
+ assert (srcs.at(t)->has_storage());
+ assert (all(box.lower()>=srcs.at(t)->extent().lower()));
+ assert (all(box.upper()<=srcs.at(t)->extent().upper()));
+ }
+
+ assert (! box.empty());
+ if (box.empty()) return;
+
+ if (proc() == srcs.at(0)->proc()) {
+ // interpolate on same processor
+
+ interpolate_from_nocomm (srcs, times, box, time, order_space, order_time);
+
+ } else {
+ // interpolate from other processor
+
+ gdata<D>* const tmp = state.tmps.at(state.current++);
+ assert (tmp);
+ tmp->interpolate_from_nocomm (srcs, times, box, time, order_space, order_time);
+ tmp->change_processor_send (proc());
+
+ }
+}
+
+
+
+template<int D>
+void gdata<D>
+::interpolate_from_wait (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time)
+{
+ assert (has_storage());
+ assert (all(box.lower()>=extent().lower()));
+ assert (all(box.upper()<=extent().upper()));
+ assert (all(box.stride()==extent().stride()));
+ assert (all((box.lower()-extent().lower())%box.stride() == 0));
+ assert (srcs.size() == times.size() && srcs.size()>0);
+ for (int t=0; t<(int)srcs.size(); ++t) {
+ assert (srcs.at(t)->has_storage());
+ assert (all(box.lower()>=srcs.at(t)->extent().lower()));
+ assert (all(box.upper()<=srcs.at(t)->extent().upper()));
+ }
+
+ assert (! box.empty());
+ if (box.empty()) return;
+
+ if (proc() == srcs.at(0)->proc()) {
+ // interpolate on same processor
+
+ } else {
+ // interpolate from other processor
+
+ gdata<D>* const tmp = state.tmps.at(state.current++);
+ assert (tmp);
+ tmp->change_processor_wait (proc());
+ copy_from_nocomm (tmp, box);
+ delete tmp;
+
+ }
+}
+
+
+
+template class comm_state<3>;
+template class gdata<3>;
diff --git a/Carpet/CarpetLib/src/gdata.hh b/Carpet/CarpetLib/src/gdata.hh
new file mode 100644
index 000000000..9355238dd
--- /dev/null
+++ b/Carpet/CarpetLib/src/gdata.hh
@@ -0,0 +1,219 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gdata.hh,v 1.24 2004/04/19 07:56:35 schnetter Exp $
+
+#ifndef GDATA_HH
+#define GDATA_HH
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "dist.hh"
+#include "bbox.hh"
+#include "operators.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+
+template<int D>
+class gdata;
+
+
+
+// State information for communications
+enum astate { state_recv, state_send, state_wait, state_done };
+
+template<int D>
+struct comm_state {
+ astate thestate;
+ comm_state ();
+ void step ();
+ bool done ();
+ ~comm_state ();
+
+ vector<gdata<D>*> tmps;
+ size_t current;
+};
+
+
+
+// A generic data storage without type information
+template<int D>
+class gdata {
+
+ // Types
+ typedef vect<int,D> ivect;
+ typedef bbox<int,D> ibbox;
+
+protected: // should be readonly
+
+ // Fields
+ int varindex; // Cactus variable index, or -1
+ operator_type transport_operator;
+
+ double wtime_isend, wtime_isendwait;
+ double wtime_irecv, wtime_irecvwait;
+
+ bool _has_storage; // has storage associated (on some processor)
+ bool _owns_storage; // owns the storage
+ // (only valid if there is storage on this processor; it means that
+ // the memory is allocated and freed by this class)
+ int _size; // size
+
+ int _proc; // stored on processor
+
+ ivect _shape, _stride; // shape and index order
+
+ ibbox _extent; // bbox for all data
+
+ bool comm_active;
+ MPI_Request request;
+
+ int tag; // MPI tag for this object
+
+public:
+
+ // Constructors
+ gdata (const int varindex,
+ const operator_type transport_operator = op_error);
+
+ // Destructors
+ virtual ~gdata ();
+
+ // Pseudo constructors
+ virtual gdata<D>*
+ make_typed (const int varindex,
+ const operator_type transport_operator = op_error) const = 0;
+
+ // Processor management
+ virtual void change_processor (comm_state<D>& state,
+ const int newproc, void* const mem=0) = 0;
+ protected:
+ virtual void change_processor_recv (const int newproc, void* const mem=0) = 0;
+ virtual void change_processor_send (const int newproc, void* const mem=0) = 0;
+ virtual void change_processor_wait (const int newproc, void* const mem=0) = 0;
+ public:
+
+ // Storage management
+ virtual void transfer_from (gdata<D>* src) = 0;
+
+ virtual void allocate (const ibbox& extent, const int proc,
+ void* const mem=0) = 0;
+ virtual void free () = 0;
+
+ // Accessors
+
+ bool has_storage () const {
+ return _has_storage;
+ }
+ bool owns_storage () const {
+ assert (_has_storage);
+ return _owns_storage;
+ }
+
+ virtual const void* storage () const = 0;
+
+ virtual void* storage () = 0;
+
+ int size () const {
+ assert (_has_storage);
+ return _size;
+ }
+
+ int proc () const {
+ assert (_has_storage);
+ return _proc;
+ }
+
+ const ivect& shape () const {
+ assert (_has_storage);
+ return _shape;
+ }
+
+ const ivect& stride () const {
+ assert (_has_storage);
+ return _stride;
+ }
+
+ const ibbox& extent () const {
+ assert (_has_storage);
+ return _extent;
+ }
+
+ // Data accessors
+ int offset (const ivect& index) const {
+ assert (_has_storage);
+ assert (all((index-extent().lower()) % extent().stride() == 0));
+ ivect ind = (index-extent().lower()) / extent().stride();
+ assert (all(ind>=0 && ind<=shape()));
+ return dot(ind, stride());
+ }
+
+ // Data manipulators
+ public:
+ void copy_from (comm_state<D>& state,
+ const gdata* src, const ibbox& box);
+ private:
+ void copy_from_nocomm (const gdata* src, const ibbox& box);
+ void copy_from_recv (comm_state<D>& state,
+ const gdata* src, const ibbox& box);
+ void copy_from_send (comm_state<D>& state,
+ const gdata* src, const ibbox& box);
+ void copy_from_wait (comm_state<D>& state,
+ const gdata* src, const ibbox& box);
+ public:
+ void interpolate_from (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time);
+ private:
+ void interpolate_from_nocomm (const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time);
+ void interpolate_from_recv (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time);
+ void interpolate_from_send (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time);
+ void interpolate_from_wait (comm_state<D>& state,
+ const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time);
+ public:
+
+protected:
+ virtual void
+ copy_from_innerloop (const gdata* src, const ibbox& box) = 0;
+ virtual void
+ interpolate_from_innerloop (const vector<const gdata*> srcs,
+ const vector<CCTK_REAL> times,
+ const ibbox& box, const CCTK_REAL time,
+ const int order_space,
+ const int order_time) = 0;
+
+};
+
+
+
+#endif // GDATA_HH
diff --git a/Carpet/CarpetLib/src/gf.cc b/Carpet/CarpetLib/src/gf.cc
new file mode 100644
index 000000000..69537d537
--- /dev/null
+++ b/Carpet/CarpetLib/src/gf.cc
@@ -0,0 +1,91 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gf.cc,v 1.21 2004/08/07 19:47:11 schnetter Exp $
+
+#include <assert.h>
+
+#include "cctk.h"
+
+#include "defs.hh"
+
+#include "gf.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<class T,int D>
+gf<T,D>::gf (const int varindex, const operator_type transport_operator,
+ th<D>& t, dh<D>& d,
+ const int tmin, const int tmax, const int prolongation_order_time,
+ const int vectorlength, const int vectorindex,
+ gf* const vectorleader)
+ : ggf<D>(varindex, transport_operator,
+ t, d, tmin, tmax, prolongation_order_time,
+ vectorlength, vectorindex, vectorleader)
+{
+ // this->recompose ();
+ this->recompose_crop ();
+ for (int rl=0; rl<this->h.reflevels(); ++rl) {
+ this->recompose_allocate (rl);
+#if 0
+ for (comm_state<D> state; !state.done(); state.step()) {
+ this->recompose_fill (state, rl, false);
+ }
+#endif
+ this->recompose_free (rl);
+#if 0
+ for (comm_state<D> state; !state.done(); state.step()) {
+ this->recompose_bnd_prolongate (state, rl, false);
+ }
+ for (comm_state<D> state; !state.done(); state.step()) {
+ this->recompose_sync (state, rl, false);
+ }
+#endif
+ } // for rl
+}
+
+// Destructors
+template<class T,int D>
+gf<T,D>::~gf () { }
+
+
+
+// Access to the data
+template<class T,int D>
+const data<T,D>* gf<T,D>::operator() (int tl, int rl, int c, int ml) const {
+ assert (tl>=this->tmin && tl<=this->tmax);
+ assert (rl>=0 && rl<this->h.reflevels());
+ assert (c>=0 && c<this->h.components(rl));
+ assert (ml>=0 && ml<this->h.mglevels(rl,c));
+ return (const data<T,D>*)this->storage.at(tl-this->tmin).at(rl).at(c).at(ml);
+}
+
+template<class T,int D>
+data<T,D>* gf<T,D>::operator() (int tl, int rl, int c, int ml) {
+ assert (tl>=this->tmin && tl<=this->tmax);
+ assert (rl>=0 && rl<this->h.reflevels());
+ assert (c>=0 && c<this->h.components(rl));
+ assert (ml>=0 && ml<this->h.mglevels(rl,c));
+ return (data<T,D>*)this->storage.at(tl-this->tmin).at(rl).at(c).at(ml);
+}
+
+
+
+// Output
+template<class T,int D>
+ostream& gf<T,D>::output (ostream& os) const {
+ T Tdummy;
+ os << "gf<" << typestring(Tdummy) << "," << D << ">:"
+ << this->varindex << "[" << CCTK_VarName(this->varindex) << "],"
+ << "dt=[" << this->tmin << ":" << this->tmax<< "]";
+ return os;
+}
+
+
+
+#define INSTANTIATE(T) \
+template class gf<T,3>;
+
+#include "instantiate"
+
+#undef INSTANTIATE
diff --git a/Carpet/CarpetLib/src/gf.hh b/Carpet/CarpetLib/src/gf.hh
new file mode 100644
index 000000000..13fc8107e
--- /dev/null
+++ b/Carpet/CarpetLib/src/gf.hh
@@ -0,0 +1,87 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gf.hh,v 1.12 2004/03/23 12:40:27 schnetter Exp $
+
+#ifndef GF_HH
+#define GF_HH
+
+#include <assert.h>
+#include <math.h>
+
+#include <iostream>
+#include <string>
+
+#include "bbox.hh"
+#include "bboxset.hh"
+#include "data.hh"
+#include "defs.hh"
+#include "dh.hh"
+#include "ggf.hh"
+#include "th.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// A real grid function
+template<class T,int D>
+class gf: public ggf<D> {
+
+ // Types
+ typedef vect<int,D> ivect;
+ typedef bbox<int,D> ibbox;
+ typedef bboxset<int,D> ibset;
+ typedef list<ibbox> iblist;
+ typedef vector<iblist> iblistvect;
+
+ typedef data<T,D>* tdata; // data ...
+ typedef vector<tdata> mdata; // ... for each multigrid level
+ typedef vector<mdata> cdata; // ... for each component
+ typedef vector<cdata> rdata; // ... for each refinement level
+ typedef vector<rdata> fdata; // ... for each time level
+
+public:
+
+ // Constructors
+ gf (const int varindex, const operator_type transport_operator,
+ th<D>& t, dh<D>& d,
+ const int tmin, const int tmax, const int prolongation_order_time,
+ const int vectorlength, const int vectorindex,
+ gf* const vectorleader);
+
+ // Destructors
+ virtual ~gf ();
+
+
+
+ // Helpers
+
+protected:
+
+ virtual gdata<D>* typed_data (int tl, int rl, int c, int ml)
+ {
+ return new data<T,D>(this->varindex, this->transport_operator,
+ this->vectorlength, this->vectorindex,
+ this->vectorleader
+ ? (data<T,D>*)(*this->vectorleader)(tl,rl,c,ml)
+ : NULL);
+ }
+
+
+
+ // Access to the data
+
+public:
+
+ virtual const data<T,D>* operator() (int tl, int rl, int c, int ml) const;
+
+ virtual data<T,D>* operator() (int tl, int rl, int c, int ml);
+
+
+
+ // Output
+ virtual ostream& output (ostream& os) const;
+};
+
+
+
+#endif // GF_HH
diff --git a/Carpet/CarpetLib/src/ggf.cc b/Carpet/CarpetLib/src/ggf.cc
new file mode 100644
index 000000000..c26b22dbc
--- /dev/null
+++ b/Carpet/CarpetLib/src/ggf.cc
@@ -0,0 +1,608 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.cc,v 1.46 2004/09/17 16:37:26 schnetter Exp $
+
+#include <assert.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include <iostream>
+#include <string>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "dh.hh"
+#include "th.hh"
+
+#include "ggf.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<int D>
+ggf<D>::ggf (const int varindex, const operator_type transport_operator,
+ th<D>& t, dh<D>& d,
+ const int tmin, const int tmax,
+ const int prolongation_order_time,
+ const int vectorlength, const int vectorindex,
+ ggf* const vectorleader)
+ : varindex(varindex), transport_operator(transport_operator), t(t),
+ tmin(tmin), tmax(tmax),
+ prolongation_order_time(prolongation_order_time),
+ h(d.h), d(d),
+ storage(tmax-tmin+1),
+ vectorlength(vectorlength), vectorindex(vectorindex),
+ vectorleader(vectorleader)
+{
+ assert (&t.h == &d.h);
+
+ assert (vectorlength >= 1);
+ assert (vectorindex >= 0 && vectorindex < vectorlength);
+ assert ((vectorindex==0 && !vectorleader)
+ || (vectorindex!=0 && vectorleader));
+
+ d.add(this);
+}
+
+// Destructors
+template<int D>
+ggf<D>::~ggf () {
+ d.remove(this);
+}
+
+// Comparison
+template<int D>
+bool ggf<D>::operator== (const ggf<D>& f) const {
+ return this == &f;
+}
+
+
+
+// Modifiers
+template<int D>
+void ggf<D>::recompose_crop ()
+{
+ // Free storage that will not be needed
+ storage.resize(tmax-tmin+1);
+ for (int tl=tmin; tl<=tmax; ++tl) {
+ for (int rl=h.reflevels(); rl<(int)storage.at(tl-tmin).size(); ++rl) {
+ for (int c=0; c<(int)storage.at(tl-tmin).at(rl).size(); ++c) {
+ for (int ml=0; ml<(int)storage.at(tl-tmin).at(rl).at(c).size(); ++ml) {
+ delete storage.at(tl-tmin).at(rl).at(c).at(ml);
+ } // for ml
+ } // for c
+ } // for rl
+ storage.at(tl-tmin).resize(h.reflevels());
+ } // for tl
+}
+
+template<int D>
+void ggf<D>::recompose_allocate (const int rl)
+{
+ // TODO: restructure storage only when needed
+
+ // Retain storage that might be needed
+ oldstorage.resize(tmax-tmin+1);
+ for (int tl=tmin; tl<=tmax; ++tl) {
+ oldstorage.at(tl-tmin).resize(h.reflevels());
+ assert (oldstorage.at(tl-tmin).at(rl).size() == 0);
+ oldstorage.at(tl-tmin).at(rl) = storage.at(tl-tmin).at(rl);
+ storage.at(tl-tmin).at(rl).resize(0);
+ }
+
+ // Resize structure and allocate storage
+ storage.resize(tmax-tmin+1);
+ for (int tl=tmin; tl<=tmax; ++tl) {
+ storage.at(tl-tmin).resize(h.reflevels());
+ storage.at(tl-tmin).at(rl).resize(h.components(rl));
+ for (int c=0; c<h.components(rl); ++c) {
+ storage.at(tl-tmin).at(rl).at(c).resize(h.mglevels(rl,c));
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ storage.at(tl-tmin).at(rl).at(c).at(ml) = typed_data(tl,rl,c,ml);
+ storage.at(tl-tmin).at(rl).at(c).at(ml)->allocate
+ (d.boxes.at(rl).at(c).at(ml).exterior, h.proc(rl,c));
+ } // for ml
+ } // for c
+ } // for tl
+}
+
+template<int D>
+void ggf<D>::recompose_fill (comm_state<D>& state, const int rl,
+ const bool do_prolongate)
+{
+ // Initialise the new storage
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ for (int tl=tmin; tl<=tmax; ++tl) {
+
+ // Find out which regions need to be prolongated
+ // (Copy the exterior because some variables are not prolongated)
+ // TODO: do this once in the dh instead of for each variable here
+ ibset work (d.boxes.at(rl).at(c).at(ml).exterior);
+
+ // Copy from old storage, if possible
+ // TODO: copy only from interior regions?
+ if (rl<(int)oldstorage.at(tl-tmin).size()) {
+ for (int cc=0; cc<(int)oldstorage.at(tl-tmin).at(rl).size(); ++cc) {
+ if (ml<(int)oldstorage.at(tl-tmin).at(rl).at(cc).size()) {
+ // TODO: prefer same processor, etc., see dh.cc
+ ibset ovlp
+ = work & oldstorage.at(tl-tmin).at(rl).at(cc).at(ml)->extent();
+ ovlp.normalize();
+ work -= ovlp;
+ for (typename ibset::const_iterator r=ovlp.begin(); r!=ovlp.end(); ++r) {
+ storage.at(tl-tmin).at(rl).at(c).at(ml)->copy_from
+ (state, oldstorage.at(tl-tmin).at(rl).at(cc).at(ml), *r);
+ }
+ } // if ml
+ } // for cc
+ } // if rl
+
+ if (do_prolongate) {
+ // Initialise from coarser level, if possible
+ if (rl>0) {
+ if (transport_operator != op_none) {
+ const int numtl = prolongation_order_time+1;
+ assert (tmax-tmin+1 >= numtl);
+ vector<int> tls(numtl);
+ vector<CCTK_REAL> times(numtl);
+ for (int i=0; i<numtl; ++i) {
+ tls.at(i) = tmax - i;
+ times.at(i) = t.time(tls.at(i),rl-1,ml);
+ }
+ for (int cc=0; cc<(int)storage.at(tl-tmin).at(rl-1).size(); ++cc) {
+ vector<const gdata<D>*> gsrcs(numtl);
+ for (int i=0; i<numtl; ++i) {
+ gsrcs.at(i)
+ = storage.at(tls.at(i)-tmin).at(rl-1).at(cc).at(ml);
+ assert (gsrcs.at(i)->extent() == gsrcs.at(0)->extent());
+ }
+ const CCTK_REAL time = t.time(tl,rl,ml);
+
+ // TODO: choose larger regions first
+ // TODO: prefer regions from the same processor
+ const iblist& list
+ = d.boxes.at(rl).at(c).at(ml).recv_ref_coarse.at(cc);
+ for (typename iblist::const_iterator iter=list.begin(); iter!=list.end(); ++iter) {
+ ibset ovlp = work & *iter;
+ ovlp.normalize();
+ work -= ovlp;
+ for (typename ibset::const_iterator r=ovlp.begin(); r!=ovlp.end(); ++r) {
+ storage.at(tl-tmin).at(rl).at(c).at(ml)->interpolate_from
+ (state, gsrcs, times, *r, time,
+ d.prolongation_order_space, prolongation_order_time);
+ } // for r
+ } // for iter
+ } // for cc
+ } // if transport_operator
+ } // if rl
+ } // if do_prolongate
+
+ // Note that work need not be empty here; in this case, not
+ // everything could be initialised. This is okay on outer
+ // boundaries.
+ // TODO: check this.
+
+ } // for tl
+ } // for ml
+ } // for c
+}
+
+template<int D>
+void ggf<D>::recompose_free (const int rl)
+{
+ // Delete old storage
+ for (int tl=tmin; tl<=tmax; ++tl) {
+ for (int c=0; c<(int)oldstorage.at(tl-tmin).at(rl).size(); ++c) {
+ for (int ml=0; ml<(int)oldstorage.at(tl-tmin).at(rl).at(c).size(); ++ml) {
+ delete oldstorage.at(tl-tmin).at(rl).at(c).at(ml);
+ } // for ml
+ } // for c
+ oldstorage.at(tl-tmin).at(rl).resize(0);
+ } // for tl
+}
+
+template<int D>
+void ggf<D>::recompose_bnd_prolongate (comm_state<D>& state, const int rl,
+ const bool do_prolongate)
+{
+ if (do_prolongate) {
+ // Set boundaries
+ if (rl>0) {
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ for (int tl=tmin; tl<=tmax; ++tl) {
+
+ // TODO: assert that reflevel 0 boundaries are copied
+ const CCTK_REAL time = t.time(tl,rl,ml);
+ ref_bnd_prolongate (state,tl,rl,c,ml,time);
+
+ } // for tl
+ } // for ml
+ } // for c
+ } // if rl
+ } // if do_prolongate
+}
+
+template<int D>
+void ggf<D>::recompose_sync (comm_state<D>& state, const int rl,
+ const bool do_prolongate)
+{
+ if (do_prolongate) {
+ // Set boundaries
+ for (int c=0; c<h.components(rl); ++c) {
+ for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
+ for (int tl=tmin; tl<=tmax; ++tl) {
+
+ sync (state,tl,rl,c,ml);
+
+ } // for tl
+ } // for ml
+ } // for c
+ } // if do_prolongate
+}
+
+
+
+// Cycle the time levels by rotating the data sets
+template<int D>
+void ggf<D>::cycle (int rl, int c, int ml) {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (c>=0 && c<h.components(rl));
+ assert (ml>=0 && ml<h.mglevels(rl,c));
+ gdata<D>* tmpdata = storage.at(tmin-tmin).at(rl).at(c).at(ml);
+ for (int tl=tmin; tl<=tmax-1; ++tl) {
+ storage.at(tl-tmin).at(rl).at(c).at(ml) = storage.at(tl+1-tmin).at(rl).at(c).at(ml);
+ }
+ storage.at(tmax-tmin).at(rl).at(c).at(ml) = tmpdata;
+}
+
+// Flip the time levels by exchanging the data sets
+template<int D>
+void ggf<D>::flip (int rl, int c, int ml) {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (c>=0 && c<h.components(rl));
+ assert (ml>=0 && ml<h.mglevels(rl,c));
+ for (int t=0; t<(tmax-tmin)/2; ++t) {
+ const int tl1 = tmin + t;
+ const int tl2 = tmax - t;
+ assert (tl1 < tl2);
+ gdata<D>* tmpdata = storage.at(tl1-tmin).at(rl).at(c).at(ml);
+ storage.at(tl1-tmin).at(rl).at(c).at(ml) = storage.at(tl2-tmin).at(rl).at(c).at(ml);
+ storage.at(tl2-tmin).at(rl).at(c).at(ml) = tmpdata;
+ }
+}
+
+
+
+// Operations
+
+// Copy a region
+template<int D>
+void ggf<D>::copycat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const ibbox dh<D>::dboxes::* recv_box,
+ int tl2, int rl2, int ml2,
+ const ibbox dh<D>::dboxes::* send_box)
+{
+ assert (tl1>=tmin && tl1<=tmax);
+ assert (rl1>=0 && rl1<h.reflevels());
+ assert (c1>=0 && c1<h.components(rl1));
+ assert (ml1>=0 && ml1<h.mglevels(rl1,c1));
+ assert (tl2>=tmin && tl2<=tmax);
+ assert (rl2>=0 && rl2<h.reflevels());
+ const int c2=c1;
+ assert (ml2<h.mglevels(rl2,c2));
+ const ibbox recv = d.boxes.at(rl1).at(c1).at(ml1).*recv_box;
+ const ibbox send = d.boxes.at(rl2).at(c2).at(ml2).*send_box;
+ assert (all(recv.shape()==send.shape()));
+ // copy the content
+ assert (recv==send);
+ storage.at(tl1-tmin).at(rl1).at(c1).at(ml1)->copy_from
+ (state, storage.at(tl2-tmin).at(rl2).at(c2).at(ml2), recv);
+}
+
+// Copy regions
+template<int D>
+void ggf<D>::copycat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblist dh<D>::dboxes::* recv_list,
+ int tl2, int rl2, int ml2,
+ const iblist dh<D>::dboxes::* send_list)
+{
+ assert (tl1>=tmin && tl1<=tmax);
+ assert (rl1>=0 && rl1<h.reflevels());
+ assert (c1>=0 && c1<h.components(rl1));
+ assert (ml1>=0 && ml1<h.mglevels(rl1,c1));
+ assert (tl2>=tmin && tl2<=tmax);
+ assert (rl2>=0 && rl2<h.reflevels());
+ const int c2=c1;
+ assert (ml2<h.mglevels(rl2,c2));
+ const iblist recv = d.boxes.at(rl1).at(c1).at(ml1).*recv_list;
+ const iblist send = d.boxes.at(rl2).at(c2).at(ml2).*send_list;
+ assert (recv.size()==send.size());
+ // walk all boxes
+ for (typename iblist::const_iterator r=recv.begin(), s=send.begin();
+ r!=recv.end(); ++r, ++s) {
+ // (use the send boxes for communication)
+ // copy the content
+ storage.at(tl1-tmin).at(rl1).at(c1).at(ml1)->copy_from
+ (state, storage.at(tl2-tmin).at(rl2).at(c2).at(ml2), *r);
+ }
+}
+
+// Copy regions
+template<int D>
+void ggf<D>::copycat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblistvect dh<D>::dboxes::* recv_listvect,
+ int tl2, int rl2, int ml2,
+ const iblistvect dh<D>::dboxes::* send_listvect)
+{
+ assert (tl1>=tmin && tl1<=tmax);
+ assert (rl1>=0 && rl1<h.reflevels());
+ assert (c1>=0 && c1<h.components(rl1));
+ assert (ml1>=0 && ml1<h.mglevels(rl1,c1));
+ assert (tl2>=tmin && tl2<=tmax);
+ assert (rl2>=0 && rl2<h.reflevels());
+ // walk all components
+ for (int c2=0; c2<h.components(rl2); ++c2) {
+ assert (ml2<h.mglevels(rl2,c2));
+ const iblist recv = (d.boxes.at(rl1).at(c1).at(ml1).*recv_listvect).at(c2);
+ const iblist send = (d.boxes.at(rl2).at(c2).at(ml2).*send_listvect).at(c1);
+ assert (recv.size()==send.size());
+ // walk all boxes
+ for (typename iblist::const_iterator r=recv.begin(), s=send.begin();
+ r!=recv.end(); ++r, ++s) {
+ // (use the send boxes for communication)
+ // copy the content
+ storage.at(tl1-tmin).at(rl1).at(c1).at(ml1)->copy_from
+ (state, storage.at(tl2-tmin).at(rl2).at(c2).at(ml2), *r);
+ }
+ }
+}
+
+// Interpolate a region
+template<int D>
+void ggf<D>::intercat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const ibbox dh<D>::dboxes::* recv_list,
+ const vector<int> tl2s, int rl2, int ml2,
+ const ibbox dh<D>::dboxes::* send_list,
+ CCTK_REAL time)
+{
+ assert (tl1>=tmin && tl1<=tmax);
+ assert (rl1>=0 && rl1<h.reflevels());
+ assert (c1>=0 && c1<h.components(rl1));
+ assert (ml1>=0 && ml1<h.mglevels(rl1,c1));
+ for (int i=0; i<(int)tl2s.size(); ++i) {
+ assert (tl2s.at(i)>=tmin && tl2s.at(i)<=tmax);
+ }
+ assert (rl2>=0 && rl2<h.reflevels());
+ const int c2=c1;
+ assert (ml2>=0 && ml2<h.mglevels(rl2,c2));
+
+ vector<const gdata<D>*> gsrcs(tl2s.size());
+ vector<CCTK_REAL> times(tl2s.size());
+ for (int i=0; i<(int)gsrcs.size(); ++i) {
+ assert (rl2<(int)storage.at(tl2s.at(i)-tmin).size());
+ assert (c2<(int)storage.at(tl2s.at(i)-tmin).at(rl2).size());
+ assert (ml2<(int)storage.at(tl2s.at(i)-tmin).at(rl2).at(c2).size());
+ gsrcs.at(i) = storage.at(tl2s.at(i)-tmin).at(rl2).at(c2).at(ml2);
+ times.at(i) = t.time(tl2s.at(i),rl2,ml2);
+ }
+
+ const ibbox recv = d.boxes.at(rl1).at(c1).at(ml1).*recv_list;
+ const ibbox send = d.boxes.at(rl2).at(c2).at(ml2).*send_list;
+ assert (all(recv.shape()==send.shape()));
+ // interpolate the content
+ assert (recv==send);
+ storage.at(tl1-tmin).at(rl1).at(c1).at(ml1)->interpolate_from
+ (state, gsrcs, times, recv, time,
+ d.prolongation_order_space, prolongation_order_time);
+}
+
+// Interpolate regions
+template<int D>
+void ggf<D>::intercat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblist dh<D>::dboxes::* recv_list,
+ const vector<int> tl2s, int rl2, int ml2,
+ const iblist dh<D>::dboxes::* send_list,
+ const CCTK_REAL time)
+{
+ assert (tl1>=tmin && tl1<=tmax);
+ assert (rl1>=0 && rl1<h.reflevels());
+ assert (c1>=0 && c1<h.components(rl1));
+ assert (ml1>=0 && ml1<h.mglevels(rl1,c1));
+ for (int i=0; i<(int)tl2s.size(); ++i) {
+ assert (tl2s.at(i)>=tmin && tl2s.at(i)<=tmax);
+ }
+ assert (rl2>=0 && rl2<h.reflevels());
+ const int c2=c1;
+ assert (ml2>=0 && ml2<h.mglevels(rl2,c2));
+
+ vector<const gdata<D>*> gsrcs(tl2s.size());
+ vector<CCTK_REAL> times(tl2s.size());
+ for (int i=0; i<(int)gsrcs.size(); ++i) {
+ assert (rl2<(int)storage.at(tl2s.at(i)-tmin).size());
+ assert (c2<(int)storage.at(tl2s.at(i)-tmin).at(rl2).size());
+ assert (ml2<(int)storage.at(tl2s.at(i)-tmin).at(rl2).at(c2).size());
+ gsrcs.at(i) = storage.at(tl2s.at(i)-tmin).at(rl2).at(c2).at(ml2);
+ times.at(i) = t.time(tl2s.at(i),rl2,ml2);
+ }
+
+ const iblist recv = d.boxes.at(rl1).at(c1).at(ml1).*recv_list;
+ const iblist send = d.boxes.at(rl2).at(c2).at(ml2).*send_list;
+ assert (recv.size()==send.size());
+ // walk all boxes
+ for (typename iblist::const_iterator r=recv.begin(), s=send.begin();
+ r!=recv.end(); ++r, ++s) {
+ // (use the send boxes for communication)
+ // interpolate the content
+ storage.at(tl1-tmin).at(rl1).at(c1).at(ml1)->interpolate_from
+ (state, gsrcs, times, *r, time,
+ d.prolongation_order_space, prolongation_order_time);
+ }
+}
+
+// Interpolate regions
+template<int D>
+void ggf<D>::intercat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblistvect dh<D>::dboxes::* recv_listvect,
+ const vector<int> tl2s, int rl2, int ml2,
+ const iblistvect dh<D>::dboxes::* send_listvect,
+ const CCTK_REAL time)
+{
+ assert (tl1>=tmin && tl1<=tmax);
+ assert (rl1>=0 && rl1<h.reflevels());
+ assert (c1>=0 && c1<h.components(rl1));
+ assert (ml1>=0 && ml1<h.mglevels(rl1,c1));
+ for (int i=0; i<(int)tl2s.size(); ++i) {
+ assert (tl2s.at(i)>=tmin && tl2s.at(i)<=tmax);
+ }
+ assert (rl2>=0 && rl2<h.reflevels());
+ // walk all components
+ for (int c2=0; c2<h.components(rl2); ++c2) {
+ assert (ml2>=0 && ml2<h.mglevels(rl2,c2));
+
+ vector<const gdata<D>*> gsrcs(tl2s.size());
+ vector<CCTK_REAL> times(tl2s.size());
+ for (int i=0; i<(int)gsrcs.size(); ++i) {
+ assert (rl2<(int)storage.at(tl2s.at(i)-tmin).size());
+ assert (c2<(int)storage.at(tl2s.at(i)-tmin).at(rl2).size());
+ assert (ml2<(int)storage.at(tl2s.at(i)-tmin).at(rl2).at(c2).size());
+ gsrcs.at(i) = storage.at(tl2s.at(i)-tmin).at(rl2).at(c2).at(ml2);
+ times.at(i) = t.time(tl2s.at(i),rl2,ml2);
+ }
+
+ const iblist recv = (d.boxes.at(rl1).at(c1).at(ml1).*recv_listvect).at(c2);
+ const iblist send = (d.boxes.at(rl2).at(c2).at(ml2).*send_listvect).at(c1);
+ assert (recv.size()==send.size());
+ // walk all boxes
+ for (typename iblist::const_iterator r=recv.begin(), s=send.begin();
+ r!=recv.end(); ++r, ++s) {
+ // (use the send boxes for communication)
+ // interpolate the content
+ storage.at(tl1-tmin).at(rl1).at(c1).at(ml1)->interpolate_from
+ (state, gsrcs, times, *r, time,
+ d.prolongation_order_space, prolongation_order_time);
+ }
+ }
+}
+
+
+
+// Copy a component from the next time level
+template<int D>
+void ggf<D>::copy (comm_state<D>& state, int tl, int rl, int c, int ml)
+{
+ // Copy
+ copycat (state,
+ tl ,rl,c,ml, &dh<D>::dboxes::exterior,
+ tl+1,rl, ml, &dh<D>::dboxes::exterior);
+}
+
+// Synchronise the boundaries a component
+template<int D>
+void ggf<D>::sync (comm_state<D>& state, int tl, int rl, int c, int ml)
+{
+ // Copy
+ copycat (state,
+ tl,rl,c,ml, &dh<D>::dboxes::recv_sync,
+ tl,rl, ml, &dh<D>::dboxes::send_sync);
+}
+
+// Prolongate the boundaries of a component
+template<int D>
+void ggf<D>::ref_bnd_prolongate (comm_state<D>& state,
+ int tl, int rl, int c, int ml,
+ CCTK_REAL time)
+{
+ // Interpolate
+ assert (rl>=1);
+ if (transport_operator == op_none) return;
+ vector<int> tl2s;
+ // Interpolation in time
+ assert (tmax-tmin+1 >= prolongation_order_time+1);
+ tl2s.resize(prolongation_order_time+1);
+ for (int i=0; i<=prolongation_order_time; ++i) tl2s.at(i) = tmax - i;
+ intercat (state,
+ tl ,rl ,c,ml, &dh<D>::dboxes::recv_ref_bnd_coarse,
+ tl2s,rl-1, ml, &dh<D>::dboxes::send_ref_bnd_fine,
+ time);
+}
+
+// Restrict a multigrid level
+template<int D>
+void ggf<D>::mg_restrict (comm_state<D>& state,
+ int tl, int rl, int c, int ml,
+ CCTK_REAL time)
+{
+ // Require same times
+ assert (abs(t.get_time(rl,ml) - t.get_time(rl,ml-1))
+ <= 1.0e-8 * abs(t.get_time(rl,ml)));
+ const vector<int> tl2s(1,tl);
+ intercat (state,
+ tl ,rl,c,ml, &dh<D>::dboxes::recv_mg_coarse,
+ tl2s,rl, ml-1, &dh<D>::dboxes::send_mg_fine,
+ time);
+}
+
+// Prolongate a multigrid level
+template<int D>
+void ggf<D>::mg_prolongate (comm_state<D>& state,
+ int tl, int rl, int c, int ml,
+ CCTK_REAL time)
+{
+ // Require same times
+ assert (abs(t.get_time(rl,ml) - t.get_time(rl,ml+1))
+ <= 1.0e-8 * abs(t.get_time(rl,ml)));
+ const vector<int> tl2s(1,tl);
+ intercat (state,
+ tl ,rl,c,ml, &dh<D>::dboxes::recv_mg_coarse,
+ tl2s,rl, ml+1, &dh<D>::dboxes::send_mg_fine,
+ time);
+}
+
+// Restrict a refinement level
+template<int D>
+void ggf<D>::ref_restrict (comm_state<D>& state,
+ int tl, int rl, int c, int ml,
+ CCTK_REAL time)
+{
+ // Require same times
+ assert (abs(t.get_time(rl,ml) - t.get_time(rl+1,ml))
+ <= 1.0e-8 * abs(t.get_time(rl,ml)));
+ if (transport_operator == op_none) return;
+ const vector<int> tl2s(1,tl);
+ intercat (state,
+ tl ,rl ,c,ml, &dh<D>::dboxes::recv_ref_fine,
+ tl2s,rl+1, ml, &dh<D>::dboxes::send_ref_coarse,
+ time);
+}
+
+// Prolongate a refinement level
+template<int D>
+void ggf<D>::ref_prolongate (comm_state<D>& state,
+ int tl, int rl, int c, int ml,
+ CCTK_REAL time)
+{
+ assert (rl>=1);
+ if (transport_operator == op_none) return;
+ vector<int> tl2s;
+ // Interpolation in time
+ assert (tmax-tmin+1 >= prolongation_order_time+1);
+ tl2s.resize(prolongation_order_time+1);
+ for (int i=0; i<=prolongation_order_time; ++i) tl2s.at(i) = tmax - i;
+ intercat (state,
+ tl ,rl ,c,ml, &dh<D>::dboxes::recv_ref_coarse,
+ tl2s,rl-1, ml, &dh<D>::dboxes::send_ref_fine,
+ time);
+}
+
+
+
+template class ggf<3>;
diff --git a/Carpet/CarpetLib/src/ggf.hh b/Carpet/CarpetLib/src/ggf.hh
new file mode 100644
index 000000000..b6a551cf3
--- /dev/null
+++ b/Carpet/CarpetLib/src/ggf.hh
@@ -0,0 +1,225 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/ggf.hh,v 1.25 2004/08/07 19:47:11 schnetter Exp $
+
+#ifndef GGF_HH
+#define GGF_HH
+
+#include <assert.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "dh.hh"
+#include "gdata.hh"
+#include "gh.hh"
+#include "th.hh"
+
+using namespace std;
+
+
+
+// Forward declaration
+template<int D> class ggf;
+
+// Output
+template<int D>
+ostream& operator<< (ostream& os, const ggf<D>& f);
+
+
+
+// A generic grid function without type information
+template<int D>
+class ggf {
+
+ // Types
+
+ typedef vect<int,D> ivect;
+ typedef bbox<int,D> ibbox;
+ typedef bboxset<int,D> ibset;
+ typedef list<ibbox> iblist;
+ typedef vector<iblist> iblistvect;
+
+ typedef gdata<D>* tdata; // data ...
+ typedef vector<tdata> mdata; // ... for each multigrid level
+ typedef vector<mdata> cdata; // ... for each component
+ typedef vector<cdata> rdata; // ... for each refinement level
+ typedef vector<rdata> fdata; // ... for each time level
+
+public: // should be readonly
+
+ // Fields
+ int varindex; // Cactus variable index
+ operator_type transport_operator;
+
+ th<D> &t; // time hierarchy
+ int tmin, tmax; // timelevels
+ int prolongation_order_time; // order of temporal prolongation operator
+
+ gh<D> &h; // grid hierarchy
+ dh<D> &d; // data hierarchy
+
+protected:
+ fdata storage; // storage
+
+public:
+ int vectorlength; // vector length
+ int vectorindex; // index of *this
+ ggf* vectorleader; // first vector element
+
+private:
+ fdata oldstorage;
+
+public:
+
+ // Constructors
+ ggf (const int varindex, const operator_type transport_operator,
+ th<D>& t, dh<D>& d,
+ const int tmin, const int tmax,
+ const int prolongation_order_time,
+ const int vectorlength, const int vectorindex,
+ ggf* const vectorleader);
+
+ // Destructors
+ virtual ~ggf ();
+
+ // Comparison
+ bool operator== (const ggf<D>& f) const;
+
+
+
+ // Modifiers
+ // void recompose ();
+ void recompose_crop ();
+ void recompose_allocate (int rl);
+ void recompose_fill (comm_state<D>& state, int rl, bool do_prolongate);
+ void recompose_free (int rl);
+ void recompose_bnd_prolongate (comm_state<D>& state, int rl, bool do_prolongate);
+ void recompose_sync (comm_state<D>& state, int rl, bool do_prolongate);
+
+ // Cycle the time levels by rotating the data sets
+ void cycle (int rl, int c, int ml);
+
+ // Flip the time levels by exchanging the data sets
+ void flip (int rl, int c, int ml);
+
+
+
+ // Helpers
+
+protected:
+
+ virtual gdata<D>* typed_data (int tl, int rl, int c, int ml) = 0;
+
+
+
+ // Operations
+
+protected:
+
+ // Copy a region
+ void copycat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const ibbox dh<D>::dboxes::* recv_list,
+ int tl2, int rl2, int ml2,
+ const ibbox dh<D>::dboxes::* send_list);
+
+ // Copy regions
+ void copycat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblist dh<D>::dboxes::* recv_list,
+ int tl2, int rl2, int ml2,
+ const iblist dh<D>::dboxes::* send_list);
+
+ // Copy regions
+ void copycat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblistvect dh<D>::dboxes::* recv_listvect,
+ int tl2, int rl2, int ml2,
+ const iblistvect dh<D>::dboxes::* send_listvect);
+
+ // Interpolate a region
+ void intercat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const ibbox dh<D>::dboxes::* recv_list,
+ const vector<int> tl2s, int rl2, int ml2,
+ const ibbox dh<D>::dboxes::* send_list,
+ CCTK_REAL time);
+
+ // Interpolate regions
+ void intercat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblist dh<D>::dboxes::* recv_list,
+ const vector<int> tl2s, int rl2, int ml2,
+ const iblist dh<D>::dboxes::* send_list,
+ CCTK_REAL time);
+
+ // Interpolate regions
+ void intercat (comm_state<D>& state,
+ int tl1, int rl1, int c1, int ml1,
+ const iblistvect dh<D>::dboxes::* recv_listvect,
+ const vector<int> tl2s, int rl2, int ml2,
+ const iblistvect dh<D>::dboxes::* send_listvect,
+ CCTK_REAL time);
+
+
+
+public:
+
+ // The grid boundaries have to be updated after calling mg_restrict,
+ // mg_prolongate, ref_restrict, or ref_prolongate.
+
+ // "Updating" means here that the boundaries have to be
+ // synchronised. They don't need to be prolongated.
+
+ // Copy a component from the next time level
+ void copy (comm_state<D>& state, int tl, int rl, int c, int ml);
+
+ // Synchronise the boundaries of a component
+ void sync (comm_state<D>& state, int tl, int rl, int c, int ml);
+
+ // Prolongate the boundaries of a component
+ void ref_bnd_prolongate (comm_state<D>& state,
+ int tl, int rl, int c, int ml, CCTK_REAL time);
+
+ // Restrict a multigrid level
+ void mg_restrict (comm_state<D>& state,
+ int tl, int rl, int c, int ml, CCTK_REAL time);
+
+ // Prolongate a multigrid level
+ void mg_prolongate (comm_state<D>& state,
+ int tl, int rl, int c, int ml, CCTK_REAL time);
+
+ // Restrict a refinement level
+ void ref_restrict (comm_state<D>& state,
+ int tl, int rl, int c, int ml, CCTK_REAL time);
+
+ // Prolongate a refinement level
+ void ref_prolongate (comm_state<D>& state,
+ int tl, int rl, int c, int ml, CCTK_REAL time);
+
+
+
+ // Access to the data
+ virtual const gdata<D>* operator() (int tl, int rl, int c, int ml) const = 0;
+
+ virtual gdata<D>* operator() (int tl, int rl, int c, int ml) = 0;
+
+
+
+ // Output
+ virtual ostream& output (ostream& os) const = 0;
+};
+
+
+
+template<int D>
+inline ostream& operator<< (ostream& os, const ggf<D>& f) {
+ return f.output(os);
+}
+
+
+
+#endif // GGF_HH
diff --git a/Carpet/CarpetLib/src/gh.cc b/Carpet/CarpetLib/src/gh.cc
new file mode 100644
index 000000000..32df39bf0
--- /dev/null
+++ b/Carpet/CarpetLib/src/gh.cc
@@ -0,0 +1,240 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.cc,v 1.29 2004/08/07 19:47:11 schnetter Exp $
+
+#include <assert.h>
+#include <stdlib.h>
+#include <iostream>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "defs.hh"
+#include "dh.hh"
+#include "th.hh"
+
+#include "gh.hh"
+
+using namespace std;
+
+
+
+ // Constructors
+template<int D>
+gh<D>::gh (const int reffact, const centering refcent,
+ const int mgfact, const centering mgcent,
+ const ibbox baseextent)
+ : reffact(reffact), refcent(refcent),
+ mgfact(mgfact), mgcent(mgcent),
+ baseextent(baseextent)
+{
+}
+
+// Destructors
+template<int D>
+gh<D>::~gh () { }
+
+// Modifiers
+template<int D>
+void gh<D>::recompose (const rexts& exts,
+ const rbnds& outer_bounds,
+ const rprocs& procs,
+ const bool do_prolongate)
+{
+ DECLARE_CCTK_PARAMETERS;
+
+ extents = exts;
+ outer_boundaries = outer_bounds;
+ processors = procs;
+
+ // Consistency checks
+
+ // nota bene: there might be 0 refinement levels.
+
+ // Check processor number consistency
+ for (int rl=0; rl<reflevels(); ++rl) {
+ assert (processors.size() == extents.size());
+ assert (outer_boundaries.size() == extents.size());
+ for (int c=0; c<components(rl); ++c) {
+ assert (processors.at(rl).size() == extents.at(rl).size());
+ assert (outer_boundaries.at(rl).size() == extents.at(rl).size());
+ }
+ }
+
+ // Check multigrid consistency
+ for (int rl=0; rl<reflevels(); ++rl) {
+ for (int c=0; c<components(rl); ++c) {
+ assert (mglevels(rl,c)>0);
+ for (int ml=1; ml<mglevels(rl,c); ++ml) {
+ assert (all(extents.at(rl).at(c).at(ml).stride()
+ == ivect(mgfact) * extents.at(rl).at(c).at(ml-1).stride()));
+ // TODO: put the check back in, taking outer boundaries into
+ // account
+#if 0
+ assert (extents.at(rl).at(c).at(ml)
+ .contracted_for(extents.at(rl).at(c).at(ml-1))
+ .is_contained_in(extents.at(rl).at(c).at(ml-1)));
+#endif
+ }
+ }
+ }
+
+ // Check component consistency
+ for (int rl=0; rl<reflevels(); ++rl) {
+ assert (components(rl)>0);
+ for (int c=0; c<components(rl); ++c) {
+ for (int ml=0; ml<mglevels(rl,c); ++ml) {
+ assert (all(extents.at(rl).at(c).at(ml).stride()
+ == extents.at(rl).at(0).at(ml).stride()));
+ assert (extents.at(rl).at(c).at(ml).is_aligned_with(extents.at(rl).at(0).at(ml)));
+ for (int cc=c+1; cc<components(rl); ++cc) {
+ assert ((extents.at(rl).at(c).at(ml) & extents.at(rl).at(cc).at(ml)).empty());
+ }
+ }
+ }
+ }
+
+ // Check base grid extent
+ if (reflevels()>0) {
+ for (int c=0; c<components(0); ++c) {
+ // TODO: put the check back in, taking outer boundaries into
+ // account
+#if 0
+ assert (extents.at(0).at(c).at(0).is_contained_in(baseextent));
+#endif
+ }
+ }
+
+ // Check refinement levels
+ for (int rl=1; rl<reflevels(); ++rl) {
+ assert (all(extents.at(rl-1).at(0).at(0).stride()
+ == ivect(reffact) * extents.at(rl).at(0).at(0).stride()));
+ // Check contained-ness:
+ // first take all coarse grids ...
+ bboxset<int,D> all;
+ for (int c=0; c<components(rl-1); ++c) {
+ all |= extents.at(rl-1).at(c).at(0);
+ }
+ // ... remember their size ...
+ const int sz = all.size();
+ // ... then add the coarsified fine grids ...
+ for (int c=0; c<components(rl); ++c) {
+ all |= extents.at(rl).at(c).at(0).contracted_for(extents.at(rl-1).at(0).at(0));
+ }
+ // ... and then check the sizes:
+ assert (all.size() == sz);
+ }
+
+ // Calculate base extents of all levels
+ bases.resize(reflevels());
+ for (int rl=0; rl<reflevels(); ++rl) {
+ if (components(rl)==0) {
+ bases.at(rl).resize(0);
+ } else {
+ bases.at(rl).resize(mglevels(rl,0));
+ for (int ml=0; ml<mglevels(rl,0); ++ml) {
+ bases.at(rl).at(ml) = ibbox();
+ for (int c=0; c<components(rl); ++c) {
+ bases.at(rl).at(ml)
+ = bases.at(rl).at(ml).expanded_containing(extents.at(rl).at(c).at(ml));
+ }
+ }
+ }
+ }
+
+ if (output_bboxes) {
+ for (int rl=0; rl<reflevels(); ++rl) {
+ for (int c=0; c<components(rl); ++c) {
+ for (int ml=0; ml<mglevels(rl,c); ++ml) {
+ cout << endl;
+ cout << "gh bboxes:" << endl;
+ cout << "rl=" << rl << " c=" << c << " ml=" << ml << endl;
+ cout << "extent=" << extents.at(rl).at(c).at(ml) << endl;
+ cout << "outer_boundary=" << outer_boundaries.at(rl).at(c) << endl;
+ cout << "processor=" << processors.at(rl).at(c) << endl;
+ }
+ }
+ }
+ for (int rl=0; rl<reflevels(); ++rl) {
+ if (components(rl)>0) {
+ for (int ml=0; ml<mglevels(rl,0); ++ml) {
+ cout << endl;
+ cout << "gh bases:" << endl;
+ cout << "rl=" << rl << " ml=" << ml << endl;
+ cout << "base=" << bases.at(rl).at(ml) << endl;
+ }
+ }
+ }
+ }
+
+ // Recompose the other hierarchies
+
+ for (typename list<th<D>*>::iterator t=ths.begin(); t!=ths.end(); ++t) {
+ (*t)->recompose();
+ }
+
+ for (typename list<dh<D>*>::iterator d=dhs.begin(); d!=dhs.end(); ++d) {
+ (*d)->recompose (do_prolongate);
+ }
+}
+
+
+
+// Accessors
+template<int D>
+int gh<D>::local_components (const int rl) const {
+ int lc = 0;
+ for (int c=0; c<components(rl); ++c) {
+ if (is_local(rl,c)) ++lc;
+ }
+ return lc;
+}
+
+
+
+// Time hierarchy management
+template<int D>
+void gh<D>::add (th<D>* t) {
+ ths.push_back(t);
+}
+
+template<int D>
+void gh<D>::remove (th<D>* t) {
+ ths.remove(t);
+}
+
+
+
+// Data hierarchy management
+template<int D>
+void gh<D>::add (dh<D>* d) {
+ dhs.push_back(d);
+}
+
+template<int D>
+void gh<D>::remove (dh<D>* d) {
+ dhs.remove(d);
+}
+
+
+
+template<int D>
+ostream& gh<D>::output (ostream& os) const {
+ os << "gh<" << D << ">:"
+ << "reffactor=" << reffact << ",refcentering=" << refcent << ","
+ << "mgfactor=" << mgfact << ",mgcentering=" << mgcent << ","
+ << "extents=" << extents << ","
+ << "outer_boundaries=" << outer_boundaries << ","
+ << "processors=" << processors << ","
+ << "dhs={";
+ int cnt=0;
+ for (typename list<dh<D>*>::const_iterator d = dhs.begin();
+ d != dhs.end(); ++d) {
+ if (cnt++) os << ",";
+ (*d)->output(os);
+ }
+ os << "}";
+ return os;
+}
+
+
+
+template class gh<3>;
diff --git a/Carpet/CarpetLib/src/gh.hh b/Carpet/CarpetLib/src/gh.hh
new file mode 100644
index 000000000..edf149000
--- /dev/null
+++ b/Carpet/CarpetLib/src/gh.hh
@@ -0,0 +1,142 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.18 2004/08/07 19:47:11 schnetter Exp $
+
+#ifndef GH_HH
+#define GH_HH
+
+#include <assert.h>
+
+#include <iostream>
+#include <list>
+#include <vector>
+
+#include "bbox.hh"
+#include "defs.hh"
+#include "dist.hh"
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// Forward declaration
+template<int D> class dh;
+template<int D> class th;
+template<int D> class gh;
+
+// Output
+template<int D>
+ostream& operator<< (ostream& os, const gh<D>& h);
+
+
+
+// A refinement hierarchy, where higher levels are finer than the base
+// level. The extents do not include ghost zones.
+template<int D>
+class gh {
+
+public:
+
+ // Types
+ typedef vect<int,D> ivect;
+ typedef bbox<int,D> ibbox;
+
+ typedef vect<vect<bool,2>,D> bvect;
+
+ typedef vector<ibbox> mexts; // ... for each multigrid level
+ typedef vector<mexts> cexts; // ... for each component
+ typedef vector<cexts> rexts; // ... for each refinement level
+
+ typedef vector<bvect> cbnds; // ... for each component
+ typedef vector<cbnds> rbnds; // ... for each refinement level
+
+ typedef vector<int> cprocs; // ... for each component
+ typedef vector<cprocs> rprocs; // ... for each refinement level
+
+public: // should be readonly
+
+ // Fields
+ int reffact; // refinement factor
+ centering refcent; // vertex or cell centered
+
+ int mgfact; // default multigrid factor
+ centering mgcent; // default (vertex or cell centered)
+
+ list<th<D>*> ths; // list of all time hierarchies
+
+ ibbox baseextent;
+ vector<vector<ibbox> > bases; // [rl][ml]
+
+ // TODO: invent structure for this
+ rexts extents; // extents of all grids
+ rbnds outer_boundaries; // boundary descriptions of all grids
+ rprocs processors; // processor numbers of all grids
+
+ list<dh<D>*> dhs; // list of all data hierarchies
+
+public:
+
+ // Constructors
+ gh (const int reffact, const centering refcent,
+ const int mgfact, const centering mgcent,
+ const ibbox baseextent);
+
+ // Destructors
+ virtual ~gh ();
+
+ // Modifiers
+ void recompose (const rexts& exts, const rbnds& outer_bounds,
+ const rprocs& procs,
+ const bool do_prolongate);
+
+ // Accessors
+ int reflevels () const {
+ return (int)extents.size();
+ }
+
+ int components (const int rl) const {
+ return (int)extents.at(rl).size();
+ }
+
+ int mglevels (const int rl, const int c) const {
+ return (int)extents.at(rl).at(c).size();
+ }
+
+ bvect outer_boundary (const int rl, const int c) const {
+ return outer_boundaries.at(rl).at(c);
+ }
+
+ int proc (const int rl, const int c) const {
+ return processors.at(rl).at(c);
+ }
+
+ bool is_local (const int rl, const int c) const {
+ int rank;
+ MPI_Comm_rank (dist::comm, &rank);
+ return proc(rl,c) == rank;
+ }
+
+ int local_components (const int rl) const;
+
+ // Time hierarchy management
+ void add (th<D>* t);
+ void remove (th<D>* t);
+
+ // Data hierarchy management
+ void add (dh<D>* d);
+ void remove (dh<D>* d);
+
+ // Output
+ virtual ostream& output (ostream& os) const;
+};
+
+
+
+template<int D>
+inline ostream& operator<< (ostream& os, const gh<D>& h) {
+ h.output(os);
+ return os;
+}
+
+
+
+#endif // GH_HH
diff --git a/Carpet/CarpetLib/src/instantiate b/Carpet/CarpetLib/src/instantiate
new file mode 100644
index 000000000..1f4e2d6d7
--- /dev/null
+++ b/Carpet/CarpetLib/src/instantiate
@@ -0,0 +1,178 @@
+// Instantiate templates for all available types -*-C++-*-
+// (C) 2001 Erik Schnetter <schnetter@uni-tuebingen.de>
+
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/instantiate,v 1.10 2004/03/01 21:35:13 schnetter Exp $
+
+// Usage:
+// Define the macro INSTANTIATE(T) to instantiate for the type T,
+// then include this file,
+// then undefine the macro INSTANTIATE.
+
+
+
+// Decide which types to instantiate
+
+#ifdef CARPET_ALL
+# undef CARPET_BYTE
+# undef CARPET_INT
+# undef CARPET_REAL
+# undef CARPET_COMPLEX
+# define CARPET_BYTE
+# define CARPET_INT
+# define CARPET_REAL
+# define CARPET_COMPLEX
+#endif
+
+#ifdef CARPET_ALL_INT
+# undef CARPET_INT1
+# undef CARPET_INT2
+# undef CARPET_INT4
+# undef CARPET_INT8
+# define CARPET_INT1
+# define CARPET_INT2
+# define CARPET_INT4
+# define CARPET_INT8
+#endif
+
+#ifdef CARPET_ALL_REAL
+# undef CARPET_REAL4
+# undef CARPET_REAL8
+# undef CARPET_REAL16
+# define CARPET_REAL4
+# define CARPET_REAL8
+# define CARPET_REAL16
+#endif
+
+#ifdef CARPET_ALL_COMPLEX
+# undef CARPET_COMPLEX8
+# undef CARPET_COMPLEX16
+# undef CARPET_COMPLEX32
+# define CARPET_COMPLEX8
+# define CARPET_COMPLEX16
+# define CARPET_COMPLEX32
+#endif
+
+#if !defined(CARPET_BYTE) && !defined(CARPET_INT) && !defined(CARPET_INT1) && !defined(CARPET_INT2) && !defined(CARPET_INT4) && !defined(CARPET_INT8) && !defined(CARPET_REAL) && !defined(CARPET_REAL4) && !defined(CARPET_REAL8) && !defined(CARPET_REAL16) && !defined(CARPET_COMPLEX) && !defined(CARPET_COMPLEX8) && !defined(CARPET_COMPLEX16) && !defined(CARPET_COMPLEX32)
+// Assume the user just wants INT, REAL, and COMPLEX
+# undef CARPET_INT
+# define CARPET_INT
+# undef CARPET_REAL
+# define CARPET_REAL
+# undef CARPET_COMPLEX
+# define CARPET_COMPLEX
+#endif
+
+#ifdef CARPET_INT
+# ifdef CCTK_INTEGER_PRECISION_1
+# undef CARPET_INT1
+# define CARPET_INT1
+# endif
+# ifdef CCTK_INTEGER_PRECISION_2
+# undef CARPET_INT2
+# define CARPET_INT2
+# endif
+# ifdef CCTK_INTEGER_PRECISION_4
+# undef CARPET_INT4
+# define CARPET_INT4
+# endif
+# ifdef CCTK_INTEGER_PRECISION_8
+# undef CARPET_INT8
+# define CARPET_INT8
+# endif
+#endif
+#ifdef CARPET_REAL
+# ifdef CCTK_REAL_PRECISION_4
+# undef CARPET_REAL4
+# define CARPET_REAL4
+# endif
+# ifdef CCTK_REAL_PRECISION_8
+# undef CARPET_REAL8
+# define CARPET_REAL8
+# endif
+# ifdef CCTK_REAL_PRECISION_16
+# undef CARPET_REAL16
+# define CARPET_REAL16
+# endif
+#endif
+#ifdef CARPET_COMPLEX
+# ifdef CCTK_REAL_PRECISION_4
+# undef CARPET_COMPLEX8
+# define CARPET_COMPLEX8
+# endif
+# ifdef CCTK_REAL_PRECISION_8
+# undef CARPET_COMPLEX16
+# define CARPET_COMPLEX16
+# endif
+# ifdef CCTK_REAL_PRECISION_16
+# undef CARPET_COMPLEX32
+# define CARPET_COMPLEX32
+# endif
+#endif
+
+
+
+// // Check
+// #if !defined(CARPET_BYTE) && !defined(CARPET_INT1) && !defined(CARPET_INT2) && !defined(CARPET_INT4) && !defined(CARPET_INT8) && !defined(CARPET_REAL4) && !defined(CARPET_REAL8) && !defined(CARPET_REAL16) && !defined(CARPET_COMPLEX8) && !defined(CARPET_COMPLEX16) && !defined(CARPET_COMPLEX32)
+// # error "You have not defined which grid function types to instantiate."
+// #endif
+
+
+
+// Instantiate the desired types
+
+#ifdef CARPET_BYTE
+INSTANTIATE(CCTK_BYTE)
+#endif
+
+#ifdef CARPET_INT1
+# ifdef CCTK_INT1
+INSTANTIATE(CCTK_INT1)
+# endif
+#endif
+#ifdef CARPET_INT2
+# ifdef CCTK_INT2
+INSTANTIATE(CCTK_INT2)
+# endif
+#endif
+#ifdef CARPET_INT4
+# ifdef CCTK_INT4
+INSTANTIATE(CCTK_INT4)
+# endif
+#endif
+#ifdef CARPET_INT8
+# ifdef CCTK_INT8
+INSTANTIATE(CCTK_INT8)
+# endif
+#endif
+
+#ifdef CARPET_REAL4
+# ifdef CCTK_REAL4
+INSTANTIATE(CCTK_REAL4)
+# endif
+#endif
+#ifdef CARPET_REAL8
+# ifdef CCTK_REAL8
+INSTANTIATE(CCTK_REAL8)
+# endif
+#endif
+#ifdef CARPET_REAL16
+# ifdef CCTK_REAL16
+INSTANTIATE(CCTK_REAL16)
+# endif
+#endif
+
+#ifdef CARPET_COMPLEX8
+# ifdef CCTK_REAL4
+INSTANTIATE(CCTK_COMPLEX8)
+# endif
+#endif
+#ifdef CARPET_COMPLEX16
+# ifdef CCTK_REAL8
+INSTANTIATE(CCTK_COMPLEX16)
+# endif
+#endif
+#ifdef CARPET_COMPLEX32
+# ifdef CCTK_REAL16
+INSTANTIATE(CCTK_COMPLEX32)
+# endif
+#endif
diff --git a/Carpet/CarpetLib/src/make.code.defn b/Carpet/CarpetLib/src/make.code.defn
new file mode 100644
index 000000000..4bfcaec4f
--- /dev/null
+++ b/Carpet/CarpetLib/src/make.code.defn
@@ -0,0 +1,47 @@
+# Main make.code.defn file for thorn CarpetLib -*-Makefile-*-
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/make.code.defn,v 1.13 2004/03/03 15:30:40 hawke Exp $
+
+# Source files in this directory
+SRCS = bbox.cc \
+ bboxset.cc \
+ data.cc \
+ defs.cc \
+ dh.cc \
+ dist.cc \
+ gdata.cc \
+ gf.cc \
+ ggf.cc \
+ gh.cc \
+ th.cc \
+ vect.cc \
+ checkindex.F77 \
+ copy_3d_complex16.F77 \
+ copy_3d_int4.F77 \
+ copy_3d_real8.F77 \
+ prolongate_3d_real8.F77 \
+ prolongate_3d_real8_rf2.F77 \
+ prolongate_3d_real8_o3.F77 \
+ prolongate_3d_real8_o3_rf2.F77 \
+ prolongate_3d_real8_o5.F77 \
+ prolongate_3d_real8_2tl.F77 \
+ prolongate_3d_real8_2tl_rf2.F77 \
+ prolongate_3d_real8_2tl_o3.F77 \
+ prolongate_3d_real8_2tl_o3_rf2.F77 \
+ prolongate_3d_real8_2tl_o5.F77 \
+ prolongate_3d_real8_3tl.F77 \
+ prolongate_3d_real8_3tl_rf2.F77 \
+ prolongate_3d_real8_3tl_o3.F77 \
+ prolongate_3d_real8_3tl_o3_rf2.F77 \
+ prolongate_3d_real8_3tl_o5.F77 \
+ prolongate_3d_real8_minmod.F77 \
+ prolongate_3d_real8_2tl_minmod.F77 \
+ prolongate_3d_real8_3tl_minmod.F77 \
+ prolongate_3d_real8_eno.F90 \
+ prolongate_3d_real8_2tl_eno.F90 \
+ prolongate_3d_real8_3tl_eno.F90 \
+ restrict_3d_real8.F77 \
+ restrict_3d_real8_rf2.F77
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetLib/src/make.configuration.defn b/Carpet/CarpetLib/src/make.configuration.defn
new file mode 100644
index 000000000..a70db23a6
--- /dev/null
+++ b/Carpet/CarpetLib/src/make.configuration.defn
@@ -0,0 +1,7 @@
+# Main make.configuration.defn file for thorn CarpetLib -*-Makefile-*-
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/make.configuration.defn,v 1.5 2004/04/29 22:15:06 tradke Exp $
+
+# Ensure that MPI is available
+ifeq ($(strip $(HAVE_MPI)), )
+ $(error Configuration error: The Carpet thorns require MPI. Please configure with MPI, or remove the Carpet thorns from the ThornList.)
+endif
diff --git a/Carpet/CarpetLib/src/operators.hh b/Carpet/CarpetLib/src/operators.hh
new file mode 100644
index 000000000..b65ff23cb
--- /dev/null
+++ b/Carpet/CarpetLib/src/operators.hh
@@ -0,0 +1,8 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/operators.hh,v 1.2 2004/03/03 15:30:40 hawke Exp $
+
+#ifndef OPERATORS_HH
+#define OPERATORS_HH
+
+enum operator_type { op_error, op_none, op_Lagrange, op_TVD, op_ENO };
+
+#endif // OPERATORS_HH
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8.F77
new file mode 100644
index 000000000..8eae50332
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8.F77
@@ -0,0 +1,193 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8.F77,v 1.11 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(2), jfac(2), kfac(2)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over fine region
+ dstdiv = one / (dstifac * dstjfac * dstkfac)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk-dstkfac) * (-1)
+ kfac(2) = (fk ) * 1
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj-dstjfac) * (-1)
+ jfac(2) = (fj ) * 1
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi-dstifac) * (-1)
+ ifac(2) = (fi ) * 1
+
+ res = 0
+
+ do kk=1,2
+ do jj=1,2
+ do ii=1,2
+
+ fac = ifac(ii) * jfac(jj) * kfac(kk)
+
+ if (fac.ne.0) then
+ CHKIDX (i0+ii, j0+jj, k0+kk, \
+ srciext,srcjext,srckext, "source")
+ res = res + fac * src(i0+ii, j0+jj, k0+kk)
+ end if
+
+ end do
+ end do
+ end do
+
+c$$$ fac = ifac(1) * jfac(1) * kfac(1)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+1, j0+1, k0+1)
+c$$$
+c$$$ fac = ifac(2) * jfac(1) * kfac(1)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+2, j0+1, k0+1)
+c$$$
+c$$$ fac = ifac(1) * jfac(2) * kfac(1)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+1, j0+2, k0+1)
+c$$$
+c$$$ fac = ifac(2) * jfac(2) * kfac(1)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+2, j0+2, k0+1)
+c$$$
+c$$$ fac = ifac(1) * jfac(1) * kfac(2)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+1, j0+1, k0+2)
+c$$$
+c$$$ fac = ifac(2) * jfac(1) * kfac(2)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+2, j0+1, k0+2)
+c$$$
+c$$$ fac = ifac(1) * jfac(2) * kfac(2)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+1, j0+2, k0+2)
+c$$$
+c$$$ fac = ifac(2) * jfac(2) * kfac(2)
+c$$$ if (fac.ne.0) res = res + fac * src(i0+2, j0+2, k0+2)
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl.F77
new file mode 100644
index 000000000..8fd69178f
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl.F77
@@ -0,0 +1,193 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl.F77,v 1.12 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_2tl (
+ $ src1, t1, src2, t2, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(2), jfac(2), kfac(2)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Linear (first order) interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+
+
+c Loop over fine region
+ dstdiv = one / (dstifac * dstjfac * dstkfac)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk-dstkfac) * (-1)
+ kfac(2) = (fk ) * 1
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj-dstjfac) * (-1)
+ jfac(2) = (fj ) * 1
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi-dstifac) * (-1)
+ ifac(2) = (fi ) * 1
+
+ res = 0
+
+ do kk=1,2
+ do jj=1,2
+ do ii=1,2
+
+ fac = ifac(ii) * jfac(jj) * kfac(kk)
+
+ if (fac.ne.0) then
+ CHKIDX (i0+ii, j0+jj, k0+kk, \
+ srciext,srcjext,srckext, "source")
+ res = res
+ $ + fac * s1fac * src1(i0+ii, j0+jj, k0+kk)
+ $ + fac * s2fac * src2(i0+ii, j0+jj, k0+kk)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_eno.F90 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_eno.F90
new file mode 100644
index 000000000..03a151cdd
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_eno.F90
@@ -0,0 +1,302 @@
+!!$ -*-Fortran-*-
+!!$ $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_eno.F90,v 1.1 2004/03/03 15:30:40 hawke Exp $
+
+#include "cctk.h"
+
+
+!!$ This routine performs "ENO" prolongation. It is intended to be used
+!!$ with GFs that are not expected to be smooth, particularly those
+!!$ that must also obey certain constraints. The obvious example is the
+!!$ density in hydrodynamics, which may be discontinuous yet must be
+!!$ strictly positive.
+!!$
+!!$ To ensure that this prolongation method is used you should add the
+!!$ tag
+!!$
+!!$ tags='Prolongation="ENO"'
+!!$
+!!$ to the interface.ccl on the appropriate group.
+!!$
+!!$ This applies ENO2 type limiting to the slope, checking over the
+!!$ entire coarse grid cell for the least oscillatory quadratic in each
+!!$ direction. If the slope changes sign over the extrema, linear
+!!$ interpolation is used instead.
+!!$
+!!$ The actual eno1d function is defined in the routine
+!!$
+!!$ prolongate_3d_real8_eno.F77
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+end if
+
+subroutine prolongate_3d_real8_2tl_eno (src1, t1, src2, t2, &
+ srciext, srcjext, srckext, dst, t, dstiext, dstjext, dstkext, &
+ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+
+!!$ bbox(:,1) is lower boundary (inclusive)
+!!$ bbox(:,2) is upper boundary (inclusive)
+!!$ bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac
+
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+ CCTK_REAL8, dimension(0:3,0:3) :: tmp1
+ CCTK_REAL8, dimension(0:3) :: tmp2
+ CCTK_REAL8 :: dsttmp1, dsttmp2
+
+ external eno1d
+ CCTK_REAL8 eno1d
+
+ CCTK_REAL8 half, zero
+ parameter (half = 0.5)
+ parameter (zero = 0)
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0 &
+ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3) &
+ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0 &
+ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0 &
+ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+!!$ This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1) &
+ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2) &
+ .or. regbbox(d,1).lt.dstbbox(d,1) &
+ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1 &
+ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1 &
+ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1 &
+ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1 &
+ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1 &
+ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+!!$ Linear (first order) interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+!!$ Loop over fine region
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+
+!!$ Where is the fine grid point w.r.t the coarse grid?
+
+ select case (fi + 10*fj + 100*fk)
+ case (0)
+!!$ On a coarse grid point exactly!
+
+ dsttmp1 = src1(i0+1,j0+1,k0+1)
+ dsttmp2 = src2(i0+1,j0+1,k0+1)
+
+ case (1)
+!!$ Interpolate only in x
+
+ dsttmp1 = eno1d(src1(i0:i0+3,j0+1,k0+1))
+ dsttmp2 = eno1d(src2(i0:i0+3,j0+1,k0+1))
+
+ case (10)
+!!$ Interpolate only in y
+
+ dsttmp1 = eno1d(src1(i0+1,j0:j0+3,k0+1))
+ dsttmp2 = eno1d(src2(i0+1,j0:j0+3,k0+1))
+
+ case (11)
+!!$ Interpolate only in x and y
+
+ do jj = 0, 3
+ tmp2(jj) = eno1d(src1(i0:i0+3,j0+jj,k0+1))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do jj = 0, 3
+ tmp2(jj) = eno1d(src2(i0:i0+3,j0+jj,k0+1))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ case (100)
+!!$ Interpolate only in z
+
+ dsttmp1 = eno1d(src1(i0+1,j0+1,k0:k0+3))
+ dsttmp2 = eno1d(src2(i0+1,j0+1,k0:k0+3))
+
+ case (101)
+!!$ Interpolate only in x and z
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src1(i0:i0+3,j0+1,k0+kk))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src2(i0:i0+3,j0+1,k0+kk))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ case (110)
+!!$ Interpolate only in y and z
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src1(i0+1,j0:j0+3,k0+kk))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src2(i0+1,j0:j0+3,k0+kk))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ case (111)
+!!$ Interpolate in all of x, y, and z
+
+ do jj = 0, 3
+ do kk = 0, 3
+ tmp1(jj,kk) = eno1d(src1(i0:i0+3,j0+jj,k0+kk))
+ end do
+ end do
+ do ii = 0, 3
+ tmp2(ii) = eno1d(tmp1(0:3,ii))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do jj = 0, 3
+ do kk = 0, 3
+ tmp1(jj,kk) = eno1d(src2(i0:i0+3,j0+jj,k0+kk))
+ end do
+ end do
+ do ii = 0, 3
+ tmp2(ii) = eno1d(tmp1(0:3,ii))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ case default
+ call CCTK_WARN(0, "Internal error in ENO prolongation. Should only be used with refinement factor 2!")
+ end select
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ s1fac * dsttmp1 + s2fac * dsttmp2
+
+ end do
+ end do
+ end do
+
+end subroutine prolongate_3d_real8_2tl_eno
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_minmod.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_minmod.F77
new file mode 100644
index 000000000..61db42539
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_minmod.F77
@@ -0,0 +1,325 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_minmod.F77,v 1.6 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+c$$$ This routine performs "TVD" prolongation. It is intended to be used
+c$$$ with GFs that are not expected to be smooth, particularly those
+c$$$ that must also obey certain constraints. The obvious example is the
+c$$$ density in hydrodynamics, which may be discontinuous yet must be
+c$$$ strictly positive.
+c$$$
+c$$$ To ensure that this prolongation method is used you should add the
+c$$$ tag
+c$$$
+c$$$ tags='Prolongation="TVD"'
+c$$$
+c$$$ to the interface.ccl on the appropriate group.
+c$$$
+c$$$ This applies minmod type limiting to the slope, checking over the
+c$$$ entire coarse grid cell for the minimum modulus in each direction.
+c$$$
+c$$$ The actual minmod function is defined in the routine
+c$$$
+c$$$ prolongate_3d_real8_minmod.F77
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_2tl_minmod (
+ $ src1, t1, src2, t2, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+ external minmod
+ CCTK_REAL8 minmod
+
+ CCTK_REAL8 half, zero
+ parameter (half = 0.5)
+ parameter (zero = 0)
+ CCTK_REAL8 dupw, dloc, slopex(2), slopey(2), slopez(2)
+
+ logical firstloop
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Linear (first order) interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+
+
+c Loop over fine region
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+
+ slopex(1) = zero
+ slopey(1) = zero
+ slopez(1) = zero
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do jj = 1, 2
+
+ dupw = src1(i0+1 ,j0+jj,k0+kk) - src1(i0+0 ,j0+jj,k0+kk)
+ dloc = src1(i0+2 ,j0+jj,k0+kk) - src1(i0+1 ,j0+kk,k0+kk)
+ if (firstloop) then
+ slopex(1) = half * dble(fi) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopex(1) =
+ $ minmod(slopex(1), half * dble(fi) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do ii = 1, 2
+
+ dupw = src1(i0+ii,j0+1 ,k0+kk) - src1(i0+ii,j0+0 ,k0+kk)
+ dloc = src1(i0+ii,j0+2 ,k0+kk) - src1(i0+ii,j0+1 ,k0+kk)
+ if (firstloop) then
+ slopey(1) = half * dble(fj) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopey(1) =
+ $ minmod(slopey(1), half * dble(fj) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do jj = 1, 2
+ do ii = 1, 2
+
+ dupw = src1(i0+ii,j0+jj,k0+1 ) - src1(i0+ii,j0+jj,k0+0 )
+ dloc = src1(i0+ii,j0+jj,k0+2 ) - src1(i0+ii,j0+jj,k0+1 )
+ if (firstloop) then
+ slopez(1) = half * dble(fk) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopez(1) =
+ $ minmod(slopez(1), half * dble(fk) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ slopex(2) = zero
+ slopey(2) = zero
+ slopez(2) = zero
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do jj = 1, 2
+
+ dupw = src2(i0+1 ,j0+jj,k0+kk) - src2(i0+0 ,j0+jj,k0+kk)
+ dloc = src2(i0+2 ,j0+jj,k0+kk) - src2(i0+1 ,j0+kk,k0+kk)
+ if (firstloop) then
+ slopex(2) = half * dble(fi) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopex(2) =
+ $ minmod(slopex(2), half * dble(fi) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ do kk = 1, 2
+ do ii = 1, 2
+
+ dupw = src2(i0+ii,j0+1 ,k0+kk) - src2(i0+ii,j0+0 ,k0+kk)
+ dloc = src2(i0+ii,j0+2 ,k0+kk) - src2(i0+ii,j0+1 ,k0+kk)
+ if (firstloop) then
+ slopey(2) = half * dble(fj) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopey(2) =
+ $ minmod(slopey(2), half * dble(fj) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do jj = 1, 2
+ do ii = 1, 2
+
+ dupw = src2(i0+ii,j0+jj,k0+1 ) - src2(i0+ii,j0+jj,k0+0 )
+ dloc = src2(i0+ii,j0+jj,k0+2 ) - src2(i0+ii,j0+jj,k0+1 )
+ if (firstloop) then
+ slopez(2) = half * dble(fk) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopez(2) =
+ $ minmod(slopez(2), half * dble(fk) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) =
+ $ s1fac * (src1(i0+1,j0+1,k0+1) +
+ $ slopex(1) + slopey(1) + slopez(1)) +
+ $ s2fac * (src2(i0+1,j0+1,k0+1) +
+ $ slopex(2) + slopey(2) + slopez(2))
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3.F77
new file mode 100644
index 000000000..0f0509cff
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3.F77
@@ -0,0 +1,218 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3.F77,v 1.13 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_2tl_o3 (
+ $ src1, t1, src2, t2, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Linear (first order) interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+
+
+c Loop over fine region
+ dstdiv = one / (6*dstifac**3 * 6*dstjfac**3 * 6*dstkfac**3)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (-1)
+ kfac(2) = (fk+dstkfac) * (fk-dstkfac) * (fk-2*dstkfac) * 3
+ kfac(3) = (fk+dstkfac) * (fk ) * (fk-2*dstkfac) * (-3)
+ kfac(4) = (fk+dstkfac) * (fk ) * (fk- dstkfac) * 1
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (-1)
+ jfac(2) = (fj+dstjfac) * (fj-dstjfac) * (fj-2*dstjfac) * 3
+ jfac(3) = (fj+dstjfac) * (fj ) * (fj-2*dstjfac) * (-3)
+ jfac(4) = (fj+dstjfac) * (fj ) * (fj- dstjfac) * 1
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi ) * (fi-dstifac) * (fi-2*dstifac) * (-1)
+ ifac(2) = (fi+dstifac) * (fi-dstifac) * (fi-2*dstifac) * 3
+ ifac(3) = (fi+dstifac) * (fi ) * (fi-2*dstifac) * (-3)
+ ifac(4) = (fi+dstifac) * (fi ) * (fi- dstifac) * 1
+
+ res = 0
+
+ do kk=1,4
+ do jj=1,4
+ do ii=1,4
+
+ fac = ifac(ii) * jfac(jj) * kfac(kk)
+
+ if (fac.ne.0) then
+ CHKIDX (i0+ii-1, j0+jj-1, k0+kk-1, \
+ srciext,srcjext,srckext, "source")
+ res = res
+ $ + fac * s1fac * src1(i0+ii-1, j0+jj-1, k0+kk-1)
+ $ + fac * s2fac * src2(i0+ii-1, j0+jj-1, k0+kk-1)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3_rf2.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3_rf2.F77
new file mode 100644
index 000000000..d9d62741b
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3_rf2.F77
@@ -0,0 +1,628 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o3_rf2.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine prolongate_3d_real8_2tl_o3_rf2 (
+ $ src1, t1, src2, t2, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ CCTK_REAL8 one, half, fourth, eighth, sixteenth
+ parameter (one = 1)
+ parameter (half = one/2)
+ parameter (fourth = one/4)
+ parameter (eighth = one/8)
+ parameter (sixteenth = one/16)
+ CCTK_REAL8 f1, f2, f3, f4
+ parameter (f1 = - sixteenth)
+ parameter (f2 = 9*sixteenth)
+ parameter (f3 = 9*sixteenth)
+ parameter (f4 = - sixteenth)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer offsetlo, offsethi
+
+ CCTK_REAL8 s1fac, s2fac
+
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer is, js, ks
+ integer id, jd, kd
+ integer i, j, k
+
+ CCTK_REAL8 res1, res2
+
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (srcbbox(d,3).ne.dstbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: source strides are not twice the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff, 2).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, 2).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) time interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+
+
+ fi = mod(srcioff, 2)
+ fj = mod(srcjoff, 2)
+ fk = mod(srckoff, 2)
+
+ i0 = srcioff / 2
+ j0 = srcjoff / 2
+ k0 = srckoff / 2
+
+
+
+c Loop over fine region
+c Label scheme: 8 fk fj fi
+
+c begin k loop
+ 8 continue
+ k = 0
+ ks = k0+1
+ kd = dstkoff+1
+ if (fk.eq.0) goto 80
+ if (fk.eq.1) goto 81
+ stop
+
+c begin j loop
+ 80 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 800
+ if (fj.eq.1) goto 801
+ stop
+
+c begin i loop
+ 800 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8000
+ if (fi.eq.1) goto 8001
+ stop
+
+c kernel
+ 8000 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + s1fac * src1(is,js,ks)
+ $ + s2fac * src2(is,js,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8001
+ goto 900
+
+c kernel
+ 8001 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js,ks, 4,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * s1fac * src1(is-1,js,ks) + f2 * s1fac * src1(is ,js,ks)
+ $ + f3 * s1fac * src1(is+1,js,ks) + f4 * s1fac * src1(is+2,js,ks)
+ $ + f1 * s2fac * src2(is-1,js,ks) + f2 * s2fac * src2(is ,js,ks)
+ $ + f3 * s2fac * src2(is+1,js,ks) + f4 * s2fac * src2(is+2,js,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8000
+ goto 900
+
+c end i loop
+ 900 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 801
+ goto 90
+
+c begin i loop
+ 801 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8010
+ if (fi.eq.1) goto 8011
+ stop
+
+c kernel
+ 8010 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js-1,ks, 1,4,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * s1fac * src1(is,js-1,ks) + f2 * s1fac * src1(is,js ,ks)
+ $ + f3 * s1fac * src1(is,js+1,ks) + f4 * s1fac * src1(is,js+2,ks)
+ $ + f1 * s2fac * src2(is,js-1,ks) + f2 * s2fac * src2(is,js ,ks)
+ $ + f3 * s2fac * src2(is,js+1,ks) + f4 * s2fac * src2(is,js+2,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8011
+ goto 901
+
+c kernel
+ 8011 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js-1,ks, 4,4,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * s1fac * src1(is-1,js-1,ks)
+ $ + f2*f1 * s1fac * src1(is ,js-1,ks)
+ $ + f3*f1 * s1fac * src1(is+1,js-1,ks)
+ $ + f4*f1 * s1fac * src1(is+2,js-1,ks)
+ $ + f1*f2 * s1fac * src1(is-1,js ,ks)
+ $ + f2*f2 * s1fac * src1(is ,js ,ks)
+ $ + f3*f2 * s1fac * src1(is+1,js ,ks)
+ $ + f4*f2 * s1fac * src1(is+2,js ,ks)
+ $ + f1*f3 * s1fac * src1(is-1,js+1,ks)
+ $ + f2*f3 * s1fac * src1(is ,js+1,ks)
+ $ + f3*f3 * s1fac * src1(is+1,js+1,ks)
+ $ + f4*f3 * s1fac * src1(is+2,js+1,ks)
+ $ + f1*f4 * s1fac * src1(is-1,js+2,ks)
+ $ + f2*f4 * s1fac * src1(is ,js+2,ks)
+ $ + f3*f4 * s1fac * src1(is+1,js+2,ks)
+ $ + f4*f4 * s1fac * src1(is+2,js+2,ks)
+ $
+ $ + f1*f1 * s2fac * src2(is-1,js-1,ks)
+ $ + f2*f1 * s2fac * src2(is ,js-1,ks)
+ $ + f3*f1 * s2fac * src2(is+1,js-1,ks)
+ $ + f4*f1 * s2fac * src2(is+2,js-1,ks)
+ $ + f1*f2 * s2fac * src2(is-1,js ,ks)
+ $ + f2*f2 * s2fac * src2(is ,js ,ks)
+ $ + f3*f2 * s2fac * src2(is+1,js ,ks)
+ $ + f4*f2 * s2fac * src2(is+2,js ,ks)
+ $ + f1*f3 * s2fac * src2(is-1,js+1,ks)
+ $ + f2*f3 * s2fac * src2(is ,js+1,ks)
+ $ + f3*f3 * s2fac * src2(is+1,js+1,ks)
+ $ + f4*f3 * s2fac * src2(is+2,js+1,ks)
+ $ + f1*f4 * s2fac * src2(is-1,js+2,ks)
+ $ + f2*f4 * s2fac * src2(is ,js+2,ks)
+ $ + f3*f4 * s2fac * src2(is+1,js+2,ks)
+ $ + f4*f4 * s2fac * src2(is+2,js+2,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8010
+ goto 901
+
+c end i loop
+ 901 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 800
+ goto 90
+
+c end j loop
+ 90 continue
+ k = k+1
+ kd = kd+1
+ if (k.lt.regkext) goto 81
+ goto 9
+
+c begin j loop
+ 81 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 810
+ if (fj.eq.1) goto 811
+ stop
+
+c begin i loop
+ 810 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8100
+ if (fi.eq.1) goto 8101
+ stop
+
+c kernel
+ 8100 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks-1, 1,1,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * s1fac * src1(is,js,ks-1) + f2 * s1fac * src1(is,js,ks )
+ $ + f3 * s1fac * src1(is,js,ks+1) + f4 * s1fac * src1(is,js,ks+2)
+ $ + f1 * s2fac * src2(is,js,ks-1) + f2 * s2fac * src2(is,js,ks )
+ $ + f3 * s2fac * src2(is,js,ks+1) + f4 * s2fac * src2(is,js,ks+2)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8101
+ goto 910
+
+c kernel
+ 8101 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js,ks-1, 4,1,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * s1fac * src1(is-1,js,ks-1)
+ $ + f2*f1 * s1fac * src1(is ,js,ks-1)
+ $ + f3*f1 * s1fac * src1(is+1,js,ks-1)
+ $ + f4*f1 * s1fac * src1(is+2,js,ks-1)
+ $ + f1*f2 * s1fac * src1(is-1,js,ks )
+ $ + f2*f2 * s1fac * src1(is ,js,ks )
+ $ + f3*f2 * s1fac * src1(is+1,js,ks )
+ $ + f4*f2 * s1fac * src1(is+2,js,ks )
+ $ + f1*f3 * s1fac * src1(is-1,js,ks+1)
+ $ + f2*f3 * s1fac * src1(is ,js,ks+1)
+ $ + f3*f3 * s1fac * src1(is+1,js,ks+1)
+ $ + f4*f3 * s1fac * src1(is+2,js,ks+1)
+ $ + f1*f4 * s1fac * src1(is-1,js,ks+2)
+ $ + f2*f4 * s1fac * src1(is ,js,ks+2)
+ $ + f3*f4 * s1fac * src1(is+1,js,ks+2)
+ $ + f4*f4 * s1fac * src1(is+2,js,ks+2)
+ $
+ $ + f1*f1 * s2fac * src2(is-1,js,ks-1)
+ $ + f2*f1 * s2fac * src2(is ,js,ks-1)
+ $ + f3*f1 * s2fac * src2(is+1,js,ks-1)
+ $ + f4*f1 * s2fac * src2(is+2,js,ks-1)
+ $ + f1*f2 * s2fac * src2(is-1,js,ks )
+ $ + f2*f2 * s2fac * src2(is ,js,ks )
+ $ + f3*f2 * s2fac * src2(is+1,js,ks )
+ $ + f4*f2 * s2fac * src2(is+2,js,ks )
+ $ + f1*f3 * s2fac * src2(is-1,js,ks+1)
+ $ + f2*f3 * s2fac * src2(is ,js,ks+1)
+ $ + f3*f3 * s2fac * src2(is+1,js,ks+1)
+ $ + f4*f3 * s2fac * src2(is+2,js,ks+1)
+ $ + f1*f4 * s2fac * src2(is-1,js,ks+2)
+ $ + f2*f4 * s2fac * src2(is ,js,ks+2)
+ $ + f3*f4 * s2fac * src2(is+1,js,ks+2)
+ $ + f4*f4 * s2fac * src2(is+2,js,ks+2)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8100
+ goto 910
+
+c end i loop
+ 910 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 811
+ goto 91
+
+c begin i loop
+ 811 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8110
+ if (fi.eq.1) goto 8111
+ stop
+
+c kernel
+ 8110 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js-1,ks-1, 1,4,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * s1fac * src1(is,js-1,ks-1)
+ $ + f2*f1 * s1fac * src1(is,js ,ks-1)
+ $ + f3*f1 * s1fac * src1(is,js+1,ks-1)
+ $ + f4*f1 * s1fac * src1(is,js+2,ks-1)
+ $ + f1*f2 * s1fac * src1(is,js-1,ks )
+ $ + f2*f2 * s1fac * src1(is,js ,ks )
+ $ + f3*f2 * s1fac * src1(is,js+1,ks )
+ $ + f4*f2 * s1fac * src1(is,js+2,ks )
+ $ + f1*f3 * s1fac * src1(is,js-1,ks+1)
+ $ + f2*f3 * s1fac * src1(is,js ,ks+1)
+ $ + f3*f3 * s1fac * src1(is,js+1,ks+1)
+ $ + f4*f3 * s1fac * src1(is,js+2,ks+1)
+ $ + f1*f4 * s1fac * src1(is,js-1,ks+2)
+ $ + f2*f4 * s1fac * src1(is,js ,ks+2)
+ $ + f3*f4 * s1fac * src1(is,js+1,ks+2)
+ $ + f4*f4 * s1fac * src1(is,js+2,ks+2)
+ $
+ $ + f1*f1 * s2fac * src2(is,js-1,ks-1)
+ $ + f2*f1 * s2fac * src2(is,js ,ks-1)
+ $ + f3*f1 * s2fac * src2(is,js+1,ks-1)
+ $ + f4*f1 * s2fac * src2(is,js+2,ks-1)
+ $ + f1*f2 * s2fac * src2(is,js-1,ks )
+ $ + f2*f2 * s2fac * src2(is,js ,ks )
+ $ + f3*f2 * s2fac * src2(is,js+1,ks )
+ $ + f4*f2 * s2fac * src2(is,js+2,ks )
+ $ + f1*f3 * s2fac * src2(is,js-1,ks+1)
+ $ + f2*f3 * s2fac * src2(is,js ,ks+1)
+ $ + f3*f3 * s2fac * src2(is,js+1,ks+1)
+ $ + f4*f3 * s2fac * src2(is,js+2,ks+1)
+ $ + f1*f4 * s2fac * src2(is,js-1,ks+2)
+ $ + f2*f4 * s2fac * src2(is,js ,ks+2)
+ $ + f3*f4 * s2fac * src2(is,js+1,ks+2)
+ $ + f4*f4 * s2fac * src2(is,js+2,ks+2)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8111
+ goto 911
+
+c kernel
+ 8111 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js-1,ks-1, 4,4,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ res1 =
+ $ + f1*f1*f1 * s1fac * src1(is-1,js-1,ks-1)
+ $ + f2*f1*f1 * s1fac * src1(is ,js-1,ks-1)
+ $ + f3*f1*f1 * s1fac * src1(is+1,js-1,ks-1)
+ $ + f4*f1*f1 * s1fac * src1(is+2,js-1,ks-1)
+ $ + f1*f2*f1 * s1fac * src1(is-1,js ,ks-1)
+ $ + f2*f2*f1 * s1fac * src1(is ,js ,ks-1)
+ $ + f3*f2*f1 * s1fac * src1(is+1,js ,ks-1)
+ $ + f4*f2*f1 * s1fac * src1(is+2,js ,ks-1)
+ $ + f1*f3*f1 * s1fac * src1(is-1,js+1,ks-1)
+ $ + f2*f3*f1 * s1fac * src1(is ,js+1,ks-1)
+ $ + f3*f3*f1 * s1fac * src1(is+1,js+1,ks-1)
+ $ + f4*f3*f1 * s1fac * src1(is+2,js+1,ks-1)
+ $ + f1*f4*f1 * s1fac * src1(is-1,js+2,ks-1)
+ $ + f2*f4*f1 * s1fac * src1(is ,js+2,ks-1)
+ $ + f3*f4*f1 * s1fac * src1(is+1,js+2,ks-1)
+ $ + f4*f4*f1 * s1fac * src1(is+2,js+2,ks-1)
+ $
+ $ + f1*f1*f2 * s1fac * src1(is-1,js-1,ks )
+ $ + f2*f1*f2 * s1fac * src1(is ,js-1,ks )
+ $ + f3*f1*f2 * s1fac * src1(is+1,js-1,ks )
+ $ + f4*f1*f2 * s1fac * src1(is+2,js-1,ks )
+ $ + f1*f2*f2 * s1fac * src1(is-1,js ,ks )
+ $ + f2*f2*f2 * s1fac * src1(is ,js ,ks )
+ $ + f3*f2*f2 * s1fac * src1(is+1,js ,ks )
+ $ + f4*f2*f2 * s1fac * src1(is+2,js ,ks )
+ $ + f1*f3*f2 * s1fac * src1(is-1,js+1,ks )
+ $ + f2*f3*f2 * s1fac * src1(is ,js+1,ks )
+ $ + f3*f3*f2 * s1fac * src1(is+1,js+1,ks )
+ $ + f4*f3*f2 * s1fac * src1(is+2,js+1,ks )
+ $ + f1*f4*f2 * s1fac * src1(is-1,js+2,ks )
+ $ + f2*f4*f2 * s1fac * src1(is ,js+2,ks )
+ $ + f3*f4*f2 * s1fac * src1(is+1,js+2,ks )
+ $ + f4*f4*f2 * s1fac * src1(is+2,js+2,ks )
+ $
+ $ + f1*f1*f3 * s1fac * src1(is-1,js-1,ks+1)
+ $ + f2*f1*f3 * s1fac * src1(is ,js-1,ks+1)
+ $ + f3*f1*f3 * s1fac * src1(is+1,js-1,ks+1)
+ $ + f4*f1*f3 * s1fac * src1(is+2,js-1,ks+1)
+ $ + f1*f2*f3 * s1fac * src1(is-1,js ,ks+1)
+ $ + f2*f2*f3 * s1fac * src1(is ,js ,ks+1)
+ $ + f3*f2*f3 * s1fac * src1(is+1,js ,ks+1)
+ $ + f4*f2*f3 * s1fac * src1(is+2,js ,ks+1)
+ $ + f1*f3*f3 * s1fac * src1(is-1,js+1,ks+1)
+ $ + f2*f3*f3 * s1fac * src1(is ,js+1,ks+1)
+ $ + f3*f3*f3 * s1fac * src1(is+1,js+1,ks+1)
+ $ + f4*f3*f3 * s1fac * src1(is+2,js+1,ks+1)
+ $ + f1*f4*f3 * s1fac * src1(is-1,js+2,ks+1)
+ $ + f2*f4*f3 * s1fac * src1(is ,js+2,ks+1)
+ $ + f3*f4*f3 * s1fac * src1(is+1,js+2,ks+1)
+ $ + f4*f4*f3 * s1fac * src1(is+2,js+2,ks+1)
+ $
+ $ + f1*f1*f4 * s1fac * src1(is-1,js-1,ks+2)
+ $ + f2*f1*f4 * s1fac * src1(is ,js-1,ks+2)
+ $ + f3*f1*f4 * s1fac * src1(is+1,js-1,ks+2)
+ $ + f4*f1*f4 * s1fac * src1(is+2,js-1,ks+2)
+ $ + f1*f2*f4 * s1fac * src1(is-1,js ,ks+2)
+ $ + f2*f2*f4 * s1fac * src1(is ,js ,ks+2)
+ $ + f3*f2*f4 * s1fac * src1(is+1,js ,ks+2)
+ $ + f4*f2*f4 * s1fac * src1(is+2,js ,ks+2)
+ $ + f1*f3*f4 * s1fac * src1(is-1,js+1,ks+2)
+ $ + f2*f3*f4 * s1fac * src1(is ,js+1,ks+2)
+ $ + f3*f3*f4 * s1fac * src1(is+1,js+1,ks+2)
+ $ + f4*f3*f4 * s1fac * src1(is+2,js+1,ks+2)
+ $ + f1*f4*f4 * s1fac * src1(is-1,js+2,ks+2)
+ $ + f2*f4*f4 * s1fac * src1(is ,js+2,ks+2)
+ $ + f3*f4*f4 * s1fac * src1(is+1,js+2,ks+2)
+ $ + f4*f4*f4 * s1fac * src1(is+2,js+2,ks+2)
+ res2 =
+ $ + f1*f1*f1 * s2fac * src2(is-1,js-1,ks-1)
+ $ + f2*f1*f1 * s2fac * src2(is ,js-1,ks-1)
+ $ + f3*f1*f1 * s2fac * src2(is+1,js-1,ks-1)
+ $ + f4*f1*f1 * s2fac * src2(is+2,js-1,ks-1)
+ $ + f1*f2*f1 * s2fac * src2(is-1,js ,ks-1)
+ $ + f2*f2*f1 * s2fac * src2(is ,js ,ks-1)
+ $ + f3*f2*f1 * s2fac * src2(is+1,js ,ks-1)
+ $ + f4*f2*f1 * s2fac * src2(is+2,js ,ks-1)
+ $ + f1*f3*f1 * s2fac * src2(is-1,js+1,ks-1)
+ $ + f2*f3*f1 * s2fac * src2(is ,js+1,ks-1)
+ $ + f3*f3*f1 * s2fac * src2(is+1,js+1,ks-1)
+ $ + f4*f3*f1 * s2fac * src2(is+2,js+1,ks-1)
+ $ + f1*f4*f1 * s2fac * src2(is-1,js+2,ks-1)
+ $ + f2*f4*f1 * s2fac * src2(is ,js+2,ks-1)
+ $ + f3*f4*f1 * s2fac * src2(is+1,js+2,ks-1)
+ $ + f4*f4*f1 * s2fac * src2(is+2,js+2,ks-1)
+ $
+ $ + f1*f1*f2 * s2fac * src2(is-1,js-1,ks )
+ $ + f2*f1*f2 * s2fac * src2(is ,js-1,ks )
+ $ + f3*f1*f2 * s2fac * src2(is+1,js-1,ks )
+ $ + f4*f1*f2 * s2fac * src2(is+2,js-1,ks )
+ $ + f1*f2*f2 * s2fac * src2(is-1,js ,ks )
+ $ + f2*f2*f2 * s2fac * src2(is ,js ,ks )
+ $ + f3*f2*f2 * s2fac * src2(is+1,js ,ks )
+ $ + f4*f2*f2 * s2fac * src2(is+2,js ,ks )
+ $ + f1*f3*f2 * s2fac * src2(is-1,js+1,ks )
+ $ + f2*f3*f2 * s2fac * src2(is ,js+1,ks )
+ $ + f3*f3*f2 * s2fac * src2(is+1,js+1,ks )
+ $ + f4*f3*f2 * s2fac * src2(is+2,js+1,ks )
+ $ + f1*f4*f2 * s2fac * src2(is-1,js+2,ks )
+ $ + f2*f4*f2 * s2fac * src2(is ,js+2,ks )
+ $ + f3*f4*f2 * s2fac * src2(is+1,js+2,ks )
+ $ + f4*f4*f2 * s2fac * src2(is+2,js+2,ks )
+ $
+ $ + f1*f1*f3 * s2fac * src2(is-1,js-1,ks+1)
+ $ + f2*f1*f3 * s2fac * src2(is ,js-1,ks+1)
+ $ + f3*f1*f3 * s2fac * src2(is+1,js-1,ks+1)
+ $ + f4*f1*f3 * s2fac * src2(is+2,js-1,ks+1)
+ $ + f1*f2*f3 * s2fac * src2(is-1,js ,ks+1)
+ $ + f2*f2*f3 * s2fac * src2(is ,js ,ks+1)
+ $ + f3*f2*f3 * s2fac * src2(is+1,js ,ks+1)
+ $ + f4*f2*f3 * s2fac * src2(is+2,js ,ks+1)
+ $ + f1*f3*f3 * s2fac * src2(is-1,js+1,ks+1)
+ $ + f2*f3*f3 * s2fac * src2(is ,js+1,ks+1)
+ $ + f3*f3*f3 * s2fac * src2(is+1,js+1,ks+1)
+ $ + f4*f3*f3 * s2fac * src2(is+2,js+1,ks+1)
+ $ + f1*f4*f3 * s2fac * src2(is-1,js+2,ks+1)
+ $ + f2*f4*f3 * s2fac * src2(is ,js+2,ks+1)
+ $ + f3*f4*f3 * s2fac * src2(is+1,js+2,ks+1)
+ $ + f4*f4*f3 * s2fac * src2(is+2,js+2,ks+1)
+ $
+ $ + f1*f1*f4 * s2fac * src2(is-1,js-1,ks+2)
+ $ + f2*f1*f4 * s2fac * src2(is ,js-1,ks+2)
+ $ + f3*f1*f4 * s2fac * src2(is+1,js-1,ks+2)
+ $ + f4*f1*f4 * s2fac * src2(is+2,js-1,ks+2)
+ $ + f1*f2*f4 * s2fac * src2(is-1,js ,ks+2)
+ $ + f2*f2*f4 * s2fac * src2(is ,js ,ks+2)
+ $ + f3*f2*f4 * s2fac * src2(is+1,js ,ks+2)
+ $ + f4*f2*f4 * s2fac * src2(is+2,js ,ks+2)
+ $ + f1*f3*f4 * s2fac * src2(is-1,js+1,ks+2)
+ $ + f2*f3*f4 * s2fac * src2(is ,js+1,ks+2)
+ $ + f3*f3*f4 * s2fac * src2(is+1,js+1,ks+2)
+ $ + f4*f3*f4 * s2fac * src2(is+2,js+1,ks+2)
+ $ + f1*f4*f4 * s2fac * src2(is-1,js+2,ks+2)
+ $ + f2*f4*f4 * s2fac * src2(is ,js+2,ks+2)
+ $ + f3*f4*f4 * s2fac * src2(is+1,js+2,ks+2)
+ $ + f4*f4*f4 * s2fac * src2(is+2,js+2,ks+2)
+ dst(id,jd,kd) = res1 + res2
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8110
+ goto 911
+
+c end i loop
+ 911 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 810
+ goto 91
+
+c end j loop
+ 91 continue
+ k = k+1
+ kd = kd+1
+ ks = ks+1
+ if (k.lt.regkext) goto 80
+ goto 9
+
+c end k loop
+ 9 continue
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o5.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o5.F77
new file mode 100644
index 000000000..e28354048
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o5.F77
@@ -0,0 +1,226 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_o5.F77,v 1.3 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_2tl_o5 (
+ $ src1, t1, src2, t2, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(6), jfac(6), kfac(6)
+ integer ii, jj, kk
+ CCTK_REAL8 fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Linear (first order) interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+
+
+c Loop over fine region
+c (This expression cannot be evaluated as integer)
+ dstdiv = one / (120*dstifac**5) / (120*dstjfac**5) / (120*dstkfac**5)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk+ dstkfac) * (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * (- 1)
+ kfac(2) = (fk+2*dstkfac) * (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * ( 5)
+ kfac(3) = (fk+2*dstkfac) * (fk+dstkfac) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * (-10)
+ kfac(4) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk-2*dstkfac) * (fk-3*dstkfac) * ( 10)
+ kfac(5) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk- dstkfac) * (fk-3*dstkfac) * (- 5)
+ kfac(6) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk- dstkfac) * (fk-2*dstkfac) * ( 1)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj+ dstjfac) * (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * (- 1)
+ jfac(2) = (fj+2*dstjfac) * (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * ( 5)
+ jfac(3) = (fj+2*dstjfac) * (fj+dstjfac) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * (-10)
+ jfac(4) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj-2*dstjfac) * (fj-3*dstjfac) * ( 10)
+ jfac(5) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj- dstjfac) * (fj-3*dstjfac) * (- 5)
+ jfac(6) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj- dstjfac) * (fj-2*dstjfac) * ( 1)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi+ dstifac) * (fi ) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * (- 1)
+ ifac(2) = (fi+2*dstifac) * (fi ) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * ( 5)
+ ifac(3) = (fi+2*dstifac) * (fi+dstifac) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * (-10)
+ ifac(4) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi-2*dstifac) * (fi-3*dstifac) * ( 10)
+ ifac(5) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi- dstifac) * (fi-3*dstifac) * (- 5)
+ ifac(6) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi- dstifac) * (fi-2*dstifac) * ( 1)
+
+ res = 0
+
+ do kk=1,6
+ do jj=1,6
+ do ii=1,6
+
+ if (ifac(ii).ne.0 .and. jfac(jj).ne.0 .and. kfac(kk).ne.0) then
+c (This expression cannot be evaluated as integer)
+ fac = one * ifac(ii) * jfac(jj) * kfac(kk)
+
+ CHKIDX (i0+ii-2, j0+jj-2, k0+kk-2, \
+ srciext,srcjext,srckext, "source")
+ res = res
+ $ + fac * s1fac * src1(i0+ii-2, j0+jj-2, k0+kk-2)
+ $ + fac * s2fac * src2(i0+ii-2, j0+jj-2, k0+kk-2)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_rf2.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_rf2.F77
new file mode 100644
index 000000000..727c2581f
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_rf2.F77
@@ -0,0 +1,402 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_2tl_rf2.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine prolongate_3d_real8_2tl_rf2 (
+ $ src1, t1, src2, t2, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ CCTK_REAL8 one, half, fourth, eighth
+ parameter (one = 1)
+ parameter (half = one/2)
+ parameter (fourth = one/4)
+ parameter (eighth = one/8)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac
+
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer is, js, ks
+ integer id, jd, kd
+ integer i, j, k
+
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (srcbbox(d,3).ne.dstbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: source strides are not twice the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) time interpolation
+ if (t1.eq.t2) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2)-eps .or. t.gt.max(t1,t2)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) / (t1 - t2)
+ s2fac = (t - t1) / (t2 - t1)
+
+
+
+ fi = mod(srcioff, 2)
+ fj = mod(srcjoff, 2)
+ fk = mod(srckoff, 2)
+
+ i0 = srcioff / 2
+ j0 = srcjoff / 2
+ k0 = srckoff / 2
+
+
+
+c Loop over fine region
+c Label scheme: 8 fk fj fi
+
+c begin k loop
+ 8 continue
+ k = 0
+ ks = k0+1
+ kd = dstkoff+1
+ if (fk.eq.0) goto 80
+ if (fk.eq.1) goto 81
+ stop
+
+c begin j loop
+ 80 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 800
+ if (fj.eq.1) goto 801
+ stop
+
+c begin i loop
+ 800 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8000
+ if (fi.eq.1) goto 8001
+ stop
+
+c kernel
+ 8000 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + s1fac * src1(is,js,ks)
+ $ + s2fac * src2(is,js,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8001
+ goto 900
+
+c kernel
+ 8001 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + half * s1fac * src1(is,js,ks) + half * s1fac * src1(is+1,js,ks)
+ $ + half * s2fac * src2(is,js,ks) + half * s2fac * src2(is+1,js,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8000
+ goto 900
+
+c end i loop
+ 900 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 801
+ goto 90
+
+c begin i loop
+ 801 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8010
+ if (fi.eq.1) goto 8011
+ stop
+
+c kernel
+ 8010 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,2,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + half * s1fac * src1(is,js,ks) + half * s1fac * src1(is,js+1,ks)
+ $ + half * s2fac * src2(is,js,ks) + half * s2fac * src2(is,js+1,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8011
+ goto 901
+
+c kernel
+ 8011 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,2,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * s1fac * src1(is,js,ks)
+ $ + fourth * s1fac * src1(is+1,js,ks)
+ $ + fourth * s1fac * src1(is,js+1,ks)
+ $ + fourth * s1fac * src1(is+1,js+1,ks)
+ $ + fourth * s2fac * src2(is,js,ks)
+ $ + fourth * s2fac * src2(is+1,js,ks)
+ $ + fourth * s2fac * src2(is,js+1,ks)
+ $ + fourth * s2fac * src2(is+1,js+1,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8010
+ goto 901
+
+c end i loop
+ 901 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 800
+ goto 90
+
+c end j loop
+ 90 continue
+ k = k+1
+ kd = kd+1
+ if (k.lt.regkext) goto 81
+ goto 9
+
+c begin j loop
+ 81 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 810
+ if (fj.eq.1) goto 811
+ stop
+
+c begin i loop
+ 810 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8100
+ if (fi.eq.1) goto 8101
+ stop
+
+c kernel
+ 8100 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + half * s1fac * src1(is,js,ks) + half * s1fac * src1(is,js,ks+1)
+ $ + half * s2fac * src2(is,js,ks) + half * s2fac * src2(is,js,ks+1)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8101
+ goto 910
+
+c kernel
+ 8101 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,1,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * s1fac * src1(is,js,ks)
+ $ + fourth * s1fac * src1(is+1,js,ks)
+ $ + fourth * s1fac * src1(is,js,ks+1)
+ $ + fourth * s1fac * src1(is+1,js,ks+1)
+ $ + fourth * s2fac * src1(is,js,ks)
+ $ + fourth * s2fac * src2(is+1,js,ks)
+ $ + fourth * s2fac * src2(is,js,ks+1)
+ $ + fourth * s2fac * src2(is+1,js,ks+1)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8100
+ goto 910
+
+c end i loop
+ 910 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 811
+ goto 91
+
+c begin i loop
+ 811 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8110
+ if (fi.eq.1) goto 8111
+ stop
+
+c kernel
+ 8110 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,2,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * s1fac * src1(is,js,ks)
+ $ + fourth * s1fac * src1(is,js+1,ks)
+ $ + fourth * s1fac * src1(is,js,ks+1)
+ $ + fourth * s1fac * src1(is,js+1,ks+1)
+ $ + fourth * s2fac * src2(is,js,ks)
+ $ + fourth * s2fac * src2(is,js+1,ks)
+ $ + fourth * s2fac * src2(is,js,ks+1)
+ $ + fourth * s2fac * src2(is,js+1,ks+1)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8111
+ goto 911
+
+c kernel
+ 8111 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,2,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + eighth * s1fac * src1(is,js,ks)
+ $ + eighth * s1fac * src1(is+1,js,ks)
+ $ + eighth * s1fac * src1(is,js+1,ks)
+ $ + eighth * s1fac * src1(is+1,js+1,ks)
+ $ + eighth * s1fac * src1(is,js,ks+1)
+ $ + eighth * s1fac * src1(is+1,js,ks+1)
+ $ + eighth * s1fac * src1(is,js+1,ks+1)
+ $ + eighth * s1fac * src1(is+1,js+1,ks+1)
+ $
+ $ + eighth * s2fac * src2(is,js,ks)
+ $ + eighth * s2fac * src2(is+1,js,ks)
+ $ + eighth * s2fac * src2(is,js+1,ks)
+ $ + eighth * s2fac * src2(is+1,js+1,ks)
+ $ + eighth * s2fac * src2(is,js,ks+1)
+ $ + eighth * s2fac * src2(is+1,js,ks+1)
+ $ + eighth * s2fac * src2(is,js+1,ks+1)
+ $ + eighth * s2fac * src2(is+1,js+1,ks+1)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8110
+ goto 911
+
+c end i loop
+ 911 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 810
+ goto 91
+
+c end j loop
+ 91 continue
+ k = k+1
+ kd = kd+1
+ ks = ks+1
+ if (k.lt.regkext) goto 80
+ goto 9
+
+c end k loop
+ 9 continue
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl.F77
new file mode 100644
index 000000000..9f3e3d944
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl.F77
@@ -0,0 +1,197 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl.F77,v 1.9 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_3tl (
+ $ src1, t1, src2, t2, src3, t3, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(2), jfac(2), kfac(2)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+
+
+c Loop over fine region
+ dstdiv = one / (dstifac * dstjfac * dstkfac)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk-dstkfac) * (-1)
+ kfac(2) = (fk ) * 1
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj-dstjfac) * (-1)
+ jfac(2) = (fj ) * 1
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi-dstifac) * (-1)
+ ifac(2) = (fi ) * 1
+
+ res = 0
+
+ do kk=1,2
+ do jj=1,2
+ do ii=1,2
+
+ fac = ifac(ii) * jfac(jj) * kfac(kk)
+
+ if (fac.ne.0) then
+ CHKIDX (i0+ii, j0+jj, k0+kk, \
+ srciext,srcjext,srckext, "source")
+ res = res
+ $ + fac * s1fac * src1(i0+ii, j0+jj, k0+kk)
+ $ + fac * s2fac * src2(i0+ii, j0+jj, k0+kk)
+ $ + fac * s3fac * src3(i0+ii, j0+jj, k0+kk)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_eno.F90 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_eno.F90
new file mode 100644
index 000000000..df253af97
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_eno.F90
@@ -0,0 +1,370 @@
+!!$ $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_eno.F90,v 1.1 2004/03/03 15:30:40 hawke Exp $
+
+#include "cctk.h"
+
+
+!!$ This routine performs "ENO" prolongation. It is intended to be used
+!!$ with GFs that are not expected to be smooth, particularly those
+!!$ that must also obey certain constraints. The obvious example is the
+!!$ density in hydrodynamics, which may be discontinuous yet must be
+!!$ strictly positive.
+!!$
+!!$ To ensure that this prolongation method is used you should add the
+!!$ tag
+!!$
+!!$ tags='Prolongation="ENO"'
+!!$
+!!$ to the interface.ccl on the appropriate group.
+!!$
+!!$ This applies ENO2 type limiting to the slope, checking over the
+!!$ entire coarse grid cell for the least oscillatory quadratic in each
+!!$ direction. If the slope changes sign over the extrema, linear
+!!$ interpolation is used instead.
+!!$
+!!$ The actual eno1d function is defined in the routine
+!!$
+!!$ prolongate_3d_real8_eno.F77
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+end if
+
+subroutine prolongate_3d_real8_3tl_eno (src1, t1, src2, t2, &
+ src3, t3, srciext, srcjext, srckext, dst, t, dstiext, &
+ dstjext, dstkext, srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+!!$ bbox(:,1) is lower boundary (inclusive)
+!!$ bbox(:,2) is upper boundary (inclusive)
+!!$ bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac, tmps1fac, tmps2fac, tmps3fac
+
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+ CCTK_REAL8, dimension(0:3,0:3) :: tmp1
+ CCTK_REAL8, dimension(0:3) :: tmp2
+ CCTK_REAL8 :: dsttmp1, dsttmp2, dsttmp3
+
+ external eno1d
+ CCTK_REAL8 eno1d
+
+ CCTK_REAL8 half, zero
+ parameter (half = 0.5)
+ parameter (zero = 0)
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0 &
+ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3) &
+ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0 &
+ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0 &
+ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+!!$ This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1) &
+ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2) &
+ .or. regbbox(d,1).lt.dstbbox(d,1) &
+ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1 &
+ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1 &
+ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1 &
+ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1 &
+ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1 &
+ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+!!$ Quadratic (second order) interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+!!$ Loop over fine region
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+
+!!$ Where is the fine grid point w.r.t the coarse grid?
+
+!!$ write(*,*) i,j,k,fi,fj,fk
+
+ select case (fi + 10*fj + 100*fk)
+ case (0)
+!!$ On a coarse grid point exactly!
+
+ dsttmp1 = src1(i0+1,j0+1,k0+1)
+ dsttmp2 = src2(i0+1,j0+1,k0+1)
+ dsttmp3 = src3(i0+1,j0+1,k0+1)
+
+ case (1)
+!!$ Interpolate only in x
+
+ dsttmp1 = eno1d(src1(i0:i0+3,j0+1,k0+1))
+ dsttmp2 = eno1d(src2(i0:i0+3,j0+1,k0+1))
+ dsttmp3 = eno1d(src3(i0:i0+3,j0+1,k0+1))
+
+ case (10)
+!!$ Interpolate only in y
+
+ dsttmp1 = eno1d(src1(i0+1,j0:j0+3,k0+1))
+ dsttmp2 = eno1d(src2(i0+1,j0:j0+3,k0+1))
+ dsttmp3 = eno1d(src3(i0+1,j0:j0+3,k0+1))
+
+ case (11)
+!!$ Interpolate only in x and y
+
+ do jj = 0, 3
+ tmp2(jj) = eno1d(src1(i0:i0+3,j0+jj,k0+1))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do jj = 0, 3
+ tmp2(jj) = eno1d(src2(i0:i0+3,j0+jj,k0+1))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ do jj = 0, 3
+ tmp2(jj) = eno1d(src3(i0:i0+3,j0+jj,k0+1))
+ end do
+
+ dsttmp3 = eno1d(tmp2(0:3))
+
+ case (100)
+!!$ Interpolate only in z
+
+ dsttmp1 = eno1d(src1(i0+1,j0+1,k0:k0+3))
+ dsttmp2 = eno1d(src2(i0+1,j0+1,k0:k0+3))
+ dsttmp3 = eno1d(src3(i0+1,j0+1,k0:k0+3))
+
+ case (101)
+!!$ Interpolate only in x and z
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src1(i0:i0+3,j0+1,k0+kk))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src2(i0:i0+3,j0+1,k0+kk))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src3(i0:i0+3,j0+1,k0+kk))
+ end do
+
+ dsttmp3 = eno1d(tmp2(0:3))
+
+ case (110)
+!!$ Interpolate only in y and z
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src1(i0+1,j0:j0+3,k0+kk))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src2(i0+1,j0:j0+3,k0+kk))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src3(i0+1,j0:j0+3,k0+kk))
+ end do
+
+ dsttmp3 = eno1d(tmp2(0:3))
+
+ case (111)
+!!$ Interpolate in all of x, y, and z
+
+ do jj = 0, 3
+ do kk = 0, 3
+ tmp1(jj,kk) = eno1d(src1(i0:i0+3,j0+jj,k0+kk))
+ end do
+ end do
+ do ii = 0, 3
+ tmp2(ii) = eno1d(tmp1(0:3,ii))
+ end do
+
+ dsttmp1 = eno1d(tmp2(0:3))
+
+ do jj = 0, 3
+ do kk = 0, 3
+ tmp1(jj,kk) = eno1d(src2(i0:i0+3,j0+jj,k0+kk))
+ end do
+ end do
+ do ii = 0, 3
+ tmp2(ii) = eno1d(tmp1(0:3,ii))
+ end do
+
+ dsttmp2 = eno1d(tmp2(0:3))
+
+ do jj = 0, 3
+ do kk = 0, 3
+ tmp1(jj,kk) = eno1d(src3(i0:i0+3,j0+jj,k0+kk))
+ end do
+ end do
+ do ii = 0, 3
+ tmp2(ii) = eno1d(tmp1(0:3,ii))
+ end do
+
+ dsttmp3 = eno1d(tmp2(0:3))
+
+ case default
+ call CCTK_WARN(0, "Internal error in ENO prolongation. Should only be used with refinement factor 2!")
+ end select
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ s1fac * dsttmp1 + s2fac * dsttmp2 + s3fac * dsttmp3
+
+!!$ write(*,*) i,j,k,dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1),&
+!!$ s1fac,s2fac,s3fac,dsttmp1,dsttmp2,dsttmp3
+
+ if ( (dst(dstioff+i+1, dstjoff+j+1, dstkoff+k+1) - &
+ max(dsttmp1, dsttmp2, dsttmp3)) * &
+ (dst(dstioff+i+1, dstjoff+j+1, dstkoff+k+1) - &
+ min(dsttmp1, dsttmp2, dsttmp3)) .lt. 0 ) then
+
+!!$ Do linear interpolation in time instead
+
+!!$ write(*,*) t,t1,t2,t3
+
+ if (t < t2) then
+
+ tmps2fac = (t - t3) / (t2 - t3)
+ tmps3fac = (t - t2) / (t3 - t2)
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ tmps2fac * dsttmp2 + tmps3fac * dsttmp3
+
+ else
+
+ tmps1fac = (t - t2) / (t1 - t2)
+ tmps2fac = (t - t1) / (t2 - t1)
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ tmps1fac * dsttmp1 + tmps2fac * dsttmp2
+
+ end if
+
+ end if
+
+ end do
+ end do
+ end do
+
+end subroutine prolongate_3d_real8_3tl_eno
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_minmod.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_minmod.F77
new file mode 100644
index 000000000..9018a364b
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_minmod.F77
@@ -0,0 +1,388 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_minmod.F77,v 1.6 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+c$$$ This routine performs "TVD" prolongation. It is intended to be used
+c$$$ with GFs that are not expected to be smooth, particularly those
+c$$$ that must also obey certain constraints. The obvious example is the
+c$$$ density in hydrodynamics, which may be discontinuous yet must be
+c$$$ strictly positive.
+c$$$
+c$$$ To ensure that this prolongation method is used you should add the
+c$$$ tag
+c$$$
+c$$$ tags='Prolongation="TVD"'
+c$$$
+c$$$ to the interface.ccl on the appropriate group.
+c$$$
+c$$$ This applies minmod type limiting to the slope, checking over the
+c$$$ entire coarse grid cell for the minimum modulus in each direction.
+c$$$
+c$$$ The actual minmod function is defined in the routine
+c$$$
+c$$$ prolongate_3d_real8_minmod.F77
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_3tl_minmod (
+ $ src1, t1, src2, t2, src3, t3, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+ external minmod
+ CCTK_REAL8 minmod
+
+ CCTK_REAL8 half, zero
+ parameter (half = 0.5)
+ parameter (zero = 0)
+ CCTK_REAL8 dupw, dloc, slopex(3), slopey(3), slopez(3)
+ logical firstloop
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+
+
+c Loop over fine region
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+
+
+ slopex(1) = zero
+ slopey(1) = zero
+ slopez(1) = zero
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do jj = 1, 2
+
+ dupw = src1(i0+1 ,j0+jj,k0+kk) - src1(i0+0 ,j0+jj,k0+kk)
+ dloc = src1(i0+2 ,j0+jj,k0+kk) - src1(i0+1 ,j0+kk,k0+kk)
+ if (firstloop) then
+ slopex(1) = half * dble(fi) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopex(1) =
+ $ minmod(slopex(1), half * dble(fi) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do ii = 1, 2
+
+ dupw = src1(i0+ii,j0+1 ,k0+kk) - src1(i0+ii,j0+0 ,k0+kk)
+ dloc = src1(i0+ii,j0+2 ,k0+kk) - src1(i0+ii,j0+1 ,k0+kk)
+ if (firstloop) then
+ slopey(1) = half * dble(fj) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopey(1) =
+ $ minmod(slopey(1), half * dble(fj) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do jj = 1, 2
+ do ii = 1, 2
+ dupw = src1(i0+ii,j0+jj,k0+1 ) - src1(i0+ii,j0+jj,k0+0 )
+ dloc = src1(i0+ii,j0+jj,k0+2 ) - src1(i0+ii,j0+jj,k0+1 )
+ if (firstloop) then
+ slopez(1) = half * dble(fk) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopez(1) =
+ $ minmod(slopez(1), half * dble(fk) * minmod(dupw,dloc))
+ end if
+
+ end do
+ end do
+
+ slopex(2) = zero
+ slopey(2) = zero
+ slopez(2) = zero
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do jj = 1, 2
+
+ dupw = src2(i0+1 ,j0+jj,k0+kk) - src2(i0+0 ,j0+jj,k0+kk)
+ dloc = src2(i0+2 ,j0+jj,k0+kk) - src2(i0+1 ,j0+kk,k0+kk)
+ if (firstloop) then
+ slopex(2) = half * dble(fi) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopex(2) =
+ $ minmod(slopex(2), half * dble(fi) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do ii = 1, 2
+
+ dupw = src2(i0+ii,j0+1 ,k0+kk) - src2(i0+ii,j0+0 ,k0+kk)
+ dloc = src2(i0+ii,j0+2 ,k0+kk) - src2(i0+ii,j0+1 ,k0+kk)
+ if (firstloop) then
+ slopey(2) = half * dble(fj) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopey(2) =
+ $ minmod(slopey(2), half * dble(fj) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do jj = 1, 2
+ do ii = 1, 2
+
+ dupw = src2(i0+ii,j0+jj,k0+1 ) - src2(i0+ii,j0+jj,k0+0 )
+ dloc = src2(i0+ii,j0+jj,k0+2 ) - src2(i0+ii,j0+jj,k0+1 )
+ if (firstloop) then
+ slopez(2) = half * dble(fk) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopez(2) =
+ $ minmod(slopez(2), half * dble(fk) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ slopex(3) = zero
+ slopey(3) = zero
+ slopez(3) = zero
+
+ do kk = 1, 2
+ do jj = 1, 2
+
+ dupw = src3(i0+1 ,j0+jj,k0+kk) - src3(i0+0 ,j0+jj,k0+kk)
+ dloc = src3(i0+2 ,j0+jj,k0+kk) - src3(i0+1 ,j0+kk,k0+kk)
+ if (firstloop) then
+ slopex(3) = half * dble(fi) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopex(3) =
+ $ minmod(slopex(3), half * dble(fi) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do ii = 1, 2
+
+ dupw = src3(i0+ii,j0+1 ,k0+kk) - src3(i0+ii,j0+0 ,k0+kk)
+ dloc = src3(i0+ii,j0+2 ,k0+kk) - src3(i0+ii,j0+1 ,k0+kk)
+ if (firstloop) then
+ slopey(3) = half * dble(fj) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopey(3) =
+ $ minmod(slopey(3), half * dble(fj) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do jj = 1, 2
+ do ii = 1, 2
+
+ dupw = src3(i0+ii,j0+jj,k0+1 ) - src3(i0+ii,j0+jj,k0+0 )
+ dloc = src3(i0+ii,j0+jj,k0+2 ) - src3(i0+ii,j0+jj,k0+1 )
+ if (firstloop) then
+ slopez(3) = half * dble(fk) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopez(3) =
+ $ minmod(slopez(3), half * dble(fk) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) =
+ $ s1fac * (src1(i0+1,j0+1,k0+1) +
+ $ slopex(1) + slopey(1) + slopez(1)) +
+ $ s2fac * (src2(i0+1,j0+1,k0+1) +
+ $ slopex(2) + slopey(2) + slopez(2)) +
+ $ s3fac * (src3(i0+1,j0+1,k0+1) +
+ $ slopex(3) + slopey(3) + slopez(3))
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3.F77
new file mode 100644
index 000000000..c44e1119f
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3.F77
@@ -0,0 +1,222 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3.F77,v 1.13 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_3tl_o3 (
+ $ src1, t1, src2, t2, src3, t3, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+
+
+c Loop over fine region
+ dstdiv = one / (6*dstifac**3 * 6*dstjfac**3 * 6*dstkfac**3)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (-1)
+ kfac(2) = (fk+dstkfac) * (fk-dstkfac) * (fk-2*dstkfac) * 3
+ kfac(3) = (fk+dstkfac) * (fk ) * (fk-2*dstkfac) * (-3)
+ kfac(4) = (fk+dstkfac) * (fk ) * (fk- dstkfac) * 1
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (-1)
+ jfac(2) = (fj+dstjfac) * (fj-dstjfac) * (fj-2*dstjfac) * 3
+ jfac(3) = (fj+dstjfac) * (fj ) * (fj-2*dstjfac) * (-3)
+ jfac(4) = (fj+dstjfac) * (fj ) * (fj- dstjfac) * 1
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi ) * (fi-dstifac) * (fi-2*dstifac) * (-1)
+ ifac(2) = (fi+dstifac) * (fi-dstifac) * (fi-2*dstifac) * 3
+ ifac(3) = (fi+dstifac) * (fi ) * (fi-2*dstifac) * (-3)
+ ifac(4) = (fi+dstifac) * (fi ) * (fi- dstifac) * 1
+
+ res = 0
+
+ do kk=1,4
+ do jj=1,4
+ do ii=1,4
+
+ fac = ifac(ii) * jfac(jj) * kfac(kk)
+
+ if (fac.ne.0) then
+ CHKIDX (i0+ii-1, j0+jj-1, k0+kk-1, \
+ srciext,srcjext,srckext, "source")
+ res = res
+ $ + fac * s1fac * src1(i0+ii-1, j0+jj-1, k0+kk-1)
+ $ + fac * s2fac * src2(i0+ii-1, j0+jj-1, k0+kk-1)
+ $ + fac * s3fac * src3(i0+ii-1, j0+jj-1, k0+kk-1)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3_rf2.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3_rf2.F77
new file mode 100644
index 000000000..daa130251
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3_rf2.F77
@@ -0,0 +1,757 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o3_rf2.F77,v 1.3 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine prolongate_3d_real8_3tl_o3_rf2 (
+ $ src1, t1, src2, t2, src3, t3, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ CCTK_REAL8 one, half, fourth, eighth, sixteenth
+ parameter (one = 1)
+ parameter (half = one/2)
+ parameter (fourth = one/4)
+ parameter (eighth = one/8)
+ parameter (sixteenth = one/16)
+ CCTK_REAL8 f1, f2, f3, f4
+ parameter (f1 = - sixteenth)
+ parameter (f2 = 9*sixteenth)
+ parameter (f3 = 9*sixteenth)
+ parameter (f4 = - sixteenth)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer offsetlo, offsethi
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer is, js, ks
+ integer id, jd, kd
+ integer i, j, k
+
+ CCTK_REAL8 res1, res2, res3
+
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (srcbbox(d,3).ne.dstbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: source strides are not twice the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff, 2).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, 2).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) time interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+
+
+ fi = mod(srcioff, 2)
+ fj = mod(srcjoff, 2)
+ fk = mod(srckoff, 2)
+
+ i0 = srcioff / 2
+ j0 = srcjoff / 2
+ k0 = srckoff / 2
+
+
+
+c Loop over fine region
+c Label scheme: 8 fk fj fi
+
+c begin k loop
+ 8 continue
+ k = 0
+ ks = k0+1
+ kd = dstkoff+1
+ if (fk.eq.0) goto 80
+ if (fk.eq.1) goto 81
+ stop
+
+c begin j loop
+ 80 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 800
+ if (fj.eq.1) goto 801
+ stop
+
+c begin i loop
+ 800 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8000
+ if (fi.eq.1) goto 8001
+ stop
+
+c kernel
+ 8000 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + s1fac * src1(is,js,ks)
+ $ + s2fac * src2(is,js,ks)
+ $ + s3fac * src3(is,js,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8001
+ goto 900
+
+c kernel
+ 8001 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js,ks, 4,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * s1fac * src1(is-1,js,ks) + f2 * s1fac * src1(is ,js,ks)
+ $ + f3 * s1fac * src1(is+1,js,ks) + f4 * s1fac * src1(is+2,js,ks)
+ $ + f1 * s2fac * src2(is-1,js,ks) + f2 * s2fac * src2(is ,js,ks)
+ $ + f3 * s2fac * src2(is+1,js,ks) + f4 * s2fac * src2(is+2,js,ks)
+ $ + f1 * s3fac * src3(is-1,js,ks) + f2 * s3fac * src3(is ,js,ks)
+ $ + f3 * s3fac * src3(is+1,js,ks) + f4 * s3fac * src3(is+2,js,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8000
+ goto 900
+
+c end i loop
+ 900 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 801
+ goto 90
+
+c begin i loop
+ 801 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8010
+ if (fi.eq.1) goto 8011
+ stop
+
+c kernel
+ 8010 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js-1,ks, 1,4,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * s1fac * src1(is,js-1,ks) + f2 * s1fac * src1(is,js ,ks)
+ $ + f3 * s1fac * src1(is,js+1,ks) + f4 * s1fac * src1(is,js+2,ks)
+ $ + f1 * s2fac * src2(is,js-1,ks) + f2 * s2fac * src2(is,js ,ks)
+ $ + f3 * s2fac * src2(is,js+1,ks) + f4 * s2fac * src2(is,js+2,ks)
+ $ + f1 * s3fac * src3(is,js-1,ks) + f2 * s3fac * src3(is,js ,ks)
+ $ + f3 * s3fac * src3(is,js+1,ks) + f4 * s3fac * src3(is,js+2,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8011
+ goto 901
+
+c kernel
+ 8011 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js-1,ks, 4,4,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * s1fac * src1(is-1,js-1,ks)
+ $ + f2*f1 * s1fac * src1(is ,js-1,ks)
+ $ + f3*f1 * s1fac * src1(is+1,js-1,ks)
+ $ + f4*f1 * s1fac * src1(is+2,js-1,ks)
+ $ + f1*f2 * s1fac * src1(is-1,js ,ks)
+ $ + f2*f2 * s1fac * src1(is ,js ,ks)
+ $ + f3*f2 * s1fac * src1(is+1,js ,ks)
+ $ + f4*f2 * s1fac * src1(is+2,js ,ks)
+ $ + f1*f3 * s1fac * src1(is-1,js+1,ks)
+ $ + f2*f3 * s1fac * src1(is ,js+1,ks)
+ $ + f3*f3 * s1fac * src1(is+1,js+1,ks)
+ $ + f4*f3 * s1fac * src1(is+2,js+1,ks)
+ $ + f1*f4 * s1fac * src1(is-1,js+2,ks)
+ $ + f2*f4 * s1fac * src1(is ,js+2,ks)
+ $ + f3*f4 * s1fac * src1(is+1,js+2,ks)
+ $ + f4*f4 * s1fac * src1(is+2,js+2,ks)
+ $
+ $ + f1*f1 * s2fac * src2(is-1,js-1,ks)
+ $ + f2*f1 * s2fac * src2(is ,js-1,ks)
+ $ + f3*f1 * s2fac * src2(is+1,js-1,ks)
+ $ + f4*f1 * s2fac * src2(is+2,js-1,ks)
+ $ + f1*f2 * s2fac * src2(is-1,js ,ks)
+ $ + f2*f2 * s2fac * src2(is ,js ,ks)
+ $ + f3*f2 * s2fac * src2(is+1,js ,ks)
+ $ + f4*f2 * s2fac * src2(is+2,js ,ks)
+ $ + f1*f3 * s2fac * src2(is-1,js+1,ks)
+ $ + f2*f3 * s2fac * src2(is ,js+1,ks)
+ $ + f3*f3 * s2fac * src2(is+1,js+1,ks)
+ $ + f4*f3 * s2fac * src2(is+2,js+1,ks)
+ $ + f1*f4 * s2fac * src2(is-1,js+2,ks)
+ $ + f2*f4 * s2fac * src2(is ,js+2,ks)
+ $ + f3*f4 * s2fac * src2(is+1,js+2,ks)
+ $ + f4*f4 * s2fac * src2(is+2,js+2,ks)
+ $
+ $ + f1*f1 * s3fac * src3(is-1,js-1,ks)
+ $ + f2*f1 * s3fac * src3(is ,js-1,ks)
+ $ + f3*f1 * s3fac * src3(is+1,js-1,ks)
+ $ + f4*f1 * s3fac * src3(is+2,js-1,ks)
+ $ + f1*f2 * s3fac * src3(is-1,js ,ks)
+ $ + f2*f2 * s3fac * src3(is ,js ,ks)
+ $ + f3*f2 * s3fac * src3(is+1,js ,ks)
+ $ + f4*f2 * s3fac * src3(is+2,js ,ks)
+ $ + f1*f3 * s3fac * src3(is-1,js+1,ks)
+ $ + f2*f3 * s3fac * src3(is ,js+1,ks)
+ $ + f3*f3 * s3fac * src3(is+1,js+1,ks)
+ $ + f4*f3 * s3fac * src3(is+2,js+1,ks)
+ $ + f1*f4 * s3fac * src3(is-1,js+2,ks)
+ $ + f2*f4 * s3fac * src3(is ,js+2,ks)
+ $ + f3*f4 * s3fac * src3(is+1,js+2,ks)
+ $ + f4*f4 * s3fac * src3(is+2,js+2,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8010
+ goto 901
+
+c end i loop
+ 901 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 800
+ goto 90
+
+c end j loop
+ 90 continue
+ k = k+1
+ kd = kd+1
+ if (k.lt.regkext) goto 81
+ goto 9
+
+c begin j loop
+ 81 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 810
+ if (fj.eq.1) goto 811
+ stop
+
+c begin i loop
+ 810 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8100
+ if (fi.eq.1) goto 8101
+ stop
+
+c kernel
+ 8100 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks-1, 1,1,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * s1fac * src1(is,js,ks-1) + f2 * s1fac * src1(is,js,ks )
+ $ + f3 * s1fac * src1(is,js,ks+1) + f4 * s1fac * src1(is,js,ks+2)
+ $ + f1 * s2fac * src2(is,js,ks-1) + f2 * s2fac * src2(is,js,ks )
+ $ + f3 * s2fac * src2(is,js,ks+1) + f4 * s2fac * src2(is,js,ks+2)
+ $ + f1 * s3fac * src3(is,js,ks-1) + f2 * s3fac * src3(is,js,ks )
+ $ + f3 * s3fac * src3(is,js,ks+1) + f4 * s3fac * src3(is,js,ks+2)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8101
+ goto 910
+
+c kernel
+ 8101 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js,ks-1, 4,1,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * s1fac * src1(is-1,js,ks-1)
+ $ + f2*f1 * s1fac * src1(is ,js,ks-1)
+ $ + f3*f1 * s1fac * src1(is+1,js,ks-1)
+ $ + f4*f1 * s1fac * src1(is+2,js,ks-1)
+ $ + f1*f2 * s1fac * src1(is-1,js,ks )
+ $ + f2*f2 * s1fac * src1(is ,js,ks )
+ $ + f3*f2 * s1fac * src1(is+1,js,ks )
+ $ + f4*f2 * s1fac * src1(is+2,js,ks )
+ $ + f1*f3 * s1fac * src1(is-1,js,ks+1)
+ $ + f2*f3 * s1fac * src1(is ,js,ks+1)
+ $ + f3*f3 * s1fac * src1(is+1,js,ks+1)
+ $ + f4*f3 * s1fac * src1(is+2,js,ks+1)
+ $ + f1*f4 * s1fac * src1(is-1,js,ks+2)
+ $ + f2*f4 * s1fac * src1(is ,js,ks+2)
+ $ + f3*f4 * s1fac * src1(is+1,js,ks+2)
+ $ + f4*f4 * s1fac * src1(is+2,js,ks+2)
+ $
+ $ + f1*f1 * s2fac * src2(is-1,js,ks-1)
+ $ + f2*f1 * s2fac * src2(is ,js,ks-1)
+ $ + f3*f1 * s2fac * src2(is+1,js,ks-1)
+ $ + f4*f1 * s2fac * src2(is+2,js,ks-1)
+ $ + f1*f2 * s2fac * src2(is-1,js,ks )
+ $ + f2*f2 * s2fac * src2(is ,js,ks )
+ $ + f3*f2 * s2fac * src2(is+1,js,ks )
+ $ + f4*f2 * s2fac * src2(is+2,js,ks )
+ $ + f1*f3 * s2fac * src2(is-1,js,ks+1)
+ $ + f2*f3 * s2fac * src2(is ,js,ks+1)
+ $ + f3*f3 * s2fac * src2(is+1,js,ks+1)
+ $ + f4*f3 * s2fac * src2(is+2,js,ks+1)
+ $ + f1*f4 * s2fac * src2(is-1,js,ks+2)
+ $ + f2*f4 * s2fac * src2(is ,js,ks+2)
+ $ + f3*f4 * s2fac * src2(is+1,js,ks+2)
+ $ + f4*f4 * s2fac * src2(is+2,js,ks+2)
+ $
+ $ + f1*f1 * s3fac * src3(is-1,js,ks-1)
+ $ + f2*f1 * s3fac * src3(is ,js,ks-1)
+ $ + f3*f1 * s3fac * src3(is+1,js,ks-1)
+ $ + f4*f1 * s3fac * src3(is+2,js,ks-1)
+ $ + f1*f2 * s3fac * src3(is-1,js,ks )
+ $ + f2*f2 * s3fac * src3(is ,js,ks )
+ $ + f3*f2 * s3fac * src3(is+1,js,ks )
+ $ + f4*f2 * s3fac * src3(is+2,js,ks )
+ $ + f1*f3 * s3fac * src3(is-1,js,ks+1)
+ $ + f2*f3 * s3fac * src3(is ,js,ks+1)
+ $ + f3*f3 * s3fac * src3(is+1,js,ks+1)
+ $ + f4*f3 * s3fac * src3(is+2,js,ks+1)
+ $ + f1*f4 * s3fac * src3(is-1,js,ks+2)
+ $ + f2*f4 * s3fac * src3(is ,js,ks+2)
+ $ + f3*f4 * s3fac * src3(is+1,js,ks+2)
+ $ + f4*f4 * s3fac * src3(is+2,js,ks+2)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8100
+ goto 910
+
+c end i loop
+ 910 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 811
+ goto 91
+
+c begin i loop
+ 811 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8110
+ if (fi.eq.1) goto 8111
+ stop
+
+c kernel
+ 8110 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js-1,ks-1, 1,4,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * s1fac * src1(is,js-1,ks-1)
+ $ + f2*f1 * s1fac * src1(is,js ,ks-1)
+ $ + f3*f1 * s1fac * src1(is,js+1,ks-1)
+ $ + f4*f1 * s1fac * src1(is,js+2,ks-1)
+ $ + f1*f2 * s1fac * src1(is,js-1,ks )
+ $ + f2*f2 * s1fac * src1(is,js ,ks )
+ $ + f3*f2 * s1fac * src1(is,js+1,ks )
+ $ + f4*f2 * s1fac * src1(is,js+2,ks )
+ $ + f1*f3 * s1fac * src1(is,js-1,ks+1)
+ $ + f2*f3 * s1fac * src1(is,js ,ks+1)
+ $ + f3*f3 * s1fac * src1(is,js+1,ks+1)
+ $ + f4*f3 * s1fac * src1(is,js+2,ks+1)
+ $ + f1*f4 * s1fac * src1(is,js-1,ks+2)
+ $ + f2*f4 * s1fac * src1(is,js ,ks+2)
+ $ + f3*f4 * s1fac * src1(is,js+1,ks+2)
+ $ + f4*f4 * s1fac * src1(is,js+2,ks+2)
+ $
+ $ + f1*f1 * s2fac * src2(is,js-1,ks-1)
+ $ + f2*f1 * s2fac * src2(is,js ,ks-1)
+ $ + f3*f1 * s2fac * src2(is,js+1,ks-1)
+ $ + f4*f1 * s2fac * src2(is,js+2,ks-1)
+ $ + f1*f2 * s2fac * src2(is,js-1,ks )
+ $ + f2*f2 * s2fac * src2(is,js ,ks )
+ $ + f3*f2 * s2fac * src2(is,js+1,ks )
+ $ + f4*f2 * s2fac * src2(is,js+2,ks )
+ $ + f1*f3 * s2fac * src2(is,js-1,ks+1)
+ $ + f2*f3 * s2fac * src2(is,js ,ks+1)
+ $ + f3*f3 * s2fac * src2(is,js+1,ks+1)
+ $ + f4*f3 * s2fac * src2(is,js+2,ks+1)
+ $ + f1*f4 * s2fac * src2(is,js-1,ks+2)
+ $ + f2*f4 * s2fac * src2(is,js ,ks+2)
+ $ + f3*f4 * s2fac * src2(is,js+1,ks+2)
+ $ + f4*f4 * s2fac * src2(is,js+2,ks+2)
+ $
+ $ + f1*f1 * s3fac * src3(is,js-1,ks-1)
+ $ + f2*f1 * s3fac * src3(is,js ,ks-1)
+ $ + f3*f1 * s3fac * src3(is,js+1,ks-1)
+ $ + f4*f1 * s3fac * src3(is,js+2,ks-1)
+ $ + f1*f2 * s3fac * src3(is,js-1,ks )
+ $ + f2*f2 * s3fac * src3(is,js ,ks )
+ $ + f3*f2 * s3fac * src3(is,js+1,ks )
+ $ + f4*f2 * s3fac * src3(is,js+2,ks )
+ $ + f1*f3 * s3fac * src3(is,js-1,ks+1)
+ $ + f2*f3 * s3fac * src3(is,js ,ks+1)
+ $ + f3*f3 * s3fac * src3(is,js+1,ks+1)
+ $ + f4*f3 * s3fac * src3(is,js+2,ks+1)
+ $ + f1*f4 * s3fac * src3(is,js-1,ks+2)
+ $ + f2*f4 * s3fac * src3(is,js ,ks+2)
+ $ + f3*f4 * s3fac * src3(is,js+1,ks+2)
+ $ + f4*f4 * s3fac * src3(is,js+2,ks+2)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8111
+ goto 911
+
+c kernel
+ 8111 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js-1,ks-1, 4,4,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ res1 =
+ $ + f1*f1*f1 * s1fac * src1(is-1,js-1,ks-1)
+ $ + f2*f1*f1 * s1fac * src1(is ,js-1,ks-1)
+ $ + f3*f1*f1 * s1fac * src1(is+1,js-1,ks-1)
+ $ + f4*f1*f1 * s1fac * src1(is+2,js-1,ks-1)
+ $ + f1*f2*f1 * s1fac * src1(is-1,js ,ks-1)
+ $ + f2*f2*f1 * s1fac * src1(is ,js ,ks-1)
+ $ + f3*f2*f1 * s1fac * src1(is+1,js ,ks-1)
+ $ + f4*f2*f1 * s1fac * src1(is+2,js ,ks-1)
+ $ + f1*f3*f1 * s1fac * src1(is-1,js+1,ks-1)
+ $ + f2*f3*f1 * s1fac * src1(is ,js+1,ks-1)
+ $ + f3*f3*f1 * s1fac * src1(is+1,js+1,ks-1)
+ $ + f4*f3*f1 * s1fac * src1(is+2,js+1,ks-1)
+ $ + f1*f4*f1 * s1fac * src1(is-1,js+2,ks-1)
+ $ + f2*f4*f1 * s1fac * src1(is ,js+2,ks-1)
+ $ + f3*f4*f1 * s1fac * src1(is+1,js+2,ks-1)
+ $ + f4*f4*f1 * s1fac * src1(is+2,js+2,ks-1)
+ $
+ $ + f1*f1*f2 * s1fac * src1(is-1,js-1,ks )
+ $ + f2*f1*f2 * s1fac * src1(is ,js-1,ks )
+ $ + f3*f1*f2 * s1fac * src1(is+1,js-1,ks )
+ $ + f4*f1*f2 * s1fac * src1(is+2,js-1,ks )
+ $ + f1*f2*f2 * s1fac * src1(is-1,js ,ks )
+ $ + f2*f2*f2 * s1fac * src1(is ,js ,ks )
+ $ + f3*f2*f2 * s1fac * src1(is+1,js ,ks )
+ $ + f4*f2*f2 * s1fac * src1(is+2,js ,ks )
+ $ + f1*f3*f2 * s1fac * src1(is-1,js+1,ks )
+ $ + f2*f3*f2 * s1fac * src1(is ,js+1,ks )
+ $ + f3*f3*f2 * s1fac * src1(is+1,js+1,ks )
+ $ + f4*f3*f2 * s1fac * src1(is+2,js+1,ks )
+ $ + f1*f4*f2 * s1fac * src1(is-1,js+2,ks )
+ $ + f2*f4*f2 * s1fac * src1(is ,js+2,ks )
+ $ + f3*f4*f2 * s1fac * src1(is+1,js+2,ks )
+ $ + f4*f4*f2 * s1fac * src1(is+2,js+2,ks )
+ $
+ $ + f1*f1*f3 * s1fac * src1(is-1,js-1,ks+1)
+ $ + f2*f1*f3 * s1fac * src1(is ,js-1,ks+1)
+ $ + f3*f1*f3 * s1fac * src1(is+1,js-1,ks+1)
+ $ + f4*f1*f3 * s1fac * src1(is+2,js-1,ks+1)
+ $ + f1*f2*f3 * s1fac * src1(is-1,js ,ks+1)
+ $ + f2*f2*f3 * s1fac * src1(is ,js ,ks+1)
+ $ + f3*f2*f3 * s1fac * src1(is+1,js ,ks+1)
+ $ + f4*f2*f3 * s1fac * src1(is+2,js ,ks+1)
+ $ + f1*f3*f3 * s1fac * src1(is-1,js+1,ks+1)
+ $ + f2*f3*f3 * s1fac * src1(is ,js+1,ks+1)
+ $ + f3*f3*f3 * s1fac * src1(is+1,js+1,ks+1)
+ $ + f4*f3*f3 * s1fac * src1(is+2,js+1,ks+1)
+ $ + f1*f4*f3 * s1fac * src1(is-1,js+2,ks+1)
+ $ + f2*f4*f3 * s1fac * src1(is ,js+2,ks+1)
+ $ + f3*f4*f3 * s1fac * src1(is+1,js+2,ks+1)
+ $ + f4*f4*f3 * s1fac * src1(is+2,js+2,ks+1)
+ $
+ $ + f1*f1*f4 * s1fac * src1(is-1,js-1,ks+2)
+ $ + f2*f1*f4 * s1fac * src1(is ,js-1,ks+2)
+ $ + f3*f1*f4 * s1fac * src1(is+1,js-1,ks+2)
+ $ + f4*f1*f4 * s1fac * src1(is+2,js-1,ks+2)
+ $ + f1*f2*f4 * s1fac * src1(is-1,js ,ks+2)
+ $ + f2*f2*f4 * s1fac * src1(is ,js ,ks+2)
+ $ + f3*f2*f4 * s1fac * src1(is+1,js ,ks+2)
+ $ + f4*f2*f4 * s1fac * src1(is+2,js ,ks+2)
+ $ + f1*f3*f4 * s1fac * src1(is-1,js+1,ks+2)
+ $ + f2*f3*f4 * s1fac * src1(is ,js+1,ks+2)
+ $ + f3*f3*f4 * s1fac * src1(is+1,js+1,ks+2)
+ $ + f4*f3*f4 * s1fac * src1(is+2,js+1,ks+2)
+ $ + f1*f4*f4 * s1fac * src1(is-1,js+2,ks+2)
+ $ + f2*f4*f4 * s1fac * src1(is ,js+2,ks+2)
+ $ + f3*f4*f4 * s1fac * src1(is+1,js+2,ks+2)
+ $ + f4*f4*f4 * s1fac * src1(is+2,js+2,ks+2)
+ res2 =
+ $ + f1*f1*f1 * s2fac * src2(is-1,js-1,ks-1)
+ $ + f2*f1*f1 * s2fac * src2(is ,js-1,ks-1)
+ $ + f3*f1*f1 * s2fac * src2(is+1,js-1,ks-1)
+ $ + f4*f1*f1 * s2fac * src2(is+2,js-1,ks-1)
+ $ + f1*f2*f1 * s2fac * src2(is-1,js ,ks-1)
+ $ + f2*f2*f1 * s2fac * src2(is ,js ,ks-1)
+ $ + f3*f2*f1 * s2fac * src2(is+1,js ,ks-1)
+ $ + f4*f2*f1 * s2fac * src2(is+2,js ,ks-1)
+ $ + f1*f3*f1 * s2fac * src2(is-1,js+1,ks-1)
+ $ + f2*f3*f1 * s2fac * src2(is ,js+1,ks-1)
+ $ + f3*f3*f1 * s2fac * src2(is+1,js+1,ks-1)
+ $ + f4*f3*f1 * s2fac * src2(is+2,js+1,ks-1)
+ $ + f1*f4*f1 * s2fac * src2(is-1,js+2,ks-1)
+ $ + f2*f4*f1 * s2fac * src2(is ,js+2,ks-1)
+ $ + f3*f4*f1 * s2fac * src2(is+1,js+2,ks-1)
+ $ + f4*f4*f1 * s2fac * src2(is+2,js+2,ks-1)
+ $
+ $ + f1*f1*f2 * s2fac * src2(is-1,js-1,ks )
+ $ + f2*f1*f2 * s2fac * src2(is ,js-1,ks )
+ $ + f3*f1*f2 * s2fac * src2(is+1,js-1,ks )
+ $ + f4*f1*f2 * s2fac * src2(is+2,js-1,ks )
+ $ + f1*f2*f2 * s2fac * src2(is-1,js ,ks )
+ $ + f2*f2*f2 * s2fac * src2(is ,js ,ks )
+ $ + f3*f2*f2 * s2fac * src2(is+1,js ,ks )
+ $ + f4*f2*f2 * s2fac * src2(is+2,js ,ks )
+ $ + f1*f3*f2 * s2fac * src2(is-1,js+1,ks )
+ $ + f2*f3*f2 * s2fac * src2(is ,js+1,ks )
+ $ + f3*f3*f2 * s2fac * src2(is+1,js+1,ks )
+ $ + f4*f3*f2 * s2fac * src2(is+2,js+1,ks )
+ $ + f1*f4*f2 * s2fac * src2(is-1,js+2,ks )
+ $ + f2*f4*f2 * s2fac * src2(is ,js+2,ks )
+ $ + f3*f4*f2 * s2fac * src2(is+1,js+2,ks )
+ $ + f4*f4*f2 * s2fac * src2(is+2,js+2,ks )
+ $
+ $ + f1*f1*f3 * s2fac * src2(is-1,js-1,ks+1)
+ $ + f2*f1*f3 * s2fac * src2(is ,js-1,ks+1)
+ $ + f3*f1*f3 * s2fac * src2(is+1,js-1,ks+1)
+ $ + f4*f1*f3 * s2fac * src2(is+2,js-1,ks+1)
+ $ + f1*f2*f3 * s2fac * src2(is-1,js ,ks+1)
+ $ + f2*f2*f3 * s2fac * src2(is ,js ,ks+1)
+ $ + f3*f2*f3 * s2fac * src2(is+1,js ,ks+1)
+ $ + f4*f2*f3 * s2fac * src2(is+2,js ,ks+1)
+ $ + f1*f3*f3 * s2fac * src2(is-1,js+1,ks+1)
+ $ + f2*f3*f3 * s2fac * src2(is ,js+1,ks+1)
+ $ + f3*f3*f3 * s2fac * src2(is+1,js+1,ks+1)
+ $ + f4*f3*f3 * s2fac * src2(is+2,js+1,ks+1)
+ $ + f1*f4*f3 * s2fac * src2(is-1,js+2,ks+1)
+ $ + f2*f4*f3 * s2fac * src2(is ,js+2,ks+1)
+ $ + f3*f4*f3 * s2fac * src2(is+1,js+2,ks+1)
+ $ + f4*f4*f3 * s2fac * src2(is+2,js+2,ks+1)
+ $
+ $ + f1*f1*f4 * s2fac * src2(is-1,js-1,ks+2)
+ $ + f2*f1*f4 * s2fac * src2(is ,js-1,ks+2)
+ $ + f3*f1*f4 * s2fac * src2(is+1,js-1,ks+2)
+ $ + f4*f1*f4 * s2fac * src2(is+2,js-1,ks+2)
+ $ + f1*f2*f4 * s2fac * src2(is-1,js ,ks+2)
+ $ + f2*f2*f4 * s2fac * src2(is ,js ,ks+2)
+ $ + f3*f2*f4 * s2fac * src2(is+1,js ,ks+2)
+ $ + f4*f2*f4 * s2fac * src2(is+2,js ,ks+2)
+ $ + f1*f3*f4 * s2fac * src2(is-1,js+1,ks+2)
+ $ + f2*f3*f4 * s2fac * src2(is ,js+1,ks+2)
+ $ + f3*f3*f4 * s2fac * src2(is+1,js+1,ks+2)
+ $ + f4*f3*f4 * s2fac * src2(is+2,js+1,ks+2)
+ $ + f1*f4*f4 * s2fac * src2(is-1,js+2,ks+2)
+ $ + f2*f4*f4 * s2fac * src2(is ,js+2,ks+2)
+ $ + f3*f4*f4 * s2fac * src2(is+1,js+2,ks+2)
+ $ + f4*f4*f4 * s2fac * src2(is+2,js+2,ks+2)
+ res3 =
+ $ + f1*f1*f1 * s3fac * src3(is-1,js-1,ks-1)
+ $ + f2*f1*f1 * s3fac * src3(is ,js-1,ks-1)
+ $ + f3*f1*f1 * s3fac * src3(is+1,js-1,ks-1)
+ $ + f4*f1*f1 * s3fac * src3(is+2,js-1,ks-1)
+ $ + f1*f2*f1 * s3fac * src3(is-1,js ,ks-1)
+ $ + f2*f2*f1 * s3fac * src3(is ,js ,ks-1)
+ $ + f3*f2*f1 * s3fac * src3(is+1,js ,ks-1)
+ $ + f4*f2*f1 * s3fac * src3(is+2,js ,ks-1)
+ $ + f1*f3*f1 * s3fac * src3(is-1,js+1,ks-1)
+ $ + f2*f3*f1 * s3fac * src3(is ,js+1,ks-1)
+ $ + f3*f3*f1 * s3fac * src3(is+1,js+1,ks-1)
+ $ + f4*f3*f1 * s3fac * src3(is+2,js+1,ks-1)
+ $ + f1*f4*f1 * s3fac * src3(is-1,js+2,ks-1)
+ $ + f2*f4*f1 * s3fac * src3(is ,js+2,ks-1)
+ $ + f3*f4*f1 * s3fac * src3(is+1,js+2,ks-1)
+ $ + f4*f4*f1 * s3fac * src3(is+2,js+2,ks-1)
+ $
+ $ + f1*f1*f2 * s3fac * src3(is-1,js-1,ks )
+ $ + f2*f1*f2 * s3fac * src3(is ,js-1,ks )
+ $ + f3*f1*f2 * s3fac * src3(is+1,js-1,ks )
+ $ + f4*f1*f2 * s3fac * src3(is+2,js-1,ks )
+ $ + f1*f2*f2 * s3fac * src3(is-1,js ,ks )
+ $ + f2*f2*f2 * s3fac * src3(is ,js ,ks )
+ $ + f3*f2*f2 * s3fac * src3(is+1,js ,ks )
+ $ + f4*f2*f2 * s3fac * src3(is+2,js ,ks )
+ $ + f1*f3*f2 * s3fac * src3(is-1,js+1,ks )
+ $ + f2*f3*f2 * s3fac * src3(is ,js+1,ks )
+ $ + f3*f3*f2 * s3fac * src3(is+1,js+1,ks )
+ $ + f4*f3*f2 * s3fac * src3(is+2,js+1,ks )
+ $ + f1*f4*f2 * s3fac * src3(is-1,js+2,ks )
+ $ + f2*f4*f2 * s3fac * src3(is ,js+2,ks )
+ $ + f3*f4*f2 * s3fac * src3(is+1,js+2,ks )
+ $ + f4*f4*f2 * s3fac * src3(is+2,js+2,ks )
+ $
+ $ + f1*f1*f3 * s3fac * src3(is-1,js-1,ks+1)
+ $ + f2*f1*f3 * s3fac * src3(is ,js-1,ks+1)
+ $ + f3*f1*f3 * s3fac * src3(is+1,js-1,ks+1)
+ $ + f4*f1*f3 * s3fac * src3(is+2,js-1,ks+1)
+ $ + f1*f2*f3 * s3fac * src3(is-1,js ,ks+1)
+ $ + f2*f2*f3 * s3fac * src3(is ,js ,ks+1)
+ $ + f3*f2*f3 * s3fac * src3(is+1,js ,ks+1)
+ $ + f4*f2*f3 * s3fac * src3(is+2,js ,ks+1)
+ $ + f1*f3*f3 * s3fac * src3(is-1,js+1,ks+1)
+ $ + f2*f3*f3 * s3fac * src3(is ,js+1,ks+1)
+ $ + f3*f3*f3 * s3fac * src3(is+1,js+1,ks+1)
+ $ + f4*f3*f3 * s3fac * src3(is+2,js+1,ks+1)
+ $ + f1*f4*f3 * s3fac * src3(is-1,js+2,ks+1)
+ $ + f2*f4*f3 * s3fac * src3(is ,js+2,ks+1)
+ $ + f3*f4*f3 * s3fac * src3(is+1,js+2,ks+1)
+ $ + f4*f4*f3 * s3fac * src3(is+2,js+2,ks+1)
+ $
+ $ + f1*f1*f4 * s3fac * src3(is-1,js-1,ks+2)
+ $ + f2*f1*f4 * s3fac * src3(is ,js-1,ks+2)
+ $ + f3*f1*f4 * s3fac * src3(is+1,js-1,ks+2)
+ $ + f4*f1*f4 * s3fac * src3(is+2,js-1,ks+2)
+ $ + f1*f2*f4 * s3fac * src3(is-1,js ,ks+2)
+ $ + f2*f2*f4 * s3fac * src3(is ,js ,ks+2)
+ $ + f3*f2*f4 * s3fac * src3(is+1,js ,ks+2)
+ $ + f4*f2*f4 * s3fac * src3(is+2,js ,ks+2)
+ $ + f1*f3*f4 * s3fac * src3(is-1,js+1,ks+2)
+ $ + f2*f3*f4 * s3fac * src3(is ,js+1,ks+2)
+ $ + f3*f3*f4 * s3fac * src3(is+1,js+1,ks+2)
+ $ + f4*f3*f4 * s3fac * src3(is+2,js+1,ks+2)
+ $ + f1*f4*f4 * s3fac * src3(is-1,js+2,ks+2)
+ $ + f2*f4*f4 * s3fac * src3(is ,js+2,ks+2)
+ $ + f3*f4*f4 * s3fac * src3(is+1,js+2,ks+2)
+ $ + f4*f4*f4 * s3fac * src3(is+2,js+2,ks+2)
+ dst(id,jd,kd) = res1 + res2 + res3
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8110
+ goto 911
+
+c end i loop
+ 911 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 810
+ goto 91
+
+c end j loop
+ 91 continue
+ k = k+1
+ kd = kd+1
+ ks = ks+1
+ if (k.lt.regkext) goto 80
+ goto 9
+
+c end k loop
+ 9 continue
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o5.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o5.F77
new file mode 100644
index 000000000..28f8c155f
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o5.F77
@@ -0,0 +1,230 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_o5.F77,v 1.3 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_3tl_o5 (
+ $ src1, t1, src2, t2, src3, t3, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(6), jfac(6), kfac(6)
+ integer ii, jj, kk
+ CCTK_REAL8 fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+
+
+c Loop over fine region
+c (This expression cannot be evaluated as integer)
+ dstdiv = one / (120*dstifac**5) / (120*dstjfac**5) / (120*dstkfac**5)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk+ dstkfac) * (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * (- 1)
+ kfac(2) = (fk+2*dstkfac) * (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * ( 5)
+ kfac(3) = (fk+2*dstkfac) * (fk+dstkfac) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * (-10)
+ kfac(4) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk-2*dstkfac) * (fk-3*dstkfac) * ( 10)
+ kfac(5) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk- dstkfac) * (fk-3*dstkfac) * (- 5)
+ kfac(6) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk- dstkfac) * (fk-2*dstkfac) * ( 1)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj+ dstjfac) * (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * (- 1)
+ jfac(2) = (fj+2*dstjfac) * (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * ( 5)
+ jfac(3) = (fj+2*dstjfac) * (fj+dstjfac) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * (-10)
+ jfac(4) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj-2*dstjfac) * (fj-3*dstjfac) * ( 10)
+ jfac(5) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj- dstjfac) * (fj-3*dstjfac) * (- 5)
+ jfac(6) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj- dstjfac) * (fj-2*dstjfac) * ( 1)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi+ dstifac) * (fi ) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * (- 1)
+ ifac(2) = (fi+2*dstifac) * (fi ) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * ( 5)
+ ifac(3) = (fi+2*dstifac) * (fi+dstifac) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * (-10)
+ ifac(4) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi-2*dstifac) * (fi-3*dstifac) * ( 10)
+ ifac(5) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi- dstifac) * (fi-3*dstifac) * (- 5)
+ ifac(6) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi- dstifac) * (fi-2*dstifac) * ( 1)
+
+ res = 0
+
+ do kk=1,6
+ do jj=1,6
+ do ii=1,6
+
+ if (ifac(ii).ne.0 .and. jfac(jj).ne.0 .and. kfac(kk).ne.0) then
+c (This expression cannot be evaluated as integer)
+ fac = one * ifac(ii) * jfac(jj) * kfac(kk)
+
+ CHKIDX (i0+ii-2, j0+jj-2, k0+kk-2, \
+ srciext,srcjext,srckext, "source")
+ res = res
+ $ + fac * s1fac * src1(i0+ii-2, j0+jj-2, k0+kk-2)
+ $ + fac * s2fac * src2(i0+ii-2, j0+jj-2, k0+kk-2)
+ $ + fac * s3fac * src3(i0+ii-2, j0+jj-2, k0+kk-2)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_rf2.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_rf2.F77
new file mode 100644
index 000000000..a77498fef
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_rf2.F77
@@ -0,0 +1,430 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_3tl_rf2.F77,v 1.3 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine prolongate_3d_real8_3tl_rf2 (
+ $ src1, t1, src2, t2, src3, t3, srciext, srcjext, srckext,
+ $ dst, t, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL8 eps
+ parameter (eps = 1.0d-10)
+
+ CCTK_REAL8 one, half, fourth, eighth
+ parameter (one = 1)
+ parameter (half = one/2)
+ parameter (fourth = one/4)
+ parameter (eighth = one/8)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src1(srciext,srcjext,srckext)
+ CCTK_REAL8 t1
+ CCTK_REAL8 src2(srciext,srcjext,srckext)
+ CCTK_REAL8 t2
+ CCTK_REAL8 src3(srciext,srcjext,srckext)
+ CCTK_REAL8 t3
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer is, js, ks
+ integer id, jd, kd
+ integer i, j, k
+
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (srcbbox(d,3).ne.dstbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: source strides are not twice the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Quadratic (second order) time interpolation
+ if (t1.eq.t2 .or. t1.eq.t3 .or. t2.eq.t3) then
+ call CCTK_WARN (0, "Internal error: arrays have same time")
+ end if
+ if (t.lt.min(t1,t2,t3)-eps .or. t.gt.max(t1,t2,t3)+eps) then
+ call CCTK_WARN (0, "Internal error: extrapolation in time")
+ end if
+
+ s1fac = (t - t2) * (t - t3) / ((t1 - t2) * (t1 - t3))
+ s2fac = (t - t1) * (t - t3) / ((t2 - t1) * (t2 - t3))
+ s3fac = (t - t1) * (t - t2) / ((t3 - t1) * (t3 - t2))
+
+
+
+ fi = mod(srcioff, 2)
+ fj = mod(srcjoff, 2)
+ fk = mod(srckoff, 2)
+
+ i0 = srcioff / 2
+ j0 = srcjoff / 2
+ k0 = srckoff / 2
+
+
+
+c Loop over fine region
+c Label scheme: 8 fk fj fi
+
+c begin k loop
+ 8 continue
+ k = 0
+ ks = k0+1
+ kd = dstkoff+1
+ if (fk.eq.0) goto 80
+ if (fk.eq.1) goto 81
+ stop
+
+c begin j loop
+ 80 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 800
+ if (fj.eq.1) goto 801
+ stop
+
+c begin i loop
+ 800 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8000
+ if (fi.eq.1) goto 8001
+ stop
+
+c kernel
+ 8000 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + s1fac * src1(is,js,ks)
+ $ + s2fac * src2(is,js,ks)
+ $ + s3fac * src3(is,js,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8001
+ goto 900
+
+c kernel
+ 8001 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + half * s1fac * src1(is,js,ks) + half * s1fac * src1(is+1,js,ks)
+ $ + half * s2fac * src2(is,js,ks) + half * s2fac * src2(is+1,js,ks)
+ $ + half * s3fac * src3(is,js,ks) + half * s3fac * src3(is+1,js,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8000
+ goto 900
+
+c end i loop
+ 900 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 801
+ goto 90
+
+c begin i loop
+ 801 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8010
+ if (fi.eq.1) goto 8011
+ stop
+
+c kernel
+ 8010 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,2,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + half * s1fac * src1(is,js,ks) + half * s1fac * src1(is,js+1,ks)
+ $ + half * s2fac * src2(is,js,ks) + half * s2fac * src2(is,js+1,ks)
+ $ + half * s3fac * src3(is,js,ks) + half * s3fac * src3(is,js+1,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8011
+ goto 901
+
+c kernel
+ 8011 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,2,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * s1fac * src1(is,js,ks)
+ $ + fourth * s1fac * src1(is+1,js,ks)
+ $ + fourth * s1fac * src1(is,js+1,ks)
+ $ + fourth * s1fac * src1(is+1,js+1,ks)
+ $ + fourth * s2fac * src2(is,js,ks)
+ $ + fourth * s2fac * src2(is+1,js,ks)
+ $ + fourth * s2fac * src2(is,js+1,ks)
+ $ + fourth * s2fac * src2(is+1,js+1,ks)
+ $ + fourth * s3fac * src3(is,js,ks)
+ $ + fourth * s3fac * src3(is+1,js,ks)
+ $ + fourth * s3fac * src3(is,js+1,ks)
+ $ + fourth * s3fac * src3(is+1,js+1,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8010
+ goto 901
+
+c end i loop
+ 901 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 800
+ goto 90
+
+c end j loop
+ 90 continue
+ k = k+1
+ kd = kd+1
+ if (k.lt.regkext) goto 81
+ goto 9
+
+c begin j loop
+ 81 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 810
+ if (fj.eq.1) goto 811
+ stop
+
+c begin i loop
+ 810 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8100
+ if (fi.eq.1) goto 8101
+ stop
+
+c kernel
+ 8100 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + half * s1fac * src1(is,js,ks) + half * s1fac * src1(is,js,ks+1)
+ $ + half * s2fac * src2(is,js,ks) + half * s2fac * src2(is,js,ks+1)
+ $ + half * s3fac * src3(is,js,ks) + half * s3fac * src3(is,js,ks+1)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8101
+ goto 910
+
+c kernel
+ 8101 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,1,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * s1fac * src1(is,js,ks)
+ $ + fourth * s1fac * src1(is+1,js,ks)
+ $ + fourth * s1fac * src1(is,js,ks+1)
+ $ + fourth * s1fac * src1(is+1,js,ks+1)
+ $ + fourth * s2fac * src1(is,js,ks)
+ $ + fourth * s2fac * src2(is+1,js,ks)
+ $ + fourth * s2fac * src2(is,js,ks+1)
+ $ + fourth * s2fac * src2(is+1,js,ks+1)
+ $ + fourth * s3fac * src3(is,js,ks)
+ $ + fourth * s3fac * src3(is+1,js,ks)
+ $ + fourth * s3fac * src3(is,js,ks+1)
+ $ + fourth * s3fac * src3(is+1,js,ks+1)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8100
+ goto 910
+
+c end i loop
+ 910 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 811
+ goto 91
+
+c begin i loop
+ 811 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8110
+ if (fi.eq.1) goto 8111
+ stop
+
+c kernel
+ 8110 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,2,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * s1fac * src1(is,js,ks)
+ $ + fourth * s1fac * src1(is,js+1,ks)
+ $ + fourth * s1fac * src1(is,js,ks+1)
+ $ + fourth * s1fac * src1(is,js+1,ks+1)
+ $ + fourth * s2fac * src2(is,js,ks)
+ $ + fourth * s2fac * src2(is,js+1,ks)
+ $ + fourth * s2fac * src2(is,js,ks+1)
+ $ + fourth * s2fac * src2(is,js+1,ks+1)
+ $ + fourth * s3fac * src3(is,js,ks)
+ $ + fourth * s3fac * src3(is,js+1,ks)
+ $ + fourth * s3fac * src3(is,js,ks+1)
+ $ + fourth * s3fac * src3(is,js+1,ks+1)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8111
+ goto 911
+
+c kernel
+ 8111 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,2,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + eighth * s1fac * src1(is,js,ks)
+ $ + eighth * s1fac * src1(is+1,js,ks)
+ $ + eighth * s1fac * src1(is,js+1,ks)
+ $ + eighth * s1fac * src1(is+1,js+1,ks)
+ $ + eighth * s1fac * src1(is,js,ks+1)
+ $ + eighth * s1fac * src1(is+1,js,ks+1)
+ $ + eighth * s1fac * src1(is,js+1,ks+1)
+ $ + eighth * s1fac * src1(is+1,js+1,ks+1)
+ $
+ $ + eighth * s2fac * src2(is,js,ks)
+ $ + eighth * s2fac * src2(is+1,js,ks)
+ $ + eighth * s2fac * src2(is,js+1,ks)
+ $ + eighth * s2fac * src2(is+1,js+1,ks)
+ $ + eighth * s2fac * src2(is,js,ks+1)
+ $ + eighth * s2fac * src2(is+1,js,ks+1)
+ $ + eighth * s2fac * src2(is,js+1,ks+1)
+ $ + eighth * s2fac * src2(is+1,js+1,ks+1)
+ $
+ $ + eighth * s3fac * src3(is,js,ks)
+ $ + eighth * s3fac * src3(is+1,js,ks)
+ $ + eighth * s3fac * src3(is,js+1,ks)
+ $ + eighth * s3fac * src3(is+1,js+1,ks)
+ $ + eighth * s3fac * src3(is,js,ks+1)
+ $ + eighth * s3fac * src3(is+1,js,ks+1)
+ $ + eighth * s3fac * src3(is,js+1,ks+1)
+ $ + eighth * s3fac * src3(is+1,js+1,ks+1)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8110
+ goto 911
+
+c end i loop
+ 911 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 810
+ goto 91
+
+c end j loop
+ 91 continue
+ k = k+1
+ kd = kd+1
+ ks = ks+1
+ if (k.lt.regkext) goto 80
+ goto 9
+
+c end k loop
+ 9 continue
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_eno.F90 b/Carpet/CarpetLib/src/prolongate_3d_real8_eno.F90
new file mode 100644
index 000000000..573b279ae
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_eno.F90
@@ -0,0 +1,299 @@
+!!$ -*-Fortran-*-
+!!$ $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_eno.F90,v 1.1 2004/03/03 15:30:40 hawke Exp $
+
+#include "cctk.h"
+
+
+!!$ This routine performs "ENO" prolongation. It is intended to be used
+!!$ with GFs that are not expected to be smooth, particularly those
+!!$ that must also obey certain constraints. The obvious example is the
+!!$ density in hydrodynamics, which may be discontinuous yet must be
+!!$ strictly positive.
+!!$
+!!$ To ensure that this prolongation method is used you should add the
+!!$ tag
+!!$
+!!$ tags='Prolongation="ENO"'
+!!$
+!!$ to the interface.ccl on the appropriate group.
+!!$
+!!$ This applies ENO2 type limiting to the slope, checking over the
+!!$ entire coarse grid cell for the least oscillatory quadratic in each
+!!$ direction. If the slope changes sign over the extrema, linear
+!!$ interpolation is used instead.
+!!$
+!!$ The actual eno1d function is defined in the routine
+!!$
+!!$ prolongate_3d_real8_eno.F77
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+end if
+
+function eno1d(q)
+
+ implicit none
+
+ CCTK_REAL8 :: eno1d
+ CCTK_REAL8 :: q(4)
+ CCTK_REAL8 :: zero, one, two, three, six, half, eighth
+ parameter (zero = 0)
+ parameter (two = 2)
+ parameter (one = 1)
+ parameter (three = 3)
+ parameter (six = 6)
+ parameter (eighth = one / 8)
+ parameter (half = one / two)
+ CCTK_REAL8 :: diffleft, diffright
+
+!!$ Directly find the second undivided differences
+
+ diffleft = q(1) + q(3) - two * q(2)
+ diffright = q(2) + q(4) - two * q(3)
+
+ if ( abs(diffleft) .lt. abs(diffright) ) then
+
+!!$ Apply the left quadratic
+
+ eno1d = eighth * (-q(1) + six * q(2) + three * q(3))
+
+ else
+
+!!$ Apply the right quadratic
+
+ eno1d = eighth * (three * q(2) + six * q(3) - q(4))
+
+ end if
+
+!!$ Check that the quadratic is reasonable
+
+ if ( (q(2)-eno1d) * (q(3)-eno1d) .lt. zero ) then
+
+!!$ Not reasonable. Linear interpolation
+
+ eno1d = half * (q(2) + q(3))
+
+ end if
+
+end function eno1d
+
+subroutine prolongate_3d_real8_eno (src, srciext, srcjext, &
+ srckext, dst, dstiext, dstjext, dstkext, srcbbox, &
+ dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+!!$ bbox(:,1) is lower boundary (inclusive)
+!!$ bbox(:,2) is upper boundary (inclusive)
+!!$ bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+ CCTK_REAL8, dimension(0:3,0:3) :: tmp1
+ CCTK_REAL8, dimension(0:3) :: tmp2
+
+ external eno1d
+ CCTK_REAL8 eno1d
+
+ CCTK_REAL8 half, zero
+ parameter (half = 0.5)
+ parameter (zero = 0)
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0 &
+ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3) &
+ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0 &
+ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0 &
+ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+!!$ This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1) &
+ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2) &
+ .or. regbbox(d,1).lt.dstbbox(d,1) &
+ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1 &
+ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1 &
+ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1 &
+ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1 &
+ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1 &
+ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+!!$ Loop over fine region
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+
+!!$ Where is the fine grid point w.r.t the coarse grid?
+
+ select case (fi + 10*fj + 100*fk)
+ case (0)
+!!$ On a coarse grid point exactly!
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ src(i0+1,j0+1,k0+1)
+
+ case (1)
+!!$ Interpolate only in x
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(src(i0:i0+3,j0+1,k0+1))
+
+ case (10)
+!!$ Interpolate only in y
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(src(i0+1,j0:j0+3,k0+1))
+
+ case (11)
+!!$ Interpolate only in x and y
+
+ do jj = 0, 3
+ tmp2(jj) = eno1d(src(i0:i0+3,j0+jj,k0+1))
+ end do
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(tmp2(0:3))
+
+ case (100)
+!!$ Interpolate only in z
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(src(i0+1,j0+1,k0:k0+3))
+
+ case (101)
+!!$ Interpolate only in x and z
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src(i0:i0+3,j0+1,k0+kk))
+ end do
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(tmp2(0:3))
+
+ case (110)
+!!$ Interpolate only in y and z
+
+ do kk = 0, 3
+ tmp2(kk) = eno1d(src(i0+1,j0:j0+3,k0+kk))
+ end do
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(tmp2(0:3))
+
+ case (111)
+!!$ Interpolate in all of x, y, and z
+
+ do jj = 0, 3
+ do kk = 0, 3
+ tmp1(jj,kk) = eno1d(src(i0:i0+3,j0+jj,k0+kk))
+ end do
+ end do
+ do ii = 0, 3
+ tmp2(ii) = eno1d(tmp1(0:3,ii))
+ end do
+
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = &
+ eno1d(tmp2(0:3))
+
+ case default
+ call CCTK_WARN(0, "Internal error in ENO prolongation. Should only be used with refinement factor 2!")
+ end select
+
+ end do
+ end do
+ end do
+
+end subroutine prolongate_3d_real8_eno
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_minmod.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_minmod.F77
new file mode 100644
index 000000000..a8dc28af4
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_minmod.F77
@@ -0,0 +1,264 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_minmod.F77,v 1.4 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+c$$$ This routine performs "TVD" prolongation. It is intended to be used
+c$$$ with GFs that are not expected to be smooth, particularly those
+c$$$ that must also obey certain constraints. The obvious example is the
+c$$$ density in hydrodynamics, which may be discontinuous yet must be
+c$$$ strictly positive.
+c$$$
+c$$$ To ensure that this prolongation method is used you should add the
+c$$$ tag
+c$$$
+c$$$ tags='Prolongation="TVD"'
+c$$$
+c$$$ to the interface.ccl on the appropriate group.
+c$$$
+c$$$ This applies minmod type limiting to the slope, checking over the
+c$$$ entire coarse grid cell for the minimum modulus in each direction.
+c$$$
+c$$$ The actual minmod function is defined in the routine
+c$$$
+c$$$ prolongate_3d_real8_minmod.F77
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+ function minmod(a, b)
+
+ implicit none
+
+ CCTK_REAL8 minmod
+ CCTK_REAL8 a, b
+ CCTK_REAL8 zero
+ parameter (zero = 0)
+
+ if (a * b .lt. zero) then
+ minmod = zero
+ else if (abs(a) < abs(b)) then
+ minmod = a
+ else
+ minmod = b
+ end if
+
+ end function
+
+ subroutine prolongate_3d_real8_minmod (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+ external minmod
+ CCTK_REAL8 minmod
+
+ CCTK_REAL8 half, zero
+ parameter (half = 0.5)
+ parameter (zero = 0)
+ CCTK_REAL8 dupw, dloc, slopex, slopey, slopez
+ logical firstloop
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over fine region
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+
+ slopex = zero
+ slopey = zero
+ slopez = zero
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do jj = 1, 2
+
+ dupw = src(i0+1 ,j0+jj,k0+kk) - src(i0+0 ,j0+jj,k0+kk)
+ dloc = src(i0+2 ,j0+jj,k0+kk) - src(i0+1 ,j0+kk,k0+kk)
+ if (firstloop) then
+ slopex = half * dble(fi) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopex =
+ $ minmod(slopex, half * dble(fi) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do kk = 1, 2
+ do ii = 1, 2
+
+ dupw = src(i0+ii,j0+1 ,k0+kk) - src(i0+ii,j0+0 ,k0+kk)
+ dloc = src(i0+ii,j0+2 ,k0+kk) - src(i0+ii,j0+1 ,k0+kk)
+ if (firstloop) then
+ slopey = half * dble(fj) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopey =
+ $ minmod(slopey, half * dble(fj) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ firstloop = .true.
+
+ do jj = 1, 2
+ do ii = 1, 2
+
+ dupw = src(i0+ii,j0+jj,k0+1 ) - src(i0+ii,j0+jj,k0+0 )
+ dloc = src(i0+ii,j0+jj,k0+2 ) - src(i0+ii,j0+jj,k0+1 )
+ if (firstloop) then
+ slopez = half * dble(fk) * minmod(dupw,dloc)
+ firstloop = .false.
+ else
+ slopez =
+ $ minmod(slopez, half * dble(fk) * minmod(dupw,dloc))
+ end if
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) =
+ . src(i0+1,j0+1,k0+1) + slopex + slopey + slopez
+
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_o3.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_o3.F77
new file mode 100644
index 000000000..21d82a733
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_o3.F77
@@ -0,0 +1,194 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_o3.F77,v 1.9 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_o3 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(4), jfac(4), kfac(4)
+ integer ii, jj, kk
+ integer fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over fine region
+ dstdiv = one / (6*dstifac**3 * 6*dstjfac**3 * 6*dstkfac**3)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (-1)
+ kfac(2) = (fk+dstkfac) * (fk-dstkfac) * (fk-2*dstkfac) * 3
+ kfac(3) = (fk+dstkfac) * (fk ) * (fk-2*dstkfac) * (-3)
+ kfac(4) = (fk+dstkfac) * (fk ) * (fk- dstkfac) * 1
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (-1)
+ jfac(2) = (fj+dstjfac) * (fj-dstjfac) * (fj-2*dstjfac) * 3
+ jfac(3) = (fj+dstjfac) * (fj ) * (fj-2*dstjfac) * (-3)
+ jfac(4) = (fj+dstjfac) * (fj ) * (fj- dstjfac) * 1
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi ) * (fi-dstifac) * (fi-2*dstifac) * (-1)
+ ifac(2) = (fi+dstifac) * (fi-dstifac) * (fi-2*dstifac) * 3
+ ifac(3) = (fi+dstifac) * (fi ) * (fi-2*dstifac) * (-3)
+ ifac(4) = (fi+dstifac) * (fi ) * (fi- dstifac) * 1
+
+ res = 0
+
+ do kk=1,4
+ do jj=1,4
+ do ii=1,4
+
+ fac = ifac(ii) * jfac(jj) * kfac(kk)
+
+ if (fac.ne.0) then
+ CHKIDX (i0+ii-1, j0+jj-1, k0+kk-1, \
+ srciext,srcjext,srckext, "source")
+ res = res + fac * src(i0+ii-1, j0+jj-1, k0+kk-1)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_o3_rf2.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_o3_rf2.F77
new file mode 100644
index 000000000..8a3b2629d
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_o3_rf2.F77
@@ -0,0 +1,420 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_o3_rf2.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine prolongate_3d_real8_o3_rf2 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL8 one, half, fourth, eighth, sixteenth
+ parameter (one = 1)
+ parameter (half = one/2)
+ parameter (fourth = one/4)
+ parameter (eighth = one/8)
+ parameter (sixteenth = one/16)
+ CCTK_REAL8 f1, f2, f3, f4
+ parameter (f1 = - sixteenth)
+ parameter (f2 = 9*sixteenth)
+ parameter (f3 = 9*sixteenth)
+ parameter (f4 = - sixteenth)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer offsetlo, offsethi
+
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer is, js, ks
+ integer id, jd, kd
+ integer i, j, k
+
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (srcbbox(d,3).ne.dstbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: source strides are not twice the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff, 2).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, 2).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+ fi = mod(srcioff, 2)
+ fj = mod(srcjoff, 2)
+ fk = mod(srckoff, 2)
+
+ i0 = srcioff / 2
+ j0 = srcjoff / 2
+ k0 = srckoff / 2
+
+
+
+c Loop over fine region
+c Label scheme: 8 fk fj fi
+
+c begin k loop
+ 8 continue
+ k = 0
+ ks = k0+1
+ kd = dstkoff+1
+ if (fk.eq.0) goto 80
+ if (fk.eq.1) goto 81
+ stop
+
+c begin j loop
+ 80 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 800
+ if (fj.eq.1) goto 801
+ stop
+
+c begin i loop
+ 800 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8000
+ if (fi.eq.1) goto 8001
+ stop
+
+c kernel
+ 8000 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) = src(is,js,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8001
+ goto 900
+
+c kernel
+ 8001 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js,ks, 4,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * src(is-1,js,ks) + f2 * src(is ,js,ks)
+ $ + f3 * src(is+1,js,ks) + f4 * src(is+2,js,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8000
+ goto 900
+
+c end i loop
+ 900 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 801
+ goto 90
+
+c begin i loop
+ 801 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8010
+ if (fi.eq.1) goto 8011
+ stop
+
+c kernel
+ 8010 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js-1,ks, 1,4,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * src(is,js-1,ks) + f2 * src(is,js ,ks)
+ $ + f3 * src(is,js+1,ks) + f4 * src(is,js+2,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8011
+ goto 901
+
+c kernel
+ 8011 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js-1,ks, 4,4,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * src(is-1,js-1,ks) + f2*f1 * src(is ,js-1,ks)
+ $ + f3*f1 * src(is+1,js-1,ks) + f4*f1 * src(is+2,js-1,ks)
+ $ + f1*f2 * src(is-1,js ,ks) + f2*f2 * src(is ,js ,ks)
+ $ + f3*f2 * src(is+1,js ,ks) + f4*f2 * src(is+2,js ,ks)
+ $ + f1*f3 * src(is-1,js+1,ks) + f2*f3 * src(is ,js+1,ks)
+ $ + f3*f3 * src(is+1,js+1,ks) + f4*f3 * src(is+2,js+1,ks)
+ $ + f1*f4 * src(is-1,js+2,ks) + f2*f4 * src(is ,js+2,ks)
+ $ + f3*f4 * src(is+1,js+2,ks) + f4*f4 * src(is+2,js+2,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8010
+ goto 901
+
+c end i loop
+ 901 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 800
+ goto 90
+
+c end j loop
+ 90 continue
+ k = k+1
+ kd = kd+1
+ if (k.lt.regkext) goto 81
+ goto 9
+
+c begin j loop
+ 81 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 810
+ if (fj.eq.1) goto 811
+ stop
+
+c begin i loop
+ 810 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8100
+ if (fi.eq.1) goto 8101
+ stop
+
+c kernel
+ 8100 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks-1, 1,1,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1 * src(is,js,ks-1) + f2 * src(is,js,ks )
+ $ + f3 * src(is,js,ks+1) + f4 * src(is,js,ks+2)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8101
+ goto 910
+
+c kernel
+ 8101 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js,ks-1, 4,1,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * src(is-1,js,ks-1) + f2*f1 * src(is ,js,ks-1)
+ $ + f3*f1 * src(is+1,js,ks-1) + f4*f1 * src(is+2,js,ks-1)
+ $ + f1*f2 * src(is-1,js,ks ) + f2*f2 * src(is ,js,ks )
+ $ + f3*f2 * src(is+1,js,ks ) + f4*f2 * src(is+2,js,ks )
+ $ + f1*f3 * src(is-1,js,ks+1) + f2*f3 * src(is ,js,ks+1)
+ $ + f3*f3 * src(is+1,js,ks+1) + f4*f3 * src(is+2,js,ks+1)
+ $ + f1*f4 * src(is-1,js,ks+2) + f2*f4 * src(is ,js,ks+2)
+ $ + f3*f4 * src(is+1,js,ks+2) + f4*f4 * src(is+2,js,ks+2)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8100
+ goto 910
+
+c end i loop
+ 910 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 811
+ goto 91
+
+c begin i loop
+ 811 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8110
+ if (fi.eq.1) goto 8111
+ stop
+
+c kernel
+ 8110 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js-1,ks-1, 1,4,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1 * src(is,js-1,ks-1) + f2*f1 * src(is,js ,ks-1)
+ $ + f3*f1 * src(is,js+1,ks-1) + f4*f1 * src(is,js+2,ks-1)
+ $ + f1*f2 * src(is,js-1,ks ) + f2*f2 * src(is,js ,ks )
+ $ + f3*f2 * src(is,js+1,ks ) + f4*f2 * src(is,js+2,ks )
+ $ + f1*f3 * src(is,js-1,ks+1) + f2*f3 * src(is,js ,ks+1)
+ $ + f3*f3 * src(is,js+1,ks+1) + f4*f3 * src(is,js+2,ks+1)
+ $ + f1*f4 * src(is,js-1,ks+2) + f2*f4 * src(is,js ,ks+2)
+ $ + f3*f4 * src(is,js+1,ks+2) + f4*f4 * src(is,js+2,ks+2)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8111
+ goto 911
+
+c kernel
+ 8111 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is-1,js-1,ks-1, 4,4,4, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + f1*f1*f1 * src(is-1,js-1,ks-1) + f2*f1*f1 * src(is ,js-1,ks-1)
+ $ + f3*f1*f1 * src(is+1,js-1,ks-1) + f4*f1*f1 * src(is+2,js-1,ks-1)
+ $ + f1*f2*f1 * src(is-1,js ,ks-1) + f2*f2*f1 * src(is ,js ,ks-1)
+ $ + f3*f2*f1 * src(is+1,js ,ks-1) + f4*f2*f1 * src(is+2,js ,ks-1)
+ $ + f1*f3*f1 * src(is-1,js+1,ks-1) + f2*f3*f1 * src(is ,js+1,ks-1)
+ $ + f3*f3*f1 * src(is+1,js+1,ks-1) + f4*f3*f1 * src(is+2,js+1,ks-1)
+ $ + f1*f4*f1 * src(is-1,js+2,ks-1) + f2*f4*f1 * src(is ,js+2,ks-1)
+ $ + f3*f4*f1 * src(is+1,js+2,ks-1) + f4*f4*f1 * src(is+2,js+2,ks-1)
+ $
+ $ + f1*f1*f2 * src(is-1,js-1,ks ) + f2*f1*f2 * src(is ,js-1,ks )
+ $ + f3*f1*f2 * src(is+1,js-1,ks ) + f4*f1*f2 * src(is+2,js-1,ks )
+ $ + f1*f2*f2 * src(is-1,js ,ks ) + f2*f2*f2 * src(is ,js ,ks )
+ $ + f3*f2*f2 * src(is+1,js ,ks ) + f4*f2*f2 * src(is+2,js ,ks )
+ $ + f1*f3*f2 * src(is-1,js+1,ks ) + f2*f3*f2 * src(is ,js+1,ks )
+ $ + f3*f3*f2 * src(is+1,js+1,ks ) + f4*f3*f2 * src(is+2,js+1,ks )
+ $ + f1*f4*f2 * src(is-1,js+2,ks ) + f2*f4*f2 * src(is ,js+2,ks )
+ $ + f3*f4*f2 * src(is+1,js+2,ks ) + f4*f4*f2 * src(is+2,js+2,ks )
+ $
+ $ + f1*f1*f3 * src(is-1,js-1,ks+1) + f2*f1*f3 * src(is ,js-1,ks+1)
+ $ + f3*f1*f3 * src(is+1,js-1,ks+1) + f4*f1*f3 * src(is+2,js-1,ks+1)
+ $ + f1*f2*f3 * src(is-1,js ,ks+1) + f2*f2*f3 * src(is ,js ,ks+1)
+ $ + f3*f2*f3 * src(is+1,js ,ks+1) + f4*f2*f3 * src(is+2,js ,ks+1)
+ $ + f1*f3*f3 * src(is-1,js+1,ks+1) + f2*f3*f3 * src(is ,js+1,ks+1)
+ $ + f3*f3*f3 * src(is+1,js+1,ks+1) + f4*f3*f3 * src(is+2,js+1,ks+1)
+ $ + f1*f4*f3 * src(is-1,js+2,ks+1) + f2*f4*f3 * src(is ,js+2,ks+1)
+ $ + f3*f4*f3 * src(is+1,js+2,ks+1) + f4*f4*f3 * src(is+2,js+2,ks+1)
+ $
+ $ + f1*f1*f4 * src(is-1,js-1,ks+2) + f2*f1*f4 * src(is ,js-1,ks+2)
+ $ + f3*f1*f4 * src(is+1,js-1,ks+2) + f4*f1*f4 * src(is+2,js-1,ks+2)
+ $ + f1*f2*f4 * src(is-1,js ,ks+2) + f2*f2*f4 * src(is ,js ,ks+2)
+ $ + f3*f2*f4 * src(is+1,js ,ks+2) + f4*f2*f4 * src(is+2,js ,ks+2)
+ $ + f1*f3*f4 * src(is-1,js+1,ks+2) + f2*f3*f4 * src(is ,js+1,ks+2)
+ $ + f3*f3*f4 * src(is+1,js+1,ks+2) + f4*f3*f4 * src(is+2,js+1,ks+2)
+ $ + f1*f4*f4 * src(is-1,js+2,ks+2) + f2*f4*f4 * src(is ,js+2,ks+2)
+ $ + f3*f4*f4 * src(is+1,js+2,ks+2) + f4*f4*f4 * src(is+2,js+2,ks+2)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8110
+ goto 911
+
+c end i loop
+ 911 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 810
+ goto 91
+
+c end j loop
+ 91 continue
+ k = k+1
+ kd = kd+1
+ ks = ks+1
+ if (k.lt.regkext) goto 80
+ goto 9
+
+c end k loop
+ 9 continue
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_o5.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_o5.F77
new file mode 100644
index 000000000..8c86178ad
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_o5.F77
@@ -0,0 +1,205 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_o5.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine prolongate_3d_real8_o5 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ CCTK_REAL8 one
+ parameter (one = 1)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ CCTK_REAL8 t
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer offsetlo, offsethi
+
+ integer regiext, regjext, regkext
+
+ integer dstifac, dstjfac, dstkfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ CCTK_REAL8 s1fac, s2fac, s3fac
+
+ CCTK_REAL8 dstdiv
+ integer i, j, k
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer ifac(6), jfac(6), kfac(6)
+ integer ii, jj, kk
+ CCTK_REAL8 fac
+ CCTK_REAL8 res
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(srcbbox(d,3), dstbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: destination strides are not integer multiples of the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ regkext = (regbbox(d,2) - regbbox(d,1)) / regbbox(d,3) + 1
+ dstkfac = srcbbox(d,3) / dstbbox(d,3)
+ srckoff = (regbbox(d,1) - srcbbox(d,1)) / dstbbox(d,3)
+ offsetlo = regbbox(d,3)
+ if (mod(srckoff + 0, dstkfac).eq.0) then
+ offsetlo = 0
+ if (regkext.gt.1) then
+ offsetlo = regbbox(d,3)
+ end if
+ end if
+ offsethi = regbbox(d,3)
+ if (mod(srckoff + regkext-1, dstkfac).eq.0) then
+ offsethi = 0
+ if (regkext.gt.1) then
+ offsethi = regbbox(d,3)
+ end if
+ end if
+ if (regbbox(d,1)-offsetlo.lt.srcbbox(d,1)
+ $ .or. regbbox(d,2)+offsethi.gt.srcbbox(d,2)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ dstifac = srcbbox(1,3) / dstbbox(1,3)
+ dstjfac = srcbbox(2,3) / dstbbox(2,3)
+ dstkfac = srcbbox(3,3) / dstbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over fine region
+c (This expression cannot be evaluated as integer)
+ dstdiv = one / (120*dstifac**5) / (120*dstjfac**5) / (120*dstkfac**5)
+
+ do k = 0, regkext-1
+ k0 = (srckoff + k) / dstkfac
+ fk = mod(srckoff + k, dstkfac)
+ kfac(1) = (fk+ dstkfac) * (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * (- 1)
+ kfac(2) = (fk+2*dstkfac) * (fk ) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * ( 5)
+ kfac(3) = (fk+2*dstkfac) * (fk+dstkfac) * (fk-dstkfac) * (fk-2*dstkfac) * (fk-3*dstkfac) * (-10)
+ kfac(4) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk-2*dstkfac) * (fk-3*dstkfac) * ( 10)
+ kfac(5) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk- dstkfac) * (fk-3*dstkfac) * (- 5)
+ kfac(6) = (fk+2*dstkfac) * (fk+dstkfac) * (fk ) * (fk- dstkfac) * (fk-2*dstkfac) * ( 1)
+
+ do j = 0, regjext-1
+ j0 = (srcjoff + j) / dstjfac
+ fj = mod(srcjoff + j, dstjfac)
+ jfac(1) = (fj+ dstjfac) * (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * (- 1)
+ jfac(2) = (fj+2*dstjfac) * (fj ) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * ( 5)
+ jfac(3) = (fj+2*dstjfac) * (fj+dstjfac) * (fj-dstjfac) * (fj-2*dstjfac) * (fj-3*dstjfac) * (-10)
+ jfac(4) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj-2*dstjfac) * (fj-3*dstjfac) * ( 10)
+ jfac(5) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj- dstjfac) * (fj-3*dstjfac) * (- 5)
+ jfac(6) = (fj+2*dstjfac) * (fj+dstjfac) * (fj ) * (fj- dstjfac) * (fj-2*dstjfac) * ( 1)
+
+ do i = 0, regiext-1
+ i0 = (srcioff + i) / dstifac
+ fi = mod(srcioff + i, dstifac)
+ ifac(1) = (fi+ dstifac) * (fi ) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * (- 1)
+ ifac(2) = (fi+2*dstifac) * (fi ) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * ( 5)
+ ifac(3) = (fi+2*dstifac) * (fi+dstifac) * (fi-dstifac) * (fi-2*dstifac) * (fi-3*dstifac) * (-10)
+ ifac(4) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi-2*dstifac) * (fi-3*dstifac) * ( 10)
+ ifac(5) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi- dstifac) * (fi-3*dstifac) * (- 5)
+ ifac(6) = (fi+2*dstifac) * (fi+dstifac) * (fi ) * (fi- dstifac) * (fi-2*dstifac) * ( 1)
+
+ res = 0
+
+ do kk=1,6
+ do jj=1,6
+ do ii=1,6
+
+ if (ifac(ii).ne.0 .and. jfac(jj).ne.0 .and. kfac(kk).ne.0) then
+c (This expression cannot be evaluated as integer)
+ fac = one * ifac(ii) * jfac(jj) * kfac(kk)
+
+ CHKIDX (i0+ii-2, j0+jj-2, k0+kk-2, \
+ srciext,srcjext,srckext, "source")
+ res = res + fac * src(i0+ii-2, j0+jj-2, k0+kk-2)
+ end if
+
+ end do
+ end do
+ end do
+
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1) = dstdiv * res
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/prolongate_3d_real8_rf2.F77 b/Carpet/CarpetLib/src/prolongate_3d_real8_rf2.F77
new file mode 100644
index 000000000..556f4d092
--- /dev/null
+++ b/Carpet/CarpetLib/src/prolongate_3d_real8_rf2.F77
@@ -0,0 +1,341 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/prolongate_3d_real8_rf2.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine prolongate_3d_real8_rf2 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL8 one, half, fourth, eighth
+ parameter (one = 1)
+ parameter (half = one/2)
+ parameter (fourth = one/4)
+ parameter (eighth = one/8)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i0, j0, k0
+ integer fi, fj, fk
+ integer is, js, ks
+ integer id, jd, kd
+ integer i, j, k
+
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).le.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (srcbbox(d,3).ne.dstbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: source strides are not twice the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / dstbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / dstbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / dstbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+ fi = mod(srcioff, 2)
+ fj = mod(srcjoff, 2)
+ fk = mod(srckoff, 2)
+
+ i0 = srcioff / 2
+ j0 = srcjoff / 2
+ k0 = srckoff / 2
+
+
+
+c Loop over fine region
+c Label scheme: 8 fk fj fi
+
+c begin k loop
+ 8 continue
+ k = 0
+ ks = k0+1
+ kd = dstkoff+1
+ if (fk.eq.0) goto 80
+ if (fk.eq.1) goto 81
+ stop
+
+c begin j loop
+ 80 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 800
+ if (fj.eq.1) goto 801
+ stop
+
+c begin i loop
+ 800 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8000
+ if (fi.eq.1) goto 8001
+ stop
+
+c kernel
+ 8000 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) = src(is,js,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8001
+ goto 900
+
+c kernel
+ 8001 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) = half * src(is,js,ks) + half * src(is+1,js,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8000
+ goto 900
+
+c end i loop
+ 900 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 801
+ goto 90
+
+c begin i loop
+ 801 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8010
+ if (fi.eq.1) goto 8011
+ stop
+
+c kernel
+ 8010 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,2,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) = half * src(is,js,ks) + half * src(is,js+1,ks)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8011
+ goto 901
+
+c kernel
+ 8011 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,2,1, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * src(is,js,ks) + fourth * src(is+1,js,ks)
+ $ + fourth * src(is,js+1,ks) + fourth * src(is+1,js+1,ks)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8010
+ goto 901
+
+c end i loop
+ 901 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 800
+ goto 90
+
+c end j loop
+ 90 continue
+ k = k+1
+ kd = kd+1
+ if (k.lt.regkext) goto 81
+ goto 9
+
+c begin j loop
+ 81 continue
+ j = 0
+ js = j0+1
+ jd = dstjoff+1
+ if (fj.eq.0) goto 810
+ if (fj.eq.1) goto 811
+ stop
+
+c begin i loop
+ 810 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8100
+ if (fi.eq.1) goto 8101
+ stop
+
+c kernel
+ 8100 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,1,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) = half * src(is,js,ks) + half * src(is,js,ks+1)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8101
+ goto 910
+
+c kernel
+ 8101 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,1,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * src(is,js,ks) + fourth * src(is+1,js,ks)
+ $ + fourth * src(is,js,ks+1) + fourth * src(is+1,js,ks+1)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8100
+ goto 910
+
+c end i loop
+ 910 continue
+ j = j+1
+ jd = jd+1
+ if (j.lt.regjext) goto 811
+ goto 91
+
+c begin i loop
+ 811 continue
+ i = 0
+ is = i0+1
+ id = dstioff+1
+ if (fi.eq.0) goto 8110
+ if (fi.eq.1) goto 8111
+ stop
+
+c kernel
+ 8110 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 1,2,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + fourth * src(is,js,ks) + fourth * src(is,js+1,ks)
+ $ + fourth * src(is,js,ks+1) + fourth * src(is,js+1,ks+1)
+ i = i+1
+ id = id+1
+ if (i.lt.regiext) goto 8111
+ goto 911
+
+c kernel
+ 8111 continue
+ if (check_array_accesses.ne.0) then
+ call checkindex (is,js,ks, 2,2,2, srciext,srcjext,srckext, "source")
+ call checkindex (id,jd,kd, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(id,jd,kd) =
+ $ + eighth * src(is,js,ks) + eighth * src(is+1,js,ks)
+ $ + eighth * src(is,js+1,ks) + eighth * src(is+1,js+1,ks)
+ $ + eighth * src(is,js,ks+1) + eighth * src(is+1,js,ks+1)
+ $ + eighth * src(is,js+1,ks+1) + eighth * src(is+1,js+1,ks+1)
+ i = i+1
+ id = id+1
+ is = is+1
+ if (i.lt.regiext) goto 8110
+ goto 911
+
+c end i loop
+ 911 continue
+ j = j+1
+ jd = jd+1
+ js = js+1
+ if (j.lt.regjext) goto 810
+ goto 91
+
+c end j loop
+ 91 continue
+ k = k+1
+ kd = kd+1
+ ks = ks+1
+ if (k.lt.regkext) goto 80
+ goto 9
+
+c end k loop
+ 9 continue
+
+ end
diff --git a/Carpet/CarpetLib/src/restrict_3d_real8.F77 b/Carpet/CarpetLib/src/restrict_3d_real8.F77
new file mode 100644
index 000000000..81f4cfd0a
--- /dev/null
+++ b/Carpet/CarpetLib/src/restrict_3d_real8.F77
@@ -0,0 +1,128 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/restrict_3d_real8.F77,v 1.7 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+
+
+
+#define CHKIDX(i,j,k, imax,jmax,kmax, where) \
+ if ((i).lt.1 .or. (i).gt.(imax) \
+ .or. (j).lt.1 .or. (j).gt.(jmax) \
+ .or. (k).lt.1 .or. (k).gt.(kmax)) then &&\
+ write (msg, '(a, " array index out of bounds: shape is (",i4,",",i4,",",i4,"), index is (",i4,",",i4,",",i4,")")') \
+ (where), (imax), (jmax), (kmax), (i), (j), (k) &&\
+ call CCTK_WARN (0, msg(1:len_trim(msg))) &&\
+ end if
+
+
+
+ subroutine restrict_3d_real8 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+
+ integer srcifac, srcjfac, srckfac
+
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer d
+
+ character msg*1000
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).ge.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (mod(dstbbox(d,3), srcbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: source strides are not integer multiples of the destination strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcifac = dstbbox(1,3) / srcbbox(1,3)
+ srcjfac = dstbbox(2,3) / srcbbox(2,3)
+ srckfac = dstbbox(3,3) / srcbbox(3,3)
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / srcbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / srcbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / srcbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over coarse region
+ do k = 0, regkext-1
+ do j = 0, regjext-1
+ do i = 0, regiext-1
+
+ CHKIDX (srcioff+srcifac*i+1, srcjoff+srcjfac*j+1, srckoff+srckfac*k+1, \
+ srciext,srcjext,srckext, "source")
+ CHKIDX (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, \
+ dstiext,dstjext,dstkext, "destination")
+ dst (dstioff+i+1, dstjoff+j+1, dstkoff+k+1)
+ $ = src (srcioff+srcifac*i+1, srcjoff+srcjfac*j+1, srckoff+srckfac*k+1)
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/restrict_3d_real8_rf2.F77 b/Carpet/CarpetLib/src/restrict_3d_real8_rf2.F77
new file mode 100644
index 000000000..b7f6a0454
--- /dev/null
+++ b/Carpet/CarpetLib/src/restrict_3d_real8_rf2.F77
@@ -0,0 +1,111 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/restrict_3d_real8_rf2.F77,v 1.2 2004/03/11 12:03:09 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+
+
+ subroutine restrict_3d_real8_rf2 (
+ $ src, srciext, srcjext, srckext,
+ $ dst, dstiext, dstjext, dstkext,
+ $ srcbbox, dstbbox, regbbox)
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+c bbox(:,1) is lower boundary (inclusive)
+c bbox(:,2) is upper boundary (inclusive)
+c bbox(:,3) is stride
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+
+ integer regiext, regjext, regkext
+ integer srcioff, srcjoff, srckoff
+ integer dstioff, dstjoff, dstkoff
+
+ integer i, j, k
+ integer d
+
+
+
+ do d=1,3
+ if (srcbbox(d,3).eq.0 .or. dstbbox(d,3).eq.0
+ $ .or. regbbox(d,3).eq.0) then
+ call CCTK_WARN (0, "Internal error: stride is zero")
+ end if
+ if (srcbbox(d,3).ge.regbbox(d,3)
+ $ .or. dstbbox(d,3).ne.regbbox(d,3)) then
+ call CCTK_WARN (0, "Internal error: strides disagree")
+ end if
+ if (dstbbox(d,3).ne.srcbbox(d,3)*2) then
+ call CCTK_WARN (0, "Internal error: destination strides are not twice the source strides")
+ end if
+ if (mod(srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array origins are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).gt.regbbox(d,2)) then
+c This could be handled, but is likely to point to an error elsewhere
+ call CCTK_WARN (0, "Internal error: region extent is empty")
+ end if
+ if (mod(srcbbox(d,2) - srcbbox(d,1), srcbbox(d,3)).ne.0
+ $ .or. mod(dstbbox(d,2) - dstbbox(d,1), dstbbox(d,3)).ne.0
+ $ .or. mod(regbbox(d,2) - regbbox(d,1), regbbox(d,3)).ne.0) then
+ call CCTK_WARN (0, "Internal error: array extents are not integer multiples of the strides")
+ end if
+ if (regbbox(d,1).lt.srcbbox(d,1)
+ $ .or. regbbox(d,1).lt.dstbbox(d,1)
+ $ .or. regbbox(d,2).gt.srcbbox(d,2)
+ $ .or. regbbox(d,2).gt.dstbbox(d,2)) then
+ call CCTK_WARN (0, "Internal error: region extent is not contained in array extent")
+ end if
+ end do
+
+ if (srciext.ne.(srcbbox(1,2)-srcbbox(1,1))/srcbbox(1,3)+1
+ $ .or. srcjext.ne.(srcbbox(2,2)-srcbbox(2,1))/srcbbox(2,3)+1
+ $ .or. srckext.ne.(srcbbox(3,2)-srcbbox(3,1))/srcbbox(3,3)+1
+ $ .or. dstiext.ne.(dstbbox(1,2)-dstbbox(1,1))/dstbbox(1,3)+1
+ $ .or. dstjext.ne.(dstbbox(2,2)-dstbbox(2,1))/dstbbox(2,3)+1
+ $ .or. dstkext.ne.(dstbbox(3,2)-dstbbox(3,1))/dstbbox(3,3)+1) then
+ call CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes")
+ end if
+
+
+
+ regiext = (regbbox(1,2) - regbbox(1,1)) / regbbox(1,3) + 1
+ regjext = (regbbox(2,2) - regbbox(2,1)) / regbbox(2,3) + 1
+ regkext = (regbbox(3,2) - regbbox(3,1)) / regbbox(3,3) + 1
+
+ srcioff = (regbbox(1,1) - srcbbox(1,1)) / srcbbox(1,3)
+ srcjoff = (regbbox(2,1) - srcbbox(2,1)) / srcbbox(2,3)
+ srckoff = (regbbox(3,1) - srcbbox(3,1)) / srcbbox(3,3)
+
+ dstioff = (regbbox(1,1) - dstbbox(1,1)) / dstbbox(1,3)
+ dstjoff = (regbbox(2,1) - dstbbox(2,1)) / dstbbox(2,3)
+ dstkoff = (regbbox(3,1) - dstbbox(3,1)) / dstbbox(3,3)
+
+
+
+c Loop over coarse region
+ do k = 0, regkext-1
+ do j = 0, regjext-1
+ do i = 0, regiext-1
+
+ if (check_array_accesses.ne.0) then
+ call checkindex (srcioff+2*i+1, srcjoff+2*j+1, srckoff+2*k+1, 1,1,1, srciext,srcjext,srckext, "source")
+ call checkindex (dstioff+i+1, dstjoff+j+1, dstkoff+k+1, 1,1,1, dstiext,dstjext,dstkext, "destination")
+ end if
+ dst(dstioff+i+1, dstjoff+j+1, dstkoff+k+1) =
+ $ src(srcioff+2*i+1, srcjoff+2*j+1, srckoff+2*k+1)
+
+ end do
+ end do
+ end do
+
+ end
diff --git a/Carpet/CarpetLib/src/th.cc b/Carpet/CarpetLib/src/th.cc
new file mode 100644
index 000000000..0ad9beca1
--- /dev/null
+++ b/Carpet/CarpetLib/src/th.cc
@@ -0,0 +1,81 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/th.cc,v 1.14 2004/03/23 19:30:14 schnetter Exp $
+
+#include <assert.h>
+#include <math.h>
+
+#include <iostream>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "gh.hh"
+
+#include "th.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<int D>
+th<D>::th (gh<D>& h, const CCTK_REAL basedelta)
+ : h(h), delta(basedelta) {
+ h.add(this);
+}
+
+// Destructors
+template<int D>
+th<D>::~th () {
+ h.remove(this);
+}
+
+// Modifiers
+template<int D>
+void th<D>::recompose () {
+ times.resize(h.reflevels());
+ deltas.resize(h.reflevels());
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ const int old_mglevels = times.at(rl).size();
+ CCTK_REAL mgtime;
+ // Select default time
+ if (old_mglevels==0 && rl==0) {
+ mgtime = 0;
+ } else if (old_mglevels==0) {
+ mgtime = times.at(rl-1).at(0);
+ } else {
+ mgtime = times.at(rl).at(old_mglevels-1);
+ }
+ times.at(rl).resize(h.mglevels(rl,0), mgtime);
+ deltas.at(rl).resize(h.mglevels(rl,0));
+ for (int ml=0; ml<h.mglevels(rl,0); ++ml) {
+ if (rl==0 && ml==0) {
+ deltas.at(rl).at(ml) = delta;
+ } else if (ml==0) {
+ deltas.at(rl).at(ml) = deltas.at(rl-1).at(ml) / h.reffact;
+ } else {
+ deltas.at(rl).at(ml) = deltas.at(rl).at(ml-1) * h.mgfact;
+ }
+ }
+ }
+}
+
+
+
+// Output
+template<int D>
+void th<D>::output (ostream& os) const {
+ os << "th<" << D << ">:"
+ << "times={";
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int ml=0; ml<h.mglevels(rl,0); ++ml) {
+ if (!(rl==0 && ml==0)) os << ",";
+ os << rl << ":" << ml << ":"
+ << times.at(rl).at(ml) << "(" << deltas.at(rl).at(ml) << ")";
+ }
+ }
+ os << "}";
+}
+
+
+
+template class th<3>;
diff --git a/Carpet/CarpetLib/src/th.hh b/Carpet/CarpetLib/src/th.hh
new file mode 100644
index 000000000..12c77d782
--- /dev/null
+++ b/Carpet/CarpetLib/src/th.hh
@@ -0,0 +1,104 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/th.hh,v 1.11 2004/03/23 19:30:14 schnetter Exp $
+
+#ifndef TH_HH
+#define TH_HH
+
+#include <assert.h>
+
+#include <iostream>
+#include <vector>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "gh.hh"
+
+using namespace std;
+
+
+
+// Forward declaration
+template<int D> class th;
+
+// Output
+template<int D>
+ostream& operator<< (ostream& os, const th<D>& t);
+
+
+
+// The time hierarchy (information about the current time)
+template<int D>
+class th {
+
+public: // should be readonly
+
+ // Fields
+ gh<D>& h; // hierarchy
+
+private:
+
+ CCTK_REAL delta; // time step
+ vector<vector<CCTK_REAL> > times; // current times
+ vector<vector<CCTK_REAL> > deltas; // time steps
+
+public:
+
+ // Constructors
+ th (gh<D>& h, const CCTK_REAL basedelta);
+
+ // Destructors
+ ~th ();
+
+ // Modifiers
+ void recompose ();
+
+ // Time management
+ CCTK_REAL get_time (const int rl, const int ml) const {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (ml>=0 && ml<h.mglevels(rl,0));
+ return times.at(rl).at(ml);
+ }
+
+ void set_time (const int rl, const int ml, const CCTK_REAL t) {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (ml>=0 && ml<h.mglevels(rl,0));
+ times.at(rl).at(ml) = t;
+ }
+
+ void advance_time (const int rl, const int ml) {
+ set_time(rl,ml, get_time(rl,ml) + get_delta(rl,ml));
+ }
+
+ CCTK_REAL get_delta (const int rl, const int ml) const {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (ml>=0 && ml<h.mglevels(rl,0));
+ return deltas.at(rl).at(ml);
+ }
+
+ void set_delta (const int rl, const int ml, const CCTK_REAL dt) {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (ml>=0 && ml<h.mglevels(rl,0));
+ deltas.at(rl).at(ml) = dt;
+ }
+
+ CCTK_REAL time (const int tl, const int rl, const int ml) const {
+ assert (rl>=0 && rl<h.reflevels());
+ assert (ml>=0 && ml<h.mglevels(rl,0));
+ return get_time(rl, ml) + tl * get_delta(rl, ml);
+ }
+
+ // Output
+ void output (ostream& os) const;
+};
+
+
+
+template<int D>
+inline ostream& operator<< (ostream& os, const th<D>& t) {
+ t.output(os);
+ return os;
+}
+
+
+
+#endif // TH_HH
diff --git a/Carpet/CarpetLib/src/vect.cc b/Carpet/CarpetLib/src/vect.cc
new file mode 100644
index 000000000..9af8bca1a
--- /dev/null
+++ b/Carpet/CarpetLib/src/vect.cc
@@ -0,0 +1,59 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/vect.cc,v 1.14 2004/02/18 15:10:17 schnetter Exp $
+
+#include <assert.h>
+
+#include <iostream>
+
+#include "defs.hh"
+
+#include "vect.hh"
+
+using namespace std;
+
+
+
+// Input
+template<class T,int D>
+void vect<T,D>::input (istream& is) {
+ skipws (is);
+ consume (is, '[');
+ for (int d=0; d<D; ++d) {
+ is >> (*this)[d];
+ if (d<D-1) {
+ skipws (is);
+ consume (is, ',');
+ }
+ }
+ skipws (is);
+ consume (is, ']');
+}
+
+
+
+// Output
+template<class T,int D>
+void vect<T,D>::output (ostream& os) const {
+ os << "[";
+ for (int d=0; d<D; ++d) {
+ os << (*this)[d];
+ if (d<D-1) os << ",";
+ }
+ os << "]";
+}
+
+
+
+// Note: We need all dimensions all the time.
+template class vect<int,0>;
+template class vect<int,1>;
+template class vect<int,2>;
+template class vect<int,3>;
+
+template void vect<double,3>::input (istream& is);
+template void vect<vect<bool,2>,3>::input (istream& is);
+
+template void vect<bool,2>::output (ostream& os) const;
+template void vect<bool,3>::output (ostream& os) const;
+template void vect<double,3>::output (ostream& os) const;
+template void vect<vect<bool,2>,3>::output (ostream& os) const;
+template void vect<vect<int,2>,3>::output (ostream& os) const;
diff --git a/Carpet/CarpetLib/src/vect.hh b/Carpet/CarpetLib/src/vect.hh
new file mode 100644
index 000000000..9160c76aa
--- /dev/null
+++ b/Carpet/CarpetLib/src/vect.hh
@@ -0,0 +1,797 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/vect.hh,v 1.29 2004/08/14 07:41:25 schnetter Exp $
+
+#ifndef VECT_HH
+#define VECT_HH
+
+#include <algorithm>
+#include <cassert>
+#include <cmath>
+#include <iostream>
+
+using namespace std;
+
+
+
+// Forward definition
+template<class T, int D> class vect;
+
+// Input/Output
+template<class T,int D>
+istream& operator>> (istream& is, vect<T,D>& a);
+template<class T,int D>
+ostream& operator<< (ostream& os, const vect<T,D>& a);
+
+
+
+/**
+ * A short vector with a size that is specified at compile time.
+ */
+template<class T, int D>
+class vect {
+
+ // Fields
+
+ /** Vector elements. */
+ T elt[D==0 ? 1 : D];
+
+public:
+
+ // Constructors
+
+ /** Explicit empty constructor. */
+ explicit vect () { }
+
+ /** Copy constructor. */
+ vect (const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]=a.elt[d];
+ }
+
+ /** Constructor from a single element. This constructor might be
+ confusing, but it is very convenient. */
+ vect (const T x) {
+ for (int d=0; d<D; ++d) elt[d]=x;
+ }
+
+ /** Constructor for 2-element vectors from 2 elements. */
+ vect (const T x, const T y) {
+ assert (D==2);
+ // Note: this statement may give "index out of range" warnings.
+ // You can safely ignore these.
+ elt[0]=x; elt[1]=y;
+ }
+
+ /** Constructor for 3-element vectors from 3 elements. */
+ vect (const T x, const T y, const T z) {
+ assert (D==3);
+ // Note: this statement may give "index out of range" warnings.
+ // You can safely ignore these.
+ elt[0]=x; elt[1]=y; elt[2]=z;
+ }
+
+ /** Constructor for 4-element vectors from 4 elements. */
+ vect (const T x, const T y, const T z, const T t) {
+ assert (D==4);
+ // Note: this statement may give "index out of range" warnings.
+ // You can safely ignore these.
+ elt[0]=x; elt[1]=y; elt[2]=z; elt[3]=t;
+ }
+
+#if 0
+ // This creates confusion
+ /** Constructor from a pointer, i.e.\ a C array. */
+ explicit vect (const T* const x) {
+ for (int d=0; d<D; ++d) elt[d]=x[d];
+ }
+#endif
+
+ /** Constructor from a vector with a different type. */
+ template<class S>
+ /*explicit*/ vect (const vect<S,D>& a) {
+ for (int d=0; d<D; ++d) elt[d]=(T)a[d];
+ }
+
+ /** Create a new 0-element vector with a specific type. */
+ static vect make () {
+ assert (D==0);
+ return vect();
+ }
+
+ /** Create a new 1-element vector with a specific type. */
+ static vect make (const T x) {
+ assert (D==1);
+ return vect(x);
+ }
+
+ /** Create a new 2-element vector with a specific type. */
+ static vect make (const T x, const T y) {
+ assert (D==2);
+ return vect(x, y);
+ }
+
+ /** Create a new 3-element vector with a specific type. */
+ static vect make (const T x, const T y, const T z) {
+ assert (D==3);
+ return vect(x, y, z);
+ }
+
+ /** Create a new 4-element vector with a specific type. */
+ static vect make (const T x, const T y, const T z, const T t) {
+ assert (D==4);
+ return vect(x, y, z, t);
+ }
+
+ /** Treat a constant pointer as a reference to a constant vector. */
+ static const vect& ref (const T* const x) {
+ return *(const vect*)x;
+ }
+
+ /** Treat a pointer as a reference to a vector. */
+ static vect& ref (T* const x) {
+ return *(vect*)x;
+ }
+
+ /** Create a vector with one element set to 1 and all other elements
+ set to zero. */
+ static vect dir (const int d) {
+ vect r=(T)0;
+ r[d]=1;
+ return r;
+ }
+
+ /** Create a vector with e[i] = i. */
+ static vect seq () {
+ vect r;
+ for (int d=0; d<D; ++d) r[d]=d;
+ return r;
+ }
+
+ /** Create a vector with e[i] = n + i. */
+ static vect seq (const int n) {
+ vect r;
+ for (int d=0; d<D; ++d) r[d]=n+d;
+ return r;
+ }
+
+ /** Create a vector with e[i] = n + s * i. */
+ static vect seq (const int n, const int s) {
+ vect r;
+ for (int d=0; d<D; ++d) r[d]=n+s*d;
+ return r;
+ }
+
+ // Accessors
+
+ /** Return a non-writable element of a vector. */
+ // (Don't return a reference; *this might be a temporary)
+ // Do return a reference, so that a vector can be accessed as array
+ const T& operator[] (const int d) const {
+ assert(d>=0 && d<D);
+ return elt[d];
+ }
+
+ /** Return a writable element of a vector as reference. */
+ T& operator[] (const int d) {
+ assert(d>=0 && d<D);
+ return elt[d];
+ }
+
+#if 0
+ // This creates confusion
+ /** Return a pointer to a vector. */
+ operator const T* () const {
+ return this;
+ }
+#endif
+
+ /** Return a combination of the vector elements e[a[i]]. The
+ element combination is selected by another vector. */
+ template<class TT, int DD>
+ vect<T,DD> operator[] (const vect<TT,DD>& a) const {
+ vect<T,DD> r;
+ // (*this)[] performs index checking
+ for (int d=0; d<DD; ++d) r[d] = (*this)[a[d]];
+ return r;
+ }
+
+ // Modifying operators
+ vect& operator+=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]+=x;
+ return *this;
+ }
+
+ vect& operator-=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]-=x;
+ return *this;
+ }
+
+ vect& operator*=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]*=x;
+ return *this;
+ }
+
+ vect& operator/=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]/=x;
+ return *this;
+ }
+
+ vect& operator%=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]%=x;
+ return *this;
+ }
+
+ vect& operator&=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]&=x;
+ return *this;
+ }
+
+ vect& operator|=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]|=x;
+ return *this;
+ }
+
+ vect& operator^=(const T x) {
+ for (int d=0; d<D; ++d) elt[d]^=x;
+ return *this;
+ }
+
+ vect& operator+=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]+=a[d];
+ return *this;
+ }
+
+ vect& operator-=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]-=a[d];
+ return *this;
+ }
+
+ vect& operator*=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]*=a[d];
+ return *this;
+ }
+
+ vect& operator/=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]/=a[d];
+ return *this;
+ }
+
+ vect& operator%=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]%=a[d];
+ return *this;
+ }
+
+ vect& operator&=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]&=a[d];
+ return *this;
+ }
+
+ vect& operator|=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]|=a[d];
+ return *this;
+ }
+
+ vect& operator^=(const vect& a) {
+ for (int d=0; d<D; ++d) elt[d]^=a[d];
+ return *this;
+ }
+
+ // Non-modifying operators
+
+ /** Return a new vector where one element has been replaced. */
+ vect replace (const int d, const T x) const {
+ assert (d>=0 && d<D);
+ vect r;
+ for (int dd=0; dd<D; ++dd) r[dd]=dd==d?x:elt[dd];
+ return r;
+ }
+
+ vect operator+ () const {
+ vect r;
+ for (int d=0; d<D; ++d) r[d]=+elt[d];
+ return r;
+ }
+
+ vect operator- () const {
+ vect r;
+ for (int d=0; d<D; ++d) r[d]=-elt[d];
+ return r;
+ }
+
+ vect<bool,D> operator! () const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=!elt[d];
+ return r;
+ }
+
+ vect operator~ () const {
+ vect r;
+ for (int d=0; d<D; ++d) r[d]=~elt[d];
+ return r;
+ }
+
+ vect operator+ (const T x) const {
+ vect r(*this);
+ r+=x;
+ return r;
+ }
+
+ vect operator- (const T x) const {
+ vect r(*this);
+ r-=x;
+ return r;
+ }
+
+ vect operator* (const T x) const {
+ vect r(*this);
+ r*=x;
+ return r;
+ }
+
+ vect operator/ (const T x) const {
+ vect r(*this);
+ r/=x;
+ return r;
+ }
+
+ vect operator% (const T x) const {
+ vect r(*this);
+ r%=x;
+ return r;
+ }
+
+ vect operator& (const T x) const {
+ vect r(*this);
+ r&=x;
+ return r;
+ }
+
+ vect operator| (const T x) const {
+ vect r(*this);
+ r|=x;
+ return r;
+ }
+
+ vect operator^ (const T x) const {
+ vect r(*this);
+ r^=x;
+ return r;
+ }
+
+ vect<bool,D> operator&& (const T x) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]&&x;
+ return r;
+ }
+
+ vect<bool,D> operator|| (const T x) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]||x;
+ return r;
+ }
+
+ vect operator+ (const vect& a) const {
+ vect r(*this);
+ r+=a;
+ return r;
+ }
+
+ vect operator- (const vect& a) const {
+ vect r(*this);
+ r-=a;
+ return r;
+ }
+
+ vect operator* (const vect& a) const {
+ vect r(*this);
+ r*=a;
+ return r;
+ }
+
+ vect operator/ (const vect& a) const {
+ vect r(*this);
+ r/=a;
+ return r;
+ }
+
+ vect operator% (const vect& a) const {
+ vect r(*this);
+ r%=a;
+ return r;
+ }
+
+ vect operator& (const vect& a) const {
+ vect r(*this);
+ r&=a;
+ return r;
+ }
+
+ vect operator| (const vect& a) const {
+ vect r(*this);
+ r|=a;
+ return r;
+ }
+
+ vect operator^ (const vect& a) const {
+ vect r(*this);
+ r^=a;
+ return r;
+ }
+
+ vect<bool,D> operator&& (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]&&a[d];
+ return r;
+ }
+
+ vect<bool,D> operator|| (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]||a[d];
+ return r;
+ }
+
+ vect<bool,D> operator== (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]==a[d];
+ return r;
+ }
+
+ vect<bool,D> operator!= (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]!=a[d];
+ return r;
+ }
+
+ vect<bool,D> operator< (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]<a[d];
+ return r;
+ }
+
+ vect<bool,D> operator<= (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]<=a[d];
+ return r;
+ }
+
+ vect<bool,D> operator> (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]>a[d];
+ return r;
+ }
+
+ vect<bool,D> operator>= (const vect& a) const {
+ vect<bool,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]>=a[d];
+ return r;
+ }
+
+ /** This corresponds to the ?: operator. Return a vector with the
+ elements set to either a[i] or b[i], depending on whether
+ (*this)[i] is true or not. */
+ template<class TT>
+ vect<TT,D> ifthen (const vect<TT,D>& a, const vect<TT,D>& b) const {
+ vect<TT,D> r;
+ for (int d=0; d<D; ++d) r[d]=elt[d]?a[d]:b[d];
+ return r;
+ }
+
+ // Iterators
+#if 0
+ // This is non-standard
+ class iter {
+ vect &vec;
+ int d;
+ public:
+ iter (vect &a): vec(a), d(0) { }
+ iter& operator++ () { assert(d<D); ++d; return *this; }
+ bool operator bool () { return d==D; }
+ T& operator* { return vec[d]; }
+ };
+#endif
+
+ // Input/Output helpers
+ void input (istream& is);
+ void output (ostream& os) const;
+};
+
+
+
+// Operators
+
+/** This corresponds to the ?: operator. Return a vector with the
+ elements set to either b[i] or c[i], depending on whether a[i] is
+ true or not. */
+template<class T,int D>
+inline vect<T,D> either (const vect<bool,D>& a,
+ const vect<T,D>& b, const vect<T,D>& c) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=a[d]?b[d]:c[d];
+ return r;
+}
+
+/** Transpose a vector of a vector */
+template<class T, int D, int DD>
+inline vect<vect<T,D>,DD> xpose (vect<vect<T,DD>,D> const & a) {
+ vect<vect<T,D>,DD> r;
+ for (int dd=0; dd<DD; ++dd) for (int d=0; d<D; ++d) r[dd][d] = a[d][dd];
+ return r;
+}
+
+/** Return the element-wise absolute value. */
+template<class T,int D>
+inline vect<T,D> abs (const vect<T,D>& a) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=abs(a[d]);
+ return r;
+}
+
+/** Return the element-wise ceiling. */
+template<class T,int D>
+inline vect<T,D> ceil (const vect<T,D>& a) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=ceil(a[d]);
+ return r;
+}
+
+/** Return the element-wise floor. */
+template<class T,int D>
+inline vect<T,D> floor (const vect<T,D>& a) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=floor(a[d]);
+ return r;
+}
+
+/** Return the element-wise maximum of two vectors. */
+template<class T,int D>
+inline vect<T,D> max (const vect<T,D>& a, const vect<T,D>& b) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=max(a[d],b[d]);
+ return r;
+}
+
+/** Return the element-wise minimum of two vectors. */
+template<class T,int D>
+inline vect<T,D> min (const vect<T,D>& a, const vect<T,D>& b) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=min(a[d],b[d]);
+ return r;
+}
+
+/** Return the element-wise power of two vectors. */
+template<class T,class U,int D>
+inline vect<T,D> pow (const vect<T,D>& a, const vect<U,D>& b) {
+ vect<T,D> r;
+ for (int d=0; d<D; ++d) r[d]=pow(a[d],b[d]);
+ return r;
+}
+
+
+
+// Reduction operators
+
+/** Return true iff any of the elements are true (boolean sum). */
+template<int D>
+inline bool any (const vect<bool,D>& a) {
+ bool r(false);
+ for (int d=0; d<D; ++d) r|=a[d];
+ return r;
+}
+
+/** Return true iff all of the elements are true (boolean product). */
+template<int D>
+inline bool all (const vect<bool,D>& a) {
+ bool r(true);
+ for (int d=0; d<D; ++d) r&=a[d];
+ return r;
+}
+
+/** Count the number of elements in the vector. */
+template<class T,int D>
+inline int count (const vect<T,D>& a) {
+ return D;
+}
+
+/** Return the dot product of two vectors. */
+template<class T,int D>
+inline T dot (const vect<T,D>& a, const vect<T,D>& b) {
+ T r(0);
+ for (int d=0; d<D; ++d) r+=a[d]*b[d];
+ return r;
+}
+
+/** Return the Euklidean length. */
+template<class T,int D>
+inline T hypot (const vect<T,D>& a) {
+ return sqrt(dot(a,a));
+}
+
+/** Return the maximum element. */
+template<class T,int D>
+inline T maxval (const vect<T,D>& a) {
+ assert (D>0);
+ T r(a[0]);
+ for (int d=1; d<D; ++d) r=max(r,a[d]);
+ return r;
+}
+
+/** Return the minimum element. */
+template<class T,int D>
+inline T minval (const vect<T,D>& a) {
+ assert (D>0);
+ T r(a[0]);
+ for (int d=1; d<D; ++d) r=min(r,a[d]);
+ return r;
+}
+
+/** Return the index of the first maximum element. */
+template<class T,int D>
+inline int maxloc (const vect<T,D>& a) {
+ assert (D>0);
+ int r(0);
+ for (int d=1; d<D; ++d) if (a[d]>a[r]) r=d;
+ return r;
+}
+
+/** Return the index of the first minimum element. */
+template<class T,int D>
+inline int minloc (const vect<T,D>& a) {
+ assert (D>0);
+ int r(0);
+ for (int d=1; d<D; ++d) if (a[d]<a[r]) r=d;
+ return r;
+}
+
+/** Return the product of the elements. */
+template<class T,int D>
+inline T prod (const vect<T,D>& a) {
+ T r(1);
+ for (int d=0; d<D; ++d) r*=a[d];
+ return r;
+}
+
+/** Return the size (number of elements) of the vector. */
+template<class T,int D>
+inline int size (const vect<T,D>& a) {
+ return D;
+}
+
+/** Return the sum of the elements. */
+template<class T,int D>
+inline T sum (const vect<T,D>& a) {
+ T r(0);
+ for (int d=0; d<D; ++d) r+=a[d];
+ return r;
+}
+
+// Higher order functions
+
+/** Return a new vector where the function func() has been applied to
+ all elements. */
+template<class T, class U, int D>
+inline vect<U,D> map (U (* const func)(T x), const vect<T,D>& a) {
+ vect<U,D> r;
+ for (int d=0; d<D; ++d) r[d] = func(a[d]);
+ return r;
+}
+
+/** Return a new vector where the function func() has been used
+ element-wise to combine a and b. */
+template<class S, class T, class U, int D>
+inline vect<U,D> zip (U (* const func)(S x, T y),
+ const vect<S,D>& a, const vect<T,D>& b)
+{
+ vect<U,D> r;
+ for (int d=0; d<D; ++d) r[d] = func(a[d], b[d]);
+ return r;
+}
+
+/** Return a scalar where the function func() has been used to reduce
+ the vector a, starting with the scalar value val. */
+template<class T, class U, int D>
+inline U fold (U (* const func)(U val, T x), U val, const vect<T,D>& a)
+{
+ for (int d=0; d<D; ++d) val = func(val, a[d]);
+ return val;
+}
+
+/** Return a scalar where the function func() has been used to reduce
+ the vector a, starting with element 0. */
+template<class T, class U, int D>
+inline U fold1 (U (* const func)(U val, T x), const vect<T,D>& a)
+{
+ assert (D>=1);
+ U val = a[0];
+ for (int d=1; d<D; ++d) val = func(val, a[d]);
+ return val;
+}
+
+/** Return a vector where the function func() has been used to scan
+ the vector a, starting with the scalar value val. */
+template<class T, class U, int D>
+inline vect<U,D> scan0 (U (* const func)(U val, T x), U val,
+ const vect<T,D>& a)
+{
+ vect<U,D> r;
+ for (int d=0; d<D; ++d) {
+ r[d] = val;
+ val = func(val, a[d]);
+ }
+ return r;
+}
+
+/** Return a vector where the function func() has been used to scan
+ the vector a, starting with element 0. */
+template<class T, class U, int D>
+inline vect<U,D> scan1 (U (* const func)(U val, T x), U val,
+ const vect<T,D>& a)
+{
+ vect<U,D> r;
+ for (int d=0; d<D; ++d) {
+ val = func(val, a[d]);
+ r[d] = val;
+ }
+ return r;
+}
+
+
+
+// Input
+
+/** Read a formatted vector from a stream. */
+template<class T,int D>
+inline istream& operator>> (istream& is, vect<T,D>& a) {
+ a.input(is);
+ return is;
+}
+
+
+
+// Output
+
+/** Write a vector formatted to a stream. */
+template<class T,int D>
+inline ostream& operator<< (ostream& os, const vect<T,D>& a) {
+ a.output(os);
+ return os;
+}
+
+
+
+#if 0
+// Specialise explicit constructors
+
+/** Constructor for 2-element vectors from 2 elements. */
+template<class T>
+inline vect<T,2>::vect<T,2> (const T x, const T y) {
+ elt[0]=x; elt[1]=y;
+}
+
+/** Constructor for 3-element vectors from 3 elements. */
+vect (const T x, const T y, const T z) {
+ assert (D==3);
+ elt[0]=x; elt[1]=y; elt[2]=z;
+}
+
+/** Constructor for 4-element vectors from 4 elements. */
+vect (const T x, const T y, const T z, const T t) {
+ assert (D==4);
+ elt[0]=x; elt[1]=y; elt[2]=z; elt[3]=t;
+}
+#endif
+
+
+
+// Specialise for double
+
+template<>
+inline vect<double,3>& vect<double,3>::operator%=(const vect<double,3>& a) {
+ for (int d=0; d<3; ++d) {
+ elt[d]=fmod(elt[d],a[d]);
+ if (elt[d]>a[d]*double(1.0-1.0e-10)) elt[d]=double(0);
+ if (elt[d]<a[d]*double( 1.0e-10)) elt[d]=double(0);
+ }
+ return *this;
+}
+
+
+
+#endif // VECT_HH
diff --git a/Carpet/CarpetReduce/COPYING b/Carpet/CarpetReduce/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetReduce/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetReduce/README b/Carpet/CarpetReduce/README
new file mode 100644
index 000000000..8692a2930
--- /dev/null
+++ b/Carpet/CarpetReduce/README
@@ -0,0 +1,29 @@
+Cactus Code Thorn CarpetReduce
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/README,v 1.3 2004/06/14 07:01:21 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides parallel reduction operators for Carpet.
+
+
+
+This thorn now uses a weight function. This makes it possible to
+perform physically meaningful spatial reduction operations. The
+weight is 1 for all "normal" grid points.
+
+The weight is set to 0 on symmetry and possible the outer boundary,
+and it might be set to 1/2 on the edge of the boundary. Setting this
+depends on the coordinate thorn, and currently works only when the
+coordinates are defined via CoordBase.
+
+The weight is also reduced or set to 0 on coarser grids that are
+overlaid by finer grid.
+
+The weight should also be reduced or set to 0 near and in excised
+regions. This should happen in conjunction with an excision boundary
+thorn.
+
+This weigth function should probably be extracted into its own thorn
+MaskBase, so that many thorns can easily operate on it.
diff --git a/Carpet/CarpetReduce/configuration.ccl b/Carpet/CarpetReduce/configuration.ccl
new file mode 100644
index 000000000..b24240084
--- /dev/null
+++ b/Carpet/CarpetReduce/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetReduce
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/configuration.ccl,v 1.3 2004/06/08 21:09:25 schnetter Exp $
+
+REQUIRES Carpet CarpetLib
+
+REQUIRES THORNS: Carpet CarpetLib
diff --git a/Carpet/CarpetReduce/doc/documentation.tex b/Carpet/CarpetReduce/doc/documentation.tex
new file mode 100644
index 000000000..38e62c3cc
--- /dev/null
+++ b/Carpet/CarpetReduce/doc/documentation.tex
@@ -0,0 +1,143 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/doc/documentation.tex,v 1.1 2003/04/29 14:01:52 schnetter Exp $
+%
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevent thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % START CACTUS THORNGUIDE",
+% except for filling in the title, author, date etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be sparated with a \\ or a comma
+% - You can define your own macros, but they must appear after
+% the START CACTUS THORNGUIDE line, and must not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphix package.
+% More specifically, with the "includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us (later) to create a PDF version of the ThornGuide
+% via pdflatex. |
+% - References should be included with the latex "bibitem" command.
+% - Use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - Do not use \appendix, instead include any appendices you need as
+% standard sections.
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/doc/documentation.tex,v 1.1 2003/04/29 14:01:52 schnetter Exp $
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../../doc/ThornGuide/cactus}
+
+\begin{document}
+
+% The author of the documentation
+\author{Erik Schnetter \textless schnetter@uni-tuebingen.de\textgreater}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{CarpetReduce}
+
+% the date your document was last changed, if your document is in CVS,
+% please use:
+\date{$ $Date: 2003/04/29 14:01:52 $ $}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here
+% \def\mydef etc
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+
+\end{abstract}
+
+% The following sections are suggestive only.
+% Remove them or add your own.
+
+\section{Introduction}
+
+\section{Physical System}
+
+\section{Numerical Implementation}
+
+\section{Using This Thorn}
+
+\subsection{Obtaining This Thorn}
+
+\subsection{Basic Usage}
+
+\subsection{Special Behaviour}
+
+\subsection{Interaction With Other Thorns}
+
+\subsection{Examples}
+
+\subsection{Support and Feedback}
+
+\section{History}
+
+\subsection{Thorn Source Code}
+
+\subsection{Thorn Documentation}
+
+\subsection{Acknowledgements}
+
+
+\begin{thebibliography}{9}
+
+\end{thebibliography}
+
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}
diff --git a/Carpet/CarpetReduce/interface.ccl b/Carpet/CarpetReduce/interface.ccl
new file mode 100644
index 000000000..6c14b6bae
--- /dev/null
+++ b/Carpet/CarpetReduce/interface.ccl
@@ -0,0 +1,27 @@
+# Interface definition for thorn CarpetReduce
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/interface.ccl,v 1.9 2004/06/21 12:37:07 hawke Exp $
+
+IMPLEMENTS: reduce
+
+uses include header: dist.hh
+uses include header: vect.hh
+
+uses include header: carpet.hh
+
+
+
+CCTK_INT FUNCTION \
+ SymmetryTableHandleForGrid (CCTK_POINTER_TO_CONST IN cctkGH)
+REQUIRES FUNCTION SymmetryTableHandleForGrid
+
+CCTK_INT FUNCTION GetBoundarySpecification \
+ (CCTK_INT IN size, \
+ CCTK_INT OUT ARRAY nboundaryzones, \
+ CCTK_INT OUT ARRAY is_internal, \
+ CCTK_INT OUT ARRAY is_staggered, \
+ CCTK_INT OUT ARRAY shiftout)
+REQUIRES FUNCTION GetBoundarySpecification
+
+
+
+REAL weight TYPE=gf TAGS='prolongation="none"' "Weight function"
diff --git a/Carpet/CarpetReduce/param.ccl b/Carpet/CarpetReduce/param.ccl
new file mode 100644
index 000000000..0842ac0db
--- /dev/null
+++ b/Carpet/CarpetReduce/param.ccl
@@ -0,0 +1,6 @@
+# Parameter definitions for thorn CarpetReduce
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/param.ccl,v 1.2 2004/06/14 07:01:21 schnetter Exp $
+
+BOOLEAN verbose "Produce screen output while running"
+{
+} "no"
diff --git a/Carpet/CarpetReduce/schedule.ccl b/Carpet/CarpetReduce/schedule.ccl
new file mode 100644
index 000000000..db1530ae7
--- /dev/null
+++ b/Carpet/CarpetReduce/schedule.ccl
@@ -0,0 +1,44 @@
+# Schedule definitions for thorn CarpetReduce
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/schedule.ccl,v 1.4 2004/08/02 11:43:35 schnetter Exp $
+
+schedule CarpetReduceStartup at STARTUP
+{
+ LANG: C
+} "Startup routine"
+
+
+
+# This might move to MaskBase
+STORAGE: weight
+
+SCHEDULE GROUP MaskBase_SetupMask AT basegrid
+{
+} "Set up the weight function"
+
+SCHEDULE GROUP MaskBase_SetupMask AT postregrid
+{
+} "Set up the weight function"
+
+SCHEDULE MaskBase_InitMask IN MaskBase_SetupMask
+{
+ LANG: C
+ OPTIONS: global loop-local
+} "Initialise the weight function"
+
+SCHEDULE GROUP SetupMask IN MaskBase_SetupMask AFTER MaskBase_InitMask
+{
+} "Set up the weight function (schedule other routines in here)"
+
+# This might move to CoordBase
+SCHEDULE CoordBase_SetupMask IN SetupMask
+{
+ LANG: C
+ OPTIONS: global loop-local
+} "Set up the outer boundaries of the weight function"
+
+# This might move to CarpetMask
+SCHEDULE CarpetMaskSetup IN SetupMask
+{
+ LANG: C
+ OPTIONS: global loop-singlemap
+} "Set up the weight function for the restriction regions"
diff --git a/Carpet/CarpetReduce/src/make.code.defn b/Carpet/CarpetReduce/src/make.code.defn
new file mode 100644
index 000000000..afc3646db
--- /dev/null
+++ b/Carpet/CarpetReduce/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn CarpetReduce
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/make.code.defn,v 1.2 2004/06/14 07:01:21 schnetter Exp $
+
+# Source files in this directory
+SRCS = mask_carpet.cc mask_coords.c mask_init.c reduce.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetReduce/src/mask_carpet.cc b/Carpet/CarpetReduce/src/mask_carpet.cc
new file mode 100644
index 000000000..d0861320f
--- /dev/null
+++ b/Carpet/CarpetReduce/src/mask_carpet.cc
@@ -0,0 +1,292 @@
+#include <cassert>
+#include <sstream>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "carpet.hh"
+
+#include "mask_carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/mask_carpet.cc,v 1.5 2004/08/05 11:15:49 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetMask_Mask_cc);
+}
+
+
+
+namespace CarpetMask {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ /**
+ * Reduce the weight on the current and the next coarser level to
+ * make things consistent. Set the weight to 0 inside the
+ * restriction region of the next coarser level, maybe to 1/2 near
+ * the boundary of that region, and also to 1/2 near the
+ * prolongation boundary of this level.
+ */
+
+ void
+ CarpetMaskSetup (CCTK_ARGUMENTS)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (reffact == 2);
+
+ if (! is_singlemap_mode()) {
+ CCTK_WARN (0, "This routine may only be called in singlemap mode");
+ }
+
+ if (reflevel > 0) {
+
+ ivect const izero = ivect(0);
+ ivect const ione = ivect(1);
+
+ gh<dim> const & hh = *vhh.at(Carpet::map);
+ dh<dim> const & dd = *vdd.at(Carpet::map);
+
+ ibbox const & base = hh.bases.at(reflevel).at(mglevel);
+
+
+
+ // Calculate the union of all refined regions
+ ibset refined;
+ for (int c=0; c<hh.components(reflevel); ++c) {
+ refined |= hh.extents.at(reflevel).at(c).at(mglevel);
+ }
+ refined.normalize();
+
+ // Calculate the union of all coarse regions
+ ibset parent;
+ for (int c=0; c<hh.components(reflevel-1); ++c) {
+ parent |= hh.extents.at(reflevel-1).at(c).at(mglevel).expanded_for(base);
+ }
+ parent.normalize();
+
+ // Subtract the refined region
+ ibset notrefined = parent - refined;
+ notrefined.normalize();
+
+ // Enlarge this set
+ ibset enlarged[dim];
+ for (int d=0; d<dim; ++d) {
+ for (ibset::const_iterator bi = notrefined.begin();
+ bi != notrefined.end();
+ ++bi)
+ {
+ enlarged[d] |= (*bi).expand(ivect::dir(d), ivect::dir(d));
+ }
+ enlarged[d].normalize();
+ }
+
+ // Intersect with the original union
+ ibset boundaries[dim];
+ for (int d=0; d<dim; ++d) {
+ boundaries[d] = refined & enlarged[d];
+ boundaries[d].normalize();
+ }
+
+ // Subtract the boundaries from the refined region
+ for (int d=0; d<dim; ++d) {
+ refined -= boundaries[d];
+ }
+ refined.normalize();
+
+
+
+ // Set prolongation boundaries of this level
+ {
+ BEGIN_LOCAL_COMPONENT_LOOP (cctkGH, CCTK_GF) {
+
+ DECLARE_CCTK_ARGUMENTS;
+
+ ibbox const & ext
+ = dd.boxes.at(reflevel).at(component).at(mglevel).exterior;
+
+ for (int d=0; d<dim; ++d) {
+ for (ibset::const_iterator bi = boundaries[d].begin();
+ bi != boundaries[d].end();
+ ++bi)
+ {
+
+ ibbox const & box = (*bi) & ext;
+ if (! box.empty()) {
+
+ assert (all ((box.lower() - ext.lower() ) >= 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) >= 0));
+ assert (all ((box.lower() - ext.lower() ) % ext.stride() == 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) % ext.stride() == 0));
+ ivect const imin = (box.lower() - ext.lower() ) / ext.stride();
+ ivect const imax = (box.upper() - ext.lower() + ext.stride()) / ext.stride();
+ assert (all (izero <= imin));
+ assert (box.empty() || all (imin <= imax));
+ assert (all (imax <= ivect::ref(cctk_lsh)));
+
+ if (verbose) {
+ ostringstream buf;
+ buf << "Setting prolongation boundary on level " << reflevel << " direction " << d << " to weight 1/2: " << imin << ":" << imax-ione;
+ CCTK_INFO (buf.str().c_str());
+ }
+
+ // Set weight on the boundary to 1/2
+ assert (dim == 3);
+ for (int k=imin[2]; k<imax[2]; ++k) {
+ for (int j=imin[1]; j<imax[1]; ++j) {
+ for (int i=imin[0]; i<imax[0]; ++i) {
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] *= 0.5;
+ }
+ }
+ }
+
+ } // if box not empty
+
+ } // for box
+ } // for d
+
+ } END_LOCAL_COMPONENT_LOOP;
+ }
+
+
+
+ // Set restriction region on next coarser level
+ {
+ int const oldreflevel = reflevel;
+ int const oldmap = Carpet::map;
+ leave_singlemap_mode (cctkGH);
+ leave_level_mode (cctkGH);
+ enter_level_mode (cctkGH, oldreflevel-1);
+ enter_singlemap_mode (cctkGH, oldmap);
+
+ BEGIN_LOCAL_COMPONENT_LOOP (cctkGH, CCTK_GF) {
+
+ DECLARE_CCTK_ARGUMENTS;
+
+ ibbox const & ext
+ = dd.boxes.at(reflevel).at(component).at(mglevel).exterior;
+
+ for (ibset::const_iterator bi = refined.begin();
+ bi != refined.end();
+ ++bi)
+ {
+
+ ibbox const & box = (*bi).contracted_for(ext) & ext;
+ if (! box.empty()) {
+
+ assert (all ((box.lower() - ext.lower() ) >= 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) >= 0));
+ assert (all ((box.lower() - ext.lower() ) % ext.stride() == 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) % ext.stride() == 0));
+ ivect const imin = (box.lower() - ext.lower() ) / ext.stride();
+ ivect const imax = (box.upper() - ext.lower() + ext.stride()) / ext.stride();
+ assert (all (izero <= imin));
+ assert (box.empty() || all (imin <= imax));
+ assert (all (imax <= ivect::ref(cctk_lsh)));
+
+ if (verbose) {
+ ostringstream buf;
+ buf << "Setting restricted region on level " << reflevel << " to weight 0: " << imin << ":" << imax-ione;
+ CCTK_INFO (buf.str().c_str());
+ }
+
+ // Set weight in the restricted region to 0
+ assert (dim == 3);
+ for (int k=imin[2]; k<imax[2]; ++k) {
+ for (int j=imin[1]; j<imax[1]; ++j) {
+ for (int i=imin[0]; i<imax[0]; ++i) {
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] = 0;
+ }
+ }
+ }
+
+ } // if box not empty
+
+ } // for box
+
+ assert (dim == 3);
+ vector<int> mask (cctk_lsh[0] * cctk_lsh[1] * cctk_lsh[2]);
+
+ assert (dim == 3);
+ for (int k=0; k<cctk_lsh[2]; ++k) {
+ for (int j=0; j<cctk_lsh[1]; ++j) {
+ for (int i=0; i<cctk_lsh[0]; ++i) {
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ mask[ind] = 0;
+ }
+ }
+ }
+
+ for (int d=0; d<dim; ++d) {
+ for (ibset::const_iterator bi = boundaries[d].begin();
+ bi != boundaries[d].end();
+ ++bi)
+ {
+
+ ibbox const & box = (*bi).contracted_for(ext) & ext;
+ if (! box.empty()) {
+
+ assert (all ((box.lower() - ext.lower() ) >= 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) >= 0));
+ assert (all ((box.lower() - ext.lower() ) % ext.stride() == 0));
+ assert (all ((box.upper() - ext.lower() + ext.stride()) % ext.stride() == 0));
+ ivect const imin = (box.lower() - ext.lower() ) / ext.stride();
+ ivect const imax = (box.upper() - ext.lower() + ext.stride()) / ext.stride();
+ assert (all (izero <= imin));
+ assert (box.empty() || all (imin <= imax));
+ assert (all (imax <= ivect::ref(cctk_lsh)));
+
+ if (verbose) {
+ ostringstream buf;
+ buf << "Setting restriction boundary on level " << reflevel << " direction " << d << " to weight 1/2: " << imin << ":" << imax-ione;
+ CCTK_INFO (buf.str().c_str());
+ }
+
+ // Set weight on the boundary to 1/2
+ assert (dim == 3);
+ for (int k=imin[2]; k<imax[2]; ++k) {
+ for (int j=imin[1]; j<imax[1]; ++j) {
+ for (int i=imin[0]; i<imax[0]; ++i) {
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ if (mask[ind] == 0) {
+ mask[ind] = 1;
+ }
+ mask[ind] *= 2;
+ }
+ }
+ }
+
+ } // if box not empty
+
+ } // for box
+ } // for d
+
+ assert (dim == 3);
+ for (int k=0; k<cctk_lsh[2]; ++k) {
+ for (int j=0; j<cctk_lsh[1]; ++j) {
+ for (int i=0; i<cctk_lsh[0]; ++i) {
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ if (mask[ind] > 0) {
+ weight[ind] *= 1.0 - 1.0 / mask[ind];
+ }
+ }
+ }
+ }
+
+ } END_LOCAL_COMPONENT_LOOP;
+
+ leave_singlemap_mode (cctkGH);
+ leave_level_mode (cctkGH);
+ enter_level_mode (cctkGH, oldreflevel);
+ enter_singlemap_mode (cctkGH, oldmap);
+ }
+
+ } // if reflevel>0
+ }
+
+} // namespace CarpetMask
diff --git a/Carpet/CarpetReduce/src/mask_carpet.hh b/Carpet/CarpetReduce/src/mask_carpet.hh
new file mode 100644
index 000000000..818e101cf
--- /dev/null
+++ b/Carpet/CarpetReduce/src/mask_carpet.hh
@@ -0,0 +1,13 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/mask_carpet.hh,v 1.1 2004/06/14 07:01:21 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+
+namespace CarpetMask {
+
+ extern "C" {
+ void
+ CarpetMaskSetup (CCTK_ARGUMENTS);
+ }
+
+} // namespace CarpetMask
diff --git a/Carpet/CarpetReduce/src/mask_coords.c b/Carpet/CarpetReduce/src/mask_coords.c
new file mode 100644
index 000000000..d5d8df7c4
--- /dev/null
+++ b/Carpet/CarpetReduce/src/mask_coords.c
@@ -0,0 +1,128 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/mask_coords.c,v 1.3 2004/08/04 13:03:09 schnetter Exp $ */
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+
+
+void
+CoordBase_SetupMask (CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ CCTK_INT nboundaryzones[6];
+ CCTK_INT is_internal[6];
+ CCTK_INT is_staggered[6];
+ CCTK_INT shiftout[6];
+
+ int imin[3], imax[3]; /* boundary extent */
+
+ int i, j, k;
+ int d, f;
+ int dd;
+
+ int ierr;
+
+
+
+ ierr = GetBoundarySpecification
+ (6, nboundaryzones, is_internal, is_staggered, shiftout);
+ if (ierr != 0) {
+ CCTK_WARN (0, "Could not get boundary specification");
+ }
+
+ /* Loop over all dimensions and faces */
+ for (d=0; d<3; ++d) {
+ for (f=0; f<2; ++f) {
+ /* If this processor has the outer boundary */
+ if (cctk_bbox[2*d+f]) {
+
+ int npoints;
+
+ if (is_internal[2*d+f]) {
+ /* The boundary extends inwards */
+ npoints = - nboundaryzones[2*d+f] + shiftout[2*d+f];
+ } else {
+ /* The boundary extends outwards */
+ npoints = nboundaryzones[2*d+f] + shiftout[2*d+f] - 1;
+ }
+
+ /* If there are boundary that should be ignored */
+ if (npoints >= 0) {
+
+ if (npoints < 0 || npoints > cctk_lsh[d]) {
+ CCTK_WARN (0, "Illegal number of boundary points");
+ }
+
+ /* Calculate the extent of the boundary */
+ for (dd=0; dd<3; ++dd) {
+ imin[dd] = 0;
+ imax[dd] = cctk_lsh[dd];
+ }
+
+ if (f==0) {
+ /* lower face */
+ imax[d] = imin[d] + npoints;
+ } else {
+ /* upper face */
+ imin[d] = imax[d] - npoints;
+ }
+
+ /* Loop over the boundary */
+ if (verbose) {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Setting boundary points in direction %d face %d to weight 0", d, f);
+ }
+ for (k=imin[2]; k<imax[2]; ++k) {
+ for (j=imin[1]; j<imax[1]; ++j) {
+ for (i=imin[0]; i<imax[0]; ++i) {
+
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] = 0.0;
+
+ }
+ }
+ }
+
+ /* When the boundary is not staggered, then give the points
+ on the boundary the weight 1/2 */
+ if (! is_staggered[2*d+f]) {
+
+ /* Adapt the extent of the boundary */
+ if (f==0) {
+ /* lower face */
+ imin[d] = imax[d];
+ imax[d] = imin[d] + 1;
+ } else {
+ /* upper face */
+ imax[d] = imin[d];
+ imin[d] = imax[d] - 1;
+ }
+
+ /* Loop over the points next to boundary */
+ if (verbose) {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Setting staggered boundary points in direction %d face %d to weight 1/2", d, f);
+ }
+ for (k=imin[2]; k<imax[2]; ++k) {
+ for (j=imin[1]; j<imax[1]; ++j) {
+ for (i=imin[0]; i<imax[0]; ++i) {
+
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] *= 0.5;
+
+ }
+ }
+ }
+
+ } /* if the boundary is not staggered */
+
+ } /* if there are boundary points */
+
+ } /* if is outer boundary */
+ } /* loop over faces */
+ } /* loop over directions */
+
+}
diff --git a/Carpet/CarpetReduce/src/mask_init.c b/Carpet/CarpetReduce/src/mask_init.c
new file mode 100644
index 000000000..70768b973
--- /dev/null
+++ b/Carpet/CarpetReduce/src/mask_init.c
@@ -0,0 +1,161 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/mask_init.c,v 1.2 2004/08/02 11:43:35 schnetter Exp $ */
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "util_Table.h"
+
+
+
+void
+MaskBase_InitMask (CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+#if 0
+ CCTK_INT symtable;
+ CCTK_INT symmetry_handle[6];
+ CCTK_INT symmetry_zone_width[6];
+#endif
+
+ int imin[3], imax[3]; /* boundary extent */
+
+ int i, j, k;
+ int d, f;
+ int dd;
+
+#if 0
+ int istat;
+#endif
+
+
+
+ /* Initialise the weight to 1 everywhere */
+ if (verbose) {
+ CCTK_INFO ("Initialising to weight 1");
+ }
+
+ for (k=0; k<cctk_lsh[2]; ++k) {
+ for (j=0; j<cctk_lsh[1]; ++j) {
+ for (i=0; i<cctk_lsh[0]; ++i) {
+
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] = 1.0;
+
+ }
+ }
+ }
+
+
+
+ /* Set the weight to 0 on inter-processor boundaries */
+ if (verbose) {
+ CCTK_INFO ("Setting inter-processor boundaries to weight 0");
+ }
+
+ /* Loop over all dimensions and faces */
+ for (d=0; d<3; ++d) {
+ for (f=0; f<2; ++f) {
+ /* If this is an inter-processor boundary */
+ if (! cctk_bbox[2*d+f]) {
+
+ /* Calculate the extent of the boundary hyperslab */
+ for (dd=0; dd<3; ++dd) {
+ imin[dd] = 0;
+ imax[dd] = cctk_lsh[dd];
+ }
+ if (f==0) {
+ /* lower face */
+ imax[d] = imin[d] + cctk_nghostzones[d];
+ } else {
+ /* upper face */
+ imin[d] = imax[d] - cctk_nghostzones[d];
+ }
+
+ /* Loop over the boundary slab */
+ for (k=imin[2]; k<imax[2]; ++k) {
+ for (j=imin[1]; j<imax[1]; ++j) {
+ for (i=imin[0]; i<imax[0]; ++i) {
+
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] = 0.0;
+
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+
+
+#if 0
+
+ /* Take the symmetry boundaries into account */
+ if (verbose) {
+ CCTK_INFO ("Setting symmetry boundaries to weight 0");
+ }
+
+ /* Get symmetry information */
+ symtable = SymmetryTableHandleForGrid (cctkGH);
+ if (symtable < 0) {
+ CCTK_WARN (0, "Could not get symmetry table");
+ }
+ istat = Util_TableGetIntArray
+ (symtable, 6, symmetry_handle, "symmetry_handle");
+ if (istat != 6) {
+ CCTK_WARN (0, "Could not get \"symmetry_handle\" entry from symmetry table");
+ }
+ istat = Util_TableGetIntArray
+ (symtable, 6, symmetry_zone_width, "symmetry_zone_width");
+ if (istat != 6) {
+ CCTK_WARN (0, "Could not get \"symmetry_zone_width\" entry from symmetry table");
+ }
+
+ /* Loop over all dimensions and faces */
+ for (d=0; d<3; ++d) {
+ for (f=0; f<2; ++f) {
+ /* If this is a symmetry face */
+ if (symmetry_handle[2*d+f] >= 0) {
+ /* If this processor has the outer boundary */
+ if (cctk_bbox[2*d+f]) {
+
+ if (symmetry_zone_width[2*d+f] < 0
+ || symmetry_zone_width[2*d+f] > cctk_lsh[d]) {
+ CCTK_WARN (0, "The symmetry table entry \"symmetry_zone_width\" contains illegal values");
+ }
+
+ /* Calculate the extent of the boundary hyperslab */
+ for (dd=0; dd<3; ++dd) {
+ imin[dd] = 0;
+ imax[dd] = cctk_lsh[dd];
+ }
+ if (f==0) {
+ /* lower face */
+ imax[d] = imin[d] + symmetry_zone_width[2*d+f];
+ } else {
+ /* upper face */
+ imin[d] = imax[d] - symmetry_zone_width[2*d+f];
+ }
+
+ /* Loop over the boundary slab */
+ for (k=imin[2]; k<imax[2]; ++k) {
+ for (j=imin[1]; j<imax[1]; ++j) {
+ for (i=imin[0]; i<imax[0]; ++i) {
+
+ int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k);
+ weight[ind] = 0.0;
+
+ }
+ }
+ }
+
+ }
+ }
+ }
+ }
+#endif
+}
diff --git a/Carpet/CarpetReduce/src/reduce.cc b/Carpet/CarpetReduce/src/reduce.cc
new file mode 100644
index 000000000..622d63291
--- /dev/null
+++ b/Carpet/CarpetReduce/src/reduce.cc
@@ -0,0 +1,1174 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.43 2004/08/02 11:43:35 schnetter Exp $
+
+#include <assert.h>
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <complex>
+#include <limits>
+#include <vector>
+
+#include <mpi.h>
+
+#include "cctk.h"
+
+#include "dist.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "reduce.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.cc,v 1.43 2004/08/02 11:43:35 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetReduce_reduce_cc);
+}
+
+
+
+namespace CarpetReduce {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ // Helper functions and types
+
+ // The minimum of two values
+ template<typename T> inline T
+ mymin (const T x, const T y)
+ {
+ return min(x, y);
+ }
+
+ // The maximum of two values
+ template<typename T> inline T
+ mymax (const T x, const T y)
+ {
+ return max(x, y);
+ }
+
+ // Square root
+ template<typename T> inline T
+ mysqrt (const T x)
+ {
+ return sqrt(x);
+ }
+
+
+
+ // Properties of numeric types
+ template<typename T>
+ struct my_numeric_limits {
+
+ // The smallest possible value
+ static T min ()
+ {
+ return mymin (numeric_limits<T>::min(), -numeric_limits<T>::max());
+ }
+
+ // The largest possible value
+ static T max ()
+ {
+ return mymax (numeric_limits<T>::max(), -numeric_limits<T>::min());
+ }
+
+ };
+
+
+
+ // Provide for each Cactus type a "good" type, translating between
+ // CCTK_COMPLEX* and complex<CCTK_REAL*>
+ template<typename T>
+ struct typeconv {
+ typedef T goodtype;
+ typedef T badtype;
+ };
+
+
+
+ // Overload the above helper functions and types for complex values
+
+#ifdef CCTK_REAL4
+
+ template<> inline complex<CCTK_REAL4>
+ mymin (const complex<CCTK_REAL4> x, const complex<CCTK_REAL4> y)
+ {
+ return complex<CCTK_REAL4> (mymin(x.real(), y.real()),
+ mymin(x.imag(), y.imag()));
+ }
+
+ template<> inline complex<CCTK_REAL4>
+ mymax (const complex<CCTK_REAL4> x, const complex<CCTK_REAL4> y)
+ {
+ return complex<CCTK_REAL4> (mymax(x.real(), y.real()),
+ mymax(x.imag(), y.imag()));
+ }
+
+ template<>
+ struct my_numeric_limits<complex<CCTK_REAL4> > {
+ static complex<CCTK_REAL4> min ()
+ {
+ return complex<CCTK_REAL4> (my_numeric_limits<CCTK_REAL4>::min(),
+ my_numeric_limits<CCTK_REAL4>::min());
+ }
+ static complex<CCTK_REAL4> max ()
+ {
+ return complex<CCTK_REAL4> (my_numeric_limits<CCTK_REAL4>::max(),
+ my_numeric_limits<CCTK_REAL4>::max());
+ }
+ };
+
+ template<>
+ struct typeconv<CCTK_COMPLEX8> {
+ typedef complex<CCTK_REAL4> goodtype;
+ typedef CCTK_COMPLEX8 badtype;
+ };
+
+#endif
+
+#ifdef CCTK_REAL8
+
+ template<> inline complex<CCTK_REAL8>
+ mymin (const complex<CCTK_REAL8> x, const complex<CCTK_REAL8> y)
+ {
+ return complex<CCTK_REAL8> (mymin(x.real(), y.real()),
+ mymin(x.imag(), y.imag()));
+ }
+
+ template<> inline complex<CCTK_REAL8>
+ mymax (const complex<CCTK_REAL8> x, const complex<CCTK_REAL8> y)
+ {
+ return complex<CCTK_REAL8> (mymax(x.real(), y.real()),
+ mymax(x.imag(), y.imag()));
+ }
+
+ template<>
+ struct my_numeric_limits<complex<CCTK_REAL8> > {
+ static complex<CCTK_REAL8> min ()
+ {
+ return complex<CCTK_REAL8> (my_numeric_limits<CCTK_REAL8>::min(),
+ my_numeric_limits<CCTK_REAL8>::min());
+ }
+ static complex<CCTK_REAL8> max ()
+ {
+ return complex<CCTK_REAL8> (my_numeric_limits<CCTK_REAL8>::max(),
+ my_numeric_limits<CCTK_REAL8>::max());
+ }
+ };
+
+ template<>
+ struct typeconv<CCTK_COMPLEX16> {
+ typedef complex<CCTK_REAL8> goodtype;
+ typedef CCTK_COMPLEX16 badtype;
+ };
+
+#endif
+
+#ifdef CCTK_REAL16
+
+ template<> inline complex<CCTK_REAL16>
+ mymin (const complex<CCTK_REAL16> x, const complex<CCTK_REAL16> y)
+ {
+ return complex<CCTK_REAL16> (mymin(x.real(), y.real()),
+ mymin(x.imag(), y.imag()));
+ }
+
+ template<> inline complex<CCTK_REAL16>
+ mymax (const complex<CCTK_REAL16> x, const complex<CCTK_REAL16> y)
+ {
+ return complex<CCTK_REAL16> (mymax(x.real(), y.real()),
+ mymax(x.imag(), y.imag()));
+ }
+
+ template<>
+ struct my_numeric_limits<complex<CCTK_REAL16> > {
+ static complex<CCTK_REAL16> min ()
+ {
+ return complex<CCTK_REAL16> (my_numeric_limits<CCTK_REAL16>::min(),
+ my_numeric_limits<CCTK_REAL16>::min());
+ }
+ static complex<CCTK_REAL16> max ()
+ {
+ return complex<CCTK_REAL16> (my_numeric_limits<CCTK_REAL16>::max(),
+ my_numeric_limits<CCTK_REAL16>::max());
+ }
+ };
+
+ template<>
+ struct typeconv<CCTK_COMPLEX32> {
+ typedef complex<CCTK_REAL16> goodtype;
+ typedef CCTK_COMPLEX32 badtype;
+ };
+
+#endif
+
+
+
+ // Provide a square root function for integer values
+
+#ifdef CCTK_INT1
+ template<> inline CCTK_INT1
+ mysqrt (const CCTK_INT1 x)
+ {
+ return sqrt((CCTK_REAL)x);
+ }
+#endif
+
+#ifdef CCTK_INT2
+ template<> inline CCTK_INT2
+ mysqrt (const CCTK_INT2 x)
+ {
+ return sqrt((CCTK_REAL)x);
+ }
+#endif
+
+#ifdef CCTK_INT4
+ template<> inline CCTK_INT4
+ mysqrt (const CCTK_INT4 x)
+ {
+ return sqrt((CCTK_REAL)x);
+ }
+#endif
+
+#ifdef CCTK_INT8
+ template<> inline CCTK_INT8
+ mysqrt (const CCTK_INT8 x)
+ {
+ return sqrt((CCTK_REAL)x);
+ }
+#endif
+
+
+
+ // Poor man's RTTI
+ enum ared { do_count, do_minimum, do_maximum, do_product, do_sum,
+ do_sum_abs, do_sum_squared, do_average, do_norm1, do_norm2,
+ do_norm_inf };
+
+
+
+ struct reduction {
+ virtual ared thered () const = 0;
+ virtual bool uses_cnt () const = 0;
+ virtual MPI_Op mpi_op () const = 0;
+ };
+
+
+
+ // count: count the number of grid points
+ struct count : reduction {
+ count () { }
+ ared thered () const { return do_count; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { accum += T(weight); }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct minimum : reduction {
+ minimum () { }
+ ared thered () const { return do_minimum; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = my_numeric_limits<T>::max(); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum = mymin(accum, val); }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_MIN; }
+ };
+
+ struct maximum : reduction {
+ maximum () { }
+ ared thered () const { return do_maximum; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = my_numeric_limits<T>::min(); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum = mymax(accum, val); }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_MAX; }
+ };
+
+ struct product : reduction {
+ product () { }
+ ared thered () const { return do_product; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(1); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum *= weight==1 ? val : pow(val,weight); }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_PROD; }
+ };
+
+ struct sum : reduction {
+ sum () { }
+ ared thered () const { return do_sum; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum += weight*val; }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct sum_abs : reduction {
+ sum_abs () { }
+ ared thered () const { return do_sum_abs; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum += weight*abs(val); }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct sum_squared : reduction {
+ sum_squared () { }
+ ared thered () const { return do_sum_squared; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum += weight*val*val; }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct average : reduction {
+ average () { }
+ ared thered () const { return do_average; }
+ bool uses_cnt () const { return true; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum += weight*val; }
+ static inline void finalise (T& accum, const T& cnt) { accum /= cnt; }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct norm1 : reduction {
+ norm1 () { }
+ ared thered () const { return do_norm1; }
+ bool uses_cnt () const { return true; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum += weight*abs(val); }
+ static inline void finalise (T& accum, const T& cnt) { accum /= cnt; }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct norm2 : reduction {
+ norm2 () { }
+ ared thered () const { return do_norm2; }
+ bool uses_cnt () const { return true; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum += weight*abs(val)*abs(val); }
+ static inline void finalise (T& accum, const T& cnt) { accum = mysqrt(accum / cnt); }
+ };
+ MPI_Op mpi_op () const { return MPI_SUM; }
+ };
+
+ struct norm_inf : reduction {
+ norm_inf () { }
+ ared thered () const { return do_norm_inf; }
+ bool uses_cnt () const { return false; }
+ template<class T>
+ struct op {
+ static inline void initialise (T& accum) { accum = T(0); }
+ static inline void reduce (T& accum, const T& val, const CCTK_REAL weight) { if (weight>0) accum = mymax(accum, T(abs(val))); }
+ static inline void finalise (T& accum, const T& cnt) { }
+ };
+ MPI_Op mpi_op () const { return MPI_MAX; }
+ };
+
+
+
+ template<class T,class OP>
+ void initialise (void* const outval, void* const cnt)
+ {
+ OP::initialise (*(T*)outval);
+ *(T*)cnt = T(0);
+ }
+
+ template<class T,class OP>
+ void reduce (const int* const lsh, const int* const bbox,
+ const int* const nghostzones,
+ vector<const void*> const& inarrays,
+ vector<CCTK_REAL> const& tfacs,
+ void* const outval, void* const cnt,
+ const CCTK_REAL* const weight, const CCTK_REAL levfac)
+ {
+ for (size_t tl=0; tl<inarrays.size(); ++tl) {
+ assert (inarrays.at(tl));
+ }
+ assert (tfacs.size() == inarrays.size());
+ T myoutval = *(T*)outval;
+ T mycnt = *(T*)cnt;
+ vect<int,dim> imin, imax;
+ for (int d=0; d<dim; ++d) {
+ imin[d] = bbox[2*d ] ? 0 : nghostzones[d];
+ imax[d] = bbox[2*d+1] ? lsh[d] : lsh[d] - nghostzones[d];
+ }
+ assert (dim==3);
+ for (int k=imin[2]; k<imax[2]; ++k) {
+ for (int j=imin[1]; j<imax[1]; ++j) {
+ for (int i=imin[0]; i<imax[0]; ++i) {
+ const int index = i + lsh[0] * (j + lsh[1] * k);
+ CCTK_REAL const w = (weight ? weight[index] : 1.0) * levfac;
+ T myinval = T(0);
+ for (size_t tl=0; tl<inarrays.size(); ++tl) {
+ myinval += (static_cast<const T*>(inarrays.at(tl))[index]
+ * tfacs.at(tl));
+ }
+ OP::reduce (myoutval, myinval, w);
+ mycnt += w;
+ }
+ }
+ }
+ *(T*)outval = myoutval;
+ *(T*)cnt = mycnt;
+ }
+
+ template<class T,class OP>
+ void finalise (void* const outval, const void* const cnt)
+ {
+ OP::finalise (*(T*)outval, *(const T*)cnt);
+ }
+
+
+
+ void Initialise (const cGH* const cgh, const int proc,
+ const int num_outvals,
+ void* const myoutvals, const int outtype,
+ void* const mycounts,
+ const reduction* const red)
+ {
+ assert (cgh);
+
+ assert (proc == -1 || (proc>=0 && proc<CCTK_nProcs(cgh)));
+
+ assert (num_outvals>=0);
+
+ const int vartypesize = CCTK_VarTypeSize(outtype);
+ assert (vartypesize>=0);
+
+ assert (myoutvals);
+ assert (mycounts);
+
+ assert (red);
+
+ for (int n=0; n<num_outvals; ++n) {
+
+ switch (outtype) {
+#define INITIALISE(OP,S) \
+ case do_##OP: { \
+ typedef typeconv<S>::goodtype T; \
+ initialise<T,OP::op<T> > (&((char*)myoutvals)[vartypesize*n], \
+ &((char*)mycounts )[vartypesize*n]); \
+ break; \
+ }
+#define TYPECASE(N,T) \
+ case N: { \
+ switch (red->thered()) { \
+ INITIALISE(count,T); \
+ INITIALISE(minimum,T); \
+ INITIALISE(maximum,T); \
+ INITIALISE(product,T); \
+ INITIALISE(sum,T); \
+ INITIALISE(sum_abs,T); \
+ INITIALISE(sum_squared,T); \
+ INITIALISE(average,T); \
+ INITIALISE(norm1,T); \
+ INITIALISE(norm2,T); \
+ INITIALISE(norm_inf,T); \
+ default: \
+ assert (0); \
+ } \
+ break; \
+ }
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+#undef INITIALISE
+ default:
+ assert (0);
+ }
+
+ } // for n
+ }
+
+
+
+ void Copy (const cGH* const cgh, const int proc,
+ const int lsize,
+ const int num_inarrays,
+ const void* const* const inarrays, const int intype,
+ const int num_outvals,
+ void* const myoutvals, const int outtype,
+ void* const mycounts)
+ {
+ assert (cgh);
+
+ assert (proc == -1 || (proc>=0 && proc<CCTK_nProcs(cgh)));
+
+ assert (lsize >= 0);
+ assert (num_outvals>=0);
+
+ assert (num_inarrays>=0);
+ assert (num_inarrays * lsize == num_outvals);
+ assert (inarrays);
+ for (int n=0; n<num_inarrays; ++n) {
+ assert (inarrays[n]);
+ }
+
+ assert (myoutvals);
+ assert (mycounts);
+
+ assert (outtype == intype);
+
+ for (int m=0; m<num_inarrays; ++m) {
+ for (int n=0; n<lsize; ++n) {
+
+ switch (outtype) {
+#define COPY(S) \
+ { \
+ typedef typeconv<S>::goodtype T; \
+ ((T*)myoutvals)[n+lsize*m] = ((const T*)inarrays[m])[n]; \
+ ((T*)mycounts )[n+lsize*m] = T(1); \
+ }
+#define TYPECASE(N,T) \
+ case N: { \
+ COPY(T); \
+ break; \
+ }
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+#undef COPY
+ default:
+ assert (0);
+ }
+
+ } // for
+ } // for
+ }
+
+
+
+ void Reduce (const cGH* const cgh, const int proc,
+ const int* const mylsh, const int* const mybbox,
+ const int* const mynghostzones,
+ const int num_inarrays,
+ vector<const void* const*> const& inarrays,
+ vector<CCTK_REAL> const& tfacs, const int intype,
+ const int num_outvals,
+ void* const myoutvals, const int outtype,
+ void* const mycounts,
+ const reduction* const red,
+ CCTK_REAL const * const weight, CCTK_REAL const levfac)
+ {
+ assert (cgh);
+
+ assert (proc == -1 || (proc>=0 && proc<CCTK_nProcs(cgh)));
+
+ assert (num_outvals>=0);
+
+ assert (num_inarrays>=0);
+ assert (num_inarrays == num_outvals);
+ for (size_t tl=0; tl<inarrays.size(); ++tl) {
+ assert (inarrays.at(tl));
+ for (int n=0; n<num_inarrays; ++n) {
+ assert (inarrays.at(tl)[n]);
+ }
+ }
+ assert (tfacs.size() == inarrays.size());
+
+ for (int d=0; d<dim; ++d) {
+ assert (mylsh[d]>=0);
+ assert (mynghostzones[d]>=0 && 2*mynghostzones[d]<=mylsh[d]);
+ }
+
+ const int vartypesize = CCTK_VarTypeSize(outtype);
+ assert (vartypesize>=0);
+
+ assert (myoutvals);
+ assert (mycounts);
+
+ assert (outtype == intype);
+
+ vector<const void*> myinarrays(inarrays.size());
+
+ for (int n=0; n<num_outvals; ++n) {
+
+ for (size_t tl=0; tl<inarrays.size(); ++tl) {
+ myinarrays.at(tl) = inarrays.at(tl)[n];
+ }
+
+ switch (outtype) {
+#define REDUCE(OP,S) \
+ case do_##OP: { \
+ typedef typeconv<S>::goodtype T; \
+ reduce<T,OP::op<T> > (mylsh, mybbox, mynghostzones, \
+ myinarrays, tfacs, \
+ &((char*)myoutvals)[vartypesize*n], \
+ &((char*)mycounts )[vartypesize*n], \
+ weight, levfac); \
+ break; \
+ }
+#define TYPECASE(N,T) \
+ case N: { \
+ switch (red->thered()) { \
+ REDUCE(count,T); \
+ REDUCE(minimum,T); \
+ REDUCE(maximum,T); \
+ REDUCE(product,T); \
+ REDUCE(sum,T); \
+ REDUCE(sum_abs,T); \
+ REDUCE(sum_squared,T); \
+ REDUCE(average,T); \
+ REDUCE(norm1,T); \
+ REDUCE(norm2,T); \
+ REDUCE(norm_inf,T); \
+ default: \
+ assert (0); \
+ } \
+ break; \
+ }
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+#undef REDUCE
+ default:
+ assert (0);
+ }
+
+ } // for n
+ }
+
+
+
+ void Finalise (const cGH* const cgh, const int proc,
+ const int num_outvals,
+ void* const outvals, const int outtype,
+ const void* const myoutvals,
+ const void* const mycounts,
+ const reduction* const red)
+ {
+ assert (cgh);
+
+ assert (proc == -1 || (proc>=0 && proc<CCTK_nProcs(cgh)));
+
+ assert (num_outvals>=0);
+ assert (outvals || (proc!=-1 && proc!=CCTK_MyProc(cgh)));
+
+ const int vartypesize = CCTK_VarTypeSize(outtype);
+ assert (vartypesize>=0);
+
+ assert (myoutvals);
+ assert (mycounts);
+
+ vector<char> counts;
+ if (proc==-1 || proc==CCTK_MyProc(cgh)) {
+ counts.resize(vartypesize * num_outvals);
+ }
+
+ const MPI_Datatype mpitype = CarpetSimpleMPIDatatype(outtype);
+ const int mpilength = CarpetSimpleMPIDatatypeLength(outtype);
+ if (proc == -1) {
+ MPI_Allreduce ((void*)myoutvals, outvals, mpilength*num_outvals,
+ mpitype, red->mpi_op(),
+ CarpetMPIComm());
+ if (red->uses_cnt()) {
+ MPI_Allreduce ((void*)mycounts, &counts[0], num_outvals*mpilength,
+ mpitype, MPI_SUM,
+ CarpetMPIComm());
+ }
+ } else {
+ MPI_Reduce ((void*)myoutvals, outvals, num_outvals*mpilength,
+ mpitype, red->mpi_op(),
+ proc, CarpetMPIComm());
+ if (red->uses_cnt()) {
+ MPI_Reduce ((void*)mycounts, &counts[0], num_outvals*mpilength,
+ mpitype, MPI_SUM,
+ proc, CarpetMPIComm());
+ }
+ }
+
+ if (proc==-1 || proc==CCTK_MyProc(cgh)) {
+
+ for (int n=0; n<num_outvals; ++n) {
+
+ assert (outvals);
+ assert ((int)counts.size() == vartypesize * num_outvals);
+
+ switch (outtype) {
+#define FINALISE(OP,S) \
+ case do_##OP: { \
+ typedef typeconv<S>::goodtype T; \
+ finalise<T,OP::op<T> > (&((char*)outvals)[vartypesize*n], \
+ & counts [vartypesize*n]); \
+ break; \
+ }
+#define TYPECASE(N,T) \
+ case N: { \
+ switch (red->thered()) { \
+ FINALISE(count,T); \
+ FINALISE(minimum,T); \
+ FINALISE(maximum,T); \
+ FINALISE(product,T); \
+ FINALISE(sum,T); \
+ FINALISE(sum_abs,T); \
+ FINALISE(sum_squared,T); \
+ FINALISE(average,T); \
+ FINALISE(norm1,T); \
+ FINALISE(norm2,T); \
+ FINALISE(norm_inf,T); \
+ default: \
+ assert (0); \
+ } \
+ break; \
+ }
+#include "Carpet/Carpet/src/typecase"
+#undef TYPECASE
+#undef FINALISE
+ default:
+ assert (0);
+ }
+
+ } // for n
+
+ } // if
+ }
+
+
+
+ int ReduceArrays (const cGH* const cgh, const int proc,
+ const int num_dims, const int* const dims,
+ const int num_inarrays,
+ const void* const* const inarrays, const int intype,
+ const int num_outvals,
+ void* const outvals, const int outtype,
+ const reduction* const red)
+ {
+ assert (cgh);
+
+ assert (proc == -1 || (proc>=0 && proc<CCTK_nProcs(cgh)));
+
+ assert (num_outvals>=0);
+ assert (outvals || (proc!=-1 && proc!=CCTK_MyProc(cgh)));
+
+ assert (num_inarrays>=0);
+ assert (inarrays);
+ for (int n=0; n<num_inarrays; ++n) {
+ assert (inarrays[n]);
+ }
+
+ assert (num_dims>=0 && num_dims<=dim);
+ for (int d=0; d<num_dims; ++d) {
+ assert (dims[d]>=0);
+ }
+
+ int lsize = 1;
+ for (int d=0; d<num_dims; ++d) {
+ lsize *= dims[d];
+ }
+
+ const bool do_local_reduction = num_outvals == 1;
+
+ if (! do_local_reduction) {
+ assert (num_outvals == lsize);
+ }
+
+ vect<int,dim> mylsh, mynghostzones;
+ vect<vect<int,2>,dim> mybbox;
+ for (int d=0; d<num_dims; ++d) {
+ mylsh[d] = dims[d];
+ mybbox[d][0] = 0;
+ mybbox[d][1] = 0;
+ mynghostzones[d] = 0;
+ }
+ for (int d=num_dims; d<dim; ++d) {
+ mylsh[d] = 1;
+ mybbox[d][0] = 0;
+ mybbox[d][1] = 0;
+ mynghostzones[d] = 0;
+ }
+
+ vector<const void* const*> myinarrays(1);
+ vector<CCTK_REAL> tfacs(1);
+ myinarrays.at(0) = inarrays;
+ tfacs.at(0) = 1.0;
+
+ const int vartypesize = CCTK_VarTypeSize(outtype);
+ assert (vartypesize>=0);
+
+ vector<char> myoutvals (vartypesize * num_inarrays * num_outvals);
+ vector<char> mycounts (vartypesize * num_inarrays * num_outvals);
+
+ Initialise (cgh, proc, num_inarrays * num_outvals, &myoutvals[0], outtype,
+ &mycounts[0], red);
+ if (do_local_reduction) {
+ Reduce (cgh, proc, &mylsh[0], &mybbox[0][0], &mynghostzones[0],
+ num_inarrays, myinarrays, tfacs, intype,
+ num_inarrays * num_outvals, &myoutvals[0], outtype,
+ &mycounts[0], red,
+ NULL, 1.0);
+ } else {
+ Copy (cgh, proc, lsize, num_inarrays, inarrays, intype,
+ num_inarrays * num_outvals, &myoutvals[0], outtype,
+ &mycounts[0]);
+ }
+ Finalise (cgh, proc, num_inarrays * num_outvals, outvals, outtype,
+ &myoutvals[0], &mycounts[0], red);
+
+ return 0;
+ }
+
+
+
+ int ReduceGVs (const cGH* const cgh, const int proc,
+ const int num_outvals, const int outtype, void* const outvals,
+ const int num_invars, const int* const invars,
+ const reduction* const red)
+ {
+ int ierr;
+
+ assert (cgh);
+
+ assert (proc == -1 || (proc>=0 && proc<CCTK_nProcs(cgh)));
+
+ assert (num_outvals>=0);
+ assert (num_outvals==1);
+ assert (outvals || (proc!=-1 && proc!=CCTK_MyProc(cgh)));
+
+ assert (num_invars>=0);
+ assert (invars);
+ for (int n=0; n<num_invars; ++n) {
+ assert (invars[n]>=0 && invars[n]<CCTK_NumVars());
+ }
+
+ if (num_invars==0) return 0;
+
+ assert (num_invars>0);
+ const int vi = invars[0];
+ assert (vi>=0 && vi<CCTK_NumVars());
+
+ const int grpdim = CCTK_GroupDimFromVarI(vi);
+ assert (grpdim>=0 && grpdim<=dim);
+ for (int n=0; n<num_invars; ++n) {
+ assert (CCTK_GroupDimFromVarI(invars[n]) == grpdim);
+ }
+
+ const int intype = CCTK_VarTypeI(vi);
+ for (int n=0; n<num_invars; ++n) {
+ assert (CCTK_VarTypeI(invars[n]) == intype);
+ }
+
+ const int vartypesize = CCTK_VarTypeSize(outtype);
+ assert (vartypesize>=0);
+
+
+
+ // meta mode
+ if (is_meta_mode()) {
+ CCTK_WARN (0, "Grid variable reductions are not possible in meta mode");
+ }
+
+ bool const reduce_arrays = CCTK_GroupTypeFromVarI(vi) != CCTK_GF;
+ bool const want_global_mode = is_global_mode() && ! reduce_arrays;
+ bool const want_level_mode = is_level_mode() && ! reduce_arrays;
+
+ for (int n=0; n<num_invars; ++n) {
+ if ((CCTK_GroupTypeFromVarI(invars[n]) != CCTK_GF) != reduce_arrays) {
+ CCTK_WARN (0, "Cannot (yet) reduce grid functions and grid arrays/scalars at the same time");
+ }
+ }
+
+ // Ensure that all maps have the same number of refinement levels
+ for (int m=0; m<(int)vhh.size(); ++m) {
+ assert (vhh.at(m)->reflevels() == vhh.at(0)->reflevels());
+ }
+ int const minrl = reduce_arrays ? 0 : want_global_mode ? 0 : reflevel;
+ int const maxrl = reduce_arrays ? 1 : want_global_mode ? vhh.at(0)->reflevels() : reflevel+1;
+ int const minm = reduce_arrays ? 0 : want_global_mode || want_level_mode ? 0 : Carpet::map;
+ int const maxm = reduce_arrays ? 1 : want_global_mode || want_level_mode ? maps : Carpet::map+1;
+
+
+
+ // Find the time interpolation order
+ int partype;
+ void const * const parptr
+ = CCTK_ParameterGet ("prolongation_order_time", "Carpet", &partype);
+ assert (parptr);
+ assert (partype == PARAMETER_INTEGER);
+ int const prolongation_order_time = * (CCTK_INT const *) parptr;
+
+ CCTK_REAL const current_time = cgh->cctk_time / cgh->cctk_delta_time;
+
+
+
+ vector<char> myoutvals (vartypesize * num_invars * num_outvals);
+ vector<char> mycounts (vartypesize * num_invars * num_outvals);
+
+ Initialise (cgh, proc, num_invars * num_outvals, &myoutvals[0], outtype,
+ &mycounts[0], red);
+
+ BEGIN_GLOBAL_MODE(cgh) {
+ for (int rl=minrl; rl<maxrl; ++rl) {
+ enter_level_mode (const_cast<cGH*>(cgh), rl);
+
+
+
+ // Number of necessary time levels
+ CCTK_REAL const level_time = cgh->cctk_time / cgh->cctk_delta_time;
+ bool need_time_interp
+ = (! reduce_arrays
+ && (fabs(current_time - level_time)
+ > 1e-12 * (fabs(level_time) + fabs(current_time)
+ + fabs(cgh->cctk_delta_time))));
+ assert (! (! want_global_mode && need_time_interp));
+ assert (! (reduce_arrays && need_time_interp));
+ int num_tl = need_time_interp ? prolongation_order_time + 1 : 1;
+
+ // Are there enought time levels?
+ if (need_time_interp) {
+
+ if (CCTK_ActiveTimeLevelsVI(cgh, vi) < num_tl) {
+ static vector<bool> have_warned;
+ if (have_warned.empty()) {
+ have_warned.resize (CCTK_NumVars(), false);
+ }
+ if (! have_warned.at(vi)) {
+ char * const fullname = CCTK_FullName(vi);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Grid function \"%s\" has only %d active time levels on refinement level %d; this is not enough for time interpolation. Using the current time level instead",
+ fullname, CCTK_ActiveTimeLevelsVI(cgh, vi), reflevel);
+ free (fullname);
+ have_warned.at(vi) = true;
+ }
+
+ // fall back
+ need_time_interp = false;
+ num_tl = 1;
+ }
+
+ }
+
+ vector<CCTK_REAL> tfacs(num_tl);
+
+ // Interpolate in time, if necessary
+ if (need_time_interp) {
+
+ // Get interpolation times
+ CCTK_REAL const time = current_time;
+ vector<CCTK_REAL> times(num_tl);
+ for (int tl=0; tl<num_tl; ++tl) {
+ times.at(tl) = vtt.at(0)->time (-tl, reflevel, mglevel);
+ }
+
+ // Calculate interpolation weights
+ switch (num_tl) {
+ case 1:
+ // no interpolation
+ assert (fabs((time - times.at(0)) / fabs(time + times.at(0) + cgh->cctk_delta_time)) < 1e-12);
+ tfacs.at(0) = 1.0;
+ break;
+ case 2:
+ // linear (2-point) interpolation
+ tfacs.at(0) = (time - times.at(1)) / (times.at(0) - times.at(1));
+ tfacs.at(1) = (time - times.at(0)) / (times.at(1) - times.at(0));
+ break;
+ case 3:
+ // quadratic (3-point) interpolation
+ tfacs.at(0) = (time - times.at(1)) * (time - times.at(2)) / ((times.at(0) - times.at(1)) * (times.at(0) - times.at(2)));
+ tfacs.at(1) = (time - times.at(0)) * (time - times.at(2)) / ((times.at(1) - times.at(0)) * (times.at(1) - times.at(2)));
+ tfacs.at(2) = (time - times.at(0)) * (time - times.at(1)) / ((times.at(2) - times.at(0)) * (times.at(2) - times.at(1)));
+ break;
+ default:
+ assert (0);
+ }
+
+ } else { // if ! need_time_interp
+
+ assert (num_tl == 1);
+ tfacs.at(0) = 1;
+
+ } // if ! need_time_interp
+
+
+
+ for (int m=minm; m<maxm; ++m) {
+ enter_singlemap_mode (const_cast<cGH*>(cgh), m);
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, reduce_arrays ? CCTK_ARRAY : CCTK_GF) {
+
+
+
+ assert (grpdim<=dim);
+ int lsh[dim], bbox[2*dim], nghostzones[dim];
+ ierr = CCTK_GrouplshVI(cgh, grpdim, lsh, vi);
+ assert (!ierr);
+ ierr = CCTK_GroupbboxVI(cgh, 2*grpdim, bbox, vi);
+ assert (!ierr);
+ ierr = CCTK_GroupnghostzonesVI(cgh, grpdim, nghostzones, vi);
+ assert (!ierr);
+ for (int d=0; d<grpdim; ++d) {
+ assert (lsh[d]>=0);
+ assert (nghostzones[d]>=0 && 2*nghostzones[d]<=lsh[d]);
+ }
+
+ vect<int,dim> mylsh, mynghostzones;
+ vect<vect<int,2>,dim> mybbox;
+ for (int d=0; d<grpdim; ++d) {
+ mylsh[d] = lsh[d];
+ mybbox[d][0] = bbox[2*d ];
+ mybbox[d][1] = bbox[2*d+1];
+ mynghostzones[d] = nghostzones[d];
+ }
+ for (int d=grpdim; d<dim; ++d) {
+ mylsh[d] = 1;
+ mybbox[d][0] = 0;
+ mybbox[d][1] = 0;
+ mynghostzones[d] = 0;
+ }
+
+
+
+ CCTK_REAL const * weight;
+ CCTK_REAL levfac;
+ if (want_global_mode) {
+ weight = (static_cast<CCTK_REAL const *>
+ (CCTK_VarDataPtr (cgh, 0, "CarpetReduce::weight")));
+ assert (weight);
+ levfac = pow(CCTK_REAL(reflevelfact), -grpdim);
+ } else {
+ weight = NULL;
+ levfac = 1.0;
+ }
+
+ vector<vector<const void*> > myinarrays (num_tl);
+ vector<const void* const*> inarrays (num_tl);
+ for (int tl=0; tl<num_tl; ++tl) {
+ myinarrays.at(tl).resize (num_invars);
+ for (int n=0; n<num_invars; ++n) {
+ myinarrays.at(tl).at(n) = CCTK_VarDataPtrI(cgh, tl, invars[n]);
+ assert (myinarrays.at(tl).at(n));
+ }
+ inarrays.at(tl) = &myinarrays.at(tl).at(0);
+ }
+
+
+
+ Reduce (cgh, proc, &mylsh[0], &mybbox[0][0], &mynghostzones[0],
+ num_invars, inarrays, tfacs, intype,
+ num_invars * num_outvals, &myoutvals[0], outtype,
+ &mycounts[0], red,
+ weight, levfac);
+
+
+
+ } END_LOCAL_COMPONENT_LOOP;
+ leave_singlemap_mode (const_cast<cGH*>(cgh));
+ } // for m
+
+ leave_level_mode (const_cast<cGH*>(cgh));
+ } // for rl
+ } END_GLOBAL_MODE;
+
+ Finalise (cgh, proc, num_invars * num_outvals, outvals, outtype,
+ &myoutvals[0], &mycounts[0], red);
+
+ return 0;
+ }
+
+
+
+#define REDUCTION(OP) \
+ int OP##_arrays (const cGH * const cgh, const int proc, \
+ const int num_dims, const int * const dims, \
+ const int num_inarrays, \
+ const void * const * const inarrays, const int intype, \
+ const int num_outvals, \
+ void * const outvals, const int outtype) \
+ { \
+ const OP red; \
+ return ReduceArrays \
+ (cgh, proc, num_dims, dims, \
+ num_inarrays, inarrays, intype, num_outvals, outvals, outtype, \
+ &red); \
+ } \
+ \
+ int OP##_GVs (const cGH * const cgh, const int proc, \
+ const int num_outvals, \
+ const int outtype, void * const outvals, \
+ const int num_invars, const int * const invars) \
+ { \
+ const OP red; \
+ return ReduceGVs (cgh, proc, \
+ num_outvals, outtype, outvals, num_invars, invars, \
+ &red); \
+ }
+
+ REDUCTION(count);
+ REDUCTION(minimum);
+ REDUCTION(maximum);
+ REDUCTION(product);
+ REDUCTION(sum);
+ REDUCTION(sum_abs);
+ REDUCTION(sum_squared);
+ REDUCTION(average);
+ REDUCTION(norm1);
+ REDUCTION(norm2);
+ REDUCTION(norm_inf);
+
+#undef REDUCTION
+
+
+
+ void CarpetReduceStartup ()
+ {
+ CCTK_RegisterReductionOperator (count_GVs, "count");
+ CCTK_RegisterReductionOperator (minimum_GVs, "minimum");
+ CCTK_RegisterReductionOperator (maximum_GVs, "maximum");
+ CCTK_RegisterReductionOperator (product_GVs, "product");
+ CCTK_RegisterReductionOperator (sum_GVs, "sum");
+ CCTK_RegisterReductionOperator (sum_abs_GVs, "sum_abs");
+ CCTK_RegisterReductionOperator (sum_squared_GVs, "sum_squared");
+ CCTK_RegisterReductionOperator (average_GVs, "average");
+ CCTK_RegisterReductionOperator (norm1_GVs, "norm1");
+ CCTK_RegisterReductionOperator (norm2_GVs, "norm2");
+ CCTK_RegisterReductionOperator (norm_inf_GVs, "norm_inf");
+
+ CCTK_RegisterReductionArrayOperator (count_arrays, "count");
+ CCTK_RegisterReductionArrayOperator (minimum_arrays, "minimum");
+ CCTK_RegisterReductionArrayOperator (maximum_arrays, "maximum");
+ CCTK_RegisterReductionArrayOperator (product_arrays, "product");
+ CCTK_RegisterReductionArrayOperator (sum_arrays, "sum");
+ CCTK_RegisterReductionArrayOperator (sum_abs_arrays, "sum_abs");
+ CCTK_RegisterReductionArrayOperator (sum_squared_arrays, "sum_squared");
+ CCTK_RegisterReductionArrayOperator (average_arrays, "average");
+ CCTK_RegisterReductionArrayOperator (norm1_arrays, "norm1");
+ CCTK_RegisterReductionArrayOperator (norm2_arrays, "norm2");
+ CCTK_RegisterReductionArrayOperator (norm_inf_arrays, "norm_inf");
+ }
+
+} // namespace CarpetReduce
diff --git a/Carpet/CarpetReduce/src/reduce.h b/Carpet/CarpetReduce/src/reduce.h
new file mode 100644
index 000000000..a30a5a735
--- /dev/null
+++ b/Carpet/CarpetReduce/src/reduce.h
@@ -0,0 +1,19 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.h,v 1.3 2003/04/30 12:41:02 schnetter Exp $ */
+
+#ifndef CARPETREDUCE_H
+#define CARPETREDUCE_H
+
+#ifdef __cplusplus
+namespace CarpetReduce {
+ extern "C" {
+#endif
+
+ /* Scheduled functions */
+ void CarpetReduceStartup (void);
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace CarpetReduce */
+#endif
+
+#endif /* !defined(CARPETREDUCE_H) */
diff --git a/Carpet/CarpetReduce/src/reduce.hh b/Carpet/CarpetReduce/src/reduce.hh
new file mode 100644
index 000000000..856f2f823
--- /dev/null
+++ b/Carpet/CarpetReduce/src/reduce.hh
@@ -0,0 +1,8 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetReduce/src/reduce.hh,v 1.4 2002/09/01 14:52:28 schnetter Exp $
+
+#ifndef CARPETREDUCE_HH
+#define CARPETREDUCE_HH
+
+#include "reduce.h"
+
+#endif // !defined(CARPETREDUCE_HH)
diff --git a/Carpet/CarpetRegrid/COPYING b/Carpet/CarpetRegrid/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetRegrid/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetRegrid/README b/Carpet/CarpetRegrid/README
new file mode 100644
index 000000000..a10d18f5c
--- /dev/null
+++ b/Carpet/CarpetRegrid/README
@@ -0,0 +1,8 @@
+Cactus Code Thorn CarpetRegrid
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/README,v 1.1 2001/12/14 16:34:37 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn handles regridding for Carpet.
diff --git a/Carpet/CarpetRegrid/configuration.ccl b/Carpet/CarpetRegrid/configuration.ccl
new file mode 100644
index 000000000..be06ddeb1
--- /dev/null
+++ b/Carpet/CarpetRegrid/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetRegrid
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/configuration.ccl,v 1.3 2004/06/08 21:09:25 schnetter Exp $
+
+REQUIRES Carpet CarpetLib
+
+REQUIRES THORNS: Carpet CarpetLib
diff --git a/Carpet/CarpetRegrid/interface.ccl b/Carpet/CarpetRegrid/interface.ccl
new file mode 100644
index 000000000..052fffc73
--- /dev/null
+++ b/Carpet/CarpetRegrid/interface.ccl
@@ -0,0 +1,72 @@
+# Interface definition for thorn CarpetRegrid
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/interface.ccl,v 1.17 2004/08/07 19:44:59 schnetter Exp $
+
+IMPLEMENTS: CarpetRegrid
+
+uses include header: carpet.hh
+
+uses include header: defs.hh
+
+uses include header: bbox.hh
+uses include header: bboxset.hh
+uses include header: vect.hh
+
+uses include header: gf.hh
+uses include header: gh.hh
+
+
+
+# The location of the boundary points
+CCTK_INT FUNCTION GetBoundarySpecification \
+ (CCTK_INT IN size, \
+ CCTK_INT OUT ARRAY nboundaryzones, \
+ CCTK_INT OUT ARRAY is_internal, \
+ CCTK_INT OUT ARRAY is_staggered, \
+ CCTK_INT OUT ARRAY shiftout)
+USES FUNCTION GetBoundarySpecification
+
+# The overall size of the domain
+CCTK_INT FUNCTION GetDomainSpecification \
+ (CCTK_INT IN size, \
+ CCTK_REAL OUT ARRAY physical_min, \
+ CCTK_REAL OUT ARRAY physical_max, \
+ CCTK_REAL OUT ARRAY interior_min, \
+ CCTK_REAL OUT ARRAY interior_max, \
+ CCTK_REAL OUT ARRAY exterior_min, \
+ CCTK_REAL OUT ARRAY exterior_max, \
+ CCTK_REAL OUT ARRAY spacing)
+USES FUNCTION GetDomainSpecification
+
+# Convert between boundaries types
+CCTK_INT FUNCTION ConvertFromPhysicalBoundary \
+ (CCTK_INT IN size, \
+ CCTK_REAL IN ARRAY physical_min, \
+ CCTK_REAL IN ARRAY physical_max, \
+ CCTK_REAL OUT ARRAY interior_min, \
+ CCTK_REAL OUT ARRAY interior_max, \
+ CCTK_REAL OUT ARRAY exterior_min, \
+ CCTK_REAL OUT ARRAY exterior_max, \
+ CCTK_REAL IN ARRAY spacing)
+USES FUNCTION ConvertFromPhysicalBoundary
+
+
+
+# The true prototype of the routine below:
+# int Carpet_Regrid (const cGH * cctkGH,
+# gh<dim>::rexts * bbsss,
+# gh<dim>::rbnds * obss,
+# gh<dim>::rprocs * pss);
+CCTK_INT FUNCTION Carpet_Regrid (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_POINTER IN bbsss, \
+ CCTK_POINTER IN obss, \
+ CCTK_POINTER IN pss, \
+ CCTK_INT IN force)
+PROVIDES FUNCTION Carpet_Regrid WITH CarpetRegrid_Regrid LANGUAGE C
+
+
+
+
+CCTK_INT FUNCTION RegridLevel (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_INT IN current_max_reflevel, \
+ CCTK_INT IN max_reflevels)
+USES FUNCTION RegridLevel
diff --git a/Carpet/CarpetRegrid/param.ccl b/Carpet/CarpetRegrid/param.ccl
new file mode 100644
index 000000000..447dcc450
--- /dev/null
+++ b/Carpet/CarpetRegrid/param.ccl
@@ -0,0 +1,347 @@
+# Parameter definitions for thorn CarpetRegrid
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/param.ccl,v 1.21 2004/08/02 11:40:36 schnetter Exp $
+
+
+
+BOOLEAN verbose "Print screen output while running"
+{
+} "no"
+
+
+
+CCTK_INT refinement_levels "Number of refinement levels (including the base level)" STEERABLE=always
+{
+ 1:* :: "must be positive, and must not be larger than Carpet::max_refinement_levels"
+} 1
+
+
+
+CCTK_INT regrid_every "Regrid every n time steps" STEERABLE=always
+{
+ -1 :: "regrid never"
+ 0 :: "regrid during initial data calculation only"
+ 1:* :: "regrid every n time steps"
+} 0
+
+
+
+KEYWORD activate_levels_on_regrid "Whether to activate or deactivate new levels on regridding" STEERABLE=always
+{
+ "none" :: "Do not activate or deactivate any levels"
+ "fixed" :: "Activate or deactivate a fixed number of levels"
+ "function" :: "Activate or deactivate a variable number of levels, determined by a user-specified function. When this option is used, the parameters num_new_levels and activate_next have no effect and should not be set."
+} "none"
+
+CCTK_INT num_new_levels "When regridding, activate this many new levels (if possible). Note that this will steer the parameter refinement_levels." STEERABLE=always
+{
+ : :: "Number of new levels to activate (negative numbers deactivate)"
+} 0
+
+CCTK_INT activate_next "The next iteration at which new levels should be activated" STEERABLE=always
+{
+ 0: :: "Note that this parameter is steered when new levels are activated"
+} 1
+
+BOOLEAN keep_same_grid_structure "Do not allow the grid structure to change; only allow levels to be switched on or off" STEERABLE=always
+{
+} "no"
+
+
+
+KEYWORD refined_regions "Regions where the grid is refined" STEERABLE=always
+{
+ "none" :: "Don't refine"
+ "centre" :: "Refine around the centre of the grid only"
+ "manual-gridpoints" :: "Refine the regions specified by integer grid points l[123]i[xyz]{min,max}"
+ "manual-coordinates" :: "Refine the regions specified by coordinates l[123][xyz]{min,max}"
+ "manual-gridpoint-list" :: "Refine the regions specified by integer grid points in the parameter 'gridpoints'"
+ "manual-coordinate-list" :: "Refine the regions specified by coordinates in the parameter 'coordinates'"
+ "moving" :: "Refine a moving region"
+ "automatic" :: "Refine automatically"
+} "centre"
+
+
+
+BOOLEAN smart_outer_boundaries "Use the CoordBase interface for outer boundaries" STEERABLE=always
+{
+} no
+
+
+
+# Region specifications for centre refinement
+
+BOOLEAN symmetry_x "Refine the lower half in x-direction" STEERABLE=always
+{
+} "no"
+BOOLEAN symmetry_y "Refine the lower half in y-direction" STEERABLE=always
+{
+} "no"
+BOOLEAN symmetry_z "Refine the lower half in z-direction" STEERABLE=always
+{
+} "no"
+
+
+
+# Region specifications for moving boxes
+
+KEYWORD moving_trajectory "Type of trajectory" STEERABLE=always
+{
+ "point" :: "Do not move"
+ "circle" :: "Move in a circle"
+} "point"
+
+CCTK_REAL moving_region_radius "Radius of the moving region (on the first refined level)" STEERABLE=always
+{
+ (0: :: ""
+} 1.0
+
+CCTK_REAL moving_centre_x "x-coordinate of the centre" STEERABLE=always
+{
+ : :: ""
+} 0.0
+
+CCTK_REAL moving_centre_y "y-coordinate of the centre" STEERABLE=always
+{
+ : :: ""
+} 0.0
+
+CCTK_REAL moving_centre_z "z-coordinate of the centre" STEERABLE=always
+{
+ : :: ""
+} 0.0
+
+CCTK_REAL moving_circle_radius "Radius of the circle" STEERABLE=always
+{
+ 0: :: ""
+} 1.0
+
+CCTK_REAL moving_circle_frequency "Angular frequency on the circle" STEERABLE=always
+{
+ 0: :: ""
+} 1.0
+
+
+
+# Region specifications for manual gridpoint refinement
+
+CCTK_INT l1ixmin "Lower boundary of level 1 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_INT l1iymin "Lower boundary of level 1 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_INT l1izmin "Lower boundary of level 1 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+
+CCTK_INT l1ixmax "Upper boundary of level 1 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_INT l1iymax "Upper boundary of level 1 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_INT l1izmax "Upper boundary of level 1 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+
+
+
+CCTK_INT l2ixmin "Lower boundary of level 2 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_INT l2iymin "Lower boundary of level 2 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_INT l2izmin "Lower boundary of level 2 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+
+CCTK_INT l2ixmax "Upper boundary of level 2 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_INT l2iymax "Upper boundary of level 2 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_INT l2izmax "Upper boundary of level 2 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+
+
+
+CCTK_INT l3ixmin "Lower boundary of level 3 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_INT l3iymin "Lower boundary of level 3 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_INT l3izmin "Lower boundary of level 3 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+
+CCTK_INT l3ixmax "Upper boundary of level 3 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_INT l3iymax "Upper boundary of level 3 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_INT l3izmax "Upper boundary of level 3 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+
+
+
+# Region specifications for manual coordinate refinement
+
+CCTK_REAL l1xmin "Lower boundary of level 1 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_REAL l1ymin "Lower boundary of level 1 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_REAL l1zmin "Lower boundary of level 1 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+
+CCTK_REAL l1xmax "Upper boundary of level 1 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_REAL l1ymax "Upper boundary of level 1 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_REAL l1zmax "Upper boundary of level 1 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+
+
+
+CCTK_REAL l2xmin "Lower boundary of level 2 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_REAL l2ymin "Lower boundary of level 2 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_REAL l2zmin "Lower boundary of level 2 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+
+CCTK_REAL l2xmax "Upper boundary of level 2 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_REAL l2ymax "Upper boundary of level 2 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_REAL l2zmax "Upper boundary of level 2 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+
+
+
+CCTK_REAL l3xmin "Lower boundary of level 3 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_REAL l3ymin "Lower boundary of level 3 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+CCTK_REAL l3zmin "Lower boundary of level 3 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} 0
+
+CCTK_REAL l3xmax "Upper boundary of level 3 box in x-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_REAL l3ymax "Upper boundary of level 3 box in y-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+CCTK_REAL l3zmax "Upper boundary of level 3 box in z-direction" STEERABLE=always
+{
+ : :: ""
+} -1
+
+
+
+# Refinement criteria for manual-gridpoint-list
+
+CCTK_STRING gridpoints "List of bounding box gridpoints" STEERABLE=always
+{
+ "^$" :: "leave empty for no refinement"
+ ".*" :: "[ [ ([<imin>,<jmin>,<kmin>]:[<imax>,<jmax>,<kmax>]:[<istride>,<jstride>,<kstride>]), ... ], ... ]"
+} ""
+
+
+
+# Refinement criteria for manual-coordinate-list
+
+CCTK_STRING coordinates "List of bounding box coordinates" STEERABLE=always
+{
+ "^$" :: "leave empty for no refinement"
+ ".*" :: "[ [ ([<xmin>,<ymin>,<zmin>]:[<xmax>,<ymax>,<zmax>]:[<xstride>,<ystride>,<zstride>]), ... ], ... ]"
+} ""
+
+
+
+# Outer boundaries for manual-gridpoint-list and manual-coordinate-list
+
+CCTK_STRING outerbounds "Outer boundaries" STEERABLE=always
+{
+ "^$" :: "leave empty for no outer boundaries"
+ ".*" :: "[ [ [[?,?],[?,?],[?,?]], ... ], ...]"
+} ""
+
+
+
+# Refinement criteria for automatic refining
+
+CCTK_INT minwidth "Minimum width of refined region" STEERABLE=always
+{
+ 1:* :: "must be positive"
+} 8
+
+CCTK_REAL minfraction "Minimum fraction of points in need of refinement in a refined region" STEERABLE=always
+{
+ 0:1 :: "must be positive and less than one"
+} 0.75
+
+CCTK_REAL maxerror "Maximum allowed error for non-refined grid points" STEERABLE=always
+{
+ *:* :: "everything goes"
+} 1.0
+
+CCTK_STRING errorvar "Name of grid function that contains the error" STEERABLE=always
+{
+ ".*" :: "must be the name of a grid function"
+} ""
diff --git a/Carpet/CarpetRegrid/schedule.ccl b/Carpet/CarpetRegrid/schedule.ccl
new file mode 100644
index 000000000..a0479a01d
--- /dev/null
+++ b/Carpet/CarpetRegrid/schedule.ccl
@@ -0,0 +1,8 @@
+# Schedule definitions for thorn CarpetRegrid
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/schedule.ccl,v 1.6 2004/01/25 14:57:30 schnetter Exp $
+
+schedule CarpetRegridParamcheck at PARAMCHECK
+{
+ LANG: C
+ OPTIONS: global
+} "Check Parameters"
diff --git a/Carpet/CarpetRegrid/src/automatic.cc b/Carpet/CarpetRegrid/src/automatic.cc
new file mode 100644
index 000000000..a3b4da055
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/automatic.cc
@@ -0,0 +1,408 @@
+#include <assert.h>
+#include <string.h>
+
+#include <algorithm>
+#include <list>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gf.hh"
+#include "gh.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/automatic.cc,v 1.5 2004/08/04 16:25:58 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_automatic_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int Automatic (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (refinement_levels >= 1);
+
+ assert (bbsss.size() >= 1);
+
+
+
+ const int vi = CCTK_VarIndex (errorvar);
+ assert (vi>=0 && vi<CCTK_NumVars());
+ const int gi = CCTK_GroupIndexFromVarI (vi);
+ assert (gi>=0 && gi<CCTK_NumGroups());
+ const int v1 = CCTK_FirstVarIndexI(gi);
+ assert (v1>=0 && v1<=vi && v1<CCTK_NumVars());
+
+ assert (CCTK_GroupTypeI(gi) == CCTK_GF);
+ assert (CCTK_VarTypeI(vi) == CCTK_VARIABLE_REAL);
+ assert (CCTK_GroupDimI(gi) == dim);
+
+ assert (arrdata.at(gi).at(Carpet::map).data.at(vi-v1));
+ const gf<CCTK_REAL,dim>& errorgf
+ = (*dynamic_cast<const gf<CCTK_REAL,dim>*>
+ (arrdata.at(gi).at(Carpet::map).data.at(vi-v1)));
+
+ assert (! smart_outer_boundaries);
+
+ vector<ibbox> bbs;
+ gh<dim>::cbnds obs;
+ Automatic_OneLevel
+ (cctkGH, hh,
+ reflevel, min(reflevels+1, maxreflevels),
+ minwidth, minfraction, maxerror, errorgf,
+ bbs, obs);
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+
+
+ if (bbss.size() == 0) {
+ // remove all finer levels
+ bbsss.resize(reflevel+1);
+ obss.resize(reflevel+1);
+ pss.resize(reflevel+1);
+ } else {
+ assert (reflevel < (int)bbsss.size());
+ if (reflevel+1 == (int)bbsss.size()) {
+ // add a finer level
+ bbsss.push_back (bbss);
+ obss.push_back (obs);
+ pss.push_back (ps);
+ } else {
+ // change a finer level
+ bbsss.at(reflevel+1) = bbss;
+ obss.at(reflevel+1) = obs;
+ pss.at(reflevel+1) = ps;
+ }
+ }
+
+ return 1;
+ }
+
+
+
+ void Automatic_OneLevel (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int rl,
+ const int numrl,
+ const int minwidth,
+ const CCTK_REAL minfraction,
+ const CCTK_REAL maxerror,
+ const gf<CCTK_REAL,dim> & errorgf,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs)
+ {
+ if (rl+1 >= numrl) return;
+
+ // Arbitrary
+ const int tl = 0;
+ const int ml = 0;
+
+// cout << endl << "MRA: Choosing regions to refine in " << hh.components(rl) << " components" << endl;
+
+ list<ibbox> bbl;
+ for (int c=0; c<hh.components(rl); ++c) {
+ const ibbox region = hh.extents.at(rl).at(c).at(ml);
+ assert (! region.empty());
+
+ const data<CCTK_REAL,dim>& errordata = *errorgf(tl,rl,c,ml);
+
+ Automatic_Recursive (cctkGH, hh, minwidth, minfraction, maxerror,
+ errordata, bbl, region);
+ }
+
+// int numpoints = 0;
+// for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) {
+// numpoints += ibb->size();
+// }
+// cout << "MRA: Chose " << bbl.size() << " regions with a total size of " << numpoints << " to refine." << endl << endl;
+
+ // Create bbs from bbl
+ assert (bbs.size() == 0);
+ bbs.reserve (bbl.size());
+ for (list<ibbox>::const_iterator it = bbl.begin();
+ it != bbl.end();
+ ++it) {
+ bbs.push_back (*it);
+ }
+
+ // Remove grid points outside the outer boundary
+ bbvect const obp (false);
+ for (size_t c=0; c<bbs.size(); ++c) {
+ const ivect lb = xpose(obp)[0].ifthen
+ (bbs.at(c).lower(), min (bbs.at(c).lower(), hh.baseextent.lower()));
+ const ivect ub = xpose(obp)[1].ifthen
+ (bbs.at(c).upper(), min (bbs.at(c).upper(), hh.baseextent.upper()));
+ bbs.at(c) = ibbox(lb, ub, bbs.at(c).stride());
+ }
+
+ // Create obs from bbs
+ obs.resize (bbs.size());
+ for (size_t c=0; c<bbs.size(); ++c) {
+ assert (hh.bases.size()>0 && hh.bases.at(0).size()>0);
+ obs.at(c) = zip ((vect<bool,2> (*) (bool, bool)) &vect<bool,2>::make,
+ bbs.at(c).lower() == hh.baseextent.lower(),
+ bbs.at(c).upper() == hh.baseextent.upper());
+ }
+
+ }
+
+
+
+ void Automatic_Recursive (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int minwidth,
+ const CCTK_REAL minfraction,
+ const CCTK_REAL maxerror,
+ const data<CCTK_REAL,dim> & errordata,
+ list<ibbox> & bbl,
+ const ibbox & region)
+ {
+ // Just to be sure
+ assert (! region.empty());
+
+ // Count grid points that need to be refined
+ // (this doesn't work yet on multiple processors)
+ assert (CCTK_nProcs(cctkGH)==1);
+ int cnt = 0;
+ {
+ ibbox::iterator it=region.begin();
+ do {
+ if (errordata[*it] > maxerror) ++cnt;
+ ++it;
+ } while (it!=region.end());
+ }
+ const CCTK_REAL fraction = (CCTK_REAL)cnt / region.size();
+ const int width = maxval(region.shape() / region.stride());
+
+ if (cnt == 0) {
+ // Don't refine
+ } else if (width < 2*minwidth || fraction >= minfraction) {
+ // Refine the whole region
+ const ivect lo(region.lower());
+ const ivect up(region.upper());
+ const ivect str(region.stride());
+ bbl.push_back (ibbox(lo,up+str-str/reffact,str/reffact));
+// cout << "MRA: Refining to " << bbl.back() << " size " << bbl.back().size() << " fraction " << fraction << endl;
+ } else {
+ // Split the region and check recursively
+ const int dir = maxloc(region.shape());
+ const ivect lo(region.lower());
+ const ivect up(region.upper());
+ const ivect str(region.stride());
+ ivect lo1(lo), lo2(lo);
+ ivect up1(up), up2(up);
+ const int mgstr = ipow(hh.mgfact, mglevels); // honour multigrid factors
+ const int step = str[dir]*mgstr;
+ lo2[dir] = ((up[dir]+lo[dir])/2/step)*step;
+ up1[dir] = lo2[dir]-str[dir];
+ const ibbox region1(lo1,up1,str);
+ const ibbox region2(lo2,up2,str);
+ assert (region1.is_contained_in(region));
+ assert (region2.is_contained_in(region));
+ assert ((region1 & region2).empty());
+ assert (region1 + region2 == region);
+ list<ibbox> bbl1, bbl2;
+ Automatic_Recursive (cctkGH, hh, minwidth, minfraction, maxerror,
+ errordata, bbl1, region1);
+ Automatic_Recursive (cctkGH, hh, minwidth, minfraction, maxerror,
+ errordata, bbl2, region2);
+ // Combine regions if possible
+ up2 += str-str/reffact;
+ up2[dir] = lo2[dir];
+ const ibbox iface(lo2,up2,str/reffact);
+ Automatic_Recombine (bbl1, bbl2, bbl, iface, dir);
+ }
+
+ }
+
+
+
+ void Automatic_Recombine (list<ibbox> & bbl1,
+ list<ibbox> & bbl2,
+ list<ibbox> & bbl,
+ const ibbox & iface,
+ const int dir)
+ {
+ assert (!iface.empty());
+ assert (iface.lower()[dir] == iface.upper()[dir]);
+
+ const int oldnumboxes = bbl.size() + bbl1.size() + bbl2.size();
+ int numcombinedboxes = 0;
+
+ int oldnumpoints = 0;
+ for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) {
+ oldnumpoints += ibb->size();
+ }
+ for (list<ibbox>::const_iterator ibb1 = bbl1.begin(); ibb1 != bbl1.end(); ++ibb1) {
+ oldnumpoints += ibb1->size();
+ }
+ for (list<ibbox>::const_iterator ibb2 = bbl2.begin(); ibb2 != bbl2.end(); ++ibb2) {
+ oldnumpoints += ibb2->size();
+ }
+
+#if 0
+ // remember old bounding boxes
+ bboxset<int,dim> oldboxes;
+ for (list<ibbox>::const_iterator ibb1 = bbl1.begin(); ibb1 != bbl1.end(); ++ibb1) {
+ oldboxes += *ibb1;
+ }
+ for (list<ibbox>::const_iterator ibb2 = bbl2.begin(); ibb2 != bbl2.end(); ++ibb2) {
+ oldboxes += *ibb2;
+ }
+#endif
+#if 0
+ cout << endl;
+ cout << "MakeRegions_Adaptively_Recombine: initial list:" << endl;
+ cout << bbl << endl;
+ cout << "MakeRegions_Adaptively_Recombine: initial list 1:" << endl;
+ cout << bbl1 << endl;
+ cout << "MakeRegions_Adaptively_Recombine: initial list 2:" << endl;
+ cout << bbl2 << endl;
+#endif
+
+ const ivect lo = iface.lower();
+ const ivect up = iface.upper();
+ const ivect str = iface.stride();
+
+ {
+ // prune boxes on the left
+ list<ibbox>::iterator ibb1 = bbl1.begin();
+ while (ibb1 != bbl1.end()) {
+ // is this bbox just to the left of the interface?
+// const ivect lo1 = ibb1->lower();
+ const ivect up1 = ibb1->upper();
+ const ivect str1 = ibb1->stride();
+ assert (up1[dir]+str1[dir] <= lo[dir]);
+ assert (all(str1 == str));
+ if (up1[dir]+str1[dir] < lo[dir]) {
+ // no: forget it
+ bbl.push_back (*ibb1);
+ ibb1 = bbl1.erase(ibb1);
+ continue;
+ }
+ ++ibb1;
+ } // while
+ }
+
+ {
+ // prune boxes on the right
+ list<ibbox>::iterator ibb2 = bbl2.begin();
+ while (ibb2 != bbl2.end()) {
+ // is this bbox just to the right of the interface?
+ const ivect lo2 = ibb2->lower();
+// const ivect up2 = ibb2->upper();
+ const ivect str2 = ibb2->stride();
+ assert (up[dir] <= lo2[dir]);
+ assert (all(str2 == str));
+ if (up[dir] < lo2[dir]) {
+ // no: forget it
+ bbl.push_back (*ibb2);
+ ibb2 = bbl2.erase(ibb2);
+ continue;
+ }
+ ++ibb2;
+ } // while
+ }
+
+ {
+ // walk all boxes on the left
+ list<ibbox>::iterator ibb1 = bbl1.begin();
+ while (ibb1 != bbl1.end()) {
+ ivect lo1 = ibb1->lower();
+ ivect up1 = ibb1->upper();
+ ivect str1 = ibb1->stride();
+ assert (up1[dir]+str1[dir] == lo[dir]);
+ lo1[dir] = lo[dir];
+ up1[dir] = up[dir];
+ const ibbox iface1 (lo1,up1,str1);
+
+ {
+ // walk all boxes on the right
+ list<ibbox>::iterator ibb2 = bbl2.begin();
+ while (ibb2 != bbl2.end()) {
+ ivect lo2 = ibb2->lower();
+ ivect up2 = ibb2->upper();
+ ivect str2 = ibb2->stride();
+ assert (lo2[dir] == up[dir]);
+ lo2[dir] = lo[dir];
+ up2[dir] = up[dir];
+ const ibbox iface2 (lo2,up2,str2);
+
+ // check for a match
+ if (iface1 == iface2) {
+ const ibbox combined (ibb1->lower(), ibb2->upper(), str);
+ bbl.push_back (combined);
+ ibb1 = bbl1.erase(ibb1);
+ ibb2 = bbl2.erase(ibb2);
+ ++numcombinedboxes;
+// cout << "MRA: Combining along " << "xyz"[dir] << " to " << bbl.back() << " size " << bbl.back().size() << endl;
+ goto continue_search;
+ }
+
+ ++ibb2;
+ } // while
+ }
+
+ ++ibb1;
+ continue_search:;
+ } // while
+ }
+
+ bbl.splice (bbl.end(), bbl1);
+ bbl.splice (bbl.end(), bbl2);
+
+ assert (bbl1.empty() && bbl2.empty());
+
+ const int newnumboxes = bbl.size();
+ assert (newnumboxes + numcombinedboxes == oldnumboxes);
+
+ int newnumpoints = 0;
+ for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) {
+ newnumpoints += ibb->size();
+ }
+ assert (newnumpoints == oldnumpoints);
+
+#if 0
+ // find new bounding boxes
+ bboxset<int,dim> newboxes;
+ for (list<ibbox>::const_iterator ibb = bbl.begin(); ibb != bbl.end(); ++ibb) {
+ newboxes += *ibb;
+ }
+
+ // Check that they are equal
+ assert (newboxes.size() <= oldboxes.size());
+ assert ((newboxes.size()==0) == (oldboxes.size()==0));
+ assert (oldboxes == newboxes);
+#endif
+#if 0
+ cout << "MakeRegions_Adaptively_Recombine: final list:" << endl;
+ cout << bbl << endl;
+ cout << endl;
+#endif
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/baselevel.cc b/Carpet/CarpetRegrid/src/baselevel.cc
new file mode 100644
index 000000000..c380c6844
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/baselevel.cc
@@ -0,0 +1,40 @@
+#include <assert.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/baselevel.cc,v 1.2 2004/04/18 13:29:43 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_baselevel_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int BaseLevel (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (refinement_levels == 1);
+
+ assert (bbsss.size() == 1);
+
+ return 0;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/centre.cc b/Carpet/CarpetRegrid/src/centre.cc
new file mode 100644
index 000000000..7599324ea
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/centre.cc
@@ -0,0 +1,95 @@
+#include <assert.h>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/centre.cc,v 1.4 2004/04/28 15:45:25 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_centre_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int Centre (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (refinement_levels >= 1);
+
+ // do nothing if the levels already exist
+ if (reflevel == refinement_levels) return 0;
+
+ assert (bbsss.size() >= 1);
+
+ bbsss.resize (refinement_levels);
+ obss.resize (refinement_levels);
+ pss.resize (refinement_levels);
+
+ bvect const symmetric (symmetry_x, symmetry_y, symmetry_z);
+ ivect const zero(0), one(1), two(2);
+
+ ivect rstr = hh.baseextent.stride();
+ ivect rlb = hh.baseextent.lower();
+ ivect rub = hh.baseextent.upper();
+
+ assert (! smart_outer_boundaries);
+
+ for (size_t rl=1; rl<bbsss.size(); ++rl) {
+
+ // save old values
+ ivect const oldrlb = rlb;
+ ivect const oldrub = rub;
+
+ // refined boxes have smaller stride
+ assert (all(rstr%hh.reffact == 0));
+ rstr /= hh.reffact;
+
+ // calculate new extent
+ ivect const quarter = (rub - rlb) / 4 / rstr * rstr;
+ ivect const half = (rub - rlb) / 2 / rstr * rstr;
+ rlb = oldrlb + symmetric.ifthen(zero, quarter);
+ rub = oldrub - symmetric.ifthen(half, quarter);
+ assert (all(rlb >= oldrlb && rub <= oldrub));
+
+ ibbox const bb (rlb, rub, rstr);
+ vector<ibbox> bbs (1);
+ bbs.at(0) = bb;
+
+ bbvect const ob (false);
+ gh<dim>::cbnds obs (1);
+ obs.at(0) = ob;
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+ bbsss.at(rl) = bbss;
+ obss.at(rl) = obs;
+ pss.at(rl) = ps;
+
+ } // for rl
+
+ return 1;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/make.code.defn b/Carpet/CarpetRegrid/src/make.code.defn
new file mode 100644
index 000000000..e48f9956e
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/make.code.defn
@@ -0,0 +1,18 @@
+# Main make.code.defn file for thorn CarpetRegrid
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/make.code.defn,v 1.4 2004/04/14 22:19:44 schnetter Exp $
+
+# Source files in this directory
+SRCS = automatic.cc \
+ baselevel.cc \
+ centre.cc \
+ manualcoordinatelist.cc \
+ manualcoordinates.cc \
+ manualgridpointlist.cc \
+ manualgridpoints.cc \
+ moving.cc \
+ regrid.cc \
+ paramcheck.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetRegrid/src/manualcoordinatelist.cc b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc
new file mode 100644
index 000000000..10e40ecbd
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/manualcoordinatelist.cc
@@ -0,0 +1,185 @@
+#include <cassert>
+#include <cmath>
+#include <cstring>
+#include <sstream>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualcoordinatelist.cc,v 1.12 2004/08/14 07:42:00 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_manualcoordinatelist_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int ManualCoordinateList (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+ int ierr;
+
+ assert (refinement_levels >= 1);
+
+ // do nothing if the levels already exist
+ if (reflevel == refinement_levels) return 0;
+
+ assert (bbsss.size() >= 1);
+
+ jjvect nboundaryzones, is_internal, is_staggered, shiftout;
+ ierr = GetBoundarySpecification
+ (2*dim, &nboundaryzones[0][0], &is_internal[0][0],
+ &is_staggered[0][0], &shiftout[0][0]);
+ assert (!ierr);
+ rvect physical_min, physical_max;
+ rvect interior_min, interior_max;
+ rvect exterior_min, exterior_max;
+ rvect base_spacing;
+ ierr = GetDomainSpecification
+ (dim, &physical_min[0], &physical_max[0],
+ &interior_min[0], &interior_max[0],
+ &exterior_min[0], &exterior_max[0], &base_spacing[0]);
+ assert (!ierr);
+
+ bbsss.resize (refinement_levels);
+ obss.resize (refinement_levels);
+ pss.resize (refinement_levels);
+
+ vector<vector<rbbox> > newbbss;
+ if (strcmp(coordinates, "") != 0) {
+ istringstream gp_str(coordinates);
+ try {
+ gp_str >> newbbss;
+ } catch (input_error) {
+ CCTK_WARN (0, "Could not parse parameter \"coordinates\"");
+ }
+ }
+
+ vector<vector<bbvect> > newobss;
+ if (smart_outer_boundaries) {
+ // TODO:
+ // assert (domain_from_coordbase);
+
+ newobss.resize(newbbss.size());
+ for (size_t rl=0; rl<newobss.size(); ++rl) {
+ newobss.at(rl).resize(newbbss.at(rl).size());
+ for (size_t c=0; c<newobss.at(rl).size(); ++c) {
+ for (int d=0; d<dim; ++d) {
+ assert (mglevel==0);
+ rvect const spacing = base_spacing * pow(CCTK_REAL(mgfact), basemglevel) / ipow(reffact, rl+1);
+ ierr = ConvertFromPhysicalBoundary
+ (dim, &physical_min[0], &physical_max[0],
+ &interior_min[0], &interior_max[0],
+ &exterior_min[0], &exterior_max[0], &spacing[0]);
+ assert (!ierr);
+ newobss.at(rl).at(c)[d][0] = abs(newbbss.at(rl).at(c).lower()[d] - physical_min[d]) < 1.0e-6 * spacing[d];
+ if (newobss.at(rl).at(c)[d][0]) {
+ rvect lo = newbbss.at(rl).at(c).lower();
+ rvect up = newbbss.at(rl).at(c).upper();
+ rvect str = newbbss.at(rl).at(c).stride();
+ lo[d] = exterior_min[d];
+ newbbss.at(rl).at(c) = rbbox(lo, up, str);
+ }
+ newobss.at(rl).at(c)[d][1] = abs(newbbss.at(rl).at(c).upper()[d] - physical_max[d]) < 1.0e-6 * base_spacing[d] / ipow(reffact, rl);
+ if (newobss.at(rl).at(c)[d][1]) {
+ rvect lo = newbbss.at(rl).at(c).lower();
+ rvect up = newbbss.at(rl).at(c).upper();
+ rvect str = newbbss.at(rl).at(c).stride();
+ up[d] = exterior_max[d];
+ newbbss.at(rl).at(c) = rbbox(lo, up, str);
+ }
+ }
+ }
+ }
+
+ } else { // if ! smart_outer_boundaries
+
+ if (strcmp(outerbounds, "") !=0 ) {
+ istringstream ob_str (outerbounds);
+ try {
+ ob_str >> newobss;
+ } catch (input_error) {
+ CCTK_WARN (0, "Could not parse parameter \"outerbounds\"");
+ }
+ bool good = newobss.size() == newbbss.size();
+ if (good) {
+ for (size_t rl=0; rl<newobss.size(); ++rl) {
+ good = good && newobss.at(rl).size() == newbbss.at(rl).size();
+ }
+ }
+ if (! good) {
+ cout << "coordinates: " << newbbss << endl;
+ cout << "outerbounds: " << newobss << endl;
+ CCTK_WARN (0, "The parameters \"outerbounds\" and \"coordinates\" must have the same structure");
+ }
+ } else {
+ newobss.resize(newbbss.size());
+ for (size_t rl=0; rl<newobss.size(); ++rl) {
+ newobss.at(rl).resize(newbbss.at(rl).size());
+ for (size_t c=0; c<newobss.at(rl).size(); ++c) {
+ newobss.at(rl).at(c) = bbvect(false);
+ }
+ }
+ }
+
+ } // if ! smart_outer_boundaries
+
+ if (newbbss.size() < refinement_levels-1) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The parameter \"coordinates\" must contain at least \"refinement_levels-1\" (here: %d) levels", int(refinement_levels-1));
+ }
+
+ for (size_t rl=1; rl<refinement_levels; ++rl) {
+
+ vector<ibbox> bbs;
+ gh<dim>::cbnds obs;
+
+ bbs.reserve (newbbss.at(rl-1).size());
+ obs.reserve (newbbss.at(rl-1).size());
+
+ for (size_t c=0; c<newbbss.at(rl-1).size(); ++c) {
+ rbbox const & ext = newbbss.at(rl-1).at(c);
+ bbvect const & ob = newobss.at(rl-1).at(c);
+ // TODO:
+ // assert (domain_from_coordbase);
+ rvect const spacing = base_spacing * pow(CCTK_REAL(mgfact), basemglevel) / ipow(reffact, rl);
+ assert (all(abs(ext.stride() - spacing) < spacing * 1.0e-10));
+ ManualCoordinates_OneLevel
+ (cctkGH, hh, rl, refinement_levels,
+ ext.lower(), ext.upper(), ob, bbs, obs);
+ }
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+ bbsss.at(rl) = bbss;
+ obss.at(rl) = obs;
+ pss.at(rl) = ps;
+
+ } // for rl
+
+ return 1;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/manualcoordinates.cc b/Carpet/CarpetRegrid/src/manualcoordinates.cc
new file mode 100644
index 000000000..91018cf95
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/manualcoordinates.cc
@@ -0,0 +1,166 @@
+#include <assert.h>
+
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualcoordinates.cc,v 1.5 2004/04/28 15:45:25 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_manualcoordinates_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int ManualCoordinates (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (refinement_levels > 4) {
+ CCTK_WARN (0, "Cannot currently specify manual refinement regions for more than 4 refinement levels");
+ }
+ assert (refinement_levels >= 1 && refinement_levels <= 4);
+
+ // do nothing if the levels already exist
+ if (reflevel == refinement_levels) return 0;
+
+ assert (bbsss.size() >= 1);
+
+ bbsss.resize (refinement_levels);
+ obss.resize (refinement_levels);
+ pss.resize (refinement_levels);
+
+ vector<rvect> lower(3), upper(3);
+ lower.at(0) = rvect (l1xmin, l1ymin, l1zmin);
+ upper.at(0) = rvect (l1xmax, l1ymax, l1zmax);
+ lower.at(1) = rvect (l2xmin, l2ymin, l2zmin);
+ upper.at(1) = rvect (l2xmax, l2ymax, l2zmax);
+ lower.at(2) = rvect (l3xmin, l3ymin, l3zmin);
+ upper.at(2) = rvect (l3xmax, l3ymax, l3zmax);
+
+ assert (! smart_outer_boundaries);
+
+ for (size_t rl=1; rl<bbsss.size(); ++rl) {
+
+ bbvect const ob (false);
+
+ vector<ibbox> bbs;
+ gh<dim>::cbnds obs;
+
+ ManualCoordinates_OneLevel
+ (cctkGH, hh, rl, refinement_levels,
+ lower.at(rl-1), upper.at(rl-1), ob, bbs, obs);
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+ bbsss.at(rl) = bbss;
+ obss.at(rl) = obs;
+ pss.at(rl) = ps;
+
+ } // for rl
+
+ return 1;
+ }
+
+
+
+ void ManualCoordinates_OneLevel (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int rl,
+ const int numrl,
+ const rvect lower,
+ const rvect upper,
+ const bbvect obound,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs)
+ {
+ if (rl >= numrl) return;
+
+ jvect const ilower = pos2int (cctkGH, hh, lower, rl);
+ jvect const iupper = pos2int (cctkGH, hh, upper, rl);
+
+ ManualGridpoints_OneLevel
+ (cctkGH, hh, rl, numrl, ilower, iupper, obound, bbs, obs);
+ }
+
+
+
+ ivect delta2int (const cGH * const cctkGH, const gh<dim>& hh,
+ const rvect & rpos, const int rl)
+ {
+ rvect global_lower, global_upper;
+ for (int d=0; d<dim; ++d) {
+ const int ierr = CCTK_CoordRange
+ (cctkGH, &global_lower[d], &global_upper[d], d+1, 0, "cart3d");
+ if (ierr<0) {
+ global_lower[d] = 0;
+ global_upper[d] = 1;
+ }
+ }
+ const ivect global_extent (hh.baseextent.upper() - hh.baseextent.lower());
+
+ const rvect scale = rvect(global_extent) / (global_upper - global_lower);
+ const int levfac = ipow(hh.reffact, rl);
+ assert (all (hh.baseextent.stride() % levfac == 0));
+ const ivect istride = hh.baseextent.stride() / levfac;
+
+ const ivect ipos
+ = ivect(floor(rpos * scale / rvect(istride) + 0.5)) * istride;
+
+ const rvect apos = rpos * scale;
+ assert (all(abs(apos - rvect(ipos)) < rvect(istride)*0.01));
+
+ return ipos;
+ }
+
+
+
+ ivect pos2int (const cGH* const cctkGH, const gh<dim>& hh,
+ const rvect & rpos, const int rl)
+ {
+ rvect global_lower, global_upper;
+ for (int d=0; d<dim; ++d) {
+ const int ierr = CCTK_CoordRange
+ (cctkGH, &global_lower[d], &global_upper[d], d+1, 0, "cart3d");
+ if (ierr<0) {
+ global_lower[d] = 0;
+ global_upper[d] = 1;
+ }
+ }
+ const ivect global_extent (hh.baseextent.upper() - hh.baseextent.lower());
+
+ const rvect scale = rvect(global_extent) / (global_upper - global_lower);
+ const int levfac = ipow(hh.reffact, rl);
+ assert (all (hh.baseextent.stride() % levfac == 0));
+ const ivect istride = hh.baseextent.stride() / levfac;
+
+ const ivect ipos
+ = (ivect(floor((rpos - global_lower) * scale / rvect(istride) + 0.5))
+ * istride);
+
+ return ipos;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/manualgridpointlist.cc b/Carpet/CarpetRegrid/src/manualgridpointlist.cc
new file mode 100644
index 000000000..e53866e6c
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/manualgridpointlist.cc
@@ -0,0 +1,125 @@
+#include <assert.h>
+#include <string.h>
+
+#include <sstream>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualgridpointlist.cc,v 1.4 2004/07/02 10:14:51 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_manualgridpointlist_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int ManualGridpointList (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (refinement_levels >= 1);
+
+ // do nothing if the levels already exist
+ if (reflevel == refinement_levels) return 0;
+
+ assert (bbsss.size() >= 1);
+
+ bbsss.resize (refinement_levels);
+ obss.resize (refinement_levels);
+ pss.resize (refinement_levels);
+
+ vector<vector<ibbox> > newbbss;
+ if (strcmp(gridpoints, "") != 0) {
+ istringstream gp_str(gridpoints);
+ try {
+ gp_str >> newbbss;
+ } catch (input_error) {
+ CCTK_WARN (0, "Could not parse parameter \"gridpoints\"");
+ }
+ }
+
+ vector<vector<bbvect> > newobss;
+ if (strcmp(outerbounds, "") !=0 ) {
+ istringstream ob_str (outerbounds);
+ try {
+ ob_str >> newobss;
+ } catch (input_error) {
+ CCTK_WARN (0, "Could not parse parameter \"outerbounds\"");
+ }
+ bool good = newobss.size() == newbbss.size();
+ if (good) {
+ for (size_t rl=0; rl<newobss.size(); ++rl) {
+ good = good && newobss.at(rl).size() == newbbss.at(rl).size();
+ }
+ }
+ if (! good) {
+ cout << "gridpoints: " << newbbss << endl;
+ cout << "outerbounds: " << newobss << endl;
+ CCTK_WARN (0, "The parameters \"outerbounds\" and \"gridpoints\" must have the same structure");
+ }
+ } else {
+ newobss.resize(newbbss.size());
+ for (size_t rl=0; rl<newobss.size(); ++rl) {
+ newobss.at(rl).resize(newbbss.at(rl).size());
+ for (size_t c=0; c<newobss.at(rl).size(); ++c) {
+ newobss.at(rl).at(c) = bbvect(false);
+ }
+ }
+ }
+
+ if (newbbss.size() < refinement_levels-1) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The parameter \"gridpoints\" must contain at least \"refinement_levels-1\" (here: %d) levels", (int)refinement_levels-1);
+ }
+
+ for (size_t rl=1; rl<refinement_levels; ++rl) {
+
+ vector<ibbox> bbs;
+ gh<dim>::cbnds obs;
+
+ bbs.reserve (newbbss.at(rl-1).size());
+ obs.reserve (newbbss.at(rl-1).size());
+
+ for (size_t c=0; c<newbbss.at(rl-1).size(); ++c) {
+ ibbox const & ext = newbbss.at(rl-1).at(c);
+ bbvect const & ob = newobss.at(rl-1).at(c);
+ ManualGridpoints_OneLevel
+ (cctkGH, hh, rl, refinement_levels,
+ ext.lower(), ext.upper(), ob, bbs, obs);
+ }
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+ bbsss.at(rl) = bbss;
+ obss.at(rl) = obs;
+ pss.at(rl) = ps;
+
+ } // for rl
+
+ return 1;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/manualgridpoints.cc b/Carpet/CarpetRegrid/src/manualgridpoints.cc
new file mode 100644
index 000000000..2a8bedb5e
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/manualgridpoints.cc
@@ -0,0 +1,131 @@
+#include <assert.h>
+
+#include <sstream>
+#include <vector>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/manualgridpoints.cc,v 1.5 2004/07/02 10:14:51 tradke Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_manualgridpoints_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int ManualGridpoints (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ if (refinement_levels > 4) {
+ CCTK_WARN (0, "Cannot currently specify manual refinement regions for more than 4 refinement levels");
+ }
+ assert (refinement_levels >= 1 && refinement_levels <= 4);
+
+ // do nothing if the levels already exist
+ if (reflevel == refinement_levels) return 0;
+
+ assert (bbsss.size() >= 1);
+
+ bbsss.resize (refinement_levels);
+ obss.resize (refinement_levels);
+ pss.resize (refinement_levels);
+
+ vector<ivect> ilower(3), iupper(3);
+ ilower.at(0) = ivect (l1ixmin, l1iymin, l1izmin);
+ iupper.at(0) = ivect (l1ixmax, l1iymax, l1izmax);
+ ilower.at(1) = ivect (l2ixmin, l2iymin, l2izmin);
+ iupper.at(1) = ivect (l2ixmax, l2iymax, l2izmax);
+ ilower.at(2) = ivect (l3ixmin, l3iymin, l3izmin);
+ iupper.at(2) = ivect (l3ixmax, l3iymax, l3izmax);
+
+ assert (! smart_outer_boundaries);
+
+ for (size_t rl=1; rl<bbsss.size(); ++rl) {
+
+ bbvect const ob (false);
+
+ vector<ibbox> bbs;
+ gh<dim>::cbnds obs;
+
+ ManualGridpoints_OneLevel
+ (cctkGH, hh, rl,refinement_levels,
+ ilower.at(rl-1), iupper.at(rl-1), ob, bbs, obs);
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+ bbsss.at(rl) = bbss;
+ obss.at(rl) = obs;
+ pss.at(rl) = ps;
+
+ } // for rl
+
+ return 1;
+ }
+
+
+
+ void ManualGridpoints_OneLevel (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int rl,
+ const int numrl,
+ const ivect ilower,
+ const ivect iupper,
+ const bbvect obound,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs)
+ {
+ const ivect rstr = hh.baseextent.stride();
+ const ivect rlb = hh.baseextent.lower();
+ const ivect rub = hh.baseextent.upper();
+
+ const int levfac = ipow(hh.reffact, rl);
+ assert (all (rstr % levfac == 0));
+ const ivect str (rstr / levfac);
+ const ivect lb (ilower);
+ const ivect ub (iupper);
+ if (! all(lb>=rlb && ub<=rub)) {
+ ostringstream buf;
+ buf << "The refinement region boundaries for refinement level #" << rl << " are not within the main grid. Allowed are the grid point boundaries " << rlb << " - " << rub << "; specified were " << lb << " - " << ub << ends;
+ CCTK_WARN (0, buf.str().c_str());
+ }
+ if (! all(lb<=ub)) {
+ ostringstream buf;
+ buf << "The refinement region boundaries for refinement level #" << rl << " have the upper boundary (" << ub << ") less than the lower boundary (" << lb << ")" << ends;
+ CCTK_WARN (0, buf.str().c_str());
+ }
+ if (! all(lb%str==0 && ub%str==0)) {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The refinement region boundaries for refinement level #%d are not a multiple of the stride for that level", rl);
+ }
+ assert (all(lb>=rlb && ub<=rub));
+ assert (all(lb<=ub));
+ assert (all(lb%str==0 && ub%str==0));
+
+ bbs.push_back (ibbox(lb, ub, str));
+ obs.push_back (obound);
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/moving.cc b/Carpet/CarpetRegrid/src/moving.cc
new file mode 100644
index 000000000..5e5287b86
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/moving.cc
@@ -0,0 +1,84 @@
+#include <cassert>
+#include <cmath>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/moving.cc,v 1.5 2004/08/02 11:42:20 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_moving_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ int Moving (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ assert (refinement_levels >= 1);
+
+ assert (bbsss.size() >= 1);
+
+ bbsss.resize (refinement_levels);
+ obss.resize (refinement_levels);
+ pss.resize (refinement_levels);
+
+ bvect const symmetric (symmetry_x, symmetry_y, symmetry_z);
+ bbvect const ob (false);
+
+ assert (! smart_outer_boundaries);
+
+ for (size_t rl=1; rl<bbsss.size(); ++rl) {
+
+ // calculate new extent
+ CCTK_REAL const argument = 2*M_PI * moving_circle_frequency * cctk_time;
+ rvect const pos
+ (moving_centre_x + moving_circle_radius * cos(argument),
+ moving_centre_y + moving_circle_radius * sin(argument),
+ moving_centre_z);
+ CCTK_REAL const radius = moving_region_radius / ipow(reffact, rl-1);
+
+ rvect const rlb (symmetric.ifthen (rvect(0), pos - rvect(radius)));
+ rvect const rub (symmetric.ifthen (rvect(radius), pos + rvect(radius)));
+
+ vector<ibbox> bbs;
+ gh<dim>::cbnds obs;
+
+ ManualCoordinates_OneLevel
+ (cctkGH, hh, rl, refinement_levels, rlb, rub, ob, bbs, obs);
+
+ // make multiprocessor aware
+ gh<dim>::cprocs ps;
+ SplitRegions (cctkGH, bbs, obs, ps);
+
+ // make multigrid aware
+ vector<vector<ibbox> > bbss;
+ MakeMultigridBoxes (cctkGH, bbs, obs, bbss);
+
+ bbsss.at(rl) = bbss;
+ obss.at(rl) = obs;
+ pss.at(rl) = ps;
+
+ } // for rl
+
+ return 1;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/paramcheck.cc b/Carpet/CarpetRegrid/src/paramcheck.cc
new file mode 100644
index 000000000..7d85bee1e
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/paramcheck.cc
@@ -0,0 +1,47 @@
+#include <assert.h>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/paramcheck.cc,v 1.3 2004/08/02 11:42:36 schnetter Exp $";
+
+CCTK_FILEVERSION(CarpetRegrid_paramcheck_cc)
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+ int CarpetRegridParamcheck (CCTK_ARGUMENTS)
+ {
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ if (refinement_levels > maxreflevels) {
+ CCTK_PARAMWARN ("The parameter CarpetRegrid::refinement_levels is larger than Carpet::max_refinement_levels");
+ }
+
+ if (smart_outer_boundaries) {
+ int type;
+ const CCTK_INT * const domain_from_coordbase
+ = (const CCTK_INT *) CCTK_ParameterGet ("domain_from_coordbase", "Carpet", &type);
+ assert (domain_from_coordbase);
+ assert (type == PARAMETER_BOOLEAN);
+ if (! *domain_from_coordbase) {
+ CCTK_PARAMWARN ("The parameter CarpetRegrid::smart_outer_boundaries can only be used when Carpet::domain_from_coordbase=yes");
+ }
+ if (CCTK_Equals(refined_regions, "manual-coordinate-list")) {
+ // do nothing
+ } else {
+ CCTK_PARAMWARN ("The parameter CarpetRegrid::smart_outer_boundaries can currently only be used when CarpetRegrid::refined_regions is set to \"manual-coordinate-list\"");
+ }
+ }
+
+ return 0;
+ }
+
+}
diff --git a/Carpet/CarpetRegrid/src/regrid.cc b/Carpet/CarpetRegrid/src/regrid.cc
new file mode 100644
index 000000000..9ce688bdb
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/regrid.cc
@@ -0,0 +1,199 @@
+#include <assert.h>
+
+#include <sstream>
+#include <string>
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+#include "gh.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+#include "regrid.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.cc,v 1.48 2004/06/02 07:36:19 bzink Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetRegrid_regrid_cc);
+}
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+ CCTK_INT CarpetRegrid_Regrid (CCTK_POINTER_TO_CONST const cctkGH_,
+ CCTK_POINTER const bbsss_,
+ CCTK_POINTER const obss_,
+ CCTK_POINTER const pss_,
+ CCTK_INT force)
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ const cGH * const cctkGH = (const cGH *) cctkGH_;
+
+ gh<dim>::rexts & bbsss = * (gh<dim>::rexts *) bbsss_;
+ gh<dim>::rbnds & obss = * (gh<dim>::rbnds *) obss_;
+ gh<dim>::rprocs & pss = * (gh<dim>::rprocs *) pss_;
+
+ gh<dim> const & hh = *vhh.at(Carpet::map);
+
+ assert (is_singlemap_mode());
+
+ // In force mode (force == true) we do not check the
+ // CarpetRegrid parameters
+
+ if (!force) {
+
+ assert (regrid_every == -1 || regrid_every == 0
+ || regrid_every % maxmglevelfact == 0);
+
+ // Return if no regridding is desired
+ if (regrid_every == -1) return 0;
+
+ // Return if we want to regrid during initial data only, and this
+ // is not the time for initial data
+ if (regrid_every == 0 && cctkGH->cctk_iteration != 0) return 0;
+
+ // Return if we want to regrid regularly, but not at this time
+ if (regrid_every > 0 && cctkGH->cctk_iteration != 0
+ && (cctkGH->cctk_iteration-1) % regrid_every != 0)
+ {
+ return 0;
+ }
+
+ // Steer parameters
+ const int oldnumlevels = refinement_levels;
+ if (CCTK_EQUALS(activate_levels_on_regrid, "none")) {
+
+ // do nothing
+
+ } else if (CCTK_EQUALS(activate_levels_on_regrid, "fixed")) {
+
+ if (cctkGH->cctk_iteration-1 >= activate_next) {
+ const int newnumlevels
+ = min(refinement_levels + num_new_levels, maxreflevels);
+ assert (newnumlevels>0 && newnumlevels<=maxreflevels);
+
+ *const_cast<CCTK_INT*>(&activate_next) = cctkGH->cctk_iteration;
+ ostringstream next;
+ next << activate_next;
+ CCTK_ParameterSet
+ ("activate_next", "CarpetRegrid", next.str().c_str());
+
+ *const_cast<CCTK_INT*>(&refinement_levels) = newnumlevels;
+ ostringstream param;
+ param << refinement_levels;
+ CCTK_ParameterSet
+ ("refinement_levels", "CarpetRegrid", param.str().c_str());
+
+ if (verbose) {
+ ostringstream buf1, buf2;
+ buf1 << "Activating " << newnumlevels - oldnumlevels << " new refinement levels";
+ buf2 << "There are now " << newnumlevels << " refinement levels";
+ CCTK_INFO (buf1.str().c_str());
+ CCTK_INFO (buf2.str().c_str());
+ }
+ }
+
+ } else if (CCTK_EQUALS(activate_levels_on_regrid, "function")) {
+
+ if (! CCTK_IsFunctionAliased("RegridLevel")) {
+ CCTK_WARN (0, "No thorn has provided the function \"RegridLevel\"");
+ }
+ const int newnumlevels
+ = RegridLevel (cctkGH, refinement_levels, maxreflevels);
+ if (newnumlevels>0 && newnumlevels<=maxreflevels) {
+
+ *const_cast<CCTK_INT*>(&refinement_levels) = newnumlevels;
+ ostringstream param;
+ param << refinement_levels;
+ CCTK_ParameterSet
+ ("refinement_levels", "CarpetRegrid", param.str().c_str());
+
+ if (verbose) {
+ ostringstream buf1, buf2;
+ buf1 << "Activating " << newnumlevels - oldnumlevels << " new refinement levels";
+ buf2 << "There are now " << newnumlevels << " refinement levels";
+ CCTK_INFO (buf1.str().c_str());
+ CCTK_INFO (buf2.str().c_str());
+ }
+
+ } else {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The aliased function \"RegridLevel\" returned an illegal number of refinement levels (%d). No levels will be activated or deactivated.", newnumlevels);
+ }
+
+ } else {
+
+ assert (0);
+
+ }
+
+
+
+ // Return if this is not during initial data generation, and if no
+ // change in the grid structure is desired
+ if (cctkGH->cctk_iteration != 0) {
+ if (keep_same_grid_structure && refinement_levels == oldnumlevels) return 0;
+ }
+
+ } else {
+
+ // If force is active, steer activate_next to current iteration
+
+ ostringstream next;
+ next << cctkGH->cctk_iteration;
+ CCTK_ParameterSet
+ ("activate_next", "CarpetRegrid", next.str().c_str());
+
+ } // if (!force)
+
+ int do_recompose;
+
+ if (CCTK_EQUALS(refined_regions, "none")) {
+
+ do_recompose = BaseLevel (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "centre")) {
+
+ do_recompose = Centre (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "manual-gridpoints")) {
+
+ do_recompose
+ = ManualGridpoints (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "manual-coordinates")) {
+
+ do_recompose
+ = ManualCoordinates (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "manual-gridpoint-list")) {
+
+ do_recompose
+ = ManualGridpointList (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "manual-coordinate-list")) {
+
+ do_recompose
+ = ManualCoordinateList (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "moving")) {
+
+ do_recompose = Moving (cctkGH, hh, bbsss, obss, pss);
+
+ } else if (CCTK_EQUALS(refined_regions, "automatic")) {
+
+ do_recompose = Automatic (cctkGH, hh, bbsss, obss, pss);
+
+ } else {
+ assert (0);
+ }
+
+ return do_recompose;
+ }
+
+} // namespace CarpetRegrid
diff --git a/Carpet/CarpetRegrid/src/regrid.h b/Carpet/CarpetRegrid/src/regrid.h
new file mode 100644
index 000000000..a3db486f2
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/regrid.h
@@ -0,0 +1,22 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.h,v 1.1 2002/09/01 14:52:29 schnetter Exp $ */
+
+#ifndef CARPETREGRID_H
+#define CARPETREGRID_H
+
+#include "cctk_Arguments.h"
+
+#ifdef __cplusplus
+namespace CarpetRegrid {
+ extern "C" {
+#endif
+
+ /* Scheduled functions */
+ int CarpetRegridStartup ();
+ int CarpetRegridParamcheck (CCTK_ARGUMENTS);
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace CarpetRegrid */
+#endif
+
+#endif /* !defined(CARPETREGRID_H) */
diff --git a/Carpet/CarpetRegrid/src/regrid.hh b/Carpet/CarpetRegrid/src/regrid.hh
new file mode 100644
index 000000000..62baf284a
--- /dev/null
+++ b/Carpet/CarpetRegrid/src/regrid.hh
@@ -0,0 +1,151 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetRegrid/src/regrid.hh,v 1.14 2004/06/02 07:08:52 bzink Exp $
+
+#ifndef CARPETREGRID_HH
+#define CARPETREGRID_HH
+
+#include <list>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+
+#include "bbox.hh"
+#include "gf.hh"
+#include "gh.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+
+
+namespace CarpetRegrid {
+
+ using namespace std;
+ using namespace Carpet;
+
+
+
+ extern "C" {
+
+ /* Scheduled functions */
+ int CarpetRegridParamcheck (CCTK_ARGUMENTS);
+
+ /* Aliased functions */
+// CCTK_INT CarpetRegrid_Regrid (const cGH * const cctkGH,
+// gh<dim>::rexts * bbsss,
+// gh<dim>::rbnds * obss,
+// gh<dim>::rprocs * pss);
+ CCTK_INT CarpetRegrid_Regrid (CCTK_POINTER_TO_CONST const cctkGH_,
+ CCTK_POINTER const bbsss_,
+ CCTK_POINTER const obss_,
+ CCTK_POINTER const pss_,
+ CCTK_INT force);
+ }
+
+
+
+ int BaseLevel (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ int Centre (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ int ManualGridpoints (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ void ManualGridpoints_OneLevel (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int rl,
+ const int numrl,
+ const ivect ilower,
+ const ivect iupper,
+ const bbvect obound,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs);
+
+ int ManualCoordinates (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ void ManualCoordinates_OneLevel (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int rl,
+ const int numrl,
+ const rvect lower,
+ const rvect upper,
+ const bbvect obound,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs);
+
+ ivect delta2int (const cGH * const cctkGH,
+ const gh<dim>& hh,
+ const rvect & rpos,
+ const int rl);
+ ivect pos2int (const cGH* const cctkGH,
+ const gh<dim>& hh,
+ const rvect & rpos,
+ const int rl);
+
+ int ManualGridpointList (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ int ManualCoordinateList (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ int Moving (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ int Automatic (cGH const * const cctkGH,
+ gh<dim> const & hh,
+ gh<dim>::rexts & bbsss,
+ gh<dim>::rbnds & obss,
+ gh<dim>::rprocs & pss);
+
+ void Automatic_OneLevel (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int rl,
+ const int numrl,
+ const int minwidth,
+ const CCTK_REAL minfraction,
+ const CCTK_REAL maxerror,
+ const gf<CCTK_REAL,dim> & errorvar,
+ vector<ibbox> & bbs,
+ vector<bbvect> & obs);
+
+ void Automatic_Recursive (const cGH * const cctkGH,
+ const gh<dim> & hh,
+ const int minwidth,
+ const CCTK_REAL minfraction,
+ const CCTK_REAL maxerror,
+ const data<CCTK_REAL,dim> & errorvar,
+ list<ibbox> & bbl,
+ const ibbox & region);
+
+ void Automatic_Recombine (list<ibbox> & bbl1,
+ list<ibbox> & bbl2,
+ list<ibbox> & bbl,
+ const ibbox & iface,
+ const int dir);
+
+} // namespace CarpetRegrid
+
+#endif // !defined(CARPETREGRID_HH)
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet.par b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet.par
new file mode 100644
index 000000000..d458ffcf5
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet.par
@@ -0,0 +1,67 @@
+
+!DESC "1+log sliced black hole, ADM_BSSN, Iterative CN, Carpet with 2 levels"
+
+# Required thorns
+
+ActiveThorns = "CoordBase SymBase time carpet carpetlib carpetregrid carpetreduce carpetslab boundary cartgrid3d bssn_mol mol nanchecker idanalyticbh carpetioascii ioutil iobasic admcoupling admbase admmacros coordgauge spacemask staticconformal"
+
+# Grid
+
+driver::global_nx = 21
+driver::global_ny = 21
+driver::global_nz = 21
+
+driver::ghost_size_x = 2
+driver::ghost_size_y = 2
+driver::ghost_size_z = 2
+
+Carpet::max_refinement_levels = 3
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+Carpet::init_each_timelevel = yes
+Carpet::buffer_width = 1
+
+CarpetRegrid::refinement_levels = 2
+CarpetRegrid::regrid_every = 0
+
+grid::type = "byspacing"
+grid::dxyz = 0.2
+grid::domain = "octant"
+
+cactus::cctk_initial_time = 0.0
+cactus::cctk_itlast = 20
+
+time::dtfac = 0.25
+
+# Initial data
+
+admbase::metric_type = "static conformal"
+admbase::initial_data = "schwarzschild"
+
+# Evolution
+
+admbase::evolution_method = "adm_bssn"
+
+MoL::ODE_Method = "ICN"
+MoL::MoL_Intermediate_Steps = 3
+
+adm_bssn::bound = "flat"
+
+# Gauge
+
+admbase::lapse_evolution_method = "1+log"
+
+# Output
+
+IO::out_fileinfo="none"
+IO::out_dir = $parfile
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_vars = "admbase::gxx"
+
+IOBasic::outScalar_every = 8
+IOBasic::outScalar_vars = "adm_bssn::adm_bs_gxx adm_bssn::adm_bs_Axx adm_bssn::adm_bs_phi adm_bssn::adm_bs_k adm_bssn::adm_bs_Gx admbase::gxx admbase::kxx admbase::alp"
+
+##################################################################
+
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_maximum.xg
new file mode 100644
index 000000000..c2a4fb5ff
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0030338694509
+0.2000000000000 0.0060622352107
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_minimum.xg
new file mode 100644
index 000000000..ce83b0645
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.0060529928018
+0.2000000000000 -0.0121310076465
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm1.xg
new file mode 100644
index 000000000..2d0fee2c6
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0009803939393
+0.2000000000000 0.0019621419182
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm2.xg
new file mode 100644
index 000000000..b89fca18c
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Axx_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0013481685692
+0.2000000000000 0.0026987690896
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_maximum.xg
new file mode 100644
index 000000000..7b115780d
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 -0.0000000000000
+0.1000000000000 0.0033315455549
+0.2000000000000 0.0133183502151
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_minimum.xg
new file mode 100644
index 000000000..63a00bbe9
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 -0.0000000000000
+0.1000000000000 -0.0032152437614
+0.2000000000000 -0.0128558956690
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm1.xg
new file mode 100644
index 000000000..c8b4c5097
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0001185890010
+0.2000000000000 0.0004743721288
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm2.xg
new file mode 100644
index 000000000..fcdbe7cfa
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_Gx_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0003240266895
+0.2000000000000 0.0012956294505
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_maximum.xg
new file mode 100644
index 000000000..543140ad4
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000018310130
+0.2000000000000 0.0000153786963
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_minimum.xg
new file mode 100644
index 000000000..ef54a97a0
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000000243182
+0.2000000000000 0.0000002074587
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm1.xg
new file mode 100644
index 000000000..148d874a0
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000003689860
+0.2000000000000 0.0000030925075
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm2.xg
new file mode 100644
index 000000000..cc4076af8
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_K_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000005585168
+0.2000000000000 0.0000046841913
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_maximum.xg
new file mode 100644
index 000000000..00f95a496
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0006051005074
+0.2000000000000 1.0024229394652
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_minimum.xg
new file mode 100644
index 000000000..a385fa370
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9996965617401
+0.2000000000000 0.9987867828343
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm1.xg
new file mode 100644
index 000000000..80ef03d6d
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000196020
+0.2000000000000 1.0000003138176
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm2.xg
new file mode 100644
index 000000000..22ef0940f
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_gxx_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000286872
+0.2000000000000 1.0000004593159
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_maximum.xg
new file mode 100644
index 000000000..aed7943b5
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.0000000001213
+0.2000000000000 -0.0000000017987
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_minimum.xg
new file mode 100644
index 000000000..e42573e40
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.0000000091545
+0.2000000000000 -0.0000001342591
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm1.xg
new file mode 100644
index 000000000..fb253f572
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000000018256
+0.2000000000000 0.0000000269160
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm2.xg
new file mode 100644
index 000000000..8764b5c0e
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/ADM_BS_phi_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000000027762
+0.2000000000000 0.0000000408272
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_maximum.xg
new file mode 100644
index 000000000..9eea94bda
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_maximum.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999992724
+0.2000000000000 0.9999999892075
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_minimum.xg
new file mode 100644
index 000000000..2a5de9b88
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_minimum.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999450728
+0.2000000000000 0.9999991944452
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm1.xg
new file mode 100644
index 000000000..ef617703b
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm1.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999890467
+0.2000000000000 0.9999998385042
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm2.xg
new file mode 100644
index 000000000..ef617703b
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/alp_norm2.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999890467
+0.2000000000000 0.9999998385042
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_maximum.xg
new file mode 100644
index 000000000..5bd7cd17c
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_maximum.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0006050644492
+0.2000000000000 1.0024224096583
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_minimum.xg
new file mode 100644
index 000000000..e24d54c6e
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_minimum.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9996965251946
+0.2000000000000 0.9987862473501
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm1.xg
new file mode 100644
index 000000000..64b9df55d
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm1.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000122998
+0.2000000000000 1.0000002061536
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm2.xg
new file mode 100644
index 000000000..66ec4ecbf
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/gxx_norm2.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000213850
+0.2000000000000 1.0000003516519
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_maximum.xg
new file mode 100644
index 000000000..e02bb3010
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_maximum.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.2472763257790
+0.2000000000000 0.4943619684565
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_minimum.xg
new file mode 100644
index 000000000..9de1144c6
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_minimum.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.4947361974339
+0.2000000000000 -0.9901591159322
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm1.xg
new file mode 100644
index 000000000..142f838eb
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm1.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0066692216722
+0.2000000000000 0.0133472407976
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm2.xg
new file mode 100644
index 000000000..688bca690
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet/kxx_norm2.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0244501122104
+0.2000000000000 0.0489269454334
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep.par b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep.par
new file mode 100644
index 000000000..8fd7b38b6
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep.par
@@ -0,0 +1,68 @@
+
+!DESC "1+log sliced black hole, ADM_BSSN, Iterative CN, Carpet with 2 levels"
+
+# Required thorns
+
+ActiveThorns = "CoordBase SymBase time carpet carpetlib carpetregrid carpetreduce carpetslab boundary cartgrid3d bssn_mol mol nanchecker idanalyticbh carpetioascii ioutil iobasic admcoupling admbase admmacros coordgauge spacemask staticconformal"
+
+# Grid
+
+driver::global_nx = 21
+driver::global_ny = 21
+driver::global_nz = 21
+
+driver::ghost_size_x = 2
+driver::ghost_size_y = 2
+driver::ghost_size_z = 2
+
+Carpet::max_refinement_levels = 3
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+Carpet::init_each_timelevel = yes
+Carpet::buffer_width = 1
+
+CarpetRegrid::refinement_levels = 2
+CarpetRegrid::regrid_every = 0
+CarpetRegrid::keep_same_grid_structure = yes
+
+grid::type = "byspacing"
+grid::dxyz = 0.2
+grid::domain = "octant"
+
+cactus::cctk_initial_time = 0.0
+cactus::cctk_itlast = 20
+
+time::dtfac = 0.25
+
+# Initial data
+
+admbase::metric_type = "static conformal"
+admbase::initial_data = "schwarzschild"
+
+# Evolution
+
+admbase::evolution_method = "adm_bssn"
+
+MoL::ODE_Method = "ICN"
+MoL::MoL_Intermediate_Steps = 3
+
+adm_bssn::bound = "flat"
+
+# Gauge
+
+admbase::lapse_evolution_method = "1+log"
+
+# Output
+
+IO::out_fileinfo="none"
+IO::out_dir = $parfile
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_vars = "admbase::gxx"
+
+IOBasic::outScalar_every = 8
+IOBasic::outScalar_vars = "adm_bssn::adm_bs_gxx adm_bssn::adm_bs_Axx adm_bssn::adm_bs_phi adm_bssn::adm_bs_k adm_bssn::adm_bs_Gx admbase::gxx admbase::kxx admbase::alp"
+
+##################################################################
+
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_maximum.xg
new file mode 100644
index 000000000..c2a4fb5ff
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0030338694509
+0.2000000000000 0.0060622352107
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_minimum.xg
new file mode 100644
index 000000000..ce83b0645
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.0060529928018
+0.2000000000000 -0.0121310076465
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm1.xg
new file mode 100644
index 000000000..2d0fee2c6
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0009803939393
+0.2000000000000 0.0019621419182
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm2.xg
new file mode 100644
index 000000000..b89fca18c
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Axx_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Axx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0013481685692
+0.2000000000000 0.0026987690896
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_maximum.xg
new file mode 100644
index 000000000..7b115780d
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 -0.0000000000000
+0.1000000000000 0.0033315455549
+0.2000000000000 0.0133183502151
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_minimum.xg
new file mode 100644
index 000000000..63a00bbe9
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 -0.0000000000000
+0.1000000000000 -0.0032152437614
+0.2000000000000 -0.0128558956690
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm1.xg
new file mode 100644
index 000000000..c8b4c5097
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0001185890010
+0.2000000000000 0.0004743721288
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm2.xg
new file mode 100644
index 000000000..fcdbe7cfa
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_Gx_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_Gx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0003240266895
+0.2000000000000 0.0012956294505
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_maximum.xg
new file mode 100644
index 000000000..543140ad4
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000018310130
+0.2000000000000 0.0000153786963
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_minimum.xg
new file mode 100644
index 000000000..ef54a97a0
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000000243182
+0.2000000000000 0.0000002074587
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm1.xg
new file mode 100644
index 000000000..148d874a0
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000003689860
+0.2000000000000 0.0000030925075
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm2.xg
new file mode 100644
index 000000000..cc4076af8
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_K_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_K v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000005585168
+0.2000000000000 0.0000046841913
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_maximum.xg
new file mode 100644
index 000000000..00f95a496
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0006051005074
+0.2000000000000 1.0024229394652
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_minimum.xg
new file mode 100644
index 000000000..a385fa370
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9996965617401
+0.2000000000000 0.9987867828343
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm1.xg
new file mode 100644
index 000000000..80ef03d6d
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000196020
+0.2000000000000 1.0000003138176
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm2.xg
new file mode 100644
index 000000000..22ef0940f
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_gxx_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000286872
+0.2000000000000 1.0000004593159
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_maximum.xg
new file mode 100644
index 000000000..aed7943b5
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_maximum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.0000000001213
+0.2000000000000 -0.0000000017987
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_minimum.xg
new file mode 100644
index 000000000..e42573e40
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_minimum.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.0000000091545
+0.2000000000000 -0.0000001342591
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm1.xg
new file mode 100644
index 000000000..fb253f572
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm1.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000000018256
+0.2000000000000 0.0000000269160
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm2.xg
new file mode 100644
index 000000000..8764b5c0e
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/ADM_BS_phi_norm2.xg
@@ -0,0 +1,4 @@
+"ADM_BS_phi v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0000000027762
+0.2000000000000 0.0000000408272
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_maximum.xg
new file mode 100644
index 000000000..9eea94bda
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_maximum.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999992724
+0.2000000000000 0.9999999892075
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_minimum.xg
new file mode 100644
index 000000000..2a5de9b88
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_minimum.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999450728
+0.2000000000000 0.9999991944452
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm1.xg
new file mode 100644
index 000000000..ef617703b
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm1.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999890467
+0.2000000000000 0.9999998385042
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm2.xg
new file mode 100644
index 000000000..ef617703b
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/alp_norm2.xg
@@ -0,0 +1,4 @@
+"alp v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9999999890467
+0.2000000000000 0.9999998385042
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_maximum.xg
new file mode 100644
index 000000000..5bd7cd17c
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_maximum.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0006050644492
+0.2000000000000 1.0024224096583
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_minimum.xg
new file mode 100644
index 000000000..e24d54c6e
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_minimum.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 0.9996965251946
+0.2000000000000 0.9987862473501
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm1.xg
new file mode 100644
index 000000000..64b9df55d
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm1.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000122998
+0.2000000000000 1.0000002061536
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm2.xg
new file mode 100644
index 000000000..66ec4ecbf
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/gxx_norm2.xg
@@ -0,0 +1,4 @@
+"gxx v time
+0.0000000000000 1.0000000000000
+0.1000000000000 1.0000000213850
+0.2000000000000 1.0000003516519
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_maximum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_maximum.xg
new file mode 100644
index 000000000..e02bb3010
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_maximum.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.2472763257790
+0.2000000000000 0.4943619684565
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_minimum.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_minimum.xg
new file mode 100644
index 000000000..9de1144c6
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_minimum.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 -0.4947361974339
+0.2000000000000 -0.9901591159322
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm1.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm1.xg
new file mode 100644
index 000000000..142f838eb
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm1.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0066692216722
+0.2000000000000 0.0133472407976
diff --git a/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm2.xg b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm2.xg
new file mode 100644
index 000000000..688bca690
--- /dev/null
+++ b/Carpet/CarpetRegrid/test/test_BSSN_MoL_Carpet_keep/kxx_norm2.xg
@@ -0,0 +1,4 @@
+"kxx v time
+0.0000000000000 0.0000000000000
+0.1000000000000 0.0244501122104
+0.2000000000000 0.0489269454334
diff --git a/Carpet/CarpetSlab/COPYING b/Carpet/CarpetSlab/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetSlab/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetSlab/README b/Carpet/CarpetSlab/README
new file mode 100644
index 000000000..ea6ac8893
--- /dev/null
+++ b/Carpet/CarpetSlab/README
@@ -0,0 +1,8 @@
+Cactus Code Thorn CarpetSlab
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/README,v 1.2 2004/01/25 14:57:30 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn provides hyperslabbing for Carpet.
diff --git a/Carpet/CarpetSlab/configuration.ccl b/Carpet/CarpetSlab/configuration.ccl
new file mode 100644
index 000000000..8ff27ef27
--- /dev/null
+++ b/Carpet/CarpetSlab/configuration.ccl
@@ -0,0 +1,6 @@
+# Configuration definitions for thorn CarpetSlab
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/configuration.ccl,v 1.5 2004/06/08 21:09:25 schnetter Exp $
+
+REQUIRES Carpet CarpetLib
+
+REQUIRES THORNS: Carpet CarpetLib
diff --git a/Carpet/CarpetSlab/interface.ccl b/Carpet/CarpetSlab/interface.ccl
new file mode 100644
index 000000000..78a5743da
--- /dev/null
+++ b/Carpet/CarpetSlab/interface.ccl
@@ -0,0 +1,97 @@
+# Interface definition for thorn CarpetSlab
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/interface.ccl,v 1.12 2004/06/08 21:09:25 schnetter Exp $
+
+IMPLEMENTS: Hyperslab
+
+includes header: slab.h in Hyperslab.h
+
+uses include header: carpet.hh
+
+uses include header: bbox.hh
+uses include header: bboxset.hh
+uses include header: vect.hh
+
+uses include header: gdata.hh
+
+uses include header: dh.hh
+uses include header: ggf.hh
+uses include header: gh.hh
+
+
+
+CCTK_INT FUNCTION \
+ Hyperslab_Get (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_INT IN mapping_handle, \
+ CCTK_INT IN proc, \
+ CCTK_INT IN vindex, \
+ CCTK_INT IN timelevel, \
+ CCTK_INT IN hdatatype, \
+ CCTK_POINTER IN hdata)
+
+CCTK_INT FUNCTION \
+ Hyperslab_GetList (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_INT IN mapping_handle, \
+ CCTK_INT IN num_arrays, \
+ CCTK_INT ARRAY IN procs, \
+ CCTK_INT ARRAY IN vindices, \
+ CCTK_INT ARRAY IN timelevels, \
+ CCTK_INT ARRAY IN hdatatypes, \
+ CCTK_POINTER ARRAY IN hdata, \
+ CCTK_INT ARRAY OUT retvals)
+
+#CCTK_INT FUNCTION \
+# Hyperslab_LocalMappingByIndex (CCTK_POINTER_TO_CONST IN cctkGH, \
+# CCTK_INT IN vindex, \
+# CCTK_INT IN hdim, \
+# CCTK_INT ARRAY IN direction, \
+# CCTK_INT ARRAY IN origin, \
+# CCTK_INT ARRAY IN extent, \
+# CCTK_INT ARRAY IN downsample, \
+# CCTK_INT IN table_handle, \
+# CCTK_INT CCTK_FPOINTER IN \
+# conversion_fn (CCTK_INT IN nelems, \
+# CCTK_INT IN src_stride, \
+# CCTK_INT IN dst_stride, \
+# CCTK_INT IN src_type, \
+# CCTK_INT IN dst_type, \
+# CCTK_POINTER_TO_CONST IN from, \
+# CCTK_POINTER IN to), \
+# CCTK_INT ARRAY OUT hsize_local, \
+# CCTK_INT ARRAY OUT hsize_global, \
+# CCTK_INT ARRAY OUT hoffset_global)
+
+CCTK_INT FUNCTION \
+ Hyperslab_GlobalMappingByIndex (CCTK_POINTER_TO_CONST IN cctkGH, \
+ CCTK_INT IN vindex, \
+ CCTK_INT IN hdim, \
+ CCTK_INT ARRAY IN direction, \
+ CCTK_INT ARRAY IN origin, \
+ CCTK_INT ARRAY IN extent, \
+ CCTK_INT ARRAY IN downsample, \
+ CCTK_INT IN table_handle, \
+ CCTK_INT CCTK_FPOINTER IN \
+ conversion_fn (CCTK_INT IN nelems, \
+ CCTK_INT IN src_stride, \
+ CCTK_INT IN dst_stride, \
+ CCTK_INT IN src_type, \
+ CCTK_INT IN dst_type, \
+ CCTK_POINTER_TO_CONST IN from, \
+ CCTK_POINTER IN to), \
+ CCTK_INT ARRAY OUT hsize)
+
+CCTK_INT FUNCTION Hyperslab_FreeMapping (CCTK_INT IN mapping_handle)
+
+
+
+PROVIDES FUNCTION Hyperslab_Get \
+ WITH CarpetSlab_Get LANGUAGE C
+PROVIDES FUNCTION Hyperslab_GetList \
+ WITH CarpetSlab_GetList LANGUAGE C
+PROVIDES FUNCTION Hyperslab_Get \
+ WITH CarpetSlab_Fill LANGUAGE C
+PROVIDES FUNCTION Hyperslab_GlobalMappingByIndex \
+ WITH CarpetSlab_GlobalMappingByIndex LANGUAGE C
+#PROVIDES FUNCTION Hyperslab_LocalMappingByIndex \
+# WITH CarpetSlab_LocalMappingByIndex LANGUAGE C
+PROVIDES FUNCTION Hyperslab_FreeMapping \
+ WITH CarpetSlab_FreeMapping LANGUAGE C
diff --git a/Carpet/CarpetSlab/param.ccl b/Carpet/CarpetSlab/param.ccl
new file mode 100644
index 000000000..e4ace55bb
--- /dev/null
+++ b/Carpet/CarpetSlab/param.ccl
@@ -0,0 +1,2 @@
+# Parameter definitions for thorn CarpetSlab
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/param.ccl,v 1.1 2001/03/01 13:40:10 eschnett Exp $
diff --git a/Carpet/CarpetSlab/schedule.ccl b/Carpet/CarpetSlab/schedule.ccl
new file mode 100644
index 000000000..9aeffc07f
--- /dev/null
+++ b/Carpet/CarpetSlab/schedule.ccl
@@ -0,0 +1,2 @@
+# Schedule definitions for thorn CarpetSlab
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/schedule.ccl,v 1.2 2003/11/05 16:18:39 schnetter Exp $
diff --git a/Carpet/CarpetSlab/src/make.code.defn b/Carpet/CarpetSlab/src/make.code.defn
new file mode 100644
index 000000000..880ebcffc
--- /dev/null
+++ b/Carpet/CarpetSlab/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn CarpetSlab -*-Makefile-*-
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/make.code.defn,v 1.2 2002/10/24 10:53:48 schnetter Exp $
+
+# Source files in this directory
+SRCS = slab.cc
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetSlab/src/slab.cc b/Carpet/CarpetSlab/src/slab.cc
new file mode 100644
index 000000000..f734aafb9
--- /dev/null
+++ b/Carpet/CarpetSlab/src/slab.cc
@@ -0,0 +1,880 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.20 2004/08/19 06:35:36 schnetter Exp $
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <vector>
+
+#include "cctk.h"
+
+#include "util_Table.h"
+
+#include "bbox.hh"
+#include "bboxset.hh"
+#include "dh.hh"
+#include "gdata.hh"
+#include "gh.hh"
+#include "ggf.hh"
+#include "vect.hh"
+
+#include "carpet.hh"
+
+#include "slab.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.20 2004/08/19 06:35:36 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_CarpetSlab_slab_cc);
+}
+
+
+
+namespace CarpetSlab {
+
+ using namespace Carpet;
+
+
+
+ // Mapping object
+ // (just store the mapping)
+ struct mapping {
+ int vindex;
+ int hdim;
+ vector<int> origin; // [vdim]
+ vector<int> dirs; // [hdim]
+ vector<int> stride; // [hdim]
+ vector<int> length; // [hdim]
+ };
+
+
+
+ int
+ StoreMapping (mapping * const mp)
+ {
+ int const table = Util_TableCreate (UTIL_TABLE_FLAGS_DEFAULT);
+ assert (table>=0);
+ int const ierr = Util_TableSetPointer (table, mp, "mapping");
+ assert (ierr>=0);
+ return table;
+ }
+
+ mapping *
+ RetrieveMapping (int const table)
+ {
+ CCTK_POINTER mp;
+ int const ierr = Util_TableGetPointer (table, &mp, "mapping");
+ assert (ierr>=0);
+ return (mapping *)mp;
+ }
+
+ void
+ DeleteMapping (int const table)
+ {
+ int const ierr = Util_TableDestroy (table);
+ assert (ierr>=0);
+ }
+
+
+
+ void
+ FillSlab (const cGH* const cgh,
+ const int dest_proc,
+ const int n,
+ const int ti,
+ const int hdim,
+ const int origin[/*vdim*/],
+ const int dirs[/*hdim*/],
+ const int stride[/*hdim*/],
+ const int length[/*hdim*/],
+ void* const hdata)
+ {
+ int ierr;
+
+ // Check Cactus grid hierarchy
+ assert (cgh);
+
+ // Check destination processor
+ assert (dest_proc>=-1 && dest_proc<CCTK_nProcs(cgh));
+
+ // Check variable index
+ assert (n>=0 && n<CCTK_NumVars());
+
+ // Get info about variable
+ const int group = CCTK_GroupIndexFromVarI(n);
+ assert (group>=0);
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int var = n - n0;
+ assert (var>=0);
+
+ // Get info about group
+ cGroup gp;
+ ierr = CCTK_GroupData (group, &gp);
+ assert (! ierr);
+ assert (gp.dim<=dim);
+ assert (CCTK_QueryGroupStorageI(cgh, group));
+ const int typesize = CCTK_VarTypeSize(gp.vartype);
+ assert (typesize>0);
+
+ if (gp.grouptype==CCTK_GF && reflevel==-1) {
+ CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in meta mode or global mode (use singlemap mode instead)");
+ }
+ const int rl = gp.grouptype==CCTK_GF ? reflevel : 0;
+
+ if (gp.grouptype==CCTK_GF && Carpet::map==-1 && maps>1) {
+ CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in level mode when there are multiple maps (use singlemap mode instead, or make sure that there is only one map)");
+ }
+ const int m = gp.grouptype==CCTK_GF ? Carpet::map : 0;
+ const int oldmap = Carpet::map;
+ if (gp.grouptype==CCTK_GF && oldmap==-1) {
+ enter_singlemap_mode(const_cast<cGH*>(cgh), m);
+ }
+
+ // Check dimension
+ assert (hdim>=0 && hdim<=gp.dim);
+
+ // Get more info about group
+ cGroupDynamicData gd;
+ ierr = CCTK_GroupDynamicData (cgh, group, &gd);
+ assert (! ierr);
+ const vect<int,dim> sizes = vect<int,dim>::ref(gd.gsh);
+ for (int d=0; d<dim; ++d) {
+ assert (sizes[d] >= 0);
+ }
+
+ // Check timelevel
+ const int num_tl = gp.numtimelevels;
+ assert (ti>=0 && ti<num_tl);
+ const int tl = -ti;
+
+ // Check origin
+ for (int d=0; d<dim; ++d) {
+ assert (origin[d]>=0 && origin[d]<=sizes[d]);
+ }
+
+ // Check directions
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (dirs[dd]>=1 && dirs[dd]<=dim);
+ }
+
+ // Check stride
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (stride[dd]>0);
+ }
+
+ // Check length
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (length[dd]>=0);
+ }
+
+ // Check extent
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (origin[dirs[dd]-1] + length[dd] <= sizes[dirs[dd]]);
+ }
+
+ // Get insider information about variable
+ const gh<dim>* myhh;
+ const dh<dim>* mydd;
+ const ggf<dim>* myff;
+ assert (group < (int)arrdata.size());
+ myhh = arrdata.at(group).at(m).hh;
+ assert (myhh);
+ mydd = arrdata.at(group).at(m).dd;
+ assert (mydd);
+ assert (var < (int)arrdata.at(group).at(m).data.size());
+ myff = arrdata.at(group).at(m).data.at(var);
+ assert (myff);
+
+ // Detemine collecting processor
+ const int collect_proc = dest_proc<0 ? 0 : dest_proc;
+
+ // Determine own rank
+ const int rank = CCTK_MyProc(cgh);
+
+ // Calculate global size
+ int totalsize = 1;
+ for (int dd=0; dd<hdim; ++dd) {
+ totalsize *= length[dd];
+ }
+
+ // Allocate memory
+ assert (hdata);
+ if (dest_proc==-1 || rank==dest_proc) {
+ memset (hdata, 0, totalsize * typesize);
+ }
+
+ // Get sample data
+ const gdata<dim>* mydata;
+ mydata = (*myff)(tl, rl, 0, 0);
+
+ // Stride of data in memory
+ const vect<int,dim> str = mydata->extent().stride();
+
+ // Stride of collected data
+ vect<int,dim> hstr = str;
+ for (int dd=0; dd<hdim; ++dd) {
+ hstr[dirs[dd]-1] *= stride[dd];
+ }
+
+ // Lower bound of collected data
+ vect<int,dim> hlb(0);
+ for (int d=0; d<gp.dim; ++d) {
+ hlb[d] = origin[d] * str[d];
+ }
+
+ // Upper bound of collected data
+ vect<int,dim> hub = hlb;
+ for (int dd=0; dd<hdim; ++dd) {
+ hub[dirs[dd]-1] += (length[dd]-1) * hstr[dirs[dd]-1];
+ }
+
+ // Calculate extent to collect
+ const bbox<int,dim> hextent (hlb, hub, hstr);
+ assert (hextent.size() == totalsize);
+
+ // Create collector data object
+ void* myhdata = rank==collect_proc ? hdata : 0;
+ gdata<dim>* const alldata = mydata->make_typed(-1);
+ alldata->allocate (hextent, collect_proc, myhdata);
+
+ // Done with the temporary stuff
+ mydata = 0;
+
+ for (comm_state<dim> state; !state.done(); state.step()) {
+
+ // Loop over all components, copying data from them
+ BEGIN_LOCAL_COMPONENT_LOOP (cgh, gp.grouptype) {
+
+ // Get data object
+ mydata = (*myff)(tl, rl, component, mglevel);
+
+ // Calculate overlapping extents
+ const bboxset<int,dim> myextents
+ = ((mydd->boxes.at(rl).at(component).at(mglevel).sync_not
+ | mydd->boxes.at(rl).at(component).at(mglevel).interior)
+ & hextent);
+
+ // Loop over overlapping extents
+ for (bboxset<int,dim>::const_iterator ext_iter = myextents.begin();
+ ext_iter != myextents.end();
+ ++ext_iter) {
+
+ // Copy data
+ alldata->copy_from (state, mydata, *ext_iter);
+
+ }
+
+ } END_LOCAL_COMPONENT_LOOP;
+
+ } // for step
+
+ // Copy result to all processors
+ if (dest_proc == -1) {
+ vector<gdata<dim>*> tmpdata(CCTK_nProcs(cgh));
+ vector<comm_state<dim> > state;
+
+ for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) {
+ if (proc != collect_proc) {
+ void* myhdata = rank==proc ? hdata : 0;
+ tmpdata.at(proc) = mydata->make_typed(-1);
+ tmpdata.at(proc)->allocate (alldata->extent(), proc, myhdata);
+ tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent());
+ }
+ }
+
+ for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) {
+ if (proc != collect_proc) {
+ tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent());
+ }
+ }
+
+ for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) {
+ if (proc != collect_proc) {
+ tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent());
+ delete tmpdata.at(proc);
+ }
+ }
+
+ } // Copy result
+
+ if (gp.grouptype==CCTK_GF && oldmap==-1) {
+ leave_singlemap_mode(const_cast<cGH*>(cgh));
+ }
+
+ delete alldata;
+ }
+
+
+
+ void *
+ GetSlab (const cGH* const cgh,
+ const int dest_proc,
+ const int n,
+ const int ti,
+ const int hdim,
+ const int origin[/*vdim*/],
+ const int dirs[/*hdim*/],
+ const int stride[/*hdim*/],
+ const int length[/*hdim*/])
+ {
+ // Check Cactus grid hierarchy
+ assert (cgh);
+
+ // Check destination processor
+ assert (dest_proc>=-1 && dest_proc<CCTK_nProcs(cgh));
+
+ // Check variable index
+ assert (n>=0 && n<CCTK_NumVars());
+
+ // Get info about variable
+ const int group = CCTK_GroupIndexFromVarI(n);
+ assert (group>=0);
+ const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int var = n - n0;
+ assert (var>=0);
+
+ // Get info about group
+ cGroup gp;
+ CCTK_GroupData (group, &gp);
+ assert (gp.dim<=dim);
+ assert (CCTK_QueryGroupStorageI(cgh, group));
+ const int typesize = CCTK_VarTypeSize(gp.vartype);
+ assert (typesize>0);
+
+ if (gp.grouptype==CCTK_GF && reflevel==-1) {
+ CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in global mode (use singlemap mode instead)");
+ }
+ const int rl = gp.grouptype==CCTK_GF ? reflevel : 0;
+
+ if (gp.grouptype==CCTK_GF && Carpet::map==-1) {
+ CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in level mode (use singlemap mode instead)");
+ }
+ const int m = gp.grouptype==CCTK_GF ? Carpet::map : 0;
+
+ // Check dimension
+ assert (hdim>=0 && hdim<=gp.dim);
+
+ // Check timelevel
+ const int num_tl = gp.numtimelevels;
+ assert (ti>=0 && ti<num_tl);
+ const int tl = -ti;
+
+ // Check origin
+// for (int d=0; d<dim; ++d) {
+// assert (origin[d]>=0 && origin[d]<=sizes[d]);
+// }
+
+ // Check directions
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (dirs[dd]>=1 && dirs[dd]<=dim);
+ }
+
+ // Check stride
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (stride[dd]>0);
+ }
+
+ // Check length
+ for (int dd=0; dd<hdim; ++dd) {
+ assert (length[dd]>=0);
+ }
+
+ // Check extent
+// for (int dd=0; dd<hdim; ++dd) {
+// assert (origin[dirs[dd]-1] + length[dd] <= sizes[dirs[dd]]);
+// }
+
+ // Get insider information about variable
+ const gh<dim>* myhh;
+ const dh<dim>* mydd;
+ const ggf<dim>* myff;
+ assert (group < (int)arrdata.size());
+ myhh = arrdata.at(group).at(m).hh;
+ assert (myhh);
+ mydd = arrdata.at(group).at(m).dd;
+ assert (mydd);
+ assert (var < (int)arrdata.at(group).at(m).data.size());
+ myff = arrdata.at(group).at(m).data.at(var);
+ assert (myff);
+
+ // Detemine collecting processor
+ const int collect_proc = dest_proc<0 ? 0 : dest_proc;
+
+ // Determine own rank
+ const int rank = CCTK_MyProc(cgh);
+
+ // Calculate global size
+ int totalsize = 1;
+ for (int dd=0; dd<hdim; ++dd) {
+ totalsize *= length[dd];
+ }
+
+ // Allocate memory
+ void* hdata = 0;
+ if (dest_proc==-1 || rank==dest_proc) {
+ assert (0);
+ hdata = malloc(totalsize * typesize);
+ assert (hdata);
+ memset (hdata, 0, totalsize * typesize);
+ }
+
+ // Get sample data
+ const gdata<dim>* mydata;
+ mydata = (*myff)(tl, rl, 0, 0);
+
+ // Stride of data in memory
+ const vect<int,dim> str = mydata->extent().stride();
+
+ // Stride of collected data
+ vect<int,dim> hstr = str;
+ for (int dd=0; dd<hdim; ++dd) {
+ hstr[dirs[dd]-1] *= stride[dd];
+ }
+
+ // Lower bound of collected data
+ vect<int,dim> hlb(0);
+ for (int d=0; d<gp.dim; ++d) {
+ hlb[d] = origin[d] * str[d];
+ }
+
+ // Upper bound of collected data
+ vect<int,dim> hub = hlb;
+ for (int dd=0; dd<hdim; ++dd) {
+ hub[dirs[dd]-1] += (length[dd]-1) * hstr[dirs[dd]-1];
+ }
+
+ // Calculate extent to collect
+ const bbox<int,dim> hextent (hlb, hub, hstr);
+ assert (hextent.size() == totalsize);
+
+ // Create collector data object
+ void* myhdata = rank==collect_proc ? hdata : 0;
+ gdata<dim>* const alldata = mydata->make_typed(-1);
+ alldata->allocate (hextent, collect_proc, myhdata);
+
+ // Done with the temporary stuff
+ mydata = 0;
+
+ for (comm_state<dim> state; !state.done(); state.step()) {
+
+ // Loop over all components, copying data from them
+ BEGIN_LOCAL_COMPONENT_LOOP (cgh, gp.grouptype) {
+
+ // Get data object
+ mydata = (*myff)(tl, rl, component, mglevel);
+
+ // Calculate overlapping extents
+ const bboxset<int,dim> myextents
+ = ((mydd->boxes.at(rl).at(component).at(mglevel).sync_not
+ | mydd->boxes.at(rl).at(component).at(mglevel).interior)
+ & hextent);
+
+ // Loop over overlapping extents
+ for (bboxset<int,dim>::const_iterator ext_iter = myextents.begin();
+ ext_iter != myextents.end();
+ ++ext_iter) {
+
+ // Copy data
+ alldata->copy_from (state, mydata, *ext_iter);
+
+ }
+
+ } END_LOCAL_COMPONENT_LOOP;
+
+ } // for step
+
+ // Copy result to all processors
+ if (dest_proc == -1) {
+ vector<gdata<dim>*> tmpdata(CCTK_nProcs(cgh));
+ vector<comm_state<dim> > state;
+
+ for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) {
+ if (proc != collect_proc) {
+ void* myhdata = rank==proc ? hdata : 0;
+ tmpdata.at(proc) = mydata->make_typed(-1);
+ tmpdata.at(proc)->allocate (alldata->extent(), proc, myhdata);
+ tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent());
+ }
+ }
+
+ for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) {
+ if (proc != collect_proc) {
+ tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent());
+ }
+ }
+
+ for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) {
+ if (proc != collect_proc) {
+ tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent());
+ delete tmpdata.at(proc);
+ }
+ }
+
+ } // Copy result
+
+ delete alldata;
+
+ // Success
+ return hdata;
+ }
+
+
+
+ CCTK_INT
+ CarpetSlab_Get (CCTK_POINTER_TO_CONST const cctkGH_,
+ CCTK_INT const mapping_handle,
+ CCTK_INT const proc,
+ CCTK_INT const vindex,
+ CCTK_INT const timelevel,
+ CCTK_INT const hdatatype,
+ CCTK_POINTER const hdata)
+ {
+ cGH const * const cctkGH = (cGH const *) cctkGH_;
+
+ // Check arguments
+ assert (cctkGH);
+ assert (mapping_handle>=0);
+ assert (proc==-1 || proc>=0 && proc<CCTK_nProcs(cctkGH));
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+ assert (timelevel>=0);
+ assert (hdatatype>=0);
+ assert (hdata);
+
+ // Get mapping
+ const mapping * const mp = RetrieveMapping (mapping_handle);
+ assert (mp);
+
+ // Calculate total size
+ size_t size = 1;
+ for (size_t d=0; d<(size_t)mp->hdim; ++d) {
+ size *= mp->length[d];
+ }
+
+ // Get type size
+ size_t const sz = CCTK_VarTypeSize (hdatatype);
+ assert (sz>0);
+
+ // Forward call
+ FillSlab (cctkGH, proc, vindex, timelevel,
+ mp->hdim,
+ &mp->origin[0], &mp->dirs[0], &mp->stride[0], &mp->length[0],
+ hdata);
+
+ return 0;
+ }
+
+
+
+ CCTK_INT
+ CarpetSlab_GetList (CCTK_POINTER_TO_CONST const cctkGH_,
+ CCTK_INT const mapping_handle,
+ CCTK_INT const num_arrays,
+ CCTK_INT const * const procs,
+ CCTK_INT const * const vindices,
+ CCTK_INT const * const timelevels,
+ CCTK_INT const * const hdatatypes,
+ CCTK_POINTER const * const hdata,
+ CCTK_INT * const retvals)
+ {
+ cGH const * const cctkGH = (cGH const *) cctkGH_;
+
+ // Check arguments
+ assert (cctkGH);
+ assert (mapping_handle>=0);
+ assert (num_arrays>=0);
+ assert (procs);
+ assert (vindices);
+ assert (timelevels);
+ assert (hdatatypes);
+ assert (hdata);
+ assert (retvals);
+
+ // Remember whether there were errors
+ bool everyting_okay = true;
+
+ // Loop over all slabs
+ for (int n=0; n<num_arrays; ++n) {
+ // Forward call
+ retvals[n] = CarpetSlab_Get (cctkGH, mapping_handle, procs[n],
+ vindices[n], timelevels[n], hdatatypes[n],
+ hdata[n]);
+ everyting_okay = everyting_okay && retvals[n];
+ }
+
+ return everyting_okay ? 0 : -1;
+ }
+
+
+
+ typedef CCTK_INT
+ (* conversion_fn_ptr) (CCTK_INT const nelems,
+ CCTK_INT const src_stride,
+ CCTK_INT const dst_stride,
+ CCTK_INT const src_type,
+ CCTK_INT const dst_type,
+ CCTK_POINTER_TO_CONST const from,
+ CCTK_POINTER const to);
+
+
+
+ CCTK_INT
+ CarpetSlab_LocalMappingByIndex (CCTK_POINTER_TO_CONST const cctkGH_,
+ CCTK_INT const vindex,
+ CCTK_INT const hdim,
+ CCTK_INT const * const direction,
+ CCTK_INT const * const origin,
+ CCTK_INT const * const extent,
+ CCTK_INT const * const downsample_,
+ CCTK_INT const table_handle,
+ conversion_fn_ptr const conversion_fn,
+ CCTK_INT * const hsize_local,
+ CCTK_INT * const hsize_global,
+ CCTK_INT * const hoffset_global)
+ {
+ CCTK_WARN (0, "not implemented");
+ return 0;
+ }
+
+
+
+ CCTK_INT
+ CarpetSlab_GlobalMappingByIndex (CCTK_POINTER_TO_CONST const cctkGH_,
+ CCTK_INT const vindex,
+ CCTK_INT const hdim,
+ CCTK_INT const * const direction,
+ CCTK_INT const * const origin,
+ CCTK_INT const * const extent,
+ CCTK_INT const * const downsample_,
+ CCTK_INT const table_handle,
+ conversion_fn_ptr const conversion_fn,
+ CCTK_INT * const hsize)
+ {
+ cGH const * const cctkGH = (cGH const *) cctkGH_;
+
+ // Check arguments
+ assert (cctkGH);
+ assert (vindex>=0 && vindex<CCTK_NumVars());
+ assert (hdim>=0 && hdim<=dim);
+ assert (direction);
+ assert (origin);
+ assert (extent);
+ // assert (downsample);
+ // assert (table_handle>=0);
+ assert (hsize);
+
+ // Get more information
+ int const vdim = CCTK_GroupDimFromVarI (vindex);
+ assert (vdim>=0 && vdim<=dim);
+ assert (hdim<=vdim);
+
+ // Not implemented
+ assert (! conversion_fn);
+
+ // Allocate memory
+ mapping * mp = new mapping;
+
+ // Calculate more convenient representation of the direction
+ vector<int> dirs(hdim);
+ for (int d=0; d<hdim; ++d) {
+ for (int dd=0; dd<vdim; ++dd) {
+ if (direction[d*vdim+dd]!=0) {
+ dirs[d] = dd+1;
+ goto found;
+ }
+ }
+ assert (0);
+ found:;
+ for (int dd=0; dd<vdim; ++dd) {
+ assert ((direction[d*vdim+dd]!=0) == (dirs[d]==dd+1));
+ }
+ for (int dd=0; dd<d; ++dd) {
+ assert (dirs[dd] != dirs[d]);
+ }
+ }
+
+ // Calculate lengths
+ vector<CCTK_INT> downsample(hdim);
+ for (int dd=0; dd<hdim; ++dd) {
+ downsample[dd] = downsample_ ? downsample_[dd] : 1;
+ if (extent[dd]<0) {
+ int gsh[dim];
+ int ierr = CCTK_GroupgshVI(cctkGH, dim, gsh, vindex);
+ assert (!ierr);
+ const int totlen = gsh[dirs[dd]-1];
+ assert (totlen>=0);
+ // Partial argument check
+ assert (origin[dirs[dd]-1]>=0);
+ assert (origin[dirs[dd]-1]<=totlen);
+ assert (downsample[dd]>0);
+ hsize[dd] = (totlen - origin[dirs[dd]-1]) / downsample[dd];
+ } else {
+ hsize[dd] = extent[dd];
+ }
+ assert (hsize[dd]>=0);
+ }
+
+ // Store information
+ mp->vindex = vindex;
+ mp->hdim = hdim;
+ mp->origin.resize(vdim);
+ mp->dirs .resize(hdim);
+ mp->stride.resize(hdim);
+ mp->length.resize(hdim);
+ for (size_t d=0; d<(size_t)vdim; ++d) {
+ mp->origin[d] = origin[d];
+ }
+ for (size_t d=0; d<(size_t)hdim; ++d) {
+ mp->dirs[d] = dirs[d];
+ mp->stride[d] = downsample[d];
+ mp->length[d] = hsize[d];
+ }
+
+ return StoreMapping (mp);
+ }
+
+
+
+ CCTK_INT
+ CarpetSlab_FreeMapping (CCTK_INT const mapping_handle)
+ {
+ // Check arguments
+ assert (mapping_handle>=0);
+
+ // Get mapping
+ mapping * mp = RetrieveMapping (mapping_handle);
+ assert (mp);
+
+ // Delete storage
+ DeleteMapping (mapping_handle);
+
+ delete mp;
+
+ return 0;
+ }
+
+
+
+ int
+ Hyperslab_GetHyperslab (const cGH* const GH,
+ const int target_proc,
+ const int vindex,
+ const int vtimelvl,
+ const int hdim,
+ const int global_startpoint [/*vdim*/],
+ const int directions [/*vdim*/],
+ const int lengths [/*hdim*/],
+ const int downsample_ [/*hdim*/],
+ void** const hdata,
+ int hsize [/*hdim*/])
+ {
+ const int vdim = CCTK_GroupDimFromVarI(vindex);
+ assert (vdim>=1 && vdim<=dim);
+
+ // Check some arguments
+ assert (hdim>=0 && hdim<=dim);
+
+ // Check output arguments
+ assert (hdata);
+ assert (hsize);
+
+ // Calculate more convenient representation of the direction
+ int dirs[dim]; // should really be dirs[hdim]
+ // The following if statement is written according to the
+ // definition of "dir".
+ if (hdim==1) {
+ // 1-dimensional hyperslab
+ int mydir = 0;
+ for (int d=0; d<vdim; ++d) {
+ if (directions[d]!=0) {
+ mydir = d+1;
+ break;
+ }
+ }
+ assert (mydir>0);
+ for (int d=0; d<vdim; ++d) {
+ if (d == mydir-1) {
+ assert (directions[d]!=0);
+ } else {
+ assert (directions[d]==0);
+ }
+ }
+ dirs[0] = mydir;
+ } else if (hdim==vdim) {
+ // vdim-dimensional hyperslab
+ for (int d=0; d<vdim; ++d) {
+ dirs[d] = d+1;
+ }
+ } else if (hdim==2) {
+ // 2-dimensional hyperslab with vdim==3
+ assert (vdim==3);
+ int mydir = 0;
+ for (int d=0; d<vdim; ++d) {
+ if (directions[d]==0) {
+ mydir = d+1;
+ break;
+ }
+ }
+ assert (mydir>0);
+ for (int d=0; d<vdim; ++d) {
+ if (d == mydir-1) {
+ assert (directions[d]==0);
+ } else {
+ assert (directions[d]!=0);
+ }
+ }
+ int dd=0;
+ for (int d=0; d<vdim; ++d) {
+ if (d != mydir-1) {
+ dirs[dd] = d+1;
+ ++dd;
+ }
+ }
+ assert (dd==hdim);
+ } else {
+ assert (0);
+ }
+ // Fill remaining length
+ for (int d=vdim; d<dim; ++d) {
+ dirs[d] = d+1;
+ }
+
+ // Calculate lengths
+ vector<int> downsample(hdim);
+ for (int dd=0; dd<hdim; ++dd) {
+ if (lengths[dd]<0) {
+ int gsh[dim];
+ int ierr = CCTK_GroupgshVI(GH, dim, gsh, vindex);
+ assert (!ierr);
+ const int totlen = gsh[dirs[dd]-1];
+ assert (totlen>=0);
+ // Partial argument check
+ assert (global_startpoint[dirs[dd]-1]>=0);
+ assert (global_startpoint[dirs[dd]-1]<=totlen);
+ downsample[dd] = downsample_ ? downsample_[dd] : 1;
+ assert (downsample[dd]>0);
+ hsize[dd] = (totlen - global_startpoint[dirs[dd]-1]) / downsample[dd];
+ } else {
+ hsize[dd] = lengths[dd];
+ }
+ assert (hsize[dd]>=0);
+ }
+
+ // Get the slab
+ *hdata = GetSlab (GH,
+ target_proc,
+ vindex,
+ vtimelvl,
+ hdim,
+ global_startpoint,
+ dirs,
+ &downsample[0],
+ hsize);
+
+ // Return with success
+ return 1;
+ }
+
+
+
+} // namespace CarpetSlab
diff --git a/Carpet/CarpetSlab/src/slab.h b/Carpet/CarpetSlab/src/slab.h
new file mode 100644
index 000000000..6e6bc3029
--- /dev/null
+++ b/Carpet/CarpetSlab/src/slab.h
@@ -0,0 +1,89 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.h,v 1.4 2004/01/25 14:57:31 schnetter Exp $ */
+
+#ifndef CARPETSLAB_H
+#define CARPETSLAB_H
+
+#include "cctk.h"
+
+#ifdef __cplusplus
+namespace CarpetSlab {
+ extern "C" {
+#endif
+
+ CCTK_INT CarpetSlab_Get (CCTK_POINTER_TO_CONST const cctkGH,
+ CCTK_INT const mapping_handle,
+ CCTK_INT const proc,
+ CCTK_INT const vindex,
+ CCTK_INT const timelevel,
+ CCTK_INT const hdatatype,
+ void * const hdata);
+
+ CCTK_INT CarpetSlab_GetList (CCTK_POINTER_TO_CONST const cctkGH,
+ CCTK_INT const mapping_handle,
+ CCTK_INT const num_arrays,
+ CCTK_INT const * const procs,
+ CCTK_INT const * const vindices,
+ CCTK_INT const * const timelevels,
+ CCTK_INT const * const hdatatypes,
+ void * const * const hdata,
+ CCTK_INT * const retvals);
+
+ CCTK_INT CarpetSlab_LocalMappingByIndex (CCTK_POINTER_TO_CONST const cctkGH,
+ CCTK_INT const vindex,
+ CCTK_INT const hdim,
+ CCTK_INT const * const direction,
+ CCTK_INT const * const origin,
+ CCTK_INT const * const extent,
+ CCTK_INT const * const downsample,
+ CCTK_INT const table_handle,
+ CCTK_INT (* const conversion_fn) (CCTK_INT const nelems,
+ CCTK_INT const src_stride,
+ CCTK_INT const dst_stride,
+ CCTK_INT const src_type,
+ CCTK_INT const dst_type,
+ void const * const from,
+ void * const to),
+ CCTK_INT * const hsize_local,
+ CCTK_INT * const hsize_global,
+ CCTK_INT * const hoffset_global);
+
+ CCTK_INT CarpetSlab_GlobalMappingByIndex (CCTK_POINTER_TO_CONST const cctkGH,
+ CCTK_INT const vindex,
+ CCTK_INT const hdim,
+ CCTK_INT const * const direction,
+ CCTK_INT const * const origin,
+ CCTK_INT const * const extent,
+ CCTK_INT const * const downsample,
+ CCTK_INT const table_handle,
+ CCTK_INT (* const conversion_fn) (CCTK_INT const nelems,
+ CCTK_INT const src_stride,
+ CCTK_INT const dst_stride,
+ CCTK_INT const src_type,
+ CCTK_INT const dst_type,
+ void const * const from,
+ void * const to),
+ CCTK_INT * const hsize);
+
+ CCTK_INT CarpetSlab_FreeMapping (CCTK_INT const mapping_handle);
+
+
+
+ /* Old interface -- don't use */
+ int Hyperslab_GetHyperslab (const cGH* const GH,
+ const int target_proc,
+ const int vindex,
+ const int vtimelvl,
+ const int hdim,
+ const int global_startpoint [/*vdim*/],
+ const int directions [/*vdim*/],
+ const int lengths [/*hdim*/],
+ const int downsample [/*hdim*/],
+ void** const hdata,
+ int hsize [/*hdim*/]);
+
+#ifdef __cplusplus
+ } /* extern "C" */
+} /* namespace CarpetSlab */
+#endif
+
+#endif /* !defined(CARPETSLAB_H) */
diff --git a/Carpet/CarpetSlab/src/slab.hh b/Carpet/CarpetSlab/src/slab.hh
new file mode 100644
index 000000000..a6259236d
--- /dev/null
+++ b/Carpet/CarpetSlab/src/slab.hh
@@ -0,0 +1,37 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.hh,v 1.2 2003/11/05 16:18:39 schnetter Exp $
+
+#ifndef CARPETSLAB_HH
+#define CARPETSLAB_HH
+
+#include "cctk.h"
+
+#include "slab.h"
+
+namespace CarpetSlab {
+
+ // Non-standard interface -- don't use
+ void FillSlab (const cGH* const cgh,
+ const int dest_proc,
+ const int n,
+ const int tl,
+ const int hdim,
+ const int origin[/*vdim*/],
+ const int dirs[/*hdim*/],
+ const int stride[/*hdim*/],
+ const int length[/*hdim*/],
+ void* const hdata);
+
+ // Non-standard interface -- don't use
+ void* GetSlab (const cGH* const cgh,
+ const int dest_proc,
+ const int n,
+ const int tl,
+ const int hdim,
+ const int origin[/*vdim*/],
+ const int dirs[/*hdim*/],
+ const int stride[/*hdim*/],
+ const int length[/*hdim*/]);
+
+} // namespace CarpetSlab
+
+#endif // !defined(CARPETSLAB_HH)
diff --git a/Carpet/CarpetTest/COPYING b/Carpet/CarpetTest/COPYING
new file mode 100644
index 000000000..1942c4334
--- /dev/null
+++ b/Carpet/CarpetTest/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Carpet/CarpetTest/README b/Carpet/CarpetTest/README
new file mode 100644
index 000000000..73ee4263f
--- /dev/null
+++ b/Carpet/CarpetTest/README
@@ -0,0 +1,9 @@
+Cactus Code Thorn CarpetTest
+Authors : Erik Schnetter <schnetter@uni-tuebingen.de>
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/README,v 1.1 2001/07/04 12:29:53 schnetter Exp $
+--------------------------------------------------------------------------
+
+Purpose of the thorn:
+
+This thorn contains a few test grid functions, grid arrays, and
+scalars to test the driver.
diff --git a/Carpet/CarpetTest/interface.ccl b/Carpet/CarpetTest/interface.ccl
new file mode 100644
index 000000000..55cd937c5
--- /dev/null
+++ b/Carpet/CarpetTest/interface.ccl
@@ -0,0 +1,29 @@
+# Interface definition for thorn CarpetTest
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/interface.ccl,v 1.2 2001/07/09 09:00:26 schnetter Exp $
+
+implements: CarpetTest
+
+CCTK_REAL gfg type=GF
+{
+ gf
+} "grid function"
+
+CCTK_REAL arrg3 type=ARRAY size=i3,i4,i5
+{
+ arr3
+} "3D array"
+
+CCTK_REAL arrg2 type=ARRAY dim=2 size=i6,i7
+{
+ arr2
+} "2D array"
+
+CCTK_REAL arrg1 type=ARRAY dim=1 size=i8
+{
+ arr1
+} "1D array"
+
+CCTK_REAL scg type=SCALAR
+{
+ sc
+} "scalar"
diff --git a/Carpet/CarpetTest/param.ccl b/Carpet/CarpetTest/param.ccl
new file mode 100644
index 000000000..a8b831dd4
--- /dev/null
+++ b/Carpet/CarpetTest/param.ccl
@@ -0,0 +1,32 @@
+# Parameter definitions for thorn CarpetTest
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/param.ccl,v 1.1 2001/07/04 12:29:54 schnetter Exp $
+
+CCTK_INT i3 "three"
+{
+ 0:* :: "should be 3"
+} 3
+
+CCTK_INT i4 "four"
+{
+ 0:* :: "should be 4"
+} 4
+
+CCTK_INT i5 "five"
+{
+ 0:* :: "should be 5"
+} 5
+
+CCTK_INT i6 "six"
+{
+ 0:* :: "should be 6"
+} 6
+
+CCTK_INT i7 "seven"
+{
+ 0:* :: "should be 7"
+} 7
+
+CCTK_INT i8 "eight"
+{
+ 0:* :: "should be 8"
+} 8
diff --git a/Carpet/CarpetTest/schedule.ccl b/Carpet/CarpetTest/schedule.ccl
new file mode 100644
index 000000000..1ade016b9
--- /dev/null
+++ b/Carpet/CarpetTest/schedule.ccl
@@ -0,0 +1,14 @@
+# Schedule definitions for thorn CarpetTest
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/schedule.ccl,v 1.3 2003/11/05 16:18:39 schnetter Exp $
+
+STORAGE: gfg arrg1 arrg2 arrg3
+
+schedule carpettest_check_sizes AT initial
+{
+ LANG: C
+} "Check grid function and grid array sizes"
+
+schedule carpettest_check_arguments AT initial
+{
+ LANG: Fortran
+} "Check grid function and grid array arguments"
diff --git a/Carpet/CarpetTest/src/carpettest_check_arguments.F77 b/Carpet/CarpetTest/src/carpettest_check_arguments.F77
new file mode 100644
index 000000000..297e38977
--- /dev/null
+++ b/Carpet/CarpetTest/src/carpettest_check_arguments.F77
@@ -0,0 +1,44 @@
+c -*-Fortran-*-
+c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_check_arguments.F77,v 1.5 2004/01/25 14:57:31 schnetter Exp $
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "cctk_Parameters.h"
+
+ subroutine carpettest_check_arguments (CCTK_ARGUMENTS)
+ implicit none
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_FUNCTIONS
+ DECLARE_CCTK_PARAMETERS
+ integer i,j,k
+ print *, "Xgfg ", Xgfg0, Xgfg1, Xgfg2
+ print *, "Xarrg3 ", Xarrg30, Xarrg31, Xarrg32
+ print *, "Xarrg2 ", Xarrg20, Xarrg21
+ print *, "Xarrg1 ", Xarrg10
+ print *, "Xscg"
+ print *
+ do k=1,Xgfg2
+ do j=1,Xgfg1
+ do i=1,Xgfg0
+ gf(i,j,k) = i*10000 + j*100 + k
+ end do
+ end do
+ end do
+ do k=1,Xarrg32
+ do j=1,Xarrg31
+ do i=1,Xarrg30
+ arr3(i,j,k) = i*10000 + j*100 + k
+ end do
+ end do
+ end do
+ do j=1,Xarrg21
+ do i=1,Xarrg20
+ arr2(i,j) = i*100 + j
+ end do
+ end do
+ do i=1,Xarrg10
+ arr1(i) = i
+ end do
+ sc = 42
+ end
diff --git a/Carpet/CarpetTest/src/carpettest_check_sizes.c b/Carpet/CarpetTest/src/carpettest_check_sizes.c
new file mode 100644
index 000000000..c4e17baf7
--- /dev/null
+++ b/Carpet/CarpetTest/src/carpettest_check_sizes.c
@@ -0,0 +1,107 @@
+/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_check_sizes.c,v 1.2 2001/07/09 09:00:27 schnetter Exp $ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+void carpettest_check_sizes (CCTK_ARGUMENTS);
+
+static void print_scalar (const char *name, int sc);
+static void print_scalar_descr (const char *name, int sc, const char *descr);
+static void print_array (const char *name, int dim, const int *arr);
+
+static const char *grouptype_string (int grouptype);
+static const char *disttype_string (int disttype);
+
+
+
+void carpettest_check_sizes (CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ int group;
+ int dim;
+ cGroup data;
+ cGroupDynamicData dyndata;
+
+ dim = cctk_dim;
+ print_scalar ("cctk_dim", cctk_dim);
+ print_array ("cctk_gsh", dim, cctk_gsh);
+ print_array ("cctk_lsh", dim, cctk_lsh);
+ print_array ("cctk_lbnd", dim, cctk_lbnd);
+ print_array ("cctk_ubnd", dim, cctk_ubnd);
+ print_array ("cctk_bbox", 2*dim, cctk_bbox);
+ print_array ("cctk_nghostzones", dim, cctk_nghostzones);
+ printf ("\n");
+
+ for (group=0; group<CCTK_NumGroups(); ++group) {
+ CCTK_GroupData (group, &data);
+ CCTK_GroupDynamicData (cctkGH, group, &dyndata);
+
+ print_scalar_descr ("group", group, CCTK_GroupName(group));
+
+ dim = data.dim;
+ print_scalar ("dim", data.dim);
+ print_scalar_descr ("grouptype", data.grouptype, grouptype_string(data.grouptype));
+ print_scalar_descr ("vartype", data.vartype, CCTK_VarTypeName(data.vartype));
+ print_scalar_descr ("disttype", data.disttype, disttype_string(data.disttype));
+ print_scalar ("stagtype", data.stagtype);
+ print_scalar ("numvars", data.numvars);
+ print_scalar ("numtimelevels", data.numtimelevels);
+ print_array ("gsh", dim, dyndata.gsh);
+ print_array ("lsh", dim, dyndata.lsh);
+ print_array ("lbnd", dim, dyndata.lbnd);
+ print_array ("ubnd", dim, dyndata.ubnd);
+ print_array ("bbox", 2*dim, dyndata.bbox);
+ print_array ("nghostzones", dim, dyndata.nghostzones);
+ printf ("\n");
+ }
+
+}
+
+
+
+static void print_scalar (const char *name, int sc)
+{
+ printf ("%-15s: %3d\n", name, sc);
+}
+
+static void print_scalar_descr (const char *name, int sc, const char *descr)
+{
+ printf ("%-15s: %3d %s\n", name, sc, descr);
+}
+
+static void print_array (const char *name, int dim, const int *arr)
+{
+ int d;
+ printf ("%-15s:", name);
+ for (d=0; d<dim; ++d) {
+ printf (" %3d", arr[d]);
+ }
+ printf ("\n");
+}
+
+
+
+static const char *grouptype_string (int grouptype)
+{
+ switch (grouptype) {
+ case CCTK_SCALAR: return "CCTK_SCALAR";
+ case CCTK_GF: return "CCTK_GF";
+ case CCTK_ARRAY: return "CCTK_ARRAY";
+ }
+ return "[illegal group type]";
+}
+
+static const char *disttype_string (int disttype)
+{
+ switch (disttype) {
+ case CCTK_DISTRIB_CONSTANT: return "CCTK_DISTRIB_CONSTANT";
+ case CCTK_DISTRIB_DEFAULT: return "CCTK_DISTRIB_DEFAULT";
+ }
+ return "[illegal distribution type]";
+}
diff --git a/Carpet/CarpetTest/src/make.code.defn b/Carpet/CarpetTest/src/make.code.defn
new file mode 100644
index 000000000..cb469f0b4
--- /dev/null
+++ b/Carpet/CarpetTest/src/make.code.defn
@@ -0,0 +1,9 @@
+# Main make.code.defn file for thorn CarpetTest
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/make.code.defn,v 1.1 2001/07/04 12:29:55 schnetter Exp $
+
+# Source files in this directory
+SRCS = carpettest_check_sizes.c carpettest_check_arguments.F77
+
+# Subdirectories containing source files
+SUBDIRS =
+
diff --git a/Carpet/CarpetTest/test/arraysizes.par b/Carpet/CarpetTest/test/arraysizes.par
new file mode 100644
index 000000000..81647fe42
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes.par
@@ -0,0 +1,28 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/test/arraysizes.par,v 1.5 2004/03/23 12:01:59 schnetter Exp $
+
+!DESC "Check array sizes"
+
+ActiveThorns = "Carpet CarpetLib CarpetSlab Cart3d IOUtil CarpetIOASCII CarpetTest"
+
+Cactus::cctk_itlast = 0
+
+IO::out_dir = "arraysizes"
+
+IOASCII::out1D_every = 1
+IOASCII::out2D_every = 1
+IOASCII::out3D_every = 1
+
+IOASCII::out1D_xline_yi = 0
+IOASCII::out1D_xline_zi = 0
+IOASCII::out1D_yline_xi = 0
+IOASCII::out1D_yline_zi = 0
+IOASCII::out1D_zline_xi = 0
+IOASCII::out1D_zline_yi = 0
+
+IOASCII::out2D_xyplane_zi = 0
+IOASCII::out2D_xzplane_yi = 0
+IOASCII::out2D_yzplane_xi = 0
+
+IOASCII::out1D_vars = "CarpetTest::gfg CarpetTest::arrg3 CarpetTest::arrg2 CarpetTest::arrg1 CarpetTest::scg"
+IOASCII::out2D_vars = "CarpetTest::gfg CarpetTest::arrg3 CarpetTest::arrg2 CarpetTest::arrg1 CarpetTest::scg"
+IOASCII::out3D_vars = "CarpetTest::gfg CarpetTest::arrg3 CarpetTest::arrg2 CarpetTest::arrg1 CarpetTest::scg"
diff --git a/Carpet/CarpetTest/test/arraysizes/arr1.xl b/Carpet/CarpetTest/test/arraysizes/arr1.xl
new file mode 100644
index 000000000..dd69e4673
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr1.xl
@@ -0,0 +1,15 @@
+# CARPETTEST::arr1 x (arr1)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 1
+0 0 0 0 0 1 0 0 2
+0 0 0 0 0 2 0 0 3
+0 0 0 0 0 3 0 0 4
+0 0 0 0 0 4 0 0 5
+0 0 0 0 0 5 0 0 6
+0 0 0 0 0 6 0 0 7
+0 0 0 0 0 7 0 0 8
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr2.xl b/Carpet/CarpetTest/test/arraysizes/arr2.xl
new file mode 100644
index 000000000..a67e69364
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr2.xl
@@ -0,0 +1,13 @@
+# CARPETTEST::arr2 x (arr2)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 101
+0 0 0 0 0 1 0 0 201
+0 0 0 0 0 2 0 0 301
+0 0 0 0 0 3 0 0 401
+0 0 0 0 0 4 0 0 501
+0 0 0 0 0 5 0 0 601
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr2.xyp b/Carpet/CarpetTest/test/arraysizes/arr2.xyp
new file mode 100644
index 000000000..abd57c4e1
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr2.xyp
@@ -0,0 +1,56 @@
+# CARPETTEST::arr2 x y (arr2)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 101
+0 0 0 0 0 1 0 0 201
+0 0 0 0 0 2 0 0 301
+0 0 0 0 0 3 0 0 401
+0 0 0 0 0 4 0 0 501
+0 0 0 0 0 5 0 0 601
+
+0 0 0 0 0 0 1 0 102
+0 0 0 0 0 1 1 0 202
+0 0 0 0 0 2 1 0 302
+0 0 0 0 0 3 1 0 402
+0 0 0 0 0 4 1 0 502
+0 0 0 0 0 5 1 0 602
+
+0 0 0 0 0 0 2 0 103
+0 0 0 0 0 1 2 0 203
+0 0 0 0 0 2 2 0 303
+0 0 0 0 0 3 2 0 403
+0 0 0 0 0 4 2 0 503
+0 0 0 0 0 5 2 0 603
+
+0 0 0 0 0 0 3 0 104
+0 0 0 0 0 1 3 0 204
+0 0 0 0 0 2 3 0 304
+0 0 0 0 0 3 3 0 404
+0 0 0 0 0 4 3 0 504
+0 0 0 0 0 5 3 0 604
+
+0 0 0 0 0 0 4 0 105
+0 0 0 0 0 1 4 0 205
+0 0 0 0 0 2 4 0 305
+0 0 0 0 0 3 4 0 405
+0 0 0 0 0 4 4 0 505
+0 0 0 0 0 5 4 0 605
+
+0 0 0 0 0 0 5 0 106
+0 0 0 0 0 1 5 0 206
+0 0 0 0 0 2 5 0 306
+0 0 0 0 0 3 5 0 406
+0 0 0 0 0 4 5 0 506
+0 0 0 0 0 5 5 0 606
+
+0 0 0 0 0 0 6 0 107
+0 0 0 0 0 1 6 0 207
+0 0 0 0 0 2 6 0 307
+0 0 0 0 0 3 6 0 407
+0 0 0 0 0 4 6 0 507
+0 0 0 0 0 5 6 0 607
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr2.yl b/Carpet/CarpetTest/test/arraysizes/arr2.yl
new file mode 100644
index 000000000..932503906
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr2.yl
@@ -0,0 +1,14 @@
+# CARPETTEST::arr2 y (arr2)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 101
+0 0 0 0 0 0 1 0 102
+0 0 0 0 0 0 2 0 103
+0 0 0 0 0 0 3 0 104
+0 0 0 0 0 0 4 0 105
+0 0 0 0 0 0 5 0 106
+0 0 0 0 0 0 6 0 107
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.xl b/Carpet/CarpetTest/test/arraysizes/arr3.xl
new file mode 100644
index 000000000..fc87a1d7e
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.xl
@@ -0,0 +1,10 @@
+# CARPETTEST::arr3 x (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.xyp b/Carpet/CarpetTest/test/arraysizes/arr3.xyp
new file mode 100644
index 000000000..297ee34bc
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.xyp
@@ -0,0 +1,23 @@
+# CARPETTEST::arr3 x y (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 1 1 0 20201
+0 0 0 0 0 2 1 0 30201
+
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 1 2 0 20301
+0 0 0 0 0 2 2 0 30301
+
+0 0 0 0 0 0 3 0 10401
+0 0 0 0 0 1 3 0 20401
+0 0 0 0 0 2 3 0 30401
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.xyzv b/Carpet/CarpetTest/test/arraysizes/arr3.xyzv
new file mode 100644
index 000000000..2a1ac20f2
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.xyzv
@@ -0,0 +1,92 @@
+# CARPETTEST::arr3 x y z (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 1 1 0 20201
+0 0 0 0 0 2 1 0 30201
+
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 1 2 0 20301
+0 0 0 0 0 2 2 0 30301
+
+0 0 0 0 0 0 3 0 10401
+0 0 0 0 0 1 3 0 20401
+0 0 0 0 0 2 3 0 30401
+
+
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 1 0 1 20102
+0 0 0 0 0 2 0 1 30102
+
+0 0 0 0 0 0 1 1 10202
+0 0 0 0 0 1 1 1 20202
+0 0 0 0 0 2 1 1 30202
+
+0 0 0 0 0 0 2 1 10302
+0 0 0 0 0 1 2 1 20302
+0 0 0 0 0 2 2 1 30302
+
+0 0 0 0 0 0 3 1 10402
+0 0 0 0 0 1 3 1 20402
+0 0 0 0 0 2 3 1 30402
+
+
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 1 0 2 20103
+0 0 0 0 0 2 0 2 30103
+
+0 0 0 0 0 0 1 2 10203
+0 0 0 0 0 1 1 2 20203
+0 0 0 0 0 2 1 2 30203
+
+0 0 0 0 0 0 2 2 10303
+0 0 0 0 0 1 2 2 20303
+0 0 0 0 0 2 2 2 30303
+
+0 0 0 0 0 0 3 2 10403
+0 0 0 0 0 1 3 2 20403
+0 0 0 0 0 2 3 2 30403
+
+
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 1 0 3 20104
+0 0 0 0 0 2 0 3 30104
+
+0 0 0 0 0 0 1 3 10204
+0 0 0 0 0 1 1 3 20204
+0 0 0 0 0 2 1 3 30204
+
+0 0 0 0 0 0 2 3 10304
+0 0 0 0 0 1 2 3 20304
+0 0 0 0 0 2 2 3 30304
+
+0 0 0 0 0 0 3 3 10404
+0 0 0 0 0 1 3 3 20404
+0 0 0 0 0 2 3 3 30404
+
+
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 1 0 4 20105
+0 0 0 0 0 2 0 4 30105
+
+0 0 0 0 0 0 1 4 10205
+0 0 0 0 0 1 1 4 20205
+0 0 0 0 0 2 1 4 30205
+
+0 0 0 0 0 0 2 4 10305
+0 0 0 0 0 1 2 4 20305
+0 0 0 0 0 2 2 4 30305
+
+0 0 0 0 0 0 3 4 10405
+0 0 0 0 0 1 3 4 20405
+0 0 0 0 0 2 3 4 30405
+
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.xzp b/Carpet/CarpetTest/test/arraysizes/arr3.xzp
new file mode 100644
index 000000000..512c57878
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.xzp
@@ -0,0 +1,27 @@
+# CARPETTEST::arr3 x z (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 1 0 1 20102
+0 0 0 0 0 2 0 1 30102
+
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 1 0 2 20103
+0 0 0 0 0 2 0 2 30103
+
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 1 0 3 20104
+0 0 0 0 0 2 0 3 30104
+
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 1 0 4 20105
+0 0 0 0 0 2 0 4 30105
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.yl b/Carpet/CarpetTest/test/arraysizes/arr3.yl
new file mode 100644
index 000000000..5be860d1c
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.yl
@@ -0,0 +1,11 @@
+# CARPETTEST::arr3 y (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 0 3 0 10401
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.yzp b/Carpet/CarpetTest/test/arraysizes/arr3.yzp
new file mode 100644
index 000000000..5729a9ff9
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.yzp
@@ -0,0 +1,32 @@
+# CARPETTEST::arr3 y z (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 0 3 0 10401
+
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 0 1 1 10202
+0 0 0 0 0 0 2 1 10302
+0 0 0 0 0 0 3 1 10402
+
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 0 1 2 10203
+0 0 0 0 0 0 2 2 10303
+0 0 0 0 0 0 3 2 10403
+
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 0 1 3 10204
+0 0 0 0 0 0 2 3 10304
+0 0 0 0 0 0 3 3 10404
+
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 0 1 4 10205
+0 0 0 0 0 0 2 4 10305
+0 0 0 0 0 0 3 4 10405
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/arr3.zl b/Carpet/CarpetTest/test/arraysizes/arr3.zl
new file mode 100644
index 000000000..7e9b12ae5
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/arr3.zl
@@ -0,0 +1,12 @@
+# CARPETTEST::arr3 z (arr3)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 0 0 4 10105
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.xl b/Carpet/CarpetTest/test/arraysizes/gf.xl
new file mode 100644
index 000000000..158d50c67
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.xl
@@ -0,0 +1,17 @@
+# CARPETTEST::gf x (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+0 0 0 0 0 3 0 0 40101
+0 0 0 0 0 4 0 0 50101
+0 0 0 0 0 5 0 0 60101
+0 0 0 0 0 6 0 0 70101
+0 0 0 0 0 7 0 0 80101
+0 0 0 0 0 8 0 0 90101
+0 0 0 0 0 9 0 0 100101
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.xyp b/Carpet/CarpetTest/test/arraysizes/gf.xyp
new file mode 100644
index 000000000..0597a4bb3
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.xyp
@@ -0,0 +1,117 @@
+# CARPETTEST::gf x y (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+0 0 0 0 0 3 0 0 40101
+0 0 0 0 0 4 0 0 50101
+0 0 0 0 0 5 0 0 60101
+0 0 0 0 0 6 0 0 70101
+0 0 0 0 0 7 0 0 80101
+0 0 0 0 0 8 0 0 90101
+0 0 0 0 0 9 0 0 100101
+
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 1 1 0 20201
+0 0 0 0 0 2 1 0 30201
+0 0 0 0 0 3 1 0 40201
+0 0 0 0 0 4 1 0 50201
+0 0 0 0 0 5 1 0 60201
+0 0 0 0 0 6 1 0 70201
+0 0 0 0 0 7 1 0 80201
+0 0 0 0 0 8 1 0 90201
+0 0 0 0 0 9 1 0 100201
+
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 1 2 0 20301
+0 0 0 0 0 2 2 0 30301
+0 0 0 0 0 3 2 0 40301
+0 0 0 0 0 4 2 0 50301
+0 0 0 0 0 5 2 0 60301
+0 0 0 0 0 6 2 0 70301
+0 0 0 0 0 7 2 0 80301
+0 0 0 0 0 8 2 0 90301
+0 0 0 0 0 9 2 0 100301
+
+0 0 0 0 0 0 3 0 10401
+0 0 0 0 0 1 3 0 20401
+0 0 0 0 0 2 3 0 30401
+0 0 0 0 0 3 3 0 40401
+0 0 0 0 0 4 3 0 50401
+0 0 0 0 0 5 3 0 60401
+0 0 0 0 0 6 3 0 70401
+0 0 0 0 0 7 3 0 80401
+0 0 0 0 0 8 3 0 90401
+0 0 0 0 0 9 3 0 100401
+
+0 0 0 0 0 0 4 0 10501
+0 0 0 0 0 1 4 0 20501
+0 0 0 0 0 2 4 0 30501
+0 0 0 0 0 3 4 0 40501
+0 0 0 0 0 4 4 0 50501
+0 0 0 0 0 5 4 0 60501
+0 0 0 0 0 6 4 0 70501
+0 0 0 0 0 7 4 0 80501
+0 0 0 0 0 8 4 0 90501
+0 0 0 0 0 9 4 0 100501
+
+0 0 0 0 0 0 5 0 10601
+0 0 0 0 0 1 5 0 20601
+0 0 0 0 0 2 5 0 30601
+0 0 0 0 0 3 5 0 40601
+0 0 0 0 0 4 5 0 50601
+0 0 0 0 0 5 5 0 60601
+0 0 0 0 0 6 5 0 70601
+0 0 0 0 0 7 5 0 80601
+0 0 0 0 0 8 5 0 90601
+0 0 0 0 0 9 5 0 100601
+
+0 0 0 0 0 0 6 0 10701
+0 0 0 0 0 1 6 0 20701
+0 0 0 0 0 2 6 0 30701
+0 0 0 0 0 3 6 0 40701
+0 0 0 0 0 4 6 0 50701
+0 0 0 0 0 5 6 0 60701
+0 0 0 0 0 6 6 0 70701
+0 0 0 0 0 7 6 0 80701
+0 0 0 0 0 8 6 0 90701
+0 0 0 0 0 9 6 0 100701
+
+0 0 0 0 0 0 7 0 10801
+0 0 0 0 0 1 7 0 20801
+0 0 0 0 0 2 7 0 30801
+0 0 0 0 0 3 7 0 40801
+0 0 0 0 0 4 7 0 50801
+0 0 0 0 0 5 7 0 60801
+0 0 0 0 0 6 7 0 70801
+0 0 0 0 0 7 7 0 80801
+0 0 0 0 0 8 7 0 90801
+0 0 0 0 0 9 7 0 100801
+
+0 0 0 0 0 0 8 0 10901
+0 0 0 0 0 1 8 0 20901
+0 0 0 0 0 2 8 0 30901
+0 0 0 0 0 3 8 0 40901
+0 0 0 0 0 4 8 0 50901
+0 0 0 0 0 5 8 0 60901
+0 0 0 0 0 6 8 0 70901
+0 0 0 0 0 7 8 0 80901
+0 0 0 0 0 8 8 0 90901
+0 0 0 0 0 9 8 0 100901
+
+0 0 0 0 0 0 9 0 11001
+0 0 0 0 0 1 9 0 21001
+0 0 0 0 0 2 9 0 31001
+0 0 0 0 0 3 9 0 41001
+0 0 0 0 0 4 9 0 51001
+0 0 0 0 0 5 9 0 61001
+0 0 0 0 0 6 9 0 71001
+0 0 0 0 0 7 9 0 81001
+0 0 0 0 0 8 9 0 91001
+0 0 0 0 0 9 9 0 101001
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.xyzv b/Carpet/CarpetTest/test/arraysizes/gf.xyzv
new file mode 100644
index 000000000..b69cd8b78
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.xyzv
@@ -0,0 +1,1117 @@
+# CARPETTEST::gf x y z (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+0 0 0 0 0 3 0 0 40101
+0 0 0 0 0 4 0 0 50101
+0 0 0 0 0 5 0 0 60101
+0 0 0 0 0 6 0 0 70101
+0 0 0 0 0 7 0 0 80101
+0 0 0 0 0 8 0 0 90101
+0 0 0 0 0 9 0 0 100101
+
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 1 1 0 20201
+0 0 0 0 0 2 1 0 30201
+0 0 0 0 0 3 1 0 40201
+0 0 0 0 0 4 1 0 50201
+0 0 0 0 0 5 1 0 60201
+0 0 0 0 0 6 1 0 70201
+0 0 0 0 0 7 1 0 80201
+0 0 0 0 0 8 1 0 90201
+0 0 0 0 0 9 1 0 100201
+
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 1 2 0 20301
+0 0 0 0 0 2 2 0 30301
+0 0 0 0 0 3 2 0 40301
+0 0 0 0 0 4 2 0 50301
+0 0 0 0 0 5 2 0 60301
+0 0 0 0 0 6 2 0 70301
+0 0 0 0 0 7 2 0 80301
+0 0 0 0 0 8 2 0 90301
+0 0 0 0 0 9 2 0 100301
+
+0 0 0 0 0 0 3 0 10401
+0 0 0 0 0 1 3 0 20401
+0 0 0 0 0 2 3 0 30401
+0 0 0 0 0 3 3 0 40401
+0 0 0 0 0 4 3 0 50401
+0 0 0 0 0 5 3 0 60401
+0 0 0 0 0 6 3 0 70401
+0 0 0 0 0 7 3 0 80401
+0 0 0 0 0 8 3 0 90401
+0 0 0 0 0 9 3 0 100401
+
+0 0 0 0 0 0 4 0 10501
+0 0 0 0 0 1 4 0 20501
+0 0 0 0 0 2 4 0 30501
+0 0 0 0 0 3 4 0 40501
+0 0 0 0 0 4 4 0 50501
+0 0 0 0 0 5 4 0 60501
+0 0 0 0 0 6 4 0 70501
+0 0 0 0 0 7 4 0 80501
+0 0 0 0 0 8 4 0 90501
+0 0 0 0 0 9 4 0 100501
+
+0 0 0 0 0 0 5 0 10601
+0 0 0 0 0 1 5 0 20601
+0 0 0 0 0 2 5 0 30601
+0 0 0 0 0 3 5 0 40601
+0 0 0 0 0 4 5 0 50601
+0 0 0 0 0 5 5 0 60601
+0 0 0 0 0 6 5 0 70601
+0 0 0 0 0 7 5 0 80601
+0 0 0 0 0 8 5 0 90601
+0 0 0 0 0 9 5 0 100601
+
+0 0 0 0 0 0 6 0 10701
+0 0 0 0 0 1 6 0 20701
+0 0 0 0 0 2 6 0 30701
+0 0 0 0 0 3 6 0 40701
+0 0 0 0 0 4 6 0 50701
+0 0 0 0 0 5 6 0 60701
+0 0 0 0 0 6 6 0 70701
+0 0 0 0 0 7 6 0 80701
+0 0 0 0 0 8 6 0 90701
+0 0 0 0 0 9 6 0 100701
+
+0 0 0 0 0 0 7 0 10801
+0 0 0 0 0 1 7 0 20801
+0 0 0 0 0 2 7 0 30801
+0 0 0 0 0 3 7 0 40801
+0 0 0 0 0 4 7 0 50801
+0 0 0 0 0 5 7 0 60801
+0 0 0 0 0 6 7 0 70801
+0 0 0 0 0 7 7 0 80801
+0 0 0 0 0 8 7 0 90801
+0 0 0 0 0 9 7 0 100801
+
+0 0 0 0 0 0 8 0 10901
+0 0 0 0 0 1 8 0 20901
+0 0 0 0 0 2 8 0 30901
+0 0 0 0 0 3 8 0 40901
+0 0 0 0 0 4 8 0 50901
+0 0 0 0 0 5 8 0 60901
+0 0 0 0 0 6 8 0 70901
+0 0 0 0 0 7 8 0 80901
+0 0 0 0 0 8 8 0 90901
+0 0 0 0 0 9 8 0 100901
+
+0 0 0 0 0 0 9 0 11001
+0 0 0 0 0 1 9 0 21001
+0 0 0 0 0 2 9 0 31001
+0 0 0 0 0 3 9 0 41001
+0 0 0 0 0 4 9 0 51001
+0 0 0 0 0 5 9 0 61001
+0 0 0 0 0 6 9 0 71001
+0 0 0 0 0 7 9 0 81001
+0 0 0 0 0 8 9 0 91001
+0 0 0 0 0 9 9 0 101001
+
+
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 1 0 1 20102
+0 0 0 0 0 2 0 1 30102
+0 0 0 0 0 3 0 1 40102
+0 0 0 0 0 4 0 1 50102
+0 0 0 0 0 5 0 1 60102
+0 0 0 0 0 6 0 1 70102
+0 0 0 0 0 7 0 1 80102
+0 0 0 0 0 8 0 1 90102
+0 0 0 0 0 9 0 1 100102
+
+0 0 0 0 0 0 1 1 10202
+0 0 0 0 0 1 1 1 20202
+0 0 0 0 0 2 1 1 30202
+0 0 0 0 0 3 1 1 40202
+0 0 0 0 0 4 1 1 50202
+0 0 0 0 0 5 1 1 60202
+0 0 0 0 0 6 1 1 70202
+0 0 0 0 0 7 1 1 80202
+0 0 0 0 0 8 1 1 90202
+0 0 0 0 0 9 1 1 100202
+
+0 0 0 0 0 0 2 1 10302
+0 0 0 0 0 1 2 1 20302
+0 0 0 0 0 2 2 1 30302
+0 0 0 0 0 3 2 1 40302
+0 0 0 0 0 4 2 1 50302
+0 0 0 0 0 5 2 1 60302
+0 0 0 0 0 6 2 1 70302
+0 0 0 0 0 7 2 1 80302
+0 0 0 0 0 8 2 1 90302
+0 0 0 0 0 9 2 1 100302
+
+0 0 0 0 0 0 3 1 10402
+0 0 0 0 0 1 3 1 20402
+0 0 0 0 0 2 3 1 30402
+0 0 0 0 0 3 3 1 40402
+0 0 0 0 0 4 3 1 50402
+0 0 0 0 0 5 3 1 60402
+0 0 0 0 0 6 3 1 70402
+0 0 0 0 0 7 3 1 80402
+0 0 0 0 0 8 3 1 90402
+0 0 0 0 0 9 3 1 100402
+
+0 0 0 0 0 0 4 1 10502
+0 0 0 0 0 1 4 1 20502
+0 0 0 0 0 2 4 1 30502
+0 0 0 0 0 3 4 1 40502
+0 0 0 0 0 4 4 1 50502
+0 0 0 0 0 5 4 1 60502
+0 0 0 0 0 6 4 1 70502
+0 0 0 0 0 7 4 1 80502
+0 0 0 0 0 8 4 1 90502
+0 0 0 0 0 9 4 1 100502
+
+0 0 0 0 0 0 5 1 10602
+0 0 0 0 0 1 5 1 20602
+0 0 0 0 0 2 5 1 30602
+0 0 0 0 0 3 5 1 40602
+0 0 0 0 0 4 5 1 50602
+0 0 0 0 0 5 5 1 60602
+0 0 0 0 0 6 5 1 70602
+0 0 0 0 0 7 5 1 80602
+0 0 0 0 0 8 5 1 90602
+0 0 0 0 0 9 5 1 100602
+
+0 0 0 0 0 0 6 1 10702
+0 0 0 0 0 1 6 1 20702
+0 0 0 0 0 2 6 1 30702
+0 0 0 0 0 3 6 1 40702
+0 0 0 0 0 4 6 1 50702
+0 0 0 0 0 5 6 1 60702
+0 0 0 0 0 6 6 1 70702
+0 0 0 0 0 7 6 1 80702
+0 0 0 0 0 8 6 1 90702
+0 0 0 0 0 9 6 1 100702
+
+0 0 0 0 0 0 7 1 10802
+0 0 0 0 0 1 7 1 20802
+0 0 0 0 0 2 7 1 30802
+0 0 0 0 0 3 7 1 40802
+0 0 0 0 0 4 7 1 50802
+0 0 0 0 0 5 7 1 60802
+0 0 0 0 0 6 7 1 70802
+0 0 0 0 0 7 7 1 80802
+0 0 0 0 0 8 7 1 90802
+0 0 0 0 0 9 7 1 100802
+
+0 0 0 0 0 0 8 1 10902
+0 0 0 0 0 1 8 1 20902
+0 0 0 0 0 2 8 1 30902
+0 0 0 0 0 3 8 1 40902
+0 0 0 0 0 4 8 1 50902
+0 0 0 0 0 5 8 1 60902
+0 0 0 0 0 6 8 1 70902
+0 0 0 0 0 7 8 1 80902
+0 0 0 0 0 8 8 1 90902
+0 0 0 0 0 9 8 1 100902
+
+0 0 0 0 0 0 9 1 11002
+0 0 0 0 0 1 9 1 21002
+0 0 0 0 0 2 9 1 31002
+0 0 0 0 0 3 9 1 41002
+0 0 0 0 0 4 9 1 51002
+0 0 0 0 0 5 9 1 61002
+0 0 0 0 0 6 9 1 71002
+0 0 0 0 0 7 9 1 81002
+0 0 0 0 0 8 9 1 91002
+0 0 0 0 0 9 9 1 101002
+
+
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 1 0 2 20103
+0 0 0 0 0 2 0 2 30103
+0 0 0 0 0 3 0 2 40103
+0 0 0 0 0 4 0 2 50103
+0 0 0 0 0 5 0 2 60103
+0 0 0 0 0 6 0 2 70103
+0 0 0 0 0 7 0 2 80103
+0 0 0 0 0 8 0 2 90103
+0 0 0 0 0 9 0 2 100103
+
+0 0 0 0 0 0 1 2 10203
+0 0 0 0 0 1 1 2 20203
+0 0 0 0 0 2 1 2 30203
+0 0 0 0 0 3 1 2 40203
+0 0 0 0 0 4 1 2 50203
+0 0 0 0 0 5 1 2 60203
+0 0 0 0 0 6 1 2 70203
+0 0 0 0 0 7 1 2 80203
+0 0 0 0 0 8 1 2 90203
+0 0 0 0 0 9 1 2 100203
+
+0 0 0 0 0 0 2 2 10303
+0 0 0 0 0 1 2 2 20303
+0 0 0 0 0 2 2 2 30303
+0 0 0 0 0 3 2 2 40303
+0 0 0 0 0 4 2 2 50303
+0 0 0 0 0 5 2 2 60303
+0 0 0 0 0 6 2 2 70303
+0 0 0 0 0 7 2 2 80303
+0 0 0 0 0 8 2 2 90303
+0 0 0 0 0 9 2 2 100303
+
+0 0 0 0 0 0 3 2 10403
+0 0 0 0 0 1 3 2 20403
+0 0 0 0 0 2 3 2 30403
+0 0 0 0 0 3 3 2 40403
+0 0 0 0 0 4 3 2 50403
+0 0 0 0 0 5 3 2 60403
+0 0 0 0 0 6 3 2 70403
+0 0 0 0 0 7 3 2 80403
+0 0 0 0 0 8 3 2 90403
+0 0 0 0 0 9 3 2 100403
+
+0 0 0 0 0 0 4 2 10503
+0 0 0 0 0 1 4 2 20503
+0 0 0 0 0 2 4 2 30503
+0 0 0 0 0 3 4 2 40503
+0 0 0 0 0 4 4 2 50503
+0 0 0 0 0 5 4 2 60503
+0 0 0 0 0 6 4 2 70503
+0 0 0 0 0 7 4 2 80503
+0 0 0 0 0 8 4 2 90503
+0 0 0 0 0 9 4 2 100503
+
+0 0 0 0 0 0 5 2 10603
+0 0 0 0 0 1 5 2 20603
+0 0 0 0 0 2 5 2 30603
+0 0 0 0 0 3 5 2 40603
+0 0 0 0 0 4 5 2 50603
+0 0 0 0 0 5 5 2 60603
+0 0 0 0 0 6 5 2 70603
+0 0 0 0 0 7 5 2 80603
+0 0 0 0 0 8 5 2 90603
+0 0 0 0 0 9 5 2 100603
+
+0 0 0 0 0 0 6 2 10703
+0 0 0 0 0 1 6 2 20703
+0 0 0 0 0 2 6 2 30703
+0 0 0 0 0 3 6 2 40703
+0 0 0 0 0 4 6 2 50703
+0 0 0 0 0 5 6 2 60703
+0 0 0 0 0 6 6 2 70703
+0 0 0 0 0 7 6 2 80703
+0 0 0 0 0 8 6 2 90703
+0 0 0 0 0 9 6 2 100703
+
+0 0 0 0 0 0 7 2 10803
+0 0 0 0 0 1 7 2 20803
+0 0 0 0 0 2 7 2 30803
+0 0 0 0 0 3 7 2 40803
+0 0 0 0 0 4 7 2 50803
+0 0 0 0 0 5 7 2 60803
+0 0 0 0 0 6 7 2 70803
+0 0 0 0 0 7 7 2 80803
+0 0 0 0 0 8 7 2 90803
+0 0 0 0 0 9 7 2 100803
+
+0 0 0 0 0 0 8 2 10903
+0 0 0 0 0 1 8 2 20903
+0 0 0 0 0 2 8 2 30903
+0 0 0 0 0 3 8 2 40903
+0 0 0 0 0 4 8 2 50903
+0 0 0 0 0 5 8 2 60903
+0 0 0 0 0 6 8 2 70903
+0 0 0 0 0 7 8 2 80903
+0 0 0 0 0 8 8 2 90903
+0 0 0 0 0 9 8 2 100903
+
+0 0 0 0 0 0 9 2 11003
+0 0 0 0 0 1 9 2 21003
+0 0 0 0 0 2 9 2 31003
+0 0 0 0 0 3 9 2 41003
+0 0 0 0 0 4 9 2 51003
+0 0 0 0 0 5 9 2 61003
+0 0 0 0 0 6 9 2 71003
+0 0 0 0 0 7 9 2 81003
+0 0 0 0 0 8 9 2 91003
+0 0 0 0 0 9 9 2 101003
+
+
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 1 0 3 20104
+0 0 0 0 0 2 0 3 30104
+0 0 0 0 0 3 0 3 40104
+0 0 0 0 0 4 0 3 50104
+0 0 0 0 0 5 0 3 60104
+0 0 0 0 0 6 0 3 70104
+0 0 0 0 0 7 0 3 80104
+0 0 0 0 0 8 0 3 90104
+0 0 0 0 0 9 0 3 100104
+
+0 0 0 0 0 0 1 3 10204
+0 0 0 0 0 1 1 3 20204
+0 0 0 0 0 2 1 3 30204
+0 0 0 0 0 3 1 3 40204
+0 0 0 0 0 4 1 3 50204
+0 0 0 0 0 5 1 3 60204
+0 0 0 0 0 6 1 3 70204
+0 0 0 0 0 7 1 3 80204
+0 0 0 0 0 8 1 3 90204
+0 0 0 0 0 9 1 3 100204
+
+0 0 0 0 0 0 2 3 10304
+0 0 0 0 0 1 2 3 20304
+0 0 0 0 0 2 2 3 30304
+0 0 0 0 0 3 2 3 40304
+0 0 0 0 0 4 2 3 50304
+0 0 0 0 0 5 2 3 60304
+0 0 0 0 0 6 2 3 70304
+0 0 0 0 0 7 2 3 80304
+0 0 0 0 0 8 2 3 90304
+0 0 0 0 0 9 2 3 100304
+
+0 0 0 0 0 0 3 3 10404
+0 0 0 0 0 1 3 3 20404
+0 0 0 0 0 2 3 3 30404
+0 0 0 0 0 3 3 3 40404
+0 0 0 0 0 4 3 3 50404
+0 0 0 0 0 5 3 3 60404
+0 0 0 0 0 6 3 3 70404
+0 0 0 0 0 7 3 3 80404
+0 0 0 0 0 8 3 3 90404
+0 0 0 0 0 9 3 3 100404
+
+0 0 0 0 0 0 4 3 10504
+0 0 0 0 0 1 4 3 20504
+0 0 0 0 0 2 4 3 30504
+0 0 0 0 0 3 4 3 40504
+0 0 0 0 0 4 4 3 50504
+0 0 0 0 0 5 4 3 60504
+0 0 0 0 0 6 4 3 70504
+0 0 0 0 0 7 4 3 80504
+0 0 0 0 0 8 4 3 90504
+0 0 0 0 0 9 4 3 100504
+
+0 0 0 0 0 0 5 3 10604
+0 0 0 0 0 1 5 3 20604
+0 0 0 0 0 2 5 3 30604
+0 0 0 0 0 3 5 3 40604
+0 0 0 0 0 4 5 3 50604
+0 0 0 0 0 5 5 3 60604
+0 0 0 0 0 6 5 3 70604
+0 0 0 0 0 7 5 3 80604
+0 0 0 0 0 8 5 3 90604
+0 0 0 0 0 9 5 3 100604
+
+0 0 0 0 0 0 6 3 10704
+0 0 0 0 0 1 6 3 20704
+0 0 0 0 0 2 6 3 30704
+0 0 0 0 0 3 6 3 40704
+0 0 0 0 0 4 6 3 50704
+0 0 0 0 0 5 6 3 60704
+0 0 0 0 0 6 6 3 70704
+0 0 0 0 0 7 6 3 80704
+0 0 0 0 0 8 6 3 90704
+0 0 0 0 0 9 6 3 100704
+
+0 0 0 0 0 0 7 3 10804
+0 0 0 0 0 1 7 3 20804
+0 0 0 0 0 2 7 3 30804
+0 0 0 0 0 3 7 3 40804
+0 0 0 0 0 4 7 3 50804
+0 0 0 0 0 5 7 3 60804
+0 0 0 0 0 6 7 3 70804
+0 0 0 0 0 7 7 3 80804
+0 0 0 0 0 8 7 3 90804
+0 0 0 0 0 9 7 3 100804
+
+0 0 0 0 0 0 8 3 10904
+0 0 0 0 0 1 8 3 20904
+0 0 0 0 0 2 8 3 30904
+0 0 0 0 0 3 8 3 40904
+0 0 0 0 0 4 8 3 50904
+0 0 0 0 0 5 8 3 60904
+0 0 0 0 0 6 8 3 70904
+0 0 0 0 0 7 8 3 80904
+0 0 0 0 0 8 8 3 90904
+0 0 0 0 0 9 8 3 100904
+
+0 0 0 0 0 0 9 3 11004
+0 0 0 0 0 1 9 3 21004
+0 0 0 0 0 2 9 3 31004
+0 0 0 0 0 3 9 3 41004
+0 0 0 0 0 4 9 3 51004
+0 0 0 0 0 5 9 3 61004
+0 0 0 0 0 6 9 3 71004
+0 0 0 0 0 7 9 3 81004
+0 0 0 0 0 8 9 3 91004
+0 0 0 0 0 9 9 3 101004
+
+
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 1 0 4 20105
+0 0 0 0 0 2 0 4 30105
+0 0 0 0 0 3 0 4 40105
+0 0 0 0 0 4 0 4 50105
+0 0 0 0 0 5 0 4 60105
+0 0 0 0 0 6 0 4 70105
+0 0 0 0 0 7 0 4 80105
+0 0 0 0 0 8 0 4 90105
+0 0 0 0 0 9 0 4 100105
+
+0 0 0 0 0 0 1 4 10205
+0 0 0 0 0 1 1 4 20205
+0 0 0 0 0 2 1 4 30205
+0 0 0 0 0 3 1 4 40205
+0 0 0 0 0 4 1 4 50205
+0 0 0 0 0 5 1 4 60205
+0 0 0 0 0 6 1 4 70205
+0 0 0 0 0 7 1 4 80205
+0 0 0 0 0 8 1 4 90205
+0 0 0 0 0 9 1 4 100205
+
+0 0 0 0 0 0 2 4 10305
+0 0 0 0 0 1 2 4 20305
+0 0 0 0 0 2 2 4 30305
+0 0 0 0 0 3 2 4 40305
+0 0 0 0 0 4 2 4 50305
+0 0 0 0 0 5 2 4 60305
+0 0 0 0 0 6 2 4 70305
+0 0 0 0 0 7 2 4 80305
+0 0 0 0 0 8 2 4 90305
+0 0 0 0 0 9 2 4 100305
+
+0 0 0 0 0 0 3 4 10405
+0 0 0 0 0 1 3 4 20405
+0 0 0 0 0 2 3 4 30405
+0 0 0 0 0 3 3 4 40405
+0 0 0 0 0 4 3 4 50405
+0 0 0 0 0 5 3 4 60405
+0 0 0 0 0 6 3 4 70405
+0 0 0 0 0 7 3 4 80405
+0 0 0 0 0 8 3 4 90405
+0 0 0 0 0 9 3 4 100405
+
+0 0 0 0 0 0 4 4 10505
+0 0 0 0 0 1 4 4 20505
+0 0 0 0 0 2 4 4 30505
+0 0 0 0 0 3 4 4 40505
+0 0 0 0 0 4 4 4 50505
+0 0 0 0 0 5 4 4 60505
+0 0 0 0 0 6 4 4 70505
+0 0 0 0 0 7 4 4 80505
+0 0 0 0 0 8 4 4 90505
+0 0 0 0 0 9 4 4 100505
+
+0 0 0 0 0 0 5 4 10605
+0 0 0 0 0 1 5 4 20605
+0 0 0 0 0 2 5 4 30605
+0 0 0 0 0 3 5 4 40605
+0 0 0 0 0 4 5 4 50605
+0 0 0 0 0 5 5 4 60605
+0 0 0 0 0 6 5 4 70605
+0 0 0 0 0 7 5 4 80605
+0 0 0 0 0 8 5 4 90605
+0 0 0 0 0 9 5 4 100605
+
+0 0 0 0 0 0 6 4 10705
+0 0 0 0 0 1 6 4 20705
+0 0 0 0 0 2 6 4 30705
+0 0 0 0 0 3 6 4 40705
+0 0 0 0 0 4 6 4 50705
+0 0 0 0 0 5 6 4 60705
+0 0 0 0 0 6 6 4 70705
+0 0 0 0 0 7 6 4 80705
+0 0 0 0 0 8 6 4 90705
+0 0 0 0 0 9 6 4 100705
+
+0 0 0 0 0 0 7 4 10805
+0 0 0 0 0 1 7 4 20805
+0 0 0 0 0 2 7 4 30805
+0 0 0 0 0 3 7 4 40805
+0 0 0 0 0 4 7 4 50805
+0 0 0 0 0 5 7 4 60805
+0 0 0 0 0 6 7 4 70805
+0 0 0 0 0 7 7 4 80805
+0 0 0 0 0 8 7 4 90805
+0 0 0 0 0 9 7 4 100805
+
+0 0 0 0 0 0 8 4 10905
+0 0 0 0 0 1 8 4 20905
+0 0 0 0 0 2 8 4 30905
+0 0 0 0 0 3 8 4 40905
+0 0 0 0 0 4 8 4 50905
+0 0 0 0 0 5 8 4 60905
+0 0 0 0 0 6 8 4 70905
+0 0 0 0 0 7 8 4 80905
+0 0 0 0 0 8 8 4 90905
+0 0 0 0 0 9 8 4 100905
+
+0 0 0 0 0 0 9 4 11005
+0 0 0 0 0 1 9 4 21005
+0 0 0 0 0 2 9 4 31005
+0 0 0 0 0 3 9 4 41005
+0 0 0 0 0 4 9 4 51005
+0 0 0 0 0 5 9 4 61005
+0 0 0 0 0 6 9 4 71005
+0 0 0 0 0 7 9 4 81005
+0 0 0 0 0 8 9 4 91005
+0 0 0 0 0 9 9 4 101005
+
+
+0 0 0 0 0 0 0 5 10106
+0 0 0 0 0 1 0 5 20106
+0 0 0 0 0 2 0 5 30106
+0 0 0 0 0 3 0 5 40106
+0 0 0 0 0 4 0 5 50106
+0 0 0 0 0 5 0 5 60106
+0 0 0 0 0 6 0 5 70106
+0 0 0 0 0 7 0 5 80106
+0 0 0 0 0 8 0 5 90106
+0 0 0 0 0 9 0 5 100106
+
+0 0 0 0 0 0 1 5 10206
+0 0 0 0 0 1 1 5 20206
+0 0 0 0 0 2 1 5 30206
+0 0 0 0 0 3 1 5 40206
+0 0 0 0 0 4 1 5 50206
+0 0 0 0 0 5 1 5 60206
+0 0 0 0 0 6 1 5 70206
+0 0 0 0 0 7 1 5 80206
+0 0 0 0 0 8 1 5 90206
+0 0 0 0 0 9 1 5 100206
+
+0 0 0 0 0 0 2 5 10306
+0 0 0 0 0 1 2 5 20306
+0 0 0 0 0 2 2 5 30306
+0 0 0 0 0 3 2 5 40306
+0 0 0 0 0 4 2 5 50306
+0 0 0 0 0 5 2 5 60306
+0 0 0 0 0 6 2 5 70306
+0 0 0 0 0 7 2 5 80306
+0 0 0 0 0 8 2 5 90306
+0 0 0 0 0 9 2 5 100306
+
+0 0 0 0 0 0 3 5 10406
+0 0 0 0 0 1 3 5 20406
+0 0 0 0 0 2 3 5 30406
+0 0 0 0 0 3 3 5 40406
+0 0 0 0 0 4 3 5 50406
+0 0 0 0 0 5 3 5 60406
+0 0 0 0 0 6 3 5 70406
+0 0 0 0 0 7 3 5 80406
+0 0 0 0 0 8 3 5 90406
+0 0 0 0 0 9 3 5 100406
+
+0 0 0 0 0 0 4 5 10506
+0 0 0 0 0 1 4 5 20506
+0 0 0 0 0 2 4 5 30506
+0 0 0 0 0 3 4 5 40506
+0 0 0 0 0 4 4 5 50506
+0 0 0 0 0 5 4 5 60506
+0 0 0 0 0 6 4 5 70506
+0 0 0 0 0 7 4 5 80506
+0 0 0 0 0 8 4 5 90506
+0 0 0 0 0 9 4 5 100506
+
+0 0 0 0 0 0 5 5 10606
+0 0 0 0 0 1 5 5 20606
+0 0 0 0 0 2 5 5 30606
+0 0 0 0 0 3 5 5 40606
+0 0 0 0 0 4 5 5 50606
+0 0 0 0 0 5 5 5 60606
+0 0 0 0 0 6 5 5 70606
+0 0 0 0 0 7 5 5 80606
+0 0 0 0 0 8 5 5 90606
+0 0 0 0 0 9 5 5 100606
+
+0 0 0 0 0 0 6 5 10706
+0 0 0 0 0 1 6 5 20706
+0 0 0 0 0 2 6 5 30706
+0 0 0 0 0 3 6 5 40706
+0 0 0 0 0 4 6 5 50706
+0 0 0 0 0 5 6 5 60706
+0 0 0 0 0 6 6 5 70706
+0 0 0 0 0 7 6 5 80706
+0 0 0 0 0 8 6 5 90706
+0 0 0 0 0 9 6 5 100706
+
+0 0 0 0 0 0 7 5 10806
+0 0 0 0 0 1 7 5 20806
+0 0 0 0 0 2 7 5 30806
+0 0 0 0 0 3 7 5 40806
+0 0 0 0 0 4 7 5 50806
+0 0 0 0 0 5 7 5 60806
+0 0 0 0 0 6 7 5 70806
+0 0 0 0 0 7 7 5 80806
+0 0 0 0 0 8 7 5 90806
+0 0 0 0 0 9 7 5 100806
+
+0 0 0 0 0 0 8 5 10906
+0 0 0 0 0 1 8 5 20906
+0 0 0 0 0 2 8 5 30906
+0 0 0 0 0 3 8 5 40906
+0 0 0 0 0 4 8 5 50906
+0 0 0 0 0 5 8 5 60906
+0 0 0 0 0 6 8 5 70906
+0 0 0 0 0 7 8 5 80906
+0 0 0 0 0 8 8 5 90906
+0 0 0 0 0 9 8 5 100906
+
+0 0 0 0 0 0 9 5 11006
+0 0 0 0 0 1 9 5 21006
+0 0 0 0 0 2 9 5 31006
+0 0 0 0 0 3 9 5 41006
+0 0 0 0 0 4 9 5 51006
+0 0 0 0 0 5 9 5 61006
+0 0 0 0 0 6 9 5 71006
+0 0 0 0 0 7 9 5 81006
+0 0 0 0 0 8 9 5 91006
+0 0 0 0 0 9 9 5 101006
+
+
+0 0 0 0 0 0 0 6 10107
+0 0 0 0 0 1 0 6 20107
+0 0 0 0 0 2 0 6 30107
+0 0 0 0 0 3 0 6 40107
+0 0 0 0 0 4 0 6 50107
+0 0 0 0 0 5 0 6 60107
+0 0 0 0 0 6 0 6 70107
+0 0 0 0 0 7 0 6 80107
+0 0 0 0 0 8 0 6 90107
+0 0 0 0 0 9 0 6 100107
+
+0 0 0 0 0 0 1 6 10207
+0 0 0 0 0 1 1 6 20207
+0 0 0 0 0 2 1 6 30207
+0 0 0 0 0 3 1 6 40207
+0 0 0 0 0 4 1 6 50207
+0 0 0 0 0 5 1 6 60207
+0 0 0 0 0 6 1 6 70207
+0 0 0 0 0 7 1 6 80207
+0 0 0 0 0 8 1 6 90207
+0 0 0 0 0 9 1 6 100207
+
+0 0 0 0 0 0 2 6 10307
+0 0 0 0 0 1 2 6 20307
+0 0 0 0 0 2 2 6 30307
+0 0 0 0 0 3 2 6 40307
+0 0 0 0 0 4 2 6 50307
+0 0 0 0 0 5 2 6 60307
+0 0 0 0 0 6 2 6 70307
+0 0 0 0 0 7 2 6 80307
+0 0 0 0 0 8 2 6 90307
+0 0 0 0 0 9 2 6 100307
+
+0 0 0 0 0 0 3 6 10407
+0 0 0 0 0 1 3 6 20407
+0 0 0 0 0 2 3 6 30407
+0 0 0 0 0 3 3 6 40407
+0 0 0 0 0 4 3 6 50407
+0 0 0 0 0 5 3 6 60407
+0 0 0 0 0 6 3 6 70407
+0 0 0 0 0 7 3 6 80407
+0 0 0 0 0 8 3 6 90407
+0 0 0 0 0 9 3 6 100407
+
+0 0 0 0 0 0 4 6 10507
+0 0 0 0 0 1 4 6 20507
+0 0 0 0 0 2 4 6 30507
+0 0 0 0 0 3 4 6 40507
+0 0 0 0 0 4 4 6 50507
+0 0 0 0 0 5 4 6 60507
+0 0 0 0 0 6 4 6 70507
+0 0 0 0 0 7 4 6 80507
+0 0 0 0 0 8 4 6 90507
+0 0 0 0 0 9 4 6 100507
+
+0 0 0 0 0 0 5 6 10607
+0 0 0 0 0 1 5 6 20607
+0 0 0 0 0 2 5 6 30607
+0 0 0 0 0 3 5 6 40607
+0 0 0 0 0 4 5 6 50607
+0 0 0 0 0 5 5 6 60607
+0 0 0 0 0 6 5 6 70607
+0 0 0 0 0 7 5 6 80607
+0 0 0 0 0 8 5 6 90607
+0 0 0 0 0 9 5 6 100607
+
+0 0 0 0 0 0 6 6 10707
+0 0 0 0 0 1 6 6 20707
+0 0 0 0 0 2 6 6 30707
+0 0 0 0 0 3 6 6 40707
+0 0 0 0 0 4 6 6 50707
+0 0 0 0 0 5 6 6 60707
+0 0 0 0 0 6 6 6 70707
+0 0 0 0 0 7 6 6 80707
+0 0 0 0 0 8 6 6 90707
+0 0 0 0 0 9 6 6 100707
+
+0 0 0 0 0 0 7 6 10807
+0 0 0 0 0 1 7 6 20807
+0 0 0 0 0 2 7 6 30807
+0 0 0 0 0 3 7 6 40807
+0 0 0 0 0 4 7 6 50807
+0 0 0 0 0 5 7 6 60807
+0 0 0 0 0 6 7 6 70807
+0 0 0 0 0 7 7 6 80807
+0 0 0 0 0 8 7 6 90807
+0 0 0 0 0 9 7 6 100807
+
+0 0 0 0 0 0 8 6 10907
+0 0 0 0 0 1 8 6 20907
+0 0 0 0 0 2 8 6 30907
+0 0 0 0 0 3 8 6 40907
+0 0 0 0 0 4 8 6 50907
+0 0 0 0 0 5 8 6 60907
+0 0 0 0 0 6 8 6 70907
+0 0 0 0 0 7 8 6 80907
+0 0 0 0 0 8 8 6 90907
+0 0 0 0 0 9 8 6 100907
+
+0 0 0 0 0 0 9 6 11007
+0 0 0 0 0 1 9 6 21007
+0 0 0 0 0 2 9 6 31007
+0 0 0 0 0 3 9 6 41007
+0 0 0 0 0 4 9 6 51007
+0 0 0 0 0 5 9 6 61007
+0 0 0 0 0 6 9 6 71007
+0 0 0 0 0 7 9 6 81007
+0 0 0 0 0 8 9 6 91007
+0 0 0 0 0 9 9 6 101007
+
+
+0 0 0 0 0 0 0 7 10108
+0 0 0 0 0 1 0 7 20108
+0 0 0 0 0 2 0 7 30108
+0 0 0 0 0 3 0 7 40108
+0 0 0 0 0 4 0 7 50108
+0 0 0 0 0 5 0 7 60108
+0 0 0 0 0 6 0 7 70108
+0 0 0 0 0 7 0 7 80108
+0 0 0 0 0 8 0 7 90108
+0 0 0 0 0 9 0 7 100108
+
+0 0 0 0 0 0 1 7 10208
+0 0 0 0 0 1 1 7 20208
+0 0 0 0 0 2 1 7 30208
+0 0 0 0 0 3 1 7 40208
+0 0 0 0 0 4 1 7 50208
+0 0 0 0 0 5 1 7 60208
+0 0 0 0 0 6 1 7 70208
+0 0 0 0 0 7 1 7 80208
+0 0 0 0 0 8 1 7 90208
+0 0 0 0 0 9 1 7 100208
+
+0 0 0 0 0 0 2 7 10308
+0 0 0 0 0 1 2 7 20308
+0 0 0 0 0 2 2 7 30308
+0 0 0 0 0 3 2 7 40308
+0 0 0 0 0 4 2 7 50308
+0 0 0 0 0 5 2 7 60308
+0 0 0 0 0 6 2 7 70308
+0 0 0 0 0 7 2 7 80308
+0 0 0 0 0 8 2 7 90308
+0 0 0 0 0 9 2 7 100308
+
+0 0 0 0 0 0 3 7 10408
+0 0 0 0 0 1 3 7 20408
+0 0 0 0 0 2 3 7 30408
+0 0 0 0 0 3 3 7 40408
+0 0 0 0 0 4 3 7 50408
+0 0 0 0 0 5 3 7 60408
+0 0 0 0 0 6 3 7 70408
+0 0 0 0 0 7 3 7 80408
+0 0 0 0 0 8 3 7 90408
+0 0 0 0 0 9 3 7 100408
+
+0 0 0 0 0 0 4 7 10508
+0 0 0 0 0 1 4 7 20508
+0 0 0 0 0 2 4 7 30508
+0 0 0 0 0 3 4 7 40508
+0 0 0 0 0 4 4 7 50508
+0 0 0 0 0 5 4 7 60508
+0 0 0 0 0 6 4 7 70508
+0 0 0 0 0 7 4 7 80508
+0 0 0 0 0 8 4 7 90508
+0 0 0 0 0 9 4 7 100508
+
+0 0 0 0 0 0 5 7 10608
+0 0 0 0 0 1 5 7 20608
+0 0 0 0 0 2 5 7 30608
+0 0 0 0 0 3 5 7 40608
+0 0 0 0 0 4 5 7 50608
+0 0 0 0 0 5 5 7 60608
+0 0 0 0 0 6 5 7 70608
+0 0 0 0 0 7 5 7 80608
+0 0 0 0 0 8 5 7 90608
+0 0 0 0 0 9 5 7 100608
+
+0 0 0 0 0 0 6 7 10708
+0 0 0 0 0 1 6 7 20708
+0 0 0 0 0 2 6 7 30708
+0 0 0 0 0 3 6 7 40708
+0 0 0 0 0 4 6 7 50708
+0 0 0 0 0 5 6 7 60708
+0 0 0 0 0 6 6 7 70708
+0 0 0 0 0 7 6 7 80708
+0 0 0 0 0 8 6 7 90708
+0 0 0 0 0 9 6 7 100708
+
+0 0 0 0 0 0 7 7 10808
+0 0 0 0 0 1 7 7 20808
+0 0 0 0 0 2 7 7 30808
+0 0 0 0 0 3 7 7 40808
+0 0 0 0 0 4 7 7 50808
+0 0 0 0 0 5 7 7 60808
+0 0 0 0 0 6 7 7 70808
+0 0 0 0 0 7 7 7 80808
+0 0 0 0 0 8 7 7 90808
+0 0 0 0 0 9 7 7 100808
+
+0 0 0 0 0 0 8 7 10908
+0 0 0 0 0 1 8 7 20908
+0 0 0 0 0 2 8 7 30908
+0 0 0 0 0 3 8 7 40908
+0 0 0 0 0 4 8 7 50908
+0 0 0 0 0 5 8 7 60908
+0 0 0 0 0 6 8 7 70908
+0 0 0 0 0 7 8 7 80908
+0 0 0 0 0 8 8 7 90908
+0 0 0 0 0 9 8 7 100908
+
+0 0 0 0 0 0 9 7 11008
+0 0 0 0 0 1 9 7 21008
+0 0 0 0 0 2 9 7 31008
+0 0 0 0 0 3 9 7 41008
+0 0 0 0 0 4 9 7 51008
+0 0 0 0 0 5 9 7 61008
+0 0 0 0 0 6 9 7 71008
+0 0 0 0 0 7 9 7 81008
+0 0 0 0 0 8 9 7 91008
+0 0 0 0 0 9 9 7 101008
+
+
+0 0 0 0 0 0 0 8 10109
+0 0 0 0 0 1 0 8 20109
+0 0 0 0 0 2 0 8 30109
+0 0 0 0 0 3 0 8 40109
+0 0 0 0 0 4 0 8 50109
+0 0 0 0 0 5 0 8 60109
+0 0 0 0 0 6 0 8 70109
+0 0 0 0 0 7 0 8 80109
+0 0 0 0 0 8 0 8 90109
+0 0 0 0 0 9 0 8 100109
+
+0 0 0 0 0 0 1 8 10209
+0 0 0 0 0 1 1 8 20209
+0 0 0 0 0 2 1 8 30209
+0 0 0 0 0 3 1 8 40209
+0 0 0 0 0 4 1 8 50209
+0 0 0 0 0 5 1 8 60209
+0 0 0 0 0 6 1 8 70209
+0 0 0 0 0 7 1 8 80209
+0 0 0 0 0 8 1 8 90209
+0 0 0 0 0 9 1 8 100209
+
+0 0 0 0 0 0 2 8 10309
+0 0 0 0 0 1 2 8 20309
+0 0 0 0 0 2 2 8 30309
+0 0 0 0 0 3 2 8 40309
+0 0 0 0 0 4 2 8 50309
+0 0 0 0 0 5 2 8 60309
+0 0 0 0 0 6 2 8 70309
+0 0 0 0 0 7 2 8 80309
+0 0 0 0 0 8 2 8 90309
+0 0 0 0 0 9 2 8 100309
+
+0 0 0 0 0 0 3 8 10409
+0 0 0 0 0 1 3 8 20409
+0 0 0 0 0 2 3 8 30409
+0 0 0 0 0 3 3 8 40409
+0 0 0 0 0 4 3 8 50409
+0 0 0 0 0 5 3 8 60409
+0 0 0 0 0 6 3 8 70409
+0 0 0 0 0 7 3 8 80409
+0 0 0 0 0 8 3 8 90409
+0 0 0 0 0 9 3 8 100409
+
+0 0 0 0 0 0 4 8 10509
+0 0 0 0 0 1 4 8 20509
+0 0 0 0 0 2 4 8 30509
+0 0 0 0 0 3 4 8 40509
+0 0 0 0 0 4 4 8 50509
+0 0 0 0 0 5 4 8 60509
+0 0 0 0 0 6 4 8 70509
+0 0 0 0 0 7 4 8 80509
+0 0 0 0 0 8 4 8 90509
+0 0 0 0 0 9 4 8 100509
+
+0 0 0 0 0 0 5 8 10609
+0 0 0 0 0 1 5 8 20609
+0 0 0 0 0 2 5 8 30609
+0 0 0 0 0 3 5 8 40609
+0 0 0 0 0 4 5 8 50609
+0 0 0 0 0 5 5 8 60609
+0 0 0 0 0 6 5 8 70609
+0 0 0 0 0 7 5 8 80609
+0 0 0 0 0 8 5 8 90609
+0 0 0 0 0 9 5 8 100609
+
+0 0 0 0 0 0 6 8 10709
+0 0 0 0 0 1 6 8 20709
+0 0 0 0 0 2 6 8 30709
+0 0 0 0 0 3 6 8 40709
+0 0 0 0 0 4 6 8 50709
+0 0 0 0 0 5 6 8 60709
+0 0 0 0 0 6 6 8 70709
+0 0 0 0 0 7 6 8 80709
+0 0 0 0 0 8 6 8 90709
+0 0 0 0 0 9 6 8 100709
+
+0 0 0 0 0 0 7 8 10809
+0 0 0 0 0 1 7 8 20809
+0 0 0 0 0 2 7 8 30809
+0 0 0 0 0 3 7 8 40809
+0 0 0 0 0 4 7 8 50809
+0 0 0 0 0 5 7 8 60809
+0 0 0 0 0 6 7 8 70809
+0 0 0 0 0 7 7 8 80809
+0 0 0 0 0 8 7 8 90809
+0 0 0 0 0 9 7 8 100809
+
+0 0 0 0 0 0 8 8 10909
+0 0 0 0 0 1 8 8 20909
+0 0 0 0 0 2 8 8 30909
+0 0 0 0 0 3 8 8 40909
+0 0 0 0 0 4 8 8 50909
+0 0 0 0 0 5 8 8 60909
+0 0 0 0 0 6 8 8 70909
+0 0 0 0 0 7 8 8 80909
+0 0 0 0 0 8 8 8 90909
+0 0 0 0 0 9 8 8 100909
+
+0 0 0 0 0 0 9 8 11009
+0 0 0 0 0 1 9 8 21009
+0 0 0 0 0 2 9 8 31009
+0 0 0 0 0 3 9 8 41009
+0 0 0 0 0 4 9 8 51009
+0 0 0 0 0 5 9 8 61009
+0 0 0 0 0 6 9 8 71009
+0 0 0 0 0 7 9 8 81009
+0 0 0 0 0 8 9 8 91009
+0 0 0 0 0 9 9 8 101009
+
+
+0 0 0 0 0 0 0 9 10110
+0 0 0 0 0 1 0 9 20110
+0 0 0 0 0 2 0 9 30110
+0 0 0 0 0 3 0 9 40110
+0 0 0 0 0 4 0 9 50110
+0 0 0 0 0 5 0 9 60110
+0 0 0 0 0 6 0 9 70110
+0 0 0 0 0 7 0 9 80110
+0 0 0 0 0 8 0 9 90110
+0 0 0 0 0 9 0 9 100110
+
+0 0 0 0 0 0 1 9 10210
+0 0 0 0 0 1 1 9 20210
+0 0 0 0 0 2 1 9 30210
+0 0 0 0 0 3 1 9 40210
+0 0 0 0 0 4 1 9 50210
+0 0 0 0 0 5 1 9 60210
+0 0 0 0 0 6 1 9 70210
+0 0 0 0 0 7 1 9 80210
+0 0 0 0 0 8 1 9 90210
+0 0 0 0 0 9 1 9 100210
+
+0 0 0 0 0 0 2 9 10310
+0 0 0 0 0 1 2 9 20310
+0 0 0 0 0 2 2 9 30310
+0 0 0 0 0 3 2 9 40310
+0 0 0 0 0 4 2 9 50310
+0 0 0 0 0 5 2 9 60310
+0 0 0 0 0 6 2 9 70310
+0 0 0 0 0 7 2 9 80310
+0 0 0 0 0 8 2 9 90310
+0 0 0 0 0 9 2 9 100310
+
+0 0 0 0 0 0 3 9 10410
+0 0 0 0 0 1 3 9 20410
+0 0 0 0 0 2 3 9 30410
+0 0 0 0 0 3 3 9 40410
+0 0 0 0 0 4 3 9 50410
+0 0 0 0 0 5 3 9 60410
+0 0 0 0 0 6 3 9 70410
+0 0 0 0 0 7 3 9 80410
+0 0 0 0 0 8 3 9 90410
+0 0 0 0 0 9 3 9 100410
+
+0 0 0 0 0 0 4 9 10510
+0 0 0 0 0 1 4 9 20510
+0 0 0 0 0 2 4 9 30510
+0 0 0 0 0 3 4 9 40510
+0 0 0 0 0 4 4 9 50510
+0 0 0 0 0 5 4 9 60510
+0 0 0 0 0 6 4 9 70510
+0 0 0 0 0 7 4 9 80510
+0 0 0 0 0 8 4 9 90510
+0 0 0 0 0 9 4 9 100510
+
+0 0 0 0 0 0 5 9 10610
+0 0 0 0 0 1 5 9 20610
+0 0 0 0 0 2 5 9 30610
+0 0 0 0 0 3 5 9 40610
+0 0 0 0 0 4 5 9 50610
+0 0 0 0 0 5 5 9 60610
+0 0 0 0 0 6 5 9 70610
+0 0 0 0 0 7 5 9 80610
+0 0 0 0 0 8 5 9 90610
+0 0 0 0 0 9 5 9 100610
+
+0 0 0 0 0 0 6 9 10710
+0 0 0 0 0 1 6 9 20710
+0 0 0 0 0 2 6 9 30710
+0 0 0 0 0 3 6 9 40710
+0 0 0 0 0 4 6 9 50710
+0 0 0 0 0 5 6 9 60710
+0 0 0 0 0 6 6 9 70710
+0 0 0 0 0 7 6 9 80710
+0 0 0 0 0 8 6 9 90710
+0 0 0 0 0 9 6 9 100710
+
+0 0 0 0 0 0 7 9 10810
+0 0 0 0 0 1 7 9 20810
+0 0 0 0 0 2 7 9 30810
+0 0 0 0 0 3 7 9 40810
+0 0 0 0 0 4 7 9 50810
+0 0 0 0 0 5 7 9 60810
+0 0 0 0 0 6 7 9 70810
+0 0 0 0 0 7 7 9 80810
+0 0 0 0 0 8 7 9 90810
+0 0 0 0 0 9 7 9 100810
+
+0 0 0 0 0 0 8 9 10910
+0 0 0 0 0 1 8 9 20910
+0 0 0 0 0 2 8 9 30910
+0 0 0 0 0 3 8 9 40910
+0 0 0 0 0 4 8 9 50910
+0 0 0 0 0 5 8 9 60910
+0 0 0 0 0 6 8 9 70910
+0 0 0 0 0 7 8 9 80910
+0 0 0 0 0 8 8 9 90910
+0 0 0 0 0 9 8 9 100910
+
+0 0 0 0 0 0 9 9 11010
+0 0 0 0 0 1 9 9 21010
+0 0 0 0 0 2 9 9 31010
+0 0 0 0 0 3 9 9 41010
+0 0 0 0 0 4 9 9 51010
+0 0 0 0 0 5 9 9 61010
+0 0 0 0 0 6 9 9 71010
+0 0 0 0 0 7 9 9 81010
+0 0 0 0 0 8 9 9 91010
+0 0 0 0 0 9 9 9 101010
+
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.xzp b/Carpet/CarpetTest/test/arraysizes/gf.xzp
new file mode 100644
index 000000000..d1389962b
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.xzp
@@ -0,0 +1,117 @@
+# CARPETTEST::gf x z (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 1 0 0 20101
+0 0 0 0 0 2 0 0 30101
+0 0 0 0 0 3 0 0 40101
+0 0 0 0 0 4 0 0 50101
+0 0 0 0 0 5 0 0 60101
+0 0 0 0 0 6 0 0 70101
+0 0 0 0 0 7 0 0 80101
+0 0 0 0 0 8 0 0 90101
+0 0 0 0 0 9 0 0 100101
+
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 1 0 1 20102
+0 0 0 0 0 2 0 1 30102
+0 0 0 0 0 3 0 1 40102
+0 0 0 0 0 4 0 1 50102
+0 0 0 0 0 5 0 1 60102
+0 0 0 0 0 6 0 1 70102
+0 0 0 0 0 7 0 1 80102
+0 0 0 0 0 8 0 1 90102
+0 0 0 0 0 9 0 1 100102
+
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 1 0 2 20103
+0 0 0 0 0 2 0 2 30103
+0 0 0 0 0 3 0 2 40103
+0 0 0 0 0 4 0 2 50103
+0 0 0 0 0 5 0 2 60103
+0 0 0 0 0 6 0 2 70103
+0 0 0 0 0 7 0 2 80103
+0 0 0 0 0 8 0 2 90103
+0 0 0 0 0 9 0 2 100103
+
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 1 0 3 20104
+0 0 0 0 0 2 0 3 30104
+0 0 0 0 0 3 0 3 40104
+0 0 0 0 0 4 0 3 50104
+0 0 0 0 0 5 0 3 60104
+0 0 0 0 0 6 0 3 70104
+0 0 0 0 0 7 0 3 80104
+0 0 0 0 0 8 0 3 90104
+0 0 0 0 0 9 0 3 100104
+
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 1 0 4 20105
+0 0 0 0 0 2 0 4 30105
+0 0 0 0 0 3 0 4 40105
+0 0 0 0 0 4 0 4 50105
+0 0 0 0 0 5 0 4 60105
+0 0 0 0 0 6 0 4 70105
+0 0 0 0 0 7 0 4 80105
+0 0 0 0 0 8 0 4 90105
+0 0 0 0 0 9 0 4 100105
+
+0 0 0 0 0 0 0 5 10106
+0 0 0 0 0 1 0 5 20106
+0 0 0 0 0 2 0 5 30106
+0 0 0 0 0 3 0 5 40106
+0 0 0 0 0 4 0 5 50106
+0 0 0 0 0 5 0 5 60106
+0 0 0 0 0 6 0 5 70106
+0 0 0 0 0 7 0 5 80106
+0 0 0 0 0 8 0 5 90106
+0 0 0 0 0 9 0 5 100106
+
+0 0 0 0 0 0 0 6 10107
+0 0 0 0 0 1 0 6 20107
+0 0 0 0 0 2 0 6 30107
+0 0 0 0 0 3 0 6 40107
+0 0 0 0 0 4 0 6 50107
+0 0 0 0 0 5 0 6 60107
+0 0 0 0 0 6 0 6 70107
+0 0 0 0 0 7 0 6 80107
+0 0 0 0 0 8 0 6 90107
+0 0 0 0 0 9 0 6 100107
+
+0 0 0 0 0 0 0 7 10108
+0 0 0 0 0 1 0 7 20108
+0 0 0 0 0 2 0 7 30108
+0 0 0 0 0 3 0 7 40108
+0 0 0 0 0 4 0 7 50108
+0 0 0 0 0 5 0 7 60108
+0 0 0 0 0 6 0 7 70108
+0 0 0 0 0 7 0 7 80108
+0 0 0 0 0 8 0 7 90108
+0 0 0 0 0 9 0 7 100108
+
+0 0 0 0 0 0 0 8 10109
+0 0 0 0 0 1 0 8 20109
+0 0 0 0 0 2 0 8 30109
+0 0 0 0 0 3 0 8 40109
+0 0 0 0 0 4 0 8 50109
+0 0 0 0 0 5 0 8 60109
+0 0 0 0 0 6 0 8 70109
+0 0 0 0 0 7 0 8 80109
+0 0 0 0 0 8 0 8 90109
+0 0 0 0 0 9 0 8 100109
+
+0 0 0 0 0 0 0 9 10110
+0 0 0 0 0 1 0 9 20110
+0 0 0 0 0 2 0 9 30110
+0 0 0 0 0 3 0 9 40110
+0 0 0 0 0 4 0 9 50110
+0 0 0 0 0 5 0 9 60110
+0 0 0 0 0 6 0 9 70110
+0 0 0 0 0 7 0 9 80110
+0 0 0 0 0 8 0 9 90110
+0 0 0 0 0 9 0 9 100110
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.yl b/Carpet/CarpetTest/test/arraysizes/gf.yl
new file mode 100644
index 000000000..4a6518845
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.yl
@@ -0,0 +1,17 @@
+# CARPETTEST::gf y (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 0 3 0 10401
+0 0 0 0 0 0 4 0 10501
+0 0 0 0 0 0 5 0 10601
+0 0 0 0 0 0 6 0 10701
+0 0 0 0 0 0 7 0 10801
+0 0 0 0 0 0 8 0 10901
+0 0 0 0 0 0 9 0 11001
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.yzp b/Carpet/CarpetTest/test/arraysizes/gf.yzp
new file mode 100644
index 000000000..0ae900432
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.yzp
@@ -0,0 +1,117 @@
+# CARPETTEST::gf y z (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 0 1 0 10201
+0 0 0 0 0 0 2 0 10301
+0 0 0 0 0 0 3 0 10401
+0 0 0 0 0 0 4 0 10501
+0 0 0 0 0 0 5 0 10601
+0 0 0 0 0 0 6 0 10701
+0 0 0 0 0 0 7 0 10801
+0 0 0 0 0 0 8 0 10901
+0 0 0 0 0 0 9 0 11001
+
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 0 1 1 10202
+0 0 0 0 0 0 2 1 10302
+0 0 0 0 0 0 3 1 10402
+0 0 0 0 0 0 4 1 10502
+0 0 0 0 0 0 5 1 10602
+0 0 0 0 0 0 6 1 10702
+0 0 0 0 0 0 7 1 10802
+0 0 0 0 0 0 8 1 10902
+0 0 0 0 0 0 9 1 11002
+
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 0 1 2 10203
+0 0 0 0 0 0 2 2 10303
+0 0 0 0 0 0 3 2 10403
+0 0 0 0 0 0 4 2 10503
+0 0 0 0 0 0 5 2 10603
+0 0 0 0 0 0 6 2 10703
+0 0 0 0 0 0 7 2 10803
+0 0 0 0 0 0 8 2 10903
+0 0 0 0 0 0 9 2 11003
+
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 0 1 3 10204
+0 0 0 0 0 0 2 3 10304
+0 0 0 0 0 0 3 3 10404
+0 0 0 0 0 0 4 3 10504
+0 0 0 0 0 0 5 3 10604
+0 0 0 0 0 0 6 3 10704
+0 0 0 0 0 0 7 3 10804
+0 0 0 0 0 0 8 3 10904
+0 0 0 0 0 0 9 3 11004
+
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 0 1 4 10205
+0 0 0 0 0 0 2 4 10305
+0 0 0 0 0 0 3 4 10405
+0 0 0 0 0 0 4 4 10505
+0 0 0 0 0 0 5 4 10605
+0 0 0 0 0 0 6 4 10705
+0 0 0 0 0 0 7 4 10805
+0 0 0 0 0 0 8 4 10905
+0 0 0 0 0 0 9 4 11005
+
+0 0 0 0 0 0 0 5 10106
+0 0 0 0 0 0 1 5 10206
+0 0 0 0 0 0 2 5 10306
+0 0 0 0 0 0 3 5 10406
+0 0 0 0 0 0 4 5 10506
+0 0 0 0 0 0 5 5 10606
+0 0 0 0 0 0 6 5 10706
+0 0 0 0 0 0 7 5 10806
+0 0 0 0 0 0 8 5 10906
+0 0 0 0 0 0 9 5 11006
+
+0 0 0 0 0 0 0 6 10107
+0 0 0 0 0 0 1 6 10207
+0 0 0 0 0 0 2 6 10307
+0 0 0 0 0 0 3 6 10407
+0 0 0 0 0 0 4 6 10507
+0 0 0 0 0 0 5 6 10607
+0 0 0 0 0 0 6 6 10707
+0 0 0 0 0 0 7 6 10807
+0 0 0 0 0 0 8 6 10907
+0 0 0 0 0 0 9 6 11007
+
+0 0 0 0 0 0 0 7 10108
+0 0 0 0 0 0 1 7 10208
+0 0 0 0 0 0 2 7 10308
+0 0 0 0 0 0 3 7 10408
+0 0 0 0 0 0 4 7 10508
+0 0 0 0 0 0 5 7 10608
+0 0 0 0 0 0 6 7 10708
+0 0 0 0 0 0 7 7 10808
+0 0 0 0 0 0 8 7 10908
+0 0 0 0 0 0 9 7 11008
+
+0 0 0 0 0 0 0 8 10109
+0 0 0 0 0 0 1 8 10209
+0 0 0 0 0 0 2 8 10309
+0 0 0 0 0 0 3 8 10409
+0 0 0 0 0 0 4 8 10509
+0 0 0 0 0 0 5 8 10609
+0 0 0 0 0 0 6 8 10709
+0 0 0 0 0 0 7 8 10809
+0 0 0 0 0 0 8 8 10909
+0 0 0 0 0 0 9 8 11009
+
+0 0 0 0 0 0 0 9 10110
+0 0 0 0 0 0 1 9 10210
+0 0 0 0 0 0 2 9 10310
+0 0 0 0 0 0 3 9 10410
+0 0 0 0 0 0 4 9 10510
+0 0 0 0 0 0 5 9 10610
+0 0 0 0 0 0 6 9 10710
+0 0 0 0 0 0 7 9 10810
+0 0 0 0 0 0 8 9 10910
+0 0 0 0 0 0 9 9 11010
+
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/gf.zl b/Carpet/CarpetTest/test/arraysizes/gf.zl
new file mode 100644
index 000000000..9c2434cc5
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/gf.zl
@@ -0,0 +1,17 @@
+# CARPETTEST::gf z (gf)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 10101
+0 0 0 0 0 0 0 1 10102
+0 0 0 0 0 0 0 2 10103
+0 0 0 0 0 0 0 3 10104
+0 0 0 0 0 0 0 4 10105
+0 0 0 0 0 0 0 5 10106
+0 0 0 0 0 0 0 6 10107
+0 0 0 0 0 0 0 7 10108
+0 0 0 0 0 0 0 8 10109
+0 0 0 0 0 0 0 9 10110
+
+
diff --git a/Carpet/CarpetTest/test/arraysizes/sc.xl b/Carpet/CarpetTest/test/arraysizes/sc.xl
new file mode 100644
index 000000000..1cdac03cf
--- /dev/null
+++ b/Carpet/CarpetTest/test/arraysizes/sc.xl
@@ -0,0 +1,8 @@
+# CARPETTEST::sc x (sc)
+#
+# iteration 0
+# time level 0 refinement level 0 component 0 multigrid level 0
+# column format: it tl rl c ml x y z data
+0 0 0 0 0 0 0 0 42
+
+
diff --git a/Carpet/CarpetWeb/CarpetMonth/index.html b/Carpet/CarpetWeb/CarpetMonth/index.html
new file mode 100644
index 000000000..b967aacfb
--- /dev/null
+++ b/Carpet/CarpetWeb/CarpetMonth/index.html
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
+ <title>Carpet Month</title>
+ </head>
+
+ <body>
+ <h1>Carpet Month</h1>
+
+ <hr />
+
+
+
+<h2>Items on the agenda during Carpet Month</h2>
+
+<h3>Physics done</h3>
+
+<ol>
+ <li>Periodic boundaries</li>
+ <li>Robust stability</li>
+ <li>Coordinates and symmetry conditions</li>
+ <li>Vector grid functions (worked all the time)</li>
+ <li>"Universal" mode (now called "global mode" and "level mode")</li>
+</ol>
+
+
+
+<h3>Physics in the works</h3>
+
+<ol>
+ <li><b>Documentation</b></li>
+ <li>Gauge wave (travelling)</li>
+ <li>Binary black holes</li>
+ <li>Convergence tests in GR</li>
+ <li>Scalar fields (with Francisco)</li>
+ <li>Interpolator</li>
+ <li>Checkpoint / restart</li>
+ <li>Excision</li>
+</ol>
+
+
+
+<h3>Physics to be done</h3>
+
+<ol>
+ <li>Compile and run on
+ <ul>
+ <li>Platinum</li>
+ <li>Titan</li>
+ <li>Peyote</li>
+ <li>Lemieux</li>
+ <li>Loslobos</li>
+ <li>Seaborg</li>
+ <li>psi</li>
+ <li>Hitachi</li>
+ <li>OSX Darwin 6.5</li>
+ </ul></li>
+ <li>Parallel performance</li>
+ <li>Testsuites</li>
+</ol>
+
+
+
+<h3>Physics to dream about</h3>
+
+<ol>
+ <li>Other gauge waves</li>
+ <li>Brill waves (requires elliptic solver)</li>
+ <li>Basic hydro (requires prolongation operators)</li>
+ <li>Output formats</li>
+ <li>FlexIO</li>
+ <li>Viz methods</li>
+ <li>Elliptic solvers</li>
+ <li>Cell centering</li>
+ <li>Reduction operators</li>
+ <li>Prolongation operators</li>
+ <li>Progressive FMR</li>
+ <li>AMR</li>
+ <li>Automatic convergence testing</li>
+ <li>User friendliness</li>
+ <li>Compile Carpet + AHFinderDirect + Lorene together.</li>
+ <li>Custom refinement</li>
+ <li>Callbacks
+ <ul>
+ <li>when creating a new grid</li>
+ <li>after SYNCing</li>
+ </ul></li>
+</ol>
+
+
+
+<h3>People to work on this</h3>
+
+<ul>
+ <li>Erik Schnetter</li>
+ <li>Jonathan Thornburg</li>
+ <li>Ian Hawke</li>
+ <li>Thomas Radke</li>
+ <li>Scott Hawley <b>(away)</b></li>
+ <li>Christian Ott <b>(away)</b></li>
+ <li>Werner Benger</li>
+ <li>Ralf Kähler</li>
+</ul>
+
+
+
+<h3>Tentative schedule with people (outdated):</h3>
+
+<table>
+
+ <tr>
+ <td>
+ <b>Priority</b> (1-3)
+ </td>
+ <td>
+ <b>Topic</b>
+ </td>
+ <td>
+ <b>When</b> (Start, duration)
+ </td>
+ <td>
+ <b>Who</b>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <b>1</b>
+
+ </td>
+ <td>
+ Documentation
+ </td>
+ <td>
+ Ongoing, from the beginning
+ </td>
+ <td>
+ ES, IH, JT
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 2
+ </td>
+ <td>
+ Interpolator
+ </td>
+ <td>
+ Simple version: from start, 2 weeks.
+ </td>
+ <td>
+ ES, JT, TR
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 2
+ </td>
+ <td>
+ Compile on various platforms
+ </td>
+ <td>
+ From 1 week ongoing
+ </td>
+ <td>
+ ES, IH, SH, CO, PD, JT, ...
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 2
+ </td>
+ <td>
+ Testsuites
+ </td>
+ <td>
+ From 2 weeks
+ </td>
+ <td>
+ Everybody
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Checkpoint / restart
+ </td>
+ <td>
+ Simple version: from start, 2 weeks (max).
+ </td>
+ <td>
+ ES, TR, IH
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+
+ </td>
+ <td>
+ Parallel version: from 2 weeks, ongoing.
+ </td>
+ <td>
+ ES, TR, JS?, WB?, RK?
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ FlexIO / output / Viz
+ </td>
+ <td>
+ From 1 week ongoing
+ </td>
+ <td>
+ ES, TR, JS, WB, RK, ...
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Elliptic solvers
+ </td>
+ <td>
+ Ongoing
+ </td>
+ <td>
+ ES, JT, SH, PD, DP, IH, ...
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Parallel performance
+ </td>
+ <td>
+ From 2 weeks, ongoing
+ </td>
+ <td>
+ ES, SH, IH, TR, ...?
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Prolongation operators
+ </td>
+ <td>
+ Ongoing (shouldn't take long)
+ </td>
+ <td>
+ ES, IH, ...
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Remove no-op warnings (e.g., prolongation of INT GF's)
+ </td>
+ <td>
+ Ongoing
+ </td>
+ <td>
+ ES, ...
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Vector grid functions
+ </td>
+ <td>
+ From 1 week (shouldn't take long)
+ </td>
+ <td>
+ ES, IH, ...
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ 3
+ </td>
+ <td>
+ Excision
+ </td>
+ <td>
+ From 2 weeks (shouldn't take long)
+ </td>
+ <td>
+ ES, IH, DP, JT, ...
+ </td>
+ </tr>
+
+</table>
+
+
+
+ <hr />
+ <a href="http://www.carpetcode.org/">[Go to carpetcode.org]</a>
+ <address><a href="mailto:schnetter@uni-tuebingen.de">Erik Schnetter</a></address>
+<p>
+<!-- Created: Wed Sep 6 20:44:31 EDT 2000 -->
+<!-- hhmts start -->
+Last modified: Tue Aug 12 22:31:42 CEST 2003
+<!-- hhmts end -->
+</p>
+ </body>
+</html>
diff --git a/Carpet/CarpetWeb/Makefile b/Carpet/CarpetWeb/Makefile
new file mode 100644
index 000000000..fbbe2dcaf
--- /dev/null
+++ b/Carpet/CarpetWeb/Makefile
@@ -0,0 +1,6 @@
+all:
+
+sync:
+ rsync -a -v -z --exclude "*~" --exclude doxygen --delete -e ssh ./ carpet@www.carpetcode.org:www.carpetcode.org/htdocs
+
+.PSEUDO: all sync
diff --git a/Carpet/CarpetWeb/bugs.html b/Carpet/CarpetWeb/bugs.html
new file mode 100644
index 000000000..f0eeb609a
--- /dev/null
+++ b/Carpet/CarpetWeb/bugs.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
+ <title>Bugs in the Carpet</title>
+ </head>
+
+ <body>
+ <h1>Bugs in the Carpet</h1>
+
+ <p>As Carpet is being looked at (and used?) by more and more
+ people, they find more and more things that don't work as
+ expected, or are plain broken. We want to correct these. Here is
+ a list of the currently known problems.</p>
+
+ <ul>
+ <li>Vector grid functions are not contiguous in memory</li>
+ </ul>
+
+ <hr />
+
+ <p>
+ <a href="http://www.xemacs.org/About/created.html"><img
+ src="cbxSmall.jpg" alt="Created with XEmacs!" height="36"
+ width="100" /></a>
+
+ <a href="http://www.anybrowser.org/campaign/"><img
+ src="logoab8.png" alt="Best Viewed With Any Browser" height="31"
+ width="88" /></a>
+
+ <a href="http://validator.w3.org/check/referer"><img
+ src="valid-xhtml10.png" alt="Valid XHTML 1.0!" height="31"
+ width="88" /></a>
+ </p>
+
+ <address><a href="mailto:schnetter@uni-tuebingen.de">Erik Schnetter</a></address>
+<p>
+<!-- Created: Thu Aug 14 20:16:15 CEST 2003 -->
+<!-- hhmts start -->
+Last modified: Thu Aug 14 20:38:08 CEST 2003
+<!-- hhmts end -->
+</p>
+ </body>
+</html>
diff --git a/Carpet/CarpetWeb/cbxSmall.jpg b/Carpet/CarpetWeb/cbxSmall.jpg
new file mode 100644
index 000000000..d7291c3fb
--- /dev/null
+++ b/Carpet/CarpetWeb/cbxSmall.jpg
Binary files differ
diff --git a/Carpet/CarpetWeb/doc/documentation.ps b/Carpet/CarpetWeb/doc/documentation.ps
new file mode 100644
index 000000000..4eb199555
--- /dev/null
+++ b/Carpet/CarpetWeb/doc/documentation.ps
@@ -0,0 +1,5526 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
+%%Title: documentation.dvi
+%%Pages: 10
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: CMR17 CMR12 CMMI12 CMBX9 CMR9 CMBX12 CMR10 CMTI10
+%%+ CMCSC10 CMTT10 CMITT10 CMMI10 CMMI7 CMSY7 CMR7 CMSY10 CMBX10
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips documentation.dvi -o documentation.ps
+%DVIPSParameters: dpi=600, compressed
+%DVIPSSource: TeX output 2003.05.03:1520
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: f7b6d320.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
+% cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
+% cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10
+% cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10
+%
+/TeXf7b6d320Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand
+/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
+/period /slash /zero /one /two /three /four /five /six /seven /eight
+/nine /colon /semicolon /exclamdown /equal /questiondown /question /at
+/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X
+/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: aae443f0.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10
+%
+/TeXaae443f0Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa
+/lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi
+/omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf
+/arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft
+/arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle
+/twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle
+/sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash
+/greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow
+/slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p
+/q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector
+/tie /psi /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta
+/theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon
+/phi /chi /psi /tie /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 74afc74c.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10
+%
+/TeX74afc74cEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /sterling /percent
+/ampersand /quoteright /parenleft /parenright /asterisk /plus /comma
+/hyphen /period /slash /zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /exclamdown /equal /questiondown /question
+/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 0ef0afca.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmr5
+%
+/TeX0ef0afcaEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi
+/dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls
+/ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright
+/numbersign /dollar /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft
+/bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h
+/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash
+/hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda
+/Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup
+/arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj
+/grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe
+/oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 09fbbfac.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9
+/TeX09fbbfacEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown
+/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla
+/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam
+/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
+/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
+/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
+/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
+/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
+/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
+/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: b6a4d7c7.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmitt10
+%
+/TeXb6a4d7c7Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi
+/dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls
+/ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam /quotedbl
+/numbersign /sterling /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
+/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
+/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
+/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
+/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
+/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
+/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: bbad153f.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9
+%
+/TeXbbad153fEncoding [
+/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
+/plusminus /minusplus /circleplus /circleminus /circlemultiply
+/circledivide /circledot /circlecopyrt /openbullet /bullet
+/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal
+/greaterequal /precedesequal /followsequal /similar /approxequal
+/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows
+/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast
+/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup
+/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional
+/prime /infinity /element /owner /triangle /triangleinv /negationslash
+/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur
+/latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection
+/unionmulti /logicaland /logicalor /turnstileleft /turnstileright
+/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright
+/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv
+/backslash /wreathproduct /radical /coproduct /nabla /integral
+/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section
+/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
+/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef
+/circlemultiply /circledivide /circledot /circlecopyrt /openbullet
+/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset
+/lessequal /greaterequal /precedesequal /followsequal /similar
+/approxequal /propersubset /propersuperset /lessmuch /greatermuch
+/precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ /DvipsToPDF { 72.27 mul Resolution div } def /PDFToDvips { 72.27 div
+Resolution mul } def /HyperBorder { 1 PDFToDvips } def /H.V {pdf@hoff
+pdf@voff null} def /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def
+/H.S { currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF
+/pdf@hoff exch def HyperBorder sub /pdf@llx exch def } def /H.L { 2
+sub dup /HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint
+HyperBaseDvips sub /pdf@ury exch def /pdf@urx exch def } def /H.A {
+H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt
+sub sub /pdf@voff exch def } def /H.R { currentpoint HyperBorder sub
+/pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch
+pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def } def systemdict
+/pdfmark known not {userdict /pdfmark systemdict /cleartomark get put}
+if
+
+@fedspecial end
+%%BeginFont: CMBX10
+%!PS-AdobeFont-1.1: CMBX10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:06
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMBX10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-301 -250 1164 946}readonly def
+/UniqueID 5000768 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
+7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
+77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
+2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
+FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
+DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
+7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
+9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
+CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
+6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
+E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
+8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
+3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
+EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
+0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
+4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
+1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
+757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
+0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
+6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
+E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
+61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
+92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
+EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
+43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
+FCD9A4F194FA648F9FC0971734BB69CB75348A88CC361FF06E984C86AF0EA429
+DAA5808CCE3583664AEFE0C59EDA04A147FB51227A5AB0C13942323E9B3733DD
+3EE7DF7F774DE5D0D0980DA8C0192983F1E3EF18481EAF1EFEDA0068BCBDB28A
+7FC7D9191EFFC574588DEC1E180341DC959F8EF56ED5B19F50AA82A4653649B7
+CDCA11A1FF27AFA7FF189A7E8A7C0E94AEEC901DDEB541604DEC0FE90FA0685A
+FDEADEC90DFCF25D074ECABBEF0F518FF620E5DC46EEFB4EFF37B0A862754A46
+567F057C58A40714D712EA5A6F783D9A1C7AECD26458D64C2C203CBD059208D6
+F0AC8240A745488259475394331C07AE954D0E9CA3C467D52C6CE4D2A88834CE
+A8080C90A3D588D03885566B2E3741E7102381706FAF2CF674AD2CF636B21F3A
+4AFCA5BE7EF0EF0AFF8D3E86184D202DB2A604EF829AB3A8CE59C3435203B9B1
+DF6D4D9072461F746B195404E168882E7A8D19838D3B0D2E3FE7A0A34BEE528C
+AAC354769FDED60D2579D19856BE19DDFCDEBABDD9819120AD8F1C30036A9650
+1525A1F34CF876D717F5BB665C5C28DB9369F7CF4AABA63E272C9C2E794C9A47
+907DD0D581FC2918B682FADA1E3A01E3196B921FF78C085F63A338201F0FB1F8
+BBBFE9606A51416D767D1F6F8B0638F5FBE8DA00619EAC1B3A7A4376135FB148
+F506D88E3259D9E4B6BC9F7C427969A05C4724F440CA075123BA15AA1280188F
+9969CE4D13F0E26A3ED368659B937BE4A9DC752D7690056ABC5A22F60A668D5F
+39C9BF9D2881DEA6255133A272E9E782C3DB39C2721920D20C636A3AAAEA3274
+474DD92A522C41BCC160FB1D79C130216C2D17C277A517A84CB49C6E7631B841
+CDB145AABA5A831F26C7FC9A8B19B3999A6697A845AF1FA486A2B36900589DDD
+D56FEED8DB7CA8856A41A32B27AA81A345831F935A958CC2D7AA320A195B7AF1
+CCE46D69A9E54CE3315A4EA1B609F6C6C8F2636FB548CEBA7F1BEFDABC0A80B5
+695B5B5E96EF4904DB23B6D652E67D3145999D392516F22F6BD199FD55D10933
+4CFE595E725B35956A059EAF34A2C3A26B82630B5B4572E504B4F843F7EB000C
+BD14DD5D5F5C097192DC61B521AA66724290030EF8C70AE1C5704D6A8F1EC61E
+3F527BB0E6260943DFB1B2883387C75713423EABA1BA4C17D10D1A0C6A012990
+358F44DDF1E5C907D581D1064484FB77439F81E85C0185C573CC4F460A4041DC
+738D8ED174889BC04EF654D148866E6B7B899AB09074BC0EA9EA18E8229CCF1B
+3ADBB3D49F4C8D7D3C6855585C9A8D2AC5F3CA9CFE4C28F7A07AF0E575487EF5
+C3E300C93B8F8F5A263E4218C4A7304209FBF563E7AFC317F021CAF7E5BEDDB3
+B20DCA3070D31347A0CEFDA2007435CB5A407BCA937386F47755EB9DB0D003AB
+9F82E7D0865AAAE900ABEE5B6E444E809E4B10C8302CDCFF8538EF680A7D8B96
+C2C0B6C1E20E33F540765DEFEECA4BE6A406E48F6325A82BCEF6BFF60AB28BE3
+DFE4C7DF111620E99613FA68BD62DF083F42E19E0FC1DAAD39CF5B39C9D15AEA
+AAFFE14F11F4442F93DB1A44AA320506C916AAA01B573CDEC700B0EDB158F7AD
+75C8EACB329FE17A40CD9B0ED657EEB701F895A8C973B34BBFB8BBC9ECEB00E6
+8D48D725AB630CA43581DE8C919CF17FD8E50E3CBFE786AA2DBDF2522E316232
+91072570B045C5FE4BF4B2DA252B4BCF571C4796C50EA6C1170937A35576DEA8
+3693721550547BEFCB7281B656F7ECECE01BE35972FDC0963533BE4E6218BF8D
+74D6F164158DE6F9FDC890AB1F2DE46F05FC2F7201E9E3F8D7B6EED156D4D7D0
+76CA56CC27972B4BB5D844F0715A8F315DA1627C6E1EAAB6A2FC1B2539DF9F2D
+32546FE8CE9E58AC4BFC530EB634249EC290F1BF1029E7EEC0F29D35E992A2E2
+ABE54B3B9A85CD0092AB16A27340E6236BA97A53B42F237F70934F64D3354C3F
+AFABCD1A1D429435EFCA638135319725B4CCA3CB8AB5B1FDBFDDC58681FB1675
+6474875AA44B1C287F08C35CBD3193AF1C40AC9CB1325E3733695E41AED75418
+F89AB5418855F7F888900DA23D1F5E4C3AE5222C9DDB1F07D39C7AABE563A8E0
+E7CB906DEDF6527DC38DCF8B3C28D5B612583FE4D1AC51653D251A1613544A95
+E6555BEDFED94FC6ECD635731BD0C33CB9BC98FBDD794C47A756565018FB7CA6
+4CC29FA3B6D015062AEDDBD74BBE440729CAC222282C230466E1565ED16F80E3
+D245729F3908E82DAA12C738328F24911F4B37FC3B73922DAB646F504E864901
+7FC6D2F306654148AC50A566CF49A2D3C47F40D7E74A518C740D4E209C5EB594
+B1B5B0B132DA87EF82D88D1C8DC6F93F2B4BA854756FF6CA5E272F15C3793597
+CEA3A0B6B893B356E15A4C5F2A97D3390BE0C1EF2F342062BE3FA17447139089
+73BBD2AA76EE380481F3A918BC690D2B081CA89F36D8EC7049F1B5476FC1F122
+7C26F64E4A44B936479F77B1987D858F05238F53DA8D0665F81B154839A6667C
+7F50972594E5A3537AFEA8E93B7AEFBD3AA596332A25176264B0128B10477EAB
+E6EFB5C250C48DA04CA9E6B1392B45C8BABC0D4DCDC5873391C5B5886AE40200
+E84AF8CC19AC4D3F56343710F6244BB63555FD433354F5E9FBB671F2B94DAE4D
+2BFCA17CF39E2AFC2F2C23B978480CF0EF866A87AD69B22CDA98845CFAA1F509
+3045C65036CBAD06C4AC62FA63B7CF4500BE98A7A282A38A0F47E4F8E97354B8
+838445943847E70998133269B6675B90F334D3712536EAE5500C35BC1B624DA7
+EA4F08EA931E52A71C3401728919CE45F7A0778B4A9090EB9C90441CEA964EB5
+6BBD611E254EA159DAD28F63280FE10B4310535DCEFB254F1BB5DC96E149D828
+012C009FDFAAC8DCB4FC6D05C32AAEF9CD62E09ECAC010DD118CDE2636F2EFD7
+E06EDCDBD1708F299D8E63708055A9EE406D4EB1AEE53BAC799179B5D3B7DFC5
+B277DCC04117624C1244DFB181106982F576085BB00769503880AEF390B15A57
+EA942861205FE331E06B5D3E5BC56B19F13022EF7C24339C17E82B02AAF4E4F8
+6C619F0C7685409AD850F947D10A6D3C0A1E87C18D08C301224AE2997FB20246
+BA24A2A2E2C9D71B5B4993E1465007707788BB549C1618D3DEA99298C7F56E32
+0C03731D75275DD56CB0EBFA2DC055CFFCEB0237DCBFFED8657C1D995DD165BF
+3E4AC14C81EEF4843DF1BCA520DF14A45BF26681CBC21A291E0819BC5D279B58
+C82EA479A411633508B7B4EB002CCF7B6F37662F3B25C1568D54E0E1AA56CCBF
+A54237C74D8822E011047738868095CC99A8C08AE6F36E854B4C5857ACC8811D
+2FBB0E444340A61FEEEAABAF88AC68645829CB5B6947F1BC72009704E484211D
+E40C7CCFFF4DBBDA8DED3E0F858AB20F85D52FC9E0DD0336B239C55C654B86EB
+02E3259772F81F0C146F66E66C49E42108E6F7C5236DBA6FCC620C8CA0FD2CC5
+E989B406B7A0F96FA1FA8BF9B263D2448209497303D370A8361CF870EA8C91F7
+7E35FA41A7E2D6C26BE24C9341160B875A3042DEDC1F3D027880E2E74E2301A2
+6101EFA7B8EB1CAB4286B77F73BB93719A22BFD57609251A0247D80C117F05C4
+B3DC2CD2FC713704934BFFCBF0625882D0015F9B07A01AC68A7F30E59667667B
+F47D5FF94350BE67698844E8EDEEA4E69F2BF44547AE459B53969F544D53461F
+1AABD70D531C6A9E8013B24FF34C86381E123296119799D45C3F675BF67676CB
+F0191994DDAC75F7EFDA7B1BDF952E5F6BFBEE4885C7675CC50B22CAEFE8BECD
+0D286A72727B018861805E5D51DCF0E9076B3C66D35A22609E8A20861B33E429
+5AF85F6453BF23E9576104A27A1E7211696AFB0C7E542C10CE962C3FFC18DFE0
+49C737943D2484528F769C17ABFE7BAD92F5E3C323BECEF539666D575977715C
+D247DEA25D4689518FB80173915421C8901F255389EBF48F190DEB4A1A915D18
+9B94FAE37AC86554CC2784AEB393C719424F1CEEB0366BBBD4C91D4578DC5C68
+787904465BE1DDB2FE3DD3897B25AA89FB4556C4C06053DDB60854A45EB4A6B4
+047460880237B773E044B6DA6970DE6B2EC776472E955FA85CEB99F30B97C210
+E685C30FAFE08A34DEA9517975148BA776C2FA66EAAAE6E85604D97ED64953C8
+402518CD8AACDDDEAC9DBE5BB343254E1C5509DC1BE406AECE5ABD1D79C75C6C
+BC89953606E25AB6DF7A311B4A53EFCB7918467CAA0FCFC1DC02F28064F10FF9
+20816E0635F4D66D234F499C009A95E6A24FC623067010D7E6D5F959332248D6
+5FB884389007569CABD15D09330B9FC0E939B2684F3FD092B5CC2AD023A75028
+7D0E6DC5FC7969B3F809362B5201CF82DEA32154F76B4184F8D0857D97384480
+59DA5290E6BAB3446941F7C4ED741349B409E3A8181F398D8C227C1E62856AB1
+722982C7A8CE3406768796AFC50097EDA703ABD0A1E3A7D836D080A8E4E2EFBB
+9F03B4935048AD73A5FE68E9EA63CFF232323F8DD229FB5DD7336BD33272834D
+6B292F98DD362BD2B43E379AD0F5B8079720BCB8C23FE3E795858E00B02DCBF4
+244F917F6BD04BB9ADF003D2375B0DFC2C77D217BDBE4A16E28A83FFC98AE13F
+6F62EC8B905089AD8869683858F95A8BDCC304F6E198A4D3ABC1080AF2DBDFEC
+1630351D742E58A27C2159DE1FE572BCCF3A057C5CC0439DF3602F3CF53E7BAD
+28CC355E117EA3F165E82DBB139170356DC8D19DD572725FD9D251E05B4397B1
+5D8275BD2F46F224B5E6A3098FF2F3CF23C03FE974AAB16DD591D324E13350C1
+783C47A54DDA92E41223339FD885E24741018301FB9401520DCA09BCA6D57681
+1075100804990EB6B4A75BAC2BA6F58D5CDCA604B7C7792771CA6D5C113557F9
+AD54BD1E2BF734152FBB6E4EFE43D596149EC4A3C0598F86453BFD65475C49CA
+9BD8769474A33C127984D7B3AF8480B52025F816AA8A8FE7AD9BC8253BA36674
+F9F2F46F8737B93D65C838A7EDF6B054397E8B1CA665EF4D93098AD128CF8537
+B3E068BC55104759BE8097C9725430C220E53BB3F4A03DD9AAADAD7ACBE4FCD1
+F73C403B484BE8318D40CDDC1F978BA7FF55FBA5AB4AE07B783E4EF1F0F84D67
+B6BDF65B2C23F63F6A9F571E9D3A0693387820C4BC4E9164637A3023C65E34E3
+315A930B54D90388F98CBBE8DFD05EAFDFD47E943C21B5F8024D12129B5EEB45
+6B64E197B3B7E4454F699DF2E8FAF0B8187DA20C70F6F207C8C8F609667DE1D9
+5390477A6875526E28270D1E63EBCD6227A378CEA032064F960FE596AD9AB4B5
+A6BD2D9098B1D73A801D0A401A1F5D5BC7EC33F6851C123FA2A43C6F159DDBDD
+B12EE2A4FEEB571EB1F2B48EF4540E01545AAB9915FF45B5E9589613BAC37E35
+D3DDE8DBDFD5D87AB7198A81C3EC6BB4CE6D67526BC5B34991ABACB004D91007
+B74B7EDD3E868FFA9FE4D2BF3565546E6CD60DF0F844E28D183844C314EB8876
+9DA8B658D84A8AEC8FC43694B3C7D05A5292C7DA7E1B90D8923A0EC0980516C4
+84A1892E106B206CFCD5C4C8290E784BEC3D79762E24A7F2B7782E12D1CCB888
+EAEE0064364BD688455979DE47F23B684BA02E52C1CFAD3A8A22C2039F8F12E1
+CCEF4D53E838496508080B6AAD0C613EEAA22A7A294E44297A51E21A259B4CBD
+01742C691D898DFE48FEE0392E7FFF5257A513B9EB8ED4D235A7C4746C87060F
+94F2CFECA76E02B52FDA8945763A1F52CC0BA2985B41B6E3CD8DCCF03393190A
+51AE0B2E348C6D4F97223BE957E67BD06E2E49EF2B9419C660FBF341526A34C1
+3E3AF14FE76771DB8767C4035AF12A090D9703257AE61DDFC2653E650BD34981
+02FDDEFC30DD74805C2BC8D196366874956584F8CBA0364FF14BE992F355CB7A
+50034FA335C1BD0A76CB970ABA59D7DA07C16DA3F6EA51E98BE5D6F9E5DB0567
+2A533B320B0A65CDD21FDE37840B43350EE2AB507DDFA2BD68EAF787D69C383B
+7210BF5BEBF05343171CE9B153B41C7EAF71FC0BF1BCE71C6E22F8A81C7F93C9
+7DB6B26F6D6019BF0087A2EB2BF2A51482DEEAA3A4380FE757D6CC3E2B719262
+0C7B4720CD3E076ABFC7354F200576A1731790C9F606D69A1D5FD2329074F59A
+D01807BB552B3B9504D4C0B0E26A795E9E4C25780E75F9E9F469526B338254AB
+4134D831880AD275A751568D2DE6358015D8610D3B66496A18A5AE50E3FB64DF
+C2CA5497B8D2EF10AA44BA1B16588047956FEFF9CE74C8CDC8C6875BC72D6C17
+F3651D9B306EDD63EDD338B52C37E8340C672642A734A39C0C96129508AD4C3F
+5970A105F254B06BFE0763304DA0A88443C881863BDFA1F5D2E5096ED7880308
+444A90885B6A2D0FA03CEE8A85BE5468293B29676272545F8E050D0A30E3BACE
+9897D0A91368351B6339A334E4ED8F8F352EBE25B73A9F1232185D249B2D6302
+589B45E644329D8C5BE422037D4F1103B5353B82C932FD2874FDB16F6021901D
+784F16CD71CA13E719C6F1696F7BA894BAD4A972FC51F91A1321F9A5C9AD2C0D
+BCB31BFE72290DD1F2E022BFD1D1C92885F22AC5AB324D08BD46776A9F8A014A
+D5205973ACD5CAF6BD01B1306004896C023E52B63FE0B7AC56AF60556053ACC5
+AEA040B4CCEC0A174E1CFED070F106B0681C1FE79478BC97F7C94F3C4381C95E
+247E52F7061CB8CF96CEE2905E7E817F5DE3D717CBD0D3C448B642BD15C4FB57
+69CEE7BA1F715EDA4DAA82F6CA4CD83B28DFFA7938B165BDD95C413F2906B41E
+A19A484F7F22BE67629F3BE885FCBC7FF90A23ADE8008B0226ABDB5B9B48D7F0
+709A7A554B965144C062ECF96D3A12868165659F4FFB234D54B7E994347E6F3F
+F1565E2D256CF1E44FDDB9FDB88F7D2F4FDB9407000994CCA0BD704134819A45
+3D5FAD56781BA05288EA00EDB0AA71F9DA9CC705A90FD0D234DF67AD25733197
+C9676053F4ADA54E008FA6677642FCEC4133C04B5A59A752181C4A53FC06A33C
+43AF44FD99C613AB1F1738E59316768369ADD00620D443841DCC2DA5608B37ED
+D3DD6D5FA974294646307DCE6CFD27C80C4E77752D7534C5270D68FD3C44ADC9
+1D41E388D22D8E08D07845F90BD29EA35A68EC73339E50AE8559DFE6231CBB4E
+56410B8DC285F5B9A5B2FACC1212B254CDB8A98C96EB1013AB15D907C69EA85B
+0A6969C0D8672D1C69612D7763DE13FB711C38FE116EAE3F6F9AD38AA2CF409A
+F08DA21DF8F41BEC25DA86F17695B9E2C710B53E20382D067BE480114739A971
+49FC35393B7B02D3C07F478F389B5CAA66BA3B72835DF14B263466CF1969851F
+FA3778A6B00A0E0C4676A29D3232ABBD7E281402137EF1D38E2434DD44721E4F
+04BA87E268AAE96334AC95BC1ADB8AB36571B54088C6DEC51AC90C40475F5AC6
+B5BAC9DA8CB52E2B6810100F098E528BD24F04B0EBC5F5C8700E0C4F21093405
+389E8D9EF6073BC18799A6A75F2999C4DA0B514E830370A0BA830A45090E7C6B
+13B2D9229EC8A15CB9101666F03172D175F39CAFA4583CC1F6BAD5CB3C1B9456
+4276507E9DFDE0C2DA8618AF4E7A4AD50A59754F21DD5006B38CE98F304BAC57
+7586558BF06E3DF8FBBEA0BA133CA0338CC261FA587CC82BFC4BEC64E6051B3C
+58D42EB54D019D6BDA2CD7F5BE0177163EA3D174B390457B4DBED31E439DAD5E
+FE801A103F0C081F1D6B194A3384BED5757FDEF166E18FCA03593407E34A2469
+AD04745D435822F0BEAE52A0DC0621F8AF598CFC2AB5BCD3B6B12CC05EFD38AF
+F85150DE196D073F5EA81C070EC3412BFD14ECA9D4A21EC14CF3225A2B79E717
+E29B7E036D5BCFCCFDBBD2DFC83F07B64D1489DFD91005F99F1B8E7990C38AA6
+89656F91E5A0DC6F6F5DFA16B54CB16CD5918522FA4A7969DEC60D8C467FA6C6
+CC412521012F615CAA04FC42FF9B5EDBE96E6FBB2B4F9F0C61081C67DE180CC3
+A72093C4FEC91E6E03BCAAFE7F97BD164064D570D06F232E516A8A36324DBE6C
+CCC32F95BAB18A974BE4
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueID 5000820 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+515DB70A8D4F6146FE068DC1E5DE8BC570317AAEA74A842CFD26F9591866F5A0
+9B4EAD7395F5196B36997F1D59E88165C94739E74C2B40820F8C972B175ED79D
+87C9E323C3CDD5C2BEE6409017767534E19F45AFCE2C6687733451AD2E75D112
+42040BADFF90F5FCF3F5308FBF66505A3059072ABA7DB259E6A8B13044045E7B
+AE33DD9B09E70C6896BD1B5061109910CED683C5DAD9CB4023FD7686F53F06A1
+2F949D09F68203A5ABF98C6EE1E579F4CE20970D7B1866C9624C726C5E8F081A
+1387DD4A2B6E313B12BE585019D985BF4D772F63DFE677ED6DC3ECC5AEC2BDC9
+7522D9C6B68275107873C670138A759D61257CB2235A7BFA0BDDFA54D89BDEC1
+181B04F008B02EA011E7727FB18B65955E332B3702005FC7B93063A19A7CD746
+3A8FA175030D14DC5F6C1D7486E82B456A4351444B7255851767397A37782B74
+7C7B897F47B857A4AFD2F75D097BA3943EF92C22FF1565D6E37A0EBE0EC03F1E
+B58D310C1F86537C1F4B7B5C44FDD25F5478F6574CD2CAEBE0F7CB2A4505CBF2
+5CF4E8AF2F7EFC472BC630140C3D4A4B2E9947BC443A2877FBF4A4DAA26C4671
+FA1B25363EC75DACC02E065A5F0F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR7
+%!PS-AdobeFont-1.1: CMR7 1.0
+%%CreationDate: 1991 Aug 20 16:39:21
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR7) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR7 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-27 -250 1122 750}readonly def
+/UniqueID 5000790 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
+E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
+47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
+8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
+78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
+1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
+01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
+C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
+F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
+8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
+A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
+455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
+9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
+EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
+52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
+563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F
+0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB
+7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1
+0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4
+1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4CD5C7347D2E
+1D0D6630F446F3708FCB29A85F40B4DAB4D60AA8F5B2DBD67F2E45D80C7A7E86
+144669F75F8FA14609F8E4246FEC475ED262E03D30393C78C7828206842B565A
+DBE20EA52EE9C4C3862B2F5F12CF89D935B89B84A45CEFCEAEE8EC8806339364
+56FF1FE2E5112803E3E40162D5188D2210A54816AA9960611721C23A292AE80A
+8F8C0FB114D71C111700B0FEA8804F37C5D31ECD7006603C53F4BDF7208286AF
+3A25CEE58E88BF81A4800B68C2A19EBDADF9B1074702E779A7DD915EFE09D35E
+BD176D7346D859D0944520171C4E97696AE0502C43C391FCE5E8FB1789065E18
+BE3AF62200D57912360411CE848B4550D1B0A3BA576F9B41CED3A23E753631A7
+25375ABE8A4B55BC65AE2EAFAE452766961965093084D218637FB447795CC991
+EB1EF26BF82B7A81FA847ABD3B559D35828AD7DDC5FC7B43C6C14E6ADEDD7663
+F272AA9A121630C5263D58773BCB1437EC2FC54C4AF90E677A8E7D1738D003D4
+18998C03CC9AE182E7758767FEB5E1B03C6CC32AD30D0ABAE6552290771E2CB1
+A23F469A8447C1868C6DEC2C3C2BCFC691867E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSY7
+%!PS-AdobeFont-1.1: CMSY7 1.0
+%%CreationDate: 1991 Aug 15 07:21:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY7) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY7 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-15 -951 1252 782}readonly def
+/UniqueID 5000817 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
+8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
+F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
+E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
+424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
+E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
+C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
+868AEA25DA3D5413467B76D2F02F8097D2841EDA6677731A6ACFEC0BABF1016A
+089B2D24F47B9D66B677886B90AA787AD865B5F78EE434AA47B7B0F1244A4215
+251FDCC670FD01A92226E2C667C2344298D001575BDF782D969D836ECA11E229
+C7A17E28F70F9B17273FF243452DA885068A8BCB5165534F3996CBD8D97307DB
+593D606C197AFC259E691C242F6E1E651575B6852AAD54567905E6F542DCA109
+7F6DA24DC9112FBF7CE48B387953787B2BCB841873AED2DFA83339D39E14F4DD
+3A51584527AC3A93630D121E2AE0C89D9C3F2FFA767743B1276BE1E648041010
+0FD510F1A8
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMMI7
+%!PS-AdobeFont-1.1: CMMI7 1.100
+%%CreationDate: 1996 Jul 23 07:53:53
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI7) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI7 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{0 -250 1171 750}readonly def
+/UniqueID 5087382 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
+C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
+B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
+DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
+4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
+FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
+76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
+123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
+012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
+A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
+44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
+4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
+01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
+D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
+914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
+261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
+24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
+A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
+9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
+889787CDC7AA8BEF7021B3C18A0A61A68CCEA80153A2EBF193130A4DD63DCAA5
+B689119E6593852F32596F0D45B483B7FC96075C6154039D2F9E83ADECA4FBDC
+A0A5E10AE08F1EE1D881CE688E1201FF4C96C4EFB50C3C6540FB74553C1857E6
+39FC3DB7E2885F413ED1DA3E61BE83F148A857A81069DEAF0716F44E9695D347
+E548E8E69E98860CD08BE06BA44EA7C49C08C80A6B79755DB7A6B6056E888D4D
+9B8E0534836287CBC842375D619772DC60905044272D1023ABA45F38738BDA5A
+161F26492ED84D0DD7935E0C6760809AD184EB8F51591F236BD17A6FE75B2186
+A2CFF5D4D6513BBABBC298BC83B716D87261F2F175D73663B4B8CC160B6F60CB
+FF027B46F06F0F127D4A4869E5366E469CC962AA6830AB9DDA82E0ECA267A776
+3F9329AFF02A816A321D9072E38A05A8D599E727AB5746DBB88D273F9F2CC3E0
+85C87C2CE892510715A4E5D5ECC81922A7AADE1E69D5A1BF21E69471777C925E
+E4F141255D439828CE23B5EF89BA9BBED4F2EF632E2BA49AEF29461B7A0F9D30
+3970358FDD2F048AE153E97947056AB384260E13510582EF0445292113BAE7AE
+C920324A3FAC8948F8E5453ADF1F48D9619A6B3D8811E6E5B7B550720330CBF7
+31B7EC28C5D52BD194818A78DAAA056986BA446D108B5A9B07ACB628CA2EDBDA
+33106AB016FE432C5683FB5400CE6A517CEADA0658FB0713AEDE6186EE3E44C2
+E6E1EF363D3EFBA26EBC8DB48C7B0E89FF26D2EC628C60E9C9B20706F0126CBE
+ADF85094568F7429296E392FC52EF482D3EA33DB207586546E00C88E5B352048
+D487755327503593BBD872785DDE1EBC47BBF7E0D51EF3B3C912A394F577EA6C
+721A0C81F5B3DB66896CDD495E04E0C16F2DCCDECB904DAF5CC87AC8B04507C3
+E14821F48E1F56ACAA2846DB99882F2C6B8051BC3FDBB13F4838E0F1FF89F15B
+6379204D817DD9BAE0141CCE4BB724C4DFA2187BC4C50E90CB17E6D3B07B41F7
+C2A0ECA729FE3D5BE522B30505D06BA64B99390D0555B79E59C41DABC6FBA969
+8AE84300DE70D7E9E2249256C00569BDF0F1125E523DA84B28D87F8FB7DD6942
+DF64CA9809AFB91EF1265D50F64B1A1F5B6630003900ABB4B4F05FB2C4DCAD
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+/UniqueID 5087385 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
+990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
+6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
+DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
+59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
+D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
+8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
+6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
+1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
+03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
+95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
+74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
+3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
+47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
+AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
+42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
+40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
+B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
+956017667589EE6908966A17DDDE40C2FA52A4C9DA871EB00FA63CF1B8CA7EC1
+54766CA4DA3A90C2527262A754335F7F361649073540AAF85B7995FB5D2F6E00
+62D0D0805D2D5682D5AFFBC041924368601B68FE333BAC8A58A7175A052BDEE4
+186944AA16B0BE190A6155AA7E3F754B87B7268BA7DE37BB9EC4F332F315EC61
+363F8A7653391C915F916CC8207B7A7B6A0B9157EB101A04D916B37D96B9D5DF
+61CB0F996EED6AFBA20C95B94ABBC54A0F7E24A6AC9C18DA3D3AB34BEE51F245
+075210C06020BEAE8F8925F80D12AEEF4BEE38A60ECCC6DD8EBE8788FE16A8FD
+CC4F03C4E328421C57DE91E6DE8EF3777B1AE502DB22053B909E36C625C6685E
+4A3EC4C54DFDBCF63B1E244D060B8B0FFD20296EB0E9F459C161BCBEA03CD05D
+74474323D74CF724CB2A2963CFF80DBA8EEB1406196B196F87DF6A218C0155AE
+387EB279B83546CEB55F809C2705218C0DF08EDE7D392FC9981D0B63BE6F2722
+4CA93A9B206760DB784F5167D9023851E167D0146576A786F3F71D9EE878708E
+EDC9AD3023FA77BB446DD6E533ECEE879D8DFF7CC7C069A843A068458BF453AF
+0D4D12863F97B7463B4D57E175BC02EDE74AC7B2143D7DC2CBC3A67A1D0EB3AE
+3C96A18FD26524116F250457E0E4DFEC040F258E36E8841F1773247CBD4F8770
+BBE96808920AAA1112E44682788A0A511AB014DDE59A251E67C8618C68C3FE88
+F5643D845A2B2515E4168CC848B679BF676B51982C2E3863940A1DAA2EDDB162
+27ECE62B925333B37DF910A3D55496468D75B5E411E4D524B63B383B23A6DEDE
+D04E876E0B7E49B271ED5922450F299EBCDF78E0A612882B7E2D8F10A6EE3918
+04A30388586071A6136A505CEF407DCB2FD02CC6318D05D4E2D23832404D0C45
+AEAF54AE4C890355C7CBEAB4BAE57FDD1289C05A47469906AC7885082EF9684E
+F64220D410FEF2B755FECF25B38D3DAB61F46557DFD2D131EBE932C1669C5C3C
+663CD8DC07FA01E816C43A2E306DF5F0830F828F11CCAB3AB7146BA135BCA1BD
+167927265DEA80480D7ED71B1E4F2D4D83570218841B19FE332C7734FFDF2AF3
+1E04F13752DCB49CEA4288BB39BD7FE26BB36AE639D216F37DBBFF28A2EF1309
+67BED6AE2C51620892D4D6BD33EDF5799B71E3EFF6258BE95BCE6141B0743AD8
+46FA27204B9D2995B1EC4D2F315092A3A9FF3E1EE4BA8FA94484C8B88875AF02
+808F5AE57AAFF59BDBEB04C7CD75B60E7F370DF2DBC2BCB2F1A7C7617E497E03
+1C603F59390725B1BB31EDEEEFF359B172A35FD8DEE868AC1CCC609CBD565B75
+D3D5A21746D588821D5B64CD8B4CFF439FB6992AF8C88F923C3E11FE34B81C66
+34E1E9FADB43F7B17686E652931A47E54697F9075A445A235693384465EFEBE7
+720D3D81A52E3BE6B3329107CFA616853E5A88350F4C45D47CA8FB9EAA3FB84F
+9B5A5EB6FA0AE65AA571CF343C21E218447904FC34AB9BF9396428E9A2FBD92A
+CE5D3FA9064E39DC7A012E03AA4A53DE5C8518C8027DE015DFAF58F1392FB9AE
+BFEBB69158560785FE26C5706B52D1470025A26129D9B2EF7E3573559704F053
+18C70C05287A4067EC6AE9B3D53DC98FC901F252EBA57833DDCF07DB06312E4D
+DBA19B3BA0A2DE342076B4ADAAEA8BE790CB0AA58B0351C1E1E2954119105C07
+C030F25A58589DD1359595C6AE90695956E8372360E274062DCB120819860875
+DB18F191F6F23034F0CF2F66B07BFC8BB77CB22CF9A560A4BFC48F511CB719F9
+ACE28E1E3D9F8F26E4AEEC054E0936C13F5165C2A51F59F0298C5FF280B38002
+01B4BF17079D599E28FCE29AD26F5995F16B3788152B034FDB00F0977962165C
+6D3BB652AA49440CD13406C91ECCB48CE91A2F767DB46826347840866A55CF06
+2BA0AC876673FC28DC7C128A54D5D4948227E1961BDE532DDD2D42C2ED447EE2
+1E069BAE97B8DC7F9C50FF4EF472EEBD838A331661E14AD977374ABBFC265D7B
+87B25C9F0D0B9263620591586424E8C00BB3AC276A7A8F9FB52647EA25F1860D
+F9421E7C710B4377D301E545C88106C8125BDA7EF2E490346CE8BABFE4D0DE7E
+A3C5E1E487C2A827D62671A91AA1D076FF36E8D02742706298352A27B3566DF9
+4A6642753F5BE301AAE708BBFF1E49E6EF62746EF32DFA28B1B4B7E24D249B52
+04E3D6533242BE959C6F82667117A66304F952DF207E025C31E18F2964F35378
+4652A2FA807874E7B45C5993FA6A700EF7455A1DDFD2EDFEDBEE6E181C138CD6
+0787C26396FA0091B0771BBCD65BD7E27A4036659DDD80C85B938577D8EBBD59
+CCE88C5B1A7B11EDEE9BA7A62A5EA39391948BB82D3A5E9AC8F3C482E8C01412
+3851FA889624DD0C547588C4CF4383CA77B89910205B3754714ECE684374F19F
+BAFAE78F9BADE4CF36C547F2B37D39FC61289A6F84384EE9CC94C89F3B77EEF5
+422161E96C3EE43B715BFEA39F0960707222A00992821939F47DE593496D032E
+26AAACFB6B654BB23134FA513B071F222B46899CCDE689B21DFE1E3564B3B723
+A3FECCB4DB42B36A732309ABBBFC4162F6B4BB4D04B2E79866092196BFDF42C2
+CB432A208B3617EFD785FEEB65B86E5F72B437546123322B4ACDAA813459EDE9
+AFA77402E821FB0CFE232DF99A78146CC98978D8587BB11C41A0CEAA33DC242D
+F35E2E2F3158636C7AE07846C8B8F9F50EAD2B1CB295FE99470EDF5559839F58
+AD101C1291084E19C89A26F8B5AA57263202DDEFD234D20540686EDADA9BD723
+D486660A7AE16E1A81BFEEAE526A17B7912EEC6F91566BB5C323030365735FBF
+3E1FA11D9F20C0227C8480CF861F617E90EB04457725A1E0346541E1472EBAFE
+4DDF11B6DAF6694090D79B47EA8106E7E8445E5BBCEC43FACD971443A14C187A
+B30CE1735052EFDDE8A23A8E1B4C9263C8CC11DA4D188F8FBFA46BD401D52BC0
+43E685B581E9E10C9EBA6CFD1F37EB1B4070860C44CE83D76B44ADA06F1A1941
+649BD12436ABE450F01D4CC88A0C93B76AA72819A0A73CFBE81A1BDD13357D81
+00015CCF79954998C377332EDD62B855C59DE9A3AC4184F4C6CE5FA52E7D8CCB
+0B4614BE0008FCE23E592501E4FD0B01A7F2932BBD045FE05A18A2824CEC1094
+E1E5D882F0570F02E31192614C2FE5EBAD13C3E7F33B4D3EF46E88B3FA6CD2E5
+34A9C65CBE2EC576C01C3C7E7DC89BA1C0E8779CB9C5382740A27A3FE4B10D48
+41342DA0B4A2CEF1635E3CA52CF292A9E582F4C883929C460FF0E9B3ACCB7612
+B7415FC92E7E8797051A9CB5B46A3879627B49E907D80B50CA7C6ECC1FDCC5E3
+0F5FF5140D8F1469F7505D5C21A11D5643C2B945723AE5A1CD8BE23BE7566BF1
+3022E58B36339BD8B86500D9FF843EF43D0A512EB6CED1DD3F369B37573ABFCC
+382DD5740E28DE595B6C5962BB7EBC54D0536D43AA5FE4AB01F04493DA480AC8
+0FFC3352A4D1E03E3FD76596234A31CD63BDAEFCEC5E04F953E293B162EBF2F8
+6F97E1C8F6C1FE372CCE00A951D16793E865F0D24BC3471EE64FFEDA4FD723A0
+9F25D39B69862327C82C21B786DC97E4DB8F7BFA4DC9387D6BCA442530A85675
+36C8EA5EC1472281CA6297C0A27E41AD936D48FB2E7FFC3B779721AA4532B84F
+2959D2246DF54087D48432D7BCBB1FD1D57C90FE107D47EB6F83D2C13986D8D0
+302064C44333F759EEEE2757B16266E3A6B986552612384838E736ABB33492EE
+0CED4ED94CDDDF630BEF143560CE7FFCE1D91CD5EFC89CEB
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMITT10
+%!PS-AdobeFont-1.1: CMITT10 1.0
+%%CreationDate: 1991 Aug 18 17:48:50
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMITT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMITT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{11 -233 669 696}readonly def
+/UniqueID 5000779 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D004D606918A40B8D7BFA821B73E118040992A4
+E1BF99740F8FAA47E4349853C8149C0F8BE2F23C6F332BC0373C867D0715E8FA
+FF163A60AFD0FED665D5829739975C5DE12EB30895604D211F645D4E13330DB7
+64B6E35463C93B752F691FDDC44595B0A0E9E57C6F649809C4DBC7DB58102A60
+46349E9A5740893A1BD4536B99ECE72B147B713619037400669C07291022F84F
+4F3302F8244D2F0F1380466E81E0B5E00AF33E021A55620A7A93F3BD49C7040A
+67C096167F502EF2051B526405B9391B4340A3FFEC103E317E315A88D31661E1
+7E4104A2B925D1DDA9586861904FF6FFCE6A8E808385E4C4014F5A494874E2FB
+C3758D6989AB68C4CEF82F92B9439794FC404A29D086ED6B27997735BC3A24F0
+473FFD74BAECF5282E2EBFCB92D69B81C568D394055E2E30A7E3F448796E4EB8
+019AC2E075377F777183BD87FDD194E855ABFA35AFA73304DBB181C267431B16
+70456FD8470B525011891C1E140B8FF24A474B89F1CEAAB509F91FCAF512E16D
+8413BAC0C664FDCD31245C5996F4883305D3EDF1C8D1E6F0B1E79A06028BBDDF
+6AA5B515DF33BA8FFF2394262F3FE1DF95AD661322BFA5179E325BD1B1EECE49
+69F64789FF1BE8DE5CD7485571A07471BD6CAB4891BAB122BE4C4A1B7176F33E
+A1A434F745811B71EA8AF73407F32E9F4EAAE1C1FAA979523C18A24F754C307C
+CE056DCB71B20292D4FBCBF9AB9E9B81DADAB90E60BE926315049E5BF0F50315
+66D82E4963CB556F19461F43EF80302912AC1168884A1692AC59BFBC431B14AC
+A5FC06C4AB595F9DF66CE5EB69568038445A9EDDE20CF92BA308A239E220C108
+B441B0CD257914F4BB909D017F84BDE7803F8C274AA842E618CE08D3BAECE39F
+8D5BED9E69EE27E42206AB6612C400E86CFF5A9899D03E387D88EB6D0902FA3A
+5E40FDAB80A8DA0BAF3B1E4E6A55CC7616A2F58CC7991190E95CA9AE13360AFD
+57973F2D1C9197CCE7C66F8188D5A26507F69C8AAB1502C52691A60513EF2A41
+7A525786856DD77E2823F7F3E69B61D3739432E5EBB73A78ACD89F62DB04052C
+7ABA54E37A555A688C91CD1A02D5B7458283054BE7865B202A1504E0CB4E6098
+6F371F76139DE72A18E7FEBE5D1A8A2123C7405E3C93830CE5F1FE4140142463
+6C978D76B21FE9148C2BEF436DF915BD56A9C74702770D39F54AF1D8E45A0BDB
+13DB80345E88474C1A6FA482AD20048FF67102467E7C43DA12FDC0C195ECAC80
+F2C9F26C8DDD16A634CBF0812755ED87C3377772F9CF4681CD9EFDEBE4C37CFB
+A2A5E7FA9010CC4DC059BC1247F8517DC5183D3C640C4544A32E582BAEEADE53
+648325E71402972963C37CD98A907B0758B2EF76FE338314C7CDA7A76854C59A
+CCA74828C487425E9D43D4C834F25A65FED230D3D40C1DB1FCAE8A83FA7C468E
+7B179B86BEB6DCEB5FB68D425B03EF8A8E995AAF4CF2666A4B42A41CB91D2789
+94A0438DC096F0E04D73F57480B343D797E87F9BB277084FD9D14E47CF95EFB6
+81B2278AAF16343A11F9DD10C8D37E1D06637769F6327268AA338A7FD65BB3DD
+921B4A78F29323DC8A1B2F9359468462AF6AE4FEEB6DE189DFCC2B05F31C52EB
+336D9D0D805B1047EFF5CA3E10164A5487EE87110BC9CE5EE3A0B0B3B8E64D72
+80DF8899E1837D400E8EBF6EF10CC42A80ACB3A96199690F85683B81E9C69E00
+34BDDDCDC452A9DD8EA071C214775AFA850F5679A11C3DCB5218E2DD98AA271C
+B3723481A55A6F23DD6A684AA209CDB6C5098F3969B2A9CA8A02EA88F6EEA4B8
+9A49D0FC9A9607AE7F6D75584B023BEF2D0A0EF42465FC68B8D181DED304F60B
+C3E5917F75D62F5863372A97920FDB944538A4B6D8ABB9D890D9B1A2D72C54E3
+9FE960BCD048518874AD0DA55D2A364365069DEC50C30CA992B156213486DB7B
+91B90FC2CA4C126BB826E12F8547C566310163E9BB557E2794727EA62D650D65
+13BFFFED3ADBC75152C351175DC2ECD0AF98ACA21E004F16D14C673E4B0B3448
+68C2170A727921188E9540E2BB42EC7CC025C5AB99DFEADF3E1C7F1CB4A032F2
+971E065692EC018310C8FB8FC1909120AC46782B0E95DB77245BA6679479BAD0
+6D83CB891C84ED38536A272E7BBD17004CB539F5F80ACCBF645762AA075B8D88
+0FEE93DF27B7C5E966BCA52CF3CCB81D879F9D284EA9F9A0D257018930C8B4D4
+3643F654E57BF2D6068F2A68395AF6BE27CCB5A4651A7E5B43399D148739F9C8
+EE3CA9AA2D7BC32443E7952B5DC5E500833BDD303ACE8794FF3011EC74A968CE
+7273A103B06C95CAA3B03516ECA099F6F6E114AA988B70FD0DD795A595043E40
+8ACA143F9AD65C78794C62846F73666098D839B1F3CA40A892EE12B6B0B05D4F
+E3DD0AB63B73514327F056C95D7E2464C1B068153E4C17B23391C8F98326A11A
+DE2DFDF51C840ADA2517E85A9BB9E1E42C3876E6765D24819A6F5CB1870120E6
+42A1264B7739F4A462942148C8A59D5ABEBF06E2FB4906D51DDDC9DC10BD8FB2
+08E00641B3982B59B28574961EAC4A284C31F86AB611E8AFD84AC06B79AFBEA8
+123EE35722A2D4D2631DFA6494A8BF3F7D3F9414A728CD31F7EAA5AB910AA6D5
+F24BD226B8DDA3C9D06AE7EDDEC51465832A77F973B8A5A91DE426E44FE6F915
+03B15EB86D0920632816BEE499A2262C9F0BF79D5AC665323B519D409E1B446D
+6D41544D16AE26FC325DD0C5431EF4A38499C679351F87E8D10DBAB49561B314
+ED3EBF05CA93949F3CC893A5AB49CF2FBAC82F7B675A3E4AC18F1D0D2A7098A7
+16D0DFBC98ED8F85493226FC9A79F4099556155FF0D1C4898B221071540890C7
+B476E09083274B816EED40BC50C992268A25B81A5E77BF1B3D680307D3B91686
+63E63093267413229455F25B6ED1B19BA481418CA8B752C1482B5064A65F55E1
+FDD4
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueID 5000832 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
+38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
+D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
+EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
+A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
+F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
+4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
+6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
+A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
+E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
+1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
+452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
+8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
+5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
+DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
+BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
+741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
+E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
+E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
+D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
+C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA
+726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227
+CEBEF0C9440DC034DAD9C19FB27DB399BDAEE22053591D6538587C768C1B7B0B
+7D1E222D2D8AF3A6473CC4C0D6C3E0DB49068CEB8C9BD1C5CD486A50DAA10BC7
+7D6286142355E3F21DD254E27C00C442728A0BAEC9D3F17AE9CE320D365152E9
+EB0D5E3874F2BCEDA98521D23FCFC30B4B69DAD2ADBE80E5964ED0ABEF6C73B6
+DAD30E2C57D77005F194AC881C702966F7A907846744065EC951369C37D1382C
+520669C312E70913B46707EBC5FF89378A24C8710AE53CF7B820037A908ABDF0
+7F0397CD075EF9CD41082CCBF63E849C48835E1054DB1E8E3B5DF7016CCDA7C3
+6A31B58E9B9A55BE350F3FE91DEC2F77B043E463BA83AB1D578004557FCEB4B6
+5EF62046F385DC3613F378022133B24D6A28B495296D6F766EFD6B0F90599C01
+A82A5E230905B36A856C799E0EF935044927D0D57939ADB4852B22FDD7C6E7D2
+3DE0BD07AF3FBFA551A68A85624CD4262561683322148856A2F385A82CA990A3
+E4A81CBB9CEF042A5F11724F6C4DEA0CD938EFB1826378937B985755706C4E12
+E6F6E56B2389AE2A6357E03826EF386C56B8981C682AAE950282A4CD40C3B8DC
+A13F57B7EC9BE8C9847479061F95C96F703D78D1DCE7350A147758612AA8F479
+2F2F5F04FDB35F190FD4284E722C05642446FB4083EE8BC29FAEE90982CA3FAA
+70A26757AD09278BC7CD4399F08141D7B16D6BD448C4DFAF6FE95E002D8A3F28
+238886FF0456712BAE1316CD2108563C077F7B6542BB955B51614DC140C53DD4
+77A3690DA1249F31003C093533A0FBEB51EE57334655BDFFEE5B8DCBEA4E4804
+C07814F63D4815C610E18E8565EB59A5773D2633CFEC3F10809EE9E592C4F519
+E6C56610BB422D7A2ED72A737595855C4D0D3D3E50EEE7AD2965805E7D6536A1
+2B27974AF657EB9BB624C7A7D34C29F89C28469F25FA5B2AD61570B9809C8DDA
+C352D8CCA595D80662C5517F1007DFCCCD4E9D867A7520BCBA4E6F1DAF770813
+DF21395C5ADF03B4B2E4978C1291565E82505946A8A1A3CE24B99DD5F1B63817
+2E6EF93222C61C371708B208F4522750FBD3612DC8EE240D68E5E03072C214A0
+BC53C99C3C872CDBA53087939ECA67072BEBC3A21F232AB8AA6E4F3845035BB0
+79C538EE56D7E1B34D5863A006FB50DFDBEA54B89088C72E6185242A5FEC0C47
+4E1C4FE12A82748DF51A8A73E1F5C1F824C1E9C1514B5ACDE961D828B0838838
+D84915D5C5D2A56C195D53E400DC891F93C7D1378CB421EAF1AE7CEAAEF12DDF
+23A813CC33139ED942C21275F9CBC6FDD139D10C86F006CB7B869C9739EDB68A
+E328F1D7823DEF0CC4F57530A6A014C9B62B56CEA7730C1E0D307C8501F38436
+08B30772623A1EDC5A3ED07C0CE839B5F68CCDC433375452AA391AE6CC448D6B
+6282F6AF3CF5A28EBA2D03E91A067C0C3F87EDC628E34426D2DBA00E86BF4DAA
+EF233A4FC5CC892016A8E18FEF14267755B3EC5AD047933D1ED727460786AD3B
+3E382624A45FE5D12E8E937CFA857901A43E6A92EE507A5657BC77515CF4E96B
+F18C3EB8D9EE369AB11C1AD6D39E048CB1DCAE868CADE3E57857B2226A8019FE
+05C120D2752805C245BF4197ADAE07FA75C893868AA883DDC81401BAFE207F94
+62283872FB219B7A8B69A9B6F843B98FEFBE8F21D881FB73384D5EFEA8EE65AD
+0A19C3C99808BC1BD4725E0C401BB62FF6B16C8312BBDA4CEC405E90E15B4E80
+D757337698F191D31DF8546E5D15B225599CFA630C64423DD2C0436E79377517
+BEE6A70DDB07EF2B094CE8F87724071FB1EAB4D95AF0CA8A70742F9B2ED032A3
+7A46B79DBAB1EC68F8DEFF2E80A6B6DCF04BDF19D35DA47DFC25C6D8EEFC7D11
+95A3D3AE6357EF72566D6E9F083649748871A5333AB7807B4BB79D1C7EFAC203
+CFA26E939370A939A63A01CAE2925E486CD7ADF568FEDE0D6CD6360D40EAB4D0
+87EA521C1ADE95A72C7D321729CCC3B79F33AE4366256F99FA0364F7067B1E15
+E0252C72E9E241F40EECF1CD93966A37FABEA009EA33C80A316CC1FD52EBB223
+29B8B57F11EC7F1ADF681ECCDF1D222E40E41DDE6A0C163893C265D72995316D
+7B2E69D84494A69196BEFBA207896B2EC68A5F60EED832D7200350463126812F
+B5F961037586A19D04A7F19D753C4EC267FE4882CC9DBDF44AA52E01524A1B60
+48FF228C0D55AFA2B9644F80F069242F2AF21F1994958D60E62C1FCC5D8A556E
+36888E0395B2A99A8FB15E2AEB09F9AD85DA96A2702DCB69FB8E314F77B2B0BB
+0A9F48747AAD3A6E188FAD71263F272592BFF9D9D6845F00B347D837CCA3B843
+B9CBC842940C0FDCA3CF0CF063662A2B54E9B3E69C9BC7A67714081F051E680E
+126EB16E7F80E5C61C9925D9B5F25FEFCEE9E399FF655BE9B43D09EAECB0B748
+2372B2A7FCD9F54A5B89CDB1BDDC6C03A0866E6BDBAAC9E83DB832E94B9226D8
+632BBC8341FB404F9669E6699F156D02CFBE26B5110CE6F48C7537F3136D584C
+6F540546F93C1E75A90F011C919EB2318CA6E6712EA341C5B6D790194D26AC33
+BF868739042697236F95E2CCAA2B496C58A5578A91DD01F4E41D817F36B954B0
+1FE9AA3F0B4C513A907F13ADC1D28D770224087B74B8BE1FB39EBA6C9AD7E429
+19DE41B950BE642CEFEFC50FBCC148F132D4534515AF1C1D9417DCA4D12ACD4D
+A27AB4C5DC37C26D7E1F6591FDB32469943688B5DE824A48F4C92F7A029F40C1
+0CAB294FA8FDA6354116DAD3D86683ABC290E12B15BEC6E8CC30EEA63FA29F29
+759E17F56F85504C67DB97DFAA08601EDA4EEC89B17EE043EADCA6D2E52C8101
+E9ADDC22B72401C79F9FD459A0D842FDD93C7BFD40AB18347192F395972C4049
+51A9A5DEB100F70184AF68DC0AD5AB6BF2DB707F5B8A646A97523A6668E58476
+A65A903D094E9DC397DBAE9F28189BA38834F3C7870FC8200DCB0EF4F0BBF6DF
+5891AF0ACDCF98AF6F2333A62000DD57A3CB7B5B632A54D61A5992FD4C9B67A6
+2810F1E8230349B781C0FA96BF24C1D8475C2F70B9A6DF0AFC0475A4469FD8F0
+F19151AC0201BF37E367827DF5956A599104E297ED3C8051464D44288911433D
+CC9C73C2ACC5DD1935E2328AE61C619EB8B4D55F449074B0E5B6A765B7BDC992
+086C4F2002A76DE7144FD9AAA48A24C38749E6C656994A1C06F897C082226FE1
+06D8625E8FFC12F38543FEE52DF4C62F2FECD94512A8DAE9CD562EDF08716E3E
+EE26803FF8B92FF6B27A57BF3BF41629290EBBC3D65D2E9C84480F863BECAE2C
+25376E8BA9299383387F86FA61ED99FC31E7E19BB4970FF48B7434C474B83863
+CA48F7F5655D7C4D91A9BB7CCC4CDEB0C9693F195E41E14D4BB2672ADAA40AED
+158A653E8E2D1C821BBEA0F098E205EDE18E1A705C054EF7B1B25ABCF62A556C
+8DE6DB89B2FD1BA70F6FFAC1462AB5E23FD95E193BDEA3C2D516B4DF079F4F42
+687226F6388C79A6B3E25E69757D2F7505A43475F428CD3C1E8DFB4BCE7CEE7D
+13904295C3C0B91257E20355FA5F3ADCFC35D01BFE609C9819F7F9AA299556BF
+AEF513F6CDDBCF7C56971B1408C805784DD90A5C6E25BC65691D3A2541EF652D
+34C3A151AAF879093AA4A6E2C7E01CA5315491D2717C33D0BB3D5819C033D1B3
+00EB477EAFE9F4FC4917883C852E4DA27417603968F54069B903A8083F20A975
+85FD8C632C3F3134FB0444F3A4E12DE87C7FE60E87A75663EF396DBA8925D41C
+4A35ADE42218B62C28997F653AC8B42EFBEDD3B1C3807AB66214CFE2F15465EF
+BF481CAC58269F20B592C45A228F4DAC3C16C5896CEA64EFB0ACA09D0C77111C
+A00A64544D04AA5F701B2D9D8257739C468B87AAFC14D5585282BEE94A6FC403
+BD98BBD249117B7EABD7CC9B0BBFF3D13703EE2DDDB9D9771CD8A1E955982373
+7427C3DDC752A19B23FE8BB5F6EAEFB35C60579238B7998940BC65084B5CA362
+4F5F8C13D1F2E044A3BE5C3DE3398055898DA2F6D91140A415F1DFC3C4C7B486
+98BFACEC54A918504C1D27A750DE2C7F128018D91CCC583EDADC6B3880B3E89C
+AC128504E8A5D450B47C6C43F7A98264EE13FAB026929B20843EAE793E82994D
+AE65B3D67316D8239805D9CFA14AC80FDFD605DEC42348BCD827DB40BE9E447D
+872690A562579E8A2CEFA2AEE3991D87A65EACB9AE0B4E826D3F2EAC3DC1053C
+D665B723B94C87BDC853FA2905ED91D9922BA702FB268B11B2651F340E669170
+79A14C1F0B6B2811E43AD3A0E886C27F143011F5EA7C0B04CBA5552B81B71108
+F9E3DD19F503074EC7562ECD401C8A5BE45EAF99893647763E88D187E9D52279
+6BD918D034445D8187BC8A1985BB6B7841C3543589DF478704DD45EBBA151FFC
+C5742BE144CB0B411021B45086F8E1F401572F0B883D7DCEB72E158F8D959540
+14951D2B5ED9A56655753F27F37F4E506601BC72E3D8175126719EE6617AA277
+7E6A17E914A83EBA0241F25BE6D72FBA06FCA103861A396DE9D5B62E94FEF28E
+49884FC961D2F99DA863799589D04080FAD209DF2CE3E89784C764A6E518695E
+62D97D10FBBB37EBDBAA54EC82D8E6691185B3E85AB1EFDA43E15ED7CD54BDD3
+6997164ECC2A7925E9A7EF7FAC979375B804C8383DC4BF7A9C3D3B8079A62B38
+8D6896170CDEFD30D963554257C27BE9903836A94A991F33EF30E0B7B6E2501A
+C5209F9A5211585222A291DD79AF1595F5A693658EA6221736551FD1D94AE564
+9ED960F917FE8A8F0ED6D8B31642651659DFAE7314A63C8BA287BFA13EA794AE
+C539BDEC6A96585EA26A136F3B563CBBA242DF695DC0A273ABF60AFE68AEFF89
+154542F6FE3F2C2B54E842708C7AD6F23609A58203D26FB9F0FB9669E474D242
+07876186DD126F9F631F68C7E2E8943D5C3C06097B7FA362A4813A32694251A6
+7B0D3FCF1DB38C54AB30B6064FAF2F4104F3355FEFA4D9D58AE7270CDC6958F6
+602ED003FDD8CAC1A34A8C7B348AD8C6145AD39887154E8C9912438AEAA5F9CD
+EE47C5FFD442025CACA47BA21914DBE707D7EBCAB91E2D6C8ECB6239F93C878B
+6DDDB5269D3D28A539D4EFFD4FD18984819305F93ABB8FA1132DED9D4594F85C
+755EF3EE7D2C8C3F5BCAEFC19E8CC5314C801B8B4835C896C53F8CA7C577728B
+7E492BEC8B7A2B33E52E5F42F0DB1A14AB711ECDAEFF878188B57E886ECC2BE1
+4A8F789B50900C0233B7907650628D0DAC99BC020FC064F7CFED72E02549D2DF
+ED11A43EB7F2EB2728EEEA60362975AE645FAC489A0B11B18C67DABA794F695F
+48EE269EA0AF3792654105036E2C433D0BD6F40FB3E1CA62B6A1094ECB51C704
+D7E959BE4CC92AA485BFBAE5C4C33CA742DE01C89604F6CAB46C9905582FCEB8
+F39CF97EC4A4B3731BFF86C91FFE8BCA46C30ED63FAC1254D761C871BCAD40E3
+6591B3FD75810706003893D4E02C39A6BAA900B2D21E89070F363462BFE9431D
+E3787B935C6391AD97C4B918AB48C9F3017EC93B176E40254BE456750FCDEEED
+C871D0DF853A58B4259483D3A79252DD7BCE76B4FB67E5976C21179908B182A1
+F5EA373D6F575FDFAFE46BA5A13D55A0B5526B384480A1C8696177D5D9F0F109
+AEB138664D5E9D81C2EBF3868683EA2BDE0F1BBC81EE5A086F3F97E9DB82F1E7
+444126C3F51E16B561F6FA861224067745C164BFCDF5C26B213E51EC1790004C
+25987AECF6C5E23889BB4A71056FB29EC241886476FDB3D23A678118A6A956B2
+5E47FB052C79C3695AAB63F8E45BDD97AD57B62C0360BBE6BBC958E29E86623B
+1B3BA1E686CE1E5CF27C5FD7504A4A755CD17FD2083D7BC591FD4B5DE815A995
+BD15C51CE51392968F60F4790690DEB870B01385DAF9F1D42A0FF4F0FECCA31E
+E0524C7FACC1A97557E03EF0973111AF04E4A32A70D82D22F6E9E221FC58034E
+30B7B283A822646D988E3BF22AA9FCCF8424A9C21B7ACC6184FEF76FAE207B51
+37C3176F923BE40856EDDBC53C7D88F8FCC7883A3EE393AB038511BB97B0CCBA
+59C165FD755BF5BEE9416DF96C796AB7DBEC2B89B4E816EE1E0230E384356313
+BA18B20D2743BF1FF57244E3A173BDE6E60146E340053F63EEB32AD5BA990D60
+52D097C80A61E6ABBD8D3D95F4292FCAF6920D2F7EF1812D81165922397DFA52
+6BD40F44A4E7A4CEB9D421612F2A512094547C56A9570FD8231203202CA02662
+4226FF7DEA1758810A955BA8C1B53558A67F5DDC0D16CEE0F9FBEB8BA8867861
+2B179F5204AB1EA39F032A607360B80B6E4CCE6979E755EFB15CF339209F1175
+BAAD4505F602D193E618F497DA9924F11BABE792DF024532D81306EDAF35CE8A
+387334F5F88F9BDD05D5CD1CFEEC76B943FAE980F29BA6A43FE1F14976DD8A4E
+0B1037B12D7822EB863C804DEAB78BC9DCDA7A3FE6B4D5262629289BE9427272
+5F6709EECE18D55487857F222FE98FA1742F393FAC2EEA8E5D175327DFD6A152
+73945499D0B9C573AC4C9EB56FA303C5E1DDD9B7BFEB38A89BF9B7F6C7BD13F4
+9DFA2F3F5CE16400621ADE841E7C687605844A837F31F8977F90D754223072E9
+276DB412E1238D09C30A21EDA6421C87132B323FB743E06E4B80C6DA838AA90F
+AB962E4EC7F2186421A39F7939094180A1B2C58E6F4A6DEC96E208C77CA8E21F
+C16AA3DA387C2A6770560589B41E989ADAE601223D809186E41647C4D05329D9
+35310773D0FA37940A8185B48B77715A1979C8C60406A9937B86AACC2AB0B81B
+E76E744159A1FFDEBB197A6061A46B7A7D88E2EFCDD048B3ECF8BB523D77CD81
+135EDC9694A9D542445B1969C4880A26DB5A47D305844CE534EAAFAD06E3FD0C
+CFED0DEC3F890E44BB54B45D24E7669EEDD8646FEBD5E9652371C7C11F79FCDF
+71A54BDC95572FD53B1F2D5DC1B0DD5FA39C45D3EF147B775DAEF3F8CCB42ECA
+B0C493EC4A9C5916D821934C3179D3A474F7D462D23345033E95E74378CFCAA0
+5FA36A89423A82311202D1D62D1510825EDBF75B5D104A8CB200FE2A75AE0F2E
+5093E60CB5D3FAE4C1FE11063407F1B3B68DE97670954A4F67BCFAB8C0D78187
+EFA92C6E32CEA973B2ABDD850E1BEBF8198F9EC261118AB750E246289B1B1C12
+AD4B569D189B740546F08011C98A071DEF88C5824D9AA172449C60500584306F
+EE3E022F1B33151AE0C478AC5422423B185845010271772A014F008BE16E4298
+AA081E8C035D4F873B44C70B4F8892ED33EDAEE02A9C4CFFAC863FA97A531BEF
+081896119050B16ADF7F42845553B59F4ECC6CAC54440F225C0079355DB34CA9
+7FADEA182156CEB95D9D313F5838FE0302DAA99927713F093D3F7436D73AB8AC
+C5F724DB91134FC6E592DB7D40EF34B79DC6A816F24D29741118EAD03F128522
+C6B935F82417AA2D6F379E1A98868AFCF131DC3E2BD60B75820C55BE512580D7
+1A8DAE974C4CCBA81553CF6CF50F0682FF99C2986502E8681F9886FDF2278479
+8A619B611F25FC6CFD7EB4F316DDB9225D48B5F008FBA4E3B8EF24383A582432
+A9E06C3F8551B0A9DE2B7762BDDDB155C4514BC63BD1FB79DD66DA7A92A6429C
+FA2C5C655E7DFC118A2E75409ADF5905FE9A7D63E3F8DF55FF79CCB5662F0EC9
+5768A7B494DAF0130280AA391574FC22EED219390A3152834F30926A3B999948
+5922C948B3B2E9543187066CDCF501499F4932824BBC558032BDDF75222422E8
+BF934556DAEC2ABBC1D3A96CA94B22281DE3E6460F8DD232867F080F1E2411BC
+B161B6A75ABB10D5DB5A8F0684130BB138F284F5F2CB8BF0CB787629ED82DB73
+A4C6FEA7AE98E0F66E29213A97FA0C64C0C93D37D6C3541BC4232D9FC3632B3F
+F77D5CDF00337F6346DFCED172E9F829BEC006425EF1BA94574352B4834DE290
+7F9E6DA02FBEC99496B1D7AE4D2D19D9D981E5A8E19AC2F76A78390EAAF05057
+0D976F6DBCF41064C3B9C55468FBF8B31468F4BEA052B1DB3096F69C653D332C
+39DD4E00BD11B2A57E44DFD0CD738589B9F11ACC02DB375BA1521017BECD00C2
+60B8F5F54B21DD50853BB3BF3A31DC75C73C5A23FE71CAFF6EB5A1C063C2C252
+F9CA93E2AE6377DC57A486A3E3170E91971DE32F8C634942EBC3AB01E26ADDEB
+4329BF747D9270FA94C85755A6854333AD24466CF9017962CB10BD6D105B6D22
+4DB5C394490146FE2C52590EE14EE1AAA0BB9D74AC2DC054A7417B78A0FD57EE
+00182960E634FF6BFE810E8290F282B3AC10CE29E2CBD526E0B2840575771931
+0D605444E5E11886B4E2025865E335033E1D6629AC3A5C85784989BF5BEC6B53
+56430CDF1FE72436D5897CBA116B8FE40C92DC3A21AE66E81FDABD5D4BB1EDC7
+3EC0479DDE68049EF83B543989928C85E979D6A45CFE54FE2437F92658138FE8
+0AB5A774B6184868ABC0CE8CEC581E4E135B08DCDA613BAA78D2F0460AC30DB5
+E5A8FFEED0E42950FE33C85D39BF2016C4C93DE5862D714733A2C126BC897F68
+8AA5049D76F27E0EEF50B42BC47BD58A2AEAAC26FE8F40AC489B01CBD252E19C
+56F51E326C08AA037ABC561AB27D45683F9355C77DCC84DF90672C6963804EBA
+7F66055D6F813C4AC44FE0FF1049FB7FFC511E59869D22C4160CDAB04E30F0E7
+135D3C624791A24B4E91C506A1F1A7208EDD7E21EF5F00CDCD0087AD78B7A55E
+16A2CC14899059CC5719AD2D781E53D365021A5E5B302CE1A5FC90CB16F6CD37
+C2694856325462F541ACF2C369A8283C85A67DF4DC775F81253FE6FBE1F0F6CF
+EF8A1EAB8D10490F7DA590C44EB9CD01CBFB8C23F382A27A297E5FFC492E7E12
+E4519DADAF58572CE6B3F881D0BA8C81115CE25B7F34DFB7EFECA478C58BDFAB
+66A972AC5FEF735634EAF2B076C765CF549CC235C02181292307642A3F07D125
+90EE544C1CF87E610A26390F50F9F858708079837C045040C60607B66DCA4BBC
+2AC881C3BE244C66B41B9CDC71F7E98E81CD28DE887E38668EEAC4DB6E066EDC
+E28BB1519F029983B80F309A21A8481BE42D79263EF71D9E11E512CC8B606D64
+5CB3BD0094ED9F66C2E0C3A5FA94E37F7FD3F5742FC1A8984B63E7ED6A1963BB
+2B3904EAC93055A6EB66A43B7FEBCBCC5C8C7E449D40FDDDB935DC6D37B0C446
+4726FBED31F0B78062639F1968D701265DC61105E2B7D12D59FB1F4DC14D9857
+716A080D2BBA517A65F213107FA2B72E56460663A01E33E0493CCA43B927A9A9
+ABA4D6C3767E25BB7B92552B56FB4199E2668AC6D6848C233F4A749D0ABC3E14
+CC3109F0709EBCCFFDC61F69CF028761B1F2944ED82DED13A20FD23A97A42DA5
+97FC3BD1EE19ADB3CB803FD6B57703ACB6B08F9B238DA7FE7E3A89BB18F004D9
+D8736B65E9E9ACC00DC07AE5399EDFCCF1BC166BB877B60F2A88AAEA69D00907
+447312168BF7BE64D50957EACAD6F655D80BF5C0F489D0720F91C083475FA815
+245DFC142C234035A8F4C44566040E323EAEE31A283B953C51AA4CAE024486B8
+2907E5456F36ACE1E6519AEF73C094EFFF9CFCA969D1D6C682188B6DD5750D53
+7C0AF155149F978BD627DEE143EAB28A1E882BA2C53968765CA315981D8B65C2
+FAABCA9A3D7370AB11B4FF995C6D84B6286C7D6FAC7DB3FD296322BE3163E6F0
+CD7F466AF7A32DEAC1ED71C8870C614EC36D05887742B373646FE6C56D7BB575
+8CC6C5BF1297EC91FFA543DBB4BCB6D0A01DD2F249FB3B5E554AEDC28A092015
+82BA4E0EF563843D527A918A0872E981FAF30D5FB29C948BCF6DDB8EC8DE4961
+82190DCBCABBB867A12F7C7E0112429A36DFDEB656F261684F81310D7B32827A
+50F995E86FFA51E4BAFEA27685B37D4D5749A7049DB00F3317D5A8DA32BD0E21
+FF816ECF0E59C9A5A3A40CD149397AB4F41AA2FF7E1BBADE676C91C00AC7CF56
+AE526C4194B534C9FB943D29BE07602FB66998FB321BC940721933CB0C81E041
+F842AE2A595183C54A52ED6DBC58E369DFFE052794A8BBDD888FEEF0720DD4FD
+B9B2E3043981D5438A0341C1A097CF58C19896DE5A7143866ABC4534DE598D07
+37DD09A7EEFA52CB468973F66C9B0CDD709CA493888A795A20D5FBEA1C7CBEA3
+70EDDD3483A99BF747ADE5470CCB656E204EB82FA85B0B745A15AAEBA8362FE9
+16EAD034CECC6FFE0AC86EACB48429E3D1E497747114183077A6D256075ACB4C
+2AEA605D86388F0E208F82F152D2AEE75ECA87D6FC3544144155CAB79C1A9A08
+5FD0189094217AD4E2973B3FDAB6DE3095E410EE08D9A8DFA9CFFC45EF2D3041
+1A903DAECBF3A8B3752B47B06AC006F25111E63DAE7A42541273A4EA772ACF8F
+F1426CFCD25AA1581F15AFC1CFA4FF019308FB762E8568DF012C97A3AF6E0AA0
+558EB834A2A1572D5665B03DDFC868CCA96FCDFAF777AC5DCB55230FD814DCB9
+0DAE562BA54FD01DFF2546DF6E59E2776DB6C8062AF45ED56A99B34F2794C38A
+2FB1E2D36BDBCFCAF50CA5F3BB2E5FAD1A31C7E71A5D97F2654685A366A2C6B5
+A90962D9142F7FA2FEE24D95E2F4E087FB20D742861602CB5547313B9F069FF3
+AE759E2D0959A4EEBFE3247D3AFD04C1F83ADFFAD2DEC7E4170905E372943A9D
+4469649FA534286F97FAD71C1104C2F495B930F832EAC70749A3889F8F1308EE
+2481226A3E653BECB5B98FC16216213319C3C055E7B1CC8AE431CF0C057A1A8E
+BB0B1548F656E9AD865D498C6F2DE40D1DE76A2637319AE8172657AD66DEDAEB
+F676935E02BC50B9DF89DE3462A9E459E9AB9BA1B1D95774732DE0383FB98DF7
+0ED926BA8FD29A8160CEFCD4E71E995870E92A697871D8A4C90EC95E83560552
+110C29D27FF31EFC3D974B551DEEEAB636A27EEBE2BABB3BB114E634FC187FDC
+5DA79F0DAF13671EEC47988D183CD9A26DF8769782CA381829A7C1335D6FC351
+09AC1847D557D2E76A82B37AC35FEC78F2B686D927FA8C57AB65102C3D90DE53
+9D0FC34551B57AA9C48B08ABC163B10521D27F521C327DDA55F3D217977FB3AC
+CE31FA86926DE4A80DA81FA56F781720C69A292FB91A146809A3774EA1DAA017
+B0183AEF8D77B39B1B44957B45B349412B45EFA0490047C7BB16CE5F3F5D0842
+C653875A8DDB1D2EDA87CF21FA5A4C35A5E6D798410FBE27512CAFB088BA2A05
+C730577067423D8D4FD5DBF9A602240986D1E671D6C850AF80DC5ED176675550
+51863FBA4A3F7650CFF664C2DCD7599C7C5A56D7F3EC3163F85C9F0CF0A2145C
+13106D9AC46BAE3373A57E8BEEEC295C079B86CF3B2F49D8A66CF010D21769BA
+6D964A102F8137520C9DF44079FBD7E76D46CE89063C1D059A41984CC1579D39
+98CC85EE377FD1B98E7EF1FB80CC550775A61D50747F317E6972545875718B4E
+E52E2D97C78A25E51ABB805140A06E54F7394E1EB36D74E2D8D188ACB9DEAA85
+E378751110EA72E3FD9E274553E785B6D682B5896EB9A83B119454B8EB50D0B2
+93BCB05CD705ADCB582314856F5DB6D6EEB14B1117CC953534072E660613C1EF
+46177DAA0DFA5B1FC1B9F573EC47C7C54D4299185DFEA011101DCE52E586E84E
+7F549DF9270F34E45CA060CB1F40BA4470C301CD2B5B69411035CCA381BC8E30
+2424D4F5986058AAD4FFF859AD373DCD68CB4E4907B8B217C9C1C716CA7118E3
+AD469A222DD94F9A19D25D0C0E1D3AA9B24FAD74A85B304DDCF02516BAAD26C0
+AA4150AB1E5699AE1FE63AAF5E2B7D210099063C3ADCE495E700A25613A61B90
+1482DBB37A89EFBBA315F95B722F5876867414B368CFC29D02A83160ECAAD622
+B849FD04232FD2F1DEAA35BC1BE29FFC261731AE5A07C17A50437103D67BD88B
+AFBC1C9DDD8E7516643C76F34ACC082D5E999CCC1CC5912BBAD01E736D8ED1D8
+2AC09479D305A9705875942426286CB7D10A305802545ACA124F96BC16C08B52
+CC74F480324F98652CBF1B5313FB68749C791ACEE702A983585978000FCF8624
+3008EE3BF8C090577CA778D1859E4C8D997E1E74FDFEBACE0BE53353E8FC5B26
+E76987DC5859B689A84B27952CFE665EC295CD5ED4D2352DFADEE1869B946967
+D30E6C142BA6830AC5179413CACF57BE0A74628151F028A58DD9769A02F1A785
+70BB5886D59E518902EF8175655CED531414F7B4BD4CC875EF4F51D64988B67F
+A2A44C60187D6D7F61EB187E1315D94FFB06851E43D02E708BDA0F9206CD4D6B
+BE2C38F72EAD5B8D5CFA5966616997DAC60B9429ED2CC832B900DDD150F6700D
+DB923D55C0C82B7BC25D7604718F70223FFA2998C449F2B647CD3CE61978799B
+1C9D1C6DFD60355F97BB11662652A26378E8E811927A7C3C8DB61AA1633A1CF7
+1F71204F661EE80022DAE06EA76393774A026B9B716023F8336E32347AA8EF91
+56F34F01C212D23502782DC1F3B4C4EC088AA25BCABD03C53F065DEEE6344E0E
+CC9FABCA09069ECD310E730C8E12575854B311BD057B561101901EE66760595C
+511E9F1929373B31829D7D38F9A93A05D461D09760E69AD0F182359E5287E8EC
+EE690731B95E89E46C0E6055D3CB2A2F48243507BC673371CDD6E3C8AFAFEE80
+10C8492A55B515E7F753880156886B544D17FBDE655009A000022DC699A4E18C
+162DFB0A3F8E44F6ECAF31BC2E766E7B598B4B3D5E9ECE9AD304700635009144
+94C3F3059F3E1DA6A849CBE49A5602A49F94AE4012A783F8E7CBF6D710B641E7
+A71EE26C8557AD5511D8BC1072CA1DCCCEAF459619F8AB434AEC4597C7D1CFB7
+3058BE49F4465F5BD1124B8E3933BE09BA989CA4993A59C30A16DB3C2B5780BA
+A4BF543D07D9E6AE773C26675C0AD961317E350CA11B5DE9AFB8E409BE5D2C8F
+AE5DC9F0FD473DFC18CC981A13FCA64B31B94EBCE6BE55D67539E421B60BB909
+1E8C1EE99485E083072980C851692A371C4FDFE197A607A2D6B1257295391844
+7F280F51DF6FADFE0AC539AAA83D69576B6925887EFF6FFC6C9073A9A4362F56
+5E3719F2A83951E47D92ECE8033DCAB213FC6A71857D97B0840E197B24B1942F
+29B658148DFD48142639C7729BFCA54A1A4B4368DEB39666AC5F1AAA817D91FC
+B8C833B96F43DA6A19F2D5D99B7BA2AAABCD8D603D5D68616546722A49152D49
+EF845383FB1DD94619EE7A317AB9606D97B9EC7F5ACE623D96EDBF4342D307E1
+20F0CE63DA347393D7B951CBC6031C1D3CE5ADB2949C59E6CACD6279CCD1A159
+5866C15BCDB938975C2C7E668C134BA27855E751DA88F5C75434DC8099D3E45B
+60C362C8FEE346C9D52EE2769D9AFD4CE1E995E6D9F5963272ADFE2671E889E6
+6936064E4EE7137394AAAE8291B439CF103272A0BF86B7AB26EDA3C7F1E68174
+E3B57D3E8CE59E14C19211F64AB7C4A00BAAB61EA42F62E9EF2A1F8D168E48A5
+353B5CFF6FC094088C98713465CC80BB851127694EEDADE92F177312634ADF44
+49EAD077CF3AFE8CB8482349F36EB21B8838ABAC32B188C2F13134A2AF2C95F7
+A543C1CAC0F0B5838599DB0BC7BD5A9F228C826276B1B8C856C9F22ACA3CB106
+18B32EDFA8CBD6F93C65C06B0A61B71E1E474C61AA8CD81BD7195F83F44A2AD9
+5D52A4CDB18B182E5014F4D7896010CE646D86C3E52192D1AF62090AA8269816
+25A2FB6A5339EF866FB41DB10B8B2AE4FC6E1A48F451ADE111EF12D2A66EEE14
+C6B57342010187A6DDBD3BB7886D7401CC35EDCFCCC70B182C139CF9D651230F
+69BB0B0F72ECAF1EEDE049A3E0F7574599432E8783DA487626E7FEC1945DA40D
+1B81B37FA156C775E5519B7C20F175A5DABEED9625C2E6E72349B3C0E0FF2C72
+580369B5645681913AB96AE7F9FC1E1B4C3B6BE5263748F695D5EDE23D50863D
+E6E602FE35FD8993EFF84EF58BFEC5BC10091C6C066C1BE307238EA2CB8B63D5
+F118FAA5ACE68CF79A17F5B56FE680B92B0B6B9FA04BBCC6FA928C08BB133E60
+4D51841DA848B5D7F69BD8C74F8325B47639DF0E7D77E979D965F6B4CE427891
+6EB149014BF3CB0ABD97C460AEC4B276D1746B62B8A89F61DE16AE3AF012B1D9
+E3C7FBDD5E4451AC3FEC65D92237B3A021CC2B23A110FA0A4669956D3830D108
+9A9CEA3DCA631317C78EE14A0022764E2D5F6CA8DDE0B381415F17979E89CCB6
+8AE4A108FE6924887EA9EFC55408D8B02365156A600162A581DDE5F720254D61
+B981FEB4D667766A030711BE460CC363DB70F6ED932F0C34D72830B7D64CAE5C
+77AAF0414D987CEF5ED01C99EB65DCDFDC92CEBB4E0C6E0222E094D910CBC840
+4F2DE1790BC0CFA04C886631EFEEBA9A84B5B7404D9FEE4BF32E3D996031758D
+0CA4338D57E7B99A39CA5221FDF114BDD260ED80BBCAD7CD4A763886BE665092
+E5C3835868CA5EC825A56B684CBC5AAF074E19F530CC5B1322A132ACD13F008D
+AAAE26C52EC3C36E74AEE0208C7B6E1D06720AA4BE6B0D15A740E0AFB8F6BD93
+10D7002F64976BB7DA14E790B4B9C32135FC22BF0CC052C95B1B657DD2C1BB0E
+14D5323870AC1492E6D7F9E0E792C06442D613B3FFD8908C638A30158C5023C4
+BDF26E9FAD6B0C891544D5B41B322CF83C811F0F7E3D857C1C955F7D43BB8CFF
+3AAF42D071321AA362364957F80A493255684DD5CFD0A24C8FF7BE567E8C984A
+EBB31BDD60EB4699E0BA029FFB4A0B324A6C283FB626C53112E6950A60E0B5CB
+039BAD4EB23B52289717A17FB5BB62578BD5942456EB8ADBB128EABD8B0E7368
+3498E8AE1650762DE105FC7C9EA3CB4CFD9E4C24C9FF7A6F458E5B3A609A1428
+1E6B2706930D08434E4B4D52B00489C3AB4A9DAEE69D5C7D99E6614EC894D72E
+91A333C5C7ACF0FBAEE0087EE7AAEDAAABF3CD8711BDEC5AA7E412E346CBE3A1
+897FF1B8C4BF513C62311D74347DD90AD7AE7C34CA7FEBF2E7A938E1C9B01713
+A29C12C6FF9E2CF4EA58F1146729B14730CB82A9A2FE62D139ECCDD2EDC1BC0A
+DD61311FA876042A8E0965E289FA9CA760CBC0F205A189E77C770CFDD43D2875
+4F88945499ED7AFF05F83C5611C95F1C4ABDC2996BB085BA4F1FBEB1209E5A06
+2F489222B06D929E366180A98771ED40CC947CD39B6FF24E7EF6F0DE3B06C50B
+19D01F235C2F89C4481C52EA09CF2BF724D398F1ACC037F3C8112A3F174AF508
+BF17344732D519D71B9729D0B0712C09250BFFF7A5221C4760673711398E7B51
+CBB2F1A3DF2EA083DDFE1D53A19F9674A28103E8EF156D130F72357DD020AD03
+779D685D473A005C2A6C858B54D4E50C509C190EE5CFE9B1E2EA3EE7BB6FADCC
+282AD33F0D5C9BB80D378EB07799AC745979E77FB4EB9A50D4C23C5C6E3FDB1C
+A2CDBB9F8B25E6D3AB941FC52404D93680C9F2F617E1BA8F6F2AA35BB0DB589E
+9E114B397EE125E8312778195CE5FD2C9A0A4D4EF0DE2B7902B6AC2BD3C879CC
+818C521B73E7CA1C8F5A57517EF1DD6D21C97DB04BEE6642247CC26FCAEC1E75
+009055915E85B00847C353B7A7ED0E1A2145D7E605F43198254CE938FF439E90
+7A528E54472754E7D1DEB5F1673EC25C0A90FA3934AAB835731FA78741B85C07
+E7FABD8CD7349B22338201B53CBE54415C9599C1C2920E7AE8264ECF44F2AAC9
+911355ADFBFB77C5EAF67A614FCC13C5B1D11E82C008BB8B494CBB7972900417
+40C2D6A2939E998564499097440CB9AFBE2FB0486295E4BC71931BD140FB2693
+D55A0F50F900C3E47289CCB97024D39307522CEB03391A22AEB93810AF0324BF
+C1D883067ECAE7B856C1F987DBD72A71B6B495FFC0492DDD8FD64B87740E91A4
+0E237B49EBE041D13CA86A2555F00131475C565A9B203C1C55213B91DFECA2D8
+025D9556F80FCF1537E04DF26D1A81DA71559CD5F37B6ADDE61BCA730A991892
+80475D99B2B8D418314184DC368201CA65A95396CFAD656361E5A8BC6EF6C2D0
+EB4F205F44F31191B1FBC88F892018DA6E28E3BF5250640BAA6AB33B31169567
+713093A4ED0AADD10AF8C92EE1A5A3B9005527FB757A79DC2E2FEE06FB92E04D
+B057171674D60778EACAC0C9BD8F7E253AAA9B3BCB173166DA149D8CB8819B7C
+2FC3262BEA6029B5FC0CAFDD8107785EFF6E72BDE892E2A744936D37FE7B9978
+4C4236B618312B60FB490B6CC1EF67CE437361C72551C042A7894E513ACBD9E0
+BFE5F7161A3A8419659045B5CBDB9F23803C452ABB56D5676FD00D4B1CBF0405
+4C53DDC3B3BECD56A3F2603D04FB72B74E921C72265B6DD70B36DA79BEA00C54
+E522C1CE6E0ABE134E28AE42C57520EBCA1B29B67FAF678A66655677EB8D06CB
+B0663F2E0181CA668BC133D5257F09ECEB92901FAAFB8F4B88108C7126051BFD
+A5FC151BF3DA481E4DADA710A0BBEFA8D8C8E1E0DA3DE98CA4B1B0088E8CAC4E
+5D6F3AA05D2228C62FF0DF3003FF97E0D936B39E0972CC543AC6DC00A23F4993
+AE844C6477EC1CD8C581B44535B5730F761F16E6E23A267C54383374A57B2994
+7155E17F76D48650BD95DCE2E0BE5DECEA3D2BB8D7AC00E0F192459AEE146E9A
+5B12E4DD2AD69F33034365523FDA513F08FA29EB13F50995DE4F5757FF68C6C0
+DC83E092E5E27B9C5D8DD45105C03029D4DDC8EFFF7B7E77A7AA51D17DBE4C56
+CF50FE17092D3D96A3A16EDD2E62B7913C9FED11A61D753379D9759D707A383D
+7DA686BDD6069A29B2A0FA0020AE5CF4E38292FC5BE96B9AE3E5A1E512A87A6B
+47E8C6A1DDE4CFC9A8CE4085F0F75EA09921061A73C2994FDE699777FBF46B7A
+6F842E4A9D80CA3E727753C99BC258840D97F24F82CCB47D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMCSC10
+%!PS-AdobeFont-1.1: CMCSC10 1.0
+%%CreationDate: 1991 Aug 18 17:46:49
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMCSC10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMCSC10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{14 -250 1077 750}readonly def
+/UniqueID 5000772 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
+900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
+87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
+076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
+9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
+FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
+B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
+CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
+40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
+C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
+7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
+FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
+81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
+5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
+CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
+0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
+E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
+22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
+1D1941E73310943FA782532ABB1116532AD67AEFE0758C051241E301C7E13A98
+6447EB0180BF6799814BEA4DC0F727D0A40B7BC3B1269CDE174453D6A3C4479C
+146001CF717DE25AC1BE5AEA5F2F1C17719251C429D3AED19EF17A6A68A46008
+E2D14BDE7B192E308040892B6E2353E03BCCA072EEB185D483838D0188848F95
+30B3CDF8A092D8BEE0DED21103F8D96F558B53DFF27690C1C55B275BA5D4FB76
+E9D9B47B8282CFCAE3989A1E0E619BC924F0221AE100F1A77C011A70A9B1F553
+6BCD7FF2C1C34393D1B286ECB33E50924668D8BC8BBAC2F47537EBA2DFF172A4
+E81596A542BE634B8D2BC811364FA8C4D0EC72A9B782859FBEE9E61E8488FDF0
+5C8028648567DB54D9B1BAB4FAAD84B813879E0940CEF9B7E23230436079A72F
+20BC5A7BD99BE0AC09DFB36A7004A76B3A64F6589336F521450AEED068FEEB86
+3B31DD3DDA1E6EAFEAB83C3C950AC9C353BA860F15C689A29118366667D5D3D9
+8E7EC7D858F5419EA67D26BBE8550B756A74EF623A37FA52BB371D53BE8508F5
+5268B21E77BA5F05FF93234FCECAA5993C9155C270597AA9829418E3AC0D2D15
+440857FD171B076381AF0F8CC14C2C334507E2DF9B300FDAC1CA9B0263FC3973
+B4B624801C326643B0D9BBD1132979DC553083BE29D2D36D01F30A68BD9A05A4
+351F90940213850BBF393110E3F6DE9BBA821C5B38259583C6B1A23EF460D9DD
+C304C664A245F3FDF879F6C425503E8FF61D41CE7D43BDDFBF55C64C3EF065CB
+64446F9F85908BBBBC20C22C188680E432D20A0BC50CF0B494FC68276C9C9605
+FFA567DC5333B88B4064849F4E63AB7E95CD92B722FD714173D3C3B51CBD90E7
+B41434F9A9538EA07204CCFB586268C75D55A66ECB5FE5E2506259D1F6EFA884
+B976C4B964F973D3515771AA43355832E3C2C2FF7707046FF63F5A5A0313389A
+010E6C135DBF77202292A97CB3C71081E1263ADD50E24ECA6523A2754D8FEB3D
+AC686A5E6249EFF2647F18E3AD3488486243F7A5369B07E6271D0D96A3683B3A
+BFBF91D735A80875C58C5508A475A7DF6863F88F3370F571338BFDCDBCFE2BEB
+8F3E29E3A18DD5B94677EC261879090C056BB343BE742C1951641A3CFF3B5A45
+B4B54CE368FE610549AC7092B16B7517D802DFFCB3CCF4FC39E0F80197942104
+493CDFB97A5C95FC12486AB34550AD6C7574374514E94EA1ECBDEE7D761F42D0
+39A526FC3182499BA9F64750050E9417428AF001221ADB4CA0328CD17FE8DD72
+F2EB64853922A1A85670DF5ED0814517930A94BE3BDE4751CFE23A8F37B84C0D
+A610F2163FE4D0C5191ED6D93B24A2549E254493599B1691E834DADAB236DEA6
+519F200C7026B92A5B8957425C6656215E624755A5332E8018148462FA3F0251
+AA1B1E85844D25AA0126D98E50D1F9A783FD7FE32087EE9585E06FF06808368E
+262AE001DA6BB224FF37EC6E78DF63501B3A86E55E351FBC61A7A3BD8956E6E3
+4F1494C81D8FD19CFEC510D9128C17F7C3C124B6EA286FB1160BEDCCA7D43EE3
+CCC6A4AF6FE739383665E52C5B3116C44BB0E6BF3C8CC0E0AC827CFED839B011
+6B9E3BD4832E4760A5CD8D444A6C519D5A4E695629E2BF157855F639241E2B9B
+403B1639802DC19629EC2CE0EFADB578BEEC6717F9810B85613549445F8E8DE2
+9169C803A5FBBAA9EC3AAC2A8224CA360A4537211D5CFFCA208999EA59DF25AF
+1D252F6C3941CE6B5D98DC64B9B6B65F1887A39387490DA4D5F696FC61E56CA2
+3119AA8978ACEDBD6C92A790F52CD4AECA8A5F0415379B104FF37C7AA67DDCF3
+6AC743639C3E30483F3E4D499A5CC0A34A302557F7423713CB
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.1: CMTI10 1.00B
+%%CreationDate: 1992 Feb 19 19:56:16
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMTI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-163 -250 1146 969}readonly def
+/UniqueID 5000828 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
+21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
+06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
+55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
+B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
+0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
+1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
+7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
+7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
+356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
+19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
+C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
+244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
+AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
+5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
+D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
+993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
+2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
+E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
+309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
+F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7
+E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66
+AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9
+17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3
+05965AA02B8A67AEB04D915DADC1B84A531A1D60569ECC2EEFB7B6B0263B8B5C
+E6EE63CED9FA74FC7C03610F6394D64BAE1BF3B50FB613A39C300CA5F4F16CAE
+F9B9F4DACFC69B69AF30E4FE9E41A6DB0FC987A13A3AF3F99127E5A44E7FE781
+399BF303B773BC0096427B18DFD0DEACAE196EB3927A7EEAE7434F70FEA9BF58
+81A9D616F87D300EE8D00E5133F8C8F4CC003E313EBBEB7900321482D9DDFDE7
+1208ACB39BE071CE8782DBCE969790F60A3D8D8DB321F9655DA2577C284AF543
+847780B6C8180221C63954214012810FF5587FC771E18013003CEA5BC5617BC0
+82B7738A9369335BEC45481E256325DBE2534EAD65078B702B38A4AAD3D5A918
+416A966D615A6359878FE529348904FBFBCFC583BC7C13947048E82CC9DC5AEB
+C93CAAF0E4A7EE6122B1BAC7D90198095CE7E3A97C442E22C2C3F7A901A6DAF4
+1F8A5ED47EF9893FC2FCBBC751A9062C53022123D90BC0AD5B284D6EDF4A8F32
+6E81114AA6C450B76A39479DD8B9BCF8C9CE2DE50EC865A05C51248D1B673EBD
+9C73FD10ADCD944C346212E59A4D600D5B2A14D37B069FD21D7D818F1A54648A
+874232873ACE88BF568875202F0221345F208DDBFB813785D054B9785733939B
+BA7776B4D388112431EA93230EE6D48ED168EB785DA2A30951289D3C0F3CC9FB
+525555735767B7D23E09F09BAF68EBC16161AB9AA18EB402E35CD7DF3FBABAED
+FFFF7FC78DB8BC9CEC143A337860AF2C05BD0FABEED88F43CC587629F89FAB58
+B677398D3FEFF710F350B6473D2E1E63AB7360C191B378EBB6E3A38FCD85D534
+67AD6A625D054FECBA0B796534FCE1786FC3F8897D66686FFB4785B002ECF126
+81D04EA847D9A2C6B86616B72DF3A3D28372EA726679800CF216C2B34D3DBF88
+22295E2E99A5CB8B26459429B0C29CFEBF1516CB05A17A6C481AA58ACB433574
+35090CFB7FEC2536E3DA126C1727A5259000C3B6E4E0F689B6BB99A4DC3AF737
+C7390B9234131FC503982FFB735A4138920623E5272B01926189E9F23BD1D263
+FB4C331448709A7BDC8047CC1AC89D940A359083D32E338E92E74118F7813825
+5FEF390A14D0497AFD059F996BE65AB6BE05D8F22FFAF76ADFB57D80243687B1
+4564D4E47831E691D5804E98D45A8607589CCCB3133DEB7A7901BAFC4E8F68EF
+62F16D906853206E3941F85DA2F89113FE1CFC024F16D7AE3E15C83EC3060A20
+E16B4A6E7BD0EE68DC4C5B858493CDB14C18ACB9F4A72A0E60FBD9E6CE5E57B5
+A10D740B9CEE5AC883D967D53328C44E37BDD96AC79CC34B6B1DF66EAFD564E8
+C008B7CBDC214BA5EB193DD6EDDCB1F4038266578981A82D9EDBC85CAC0D71B2
+401D7AF66C51550441448B75FC621EC9B4154BA36DC163AE75F9B06DA3BFE396
+9839CEF25D1F6FF7A6AD79EEF1FE6C26127B1DF1908931D910E1D98A11550688
+78B3CD95BBB18D581052FFF62D1A09A4E6946B89E6E07205D9AD33C76E4A892C
+7C7DAF7420E94BD6E2D94846F0D1E7476D4FD9D569A5DE0442D8F13521C5059F
+6A09903180ED96EF2A969FF1C8DFE7AA209DE315AD012D396513B85962A8B5FB
+56F7184D95D4E60137E7F822DCAA1C152740D9FC190396B9DF8E604B278E3226
+F205030C959CDF927D2916BA3EC21BE727DBB9C4657997B67D0EDED8F17804F1
+07A5463750FC3F1EE5A40FEA3868318004E847C7BD0358361C72B9A412993F16
+F2CEA0BABC078C57640BEB74A5A7F385972B3E4C131E479BC6FE552A0653BF66
+07F8D32A6472136ED1CA65B7488D13AA73E049DABF2E1159D284CACF536FB9A9
+BA6A66433C1B206A4DF057AD4A5B946A06CA94F9976FD9C21CD2E42DC3333EF2
+12A96EA0E2FF7C33BD41381CC6AA9EB564606C648E5401117F271DA778CFC0A8
+D4F637DF08D2679FA5CB8E3BBABF7163F8990D9A4460EB3BE8CFE5C0D9942B86
+83404878CDC3E792589DAF3309A1DF01869C89641F36E0A113D2A3F51ED1D8DC
+2324011E156F4FE2BFE476333A4C9FD49EE0A11A77708B38786151226B2571FF
+68A8EC713FEBB8C283E9457EBD23132E322F0FC64D78CC718D133037D32B4F10
+7D09D9F5DE7817AC6EEA754F7F47DEB5592C5AF33EA0DAB635F47D55209C7D95
+D4F50FEC1E0D651B9043FC9A45344E08D807915EBA34F2B9C66797E01021F7D1
+C38544F5AEEE14D456A31FD8B6099F87022E4D0280E4737469D1E9ED2192D239
+BE3CA5D684848E211AC878AEC5AFF9213D2D5DC6CD626B24A753145BBA10AB34
+873FAD9A701727B0A636895002F91629D6352525EB0EE90560A030C50E4CF49B
+D0E166526E70033BD723FF89619234FAF7D9F448885F4CA280F3E1AA7110AED5
+A610CFC6E7B0856FCA15CD7B8588C61C31F14297622D5FACF318F87709854E9B
+7B9533F8756A325DADB23D60076E372140C2CC5E313B6D0EF3F035D48CF4F5B2
+D2A8F40F47A1BDB5B48629F41899B445521217F3EAC18131DBBC19968E46DE0A
+5A251517EE0E0ECB9E67BFB18DA49EA29311B970C2254FBDC8AAEED57D4290F0
+B98F9C41E6DDB7F5787B57EF7126AA0CB882A49F6E3E912115D97C3F1F2FF091
+A4B2DCDD9546E4067CA7248FA17E503AD39B6FEE9501C61FFF7AAF60F7E04E16
+51F8C789E10BC7626E5B181FFFE44197E16366513B924EC2F8C2A16692F47BAA
+7F308BB9668960E7367A3CF9BE8F26C3129799A72D6EF707773A9984EF7403FB
+34B7FBB37D2C262F912A7287ACEB44B2C38E37BD4407FBB9FA9278BEC067F132
+A8C5019B04A746A0E0A5DE0AC799E8E92803645D02B208A81740248C057423AD
+354016DA23E06DA52360C452DA8EF0B6318B570DB0FEE846733974F1449A6E83
+689414E771A7D2E1B88202E6220A0324B01224B259F2869045275483B473873F
+0936F76A09B6ADBCBA60FF974A64D9E782B664A6D61FE7F658200A61337E8037
+CCBFBDA6F8C19687C9C185DC0117B9A42347CC38D2D96479F445644BD98D78BD
+D126823779A7B8DABFD98FCD628D9417B076BCE796630666A5A7F55377A0F94D
+F66310035586291CD29DF969EA8E5000636D7FCFD52241BBEDA800A7EB401DC2
+BE6169D02AAFBEC9D060C731EED65759B94756A9DA79CF2978E45B495A515466
+A2716DB59E86BEC1C1F0F295DCF0F544FC3F368F2B5838F0F3A5F2FC0FA8E627
+0ECA3634DA71FE6123DF97FD8CBCCC28B80735D5E07C9FAB5CF23E772CDCE3DB
+4C642F91B40E4ADF04B9135DF0293207307DD83BC6537088674A4E520A3C0328
+35D7CA16E55851337FA72249241E59EE3D7904F54FE68A41FA571146B72DD2DB
+9614BD062F58BCADF082C518241309B963B1CFA997FA1CF5499DBB73D97671B6
+29707793F1195432F05B6E2F9DA079E3A05740CB23089FC8EA4EC841D871464A
+BBD8727A32E56D93606624754D94AE285649740DDEA43ABC7837272A1E510D64
+00405F26EA9ED974780DDEAF358BA5A294DE83E7B457E00B61DD5946972CE08F
+CA1FE9EDEE6DBD378795901FDDF71DFE2E4873206E9DEABA5EDB4083AB6D8EE0
+2DAB24F4453B14C77DD40946DC17ADCC6638B84919DFCF936ECED9B89EBB2277
+2EF60C5AD2AC6AF70C415DAB6CB5FCD605E110B31F7F7D2A65A37BDB387B182E
+9F1132CD9F0A33FEEA9BAC8C0917036B53709B8E0764FF130DD04AF697B60D56
+A06AC319C30AC796E4E4DDD0DB6F752BCF314D110595B5B8E69548AD1BB7E473
+1EFA105A848A9BC8F5632BB234EE6543ECB9766B750A60C1B18DE882EA3C74B8
+6DA884FB61C677CEC00ECC662B9D2EBD0C411ED082CDED36DC4A12D91F2692EE
+A08F59EB954195581D7C91917A16AB7405D2083594E29647914637DA6A7C6959
+11137E86F19857196A5837F08CEC603ECD977FFE6D2696C4BAA10DF2EE8EAB34
+CF477EC9B3599BB9F2B793D1180FAE6AA01D217D2AE7C32394BD4A47B70A2770
+95222BF74285F25049E0E4E03C7FF658CA3E70E075CF36169B86502CC615E3B2
+D29D93DE2DE2EFDD4B0BFEC97D0D6447711790BDCCD7D9C4951A42F7FC727D2C
+2D5CFAFA4ED9372767E1A637FE1E11AB36891B43ECD3B81FB1D2284BAB32B4BA
+21B86A1A71E19A94EB6B3F35B56E193CD78573AB2E18D0E53D348CBF05094973
+53C28D0A88808428009E8568522987831E028E10DBD043ED5375F6C16CE7A953
+57AAB2CC7D0A246701DB755B957C7DBA92B22E660C5934C4E4589519DFE2161D
+2D50D599C88804F0119E6859B0DB093CFAE3DFF7412FCDBAB436D55241349A60
+ED07557F0EF3A9068461FFEAF11EEB657BB4EB8C183D62C5BACD3733472266DA
+04342780234E0F5D06FEBCFA2A127747CE25F85B963B9F18A5F97D7ABCFEBA7E
+405211A79540E8662D45DEAA47FA2E3924BD4E79FB5309AEA74B2CE703670CEE
+C6444CBDF653EBBA3E836747B6FE59D763443F504534518221B5728AC4AFFE36
+6955C9A0FF10CD2276E9CC8D53D9E79C9780D07266AB3AB316A29553A8BB6D54
+3582492756E77D3520BC84F44E0C7CB801C082BF13081DEA8DF7030B69C422EC
+CBCCF114C5F21B455753F8430397E77756ADD9E92993E2380EEC0100C97FAB77
+3C45FDCF2DF4F5729E19EBE2A5565F11D967D8821089216BBDF85D8E927C846E
+D33D0A97CE991AA5095913AB57C8B24591DA0871DAA6AF8F5F52CC1C77DF1C21
+A9C9F45DB72B3F7278F42C8952CA1DB26D71572AAFA72FBF45F07EAB3A868157
+D1D75E41FCF8E23DE39ABC9193BABBAE95C14368573AA426C57ADAB4044F34AD
+DFB78ABABCCC073F64AAE38F7FA74008DE75DEC22182CB2542DD23562A8FE1CC
+3614748EE7A29CC425EF263EBD90456097CDD03D39DE1556C1D98D2E298A344D
+0F7F0043C936FC97BBE12C8552CFC24C949F8912285D4295036A2AE054ACBCDA
+6C681A930C592D7C3AF7287D95658F34F77FEF800CAC63006663DEB2595ABD7D
+2FA53FC8B5AE3AB888946E232681FFFD38CF0C646BE2A95734409D62CB7DBE57
+B0DBCCC40C3C82DC965C3ED1F8401CA5B736773C974A151FE0E04F4148B78162
+9B0FBE5E97A0EFA1DF8A71E5A8404E62C4A1017C3A54C3DD39FAF8DB24D1CDAD
+1C8ED40C514718D98FBD999BE50A127C45E6300A0452689BCA250F296D768A0B
+0BF2DBCCDB33600A9C980DC2F0668750F652C7976A4A7C4DC95983CE2E15370D
+E89B115EC133BA2B41067CD5DF0AC51816932A8EA121DE0524E1696F439E02EF
+8CF213200946C501ABDC0F250C93C78D09F47A42D911983223C832DF670337D5
+BCBC22E305B6A872E21D24A74DAA5A3D7F7FB56BA9D9E0F8704AB8457662F3F8
+1EE9A63D2189857F5E6360BE45B30FFDB803F869D6E2110FD11E2BA63AAF819C
+4E6EEF8084DB5682BB7F5A925A9BD1BD08A496016EE16F721A18830F1C80B9CB
+5D30E0AAA64FF2EFD36D834B9AC9CD6566E9EB9C85F8DB2F358EA342B4C058F5
+D32A2F59E001F7B01EAF036AA63248FFF5C12EB6F9C85DCD4FBFE1BD240DECEC
+F6B255FA3307E3826AC230F5735BB695F6DE183488E979AE70C06D832B18A137
+9C1D9268EC9FCD98F7BF4D4622622F19FDD12871DD48394ECA17E54A81F84CB9
+008B3D6BA142EE03434F244EBA932FDE2C4480F281FF579946C219693F753C70
+619278D78236B133982BD13CEB947443DA5D99BA09284FCC4EF84287C8F9BF80
+86221B71B950556E47CE506D3AE0F6894413809AFC56FF4847060E0A02FE84BC
+B74F9841955F92F33E85D2AB370268596A452E296D20426BE58085FC9B099469
+9967BF81F4CD41FED39AD0784EFA3A4CAF45A7F9F65AA9B5F5A25F4F53019C37
+5721252D9C8B45DD8F673D78BC56DED6CE9042A64A3F1FF14C8C88D9D5B5349A
+6F38AD60FB6169CA6BF46FE56CC8F9A2EBEE468B883CAA38542ECD22648840AE
+52D4523D3B0AB2BCCFA9C47E878C64B29564BE546054E5C94ED7888001132777
+6F740D2C77AF00929D680B55664B0DF9D60A11872A4397391280817425E69DB4
+EE06081618A760894AAF5DF817563297528D651B8DA79FA1D8D4C7C008F92EBA
+AB76FE5C6AE46B262E42F0B87F63614F58FBE34FBCFDA8819476AF99724A1388
+B6923AE4ACEC74620B2D609DEDFE1517C648EF6A4E7EB29CC55C3DE830CEB385
+326B37D2A049146AB23574B81B350184BACEB2638AA1D16D469A11180F338246
+F4F8409F07041DB2B0E89BD6D546C408F23E4FB38D3C6DEB55987C9CD580A9EB
+444E19B3B022565549DE123FA4A399ACF8FE3ABACCD7BC87F270B5CD46BAC97C
+E8C0D8922B10B016EE5B5F789C616C4065A53B881A39D854E4700ACF9B4BE4E2
+CB51F1881946259CAC963697E16F7FF98B58A6D12125C91C5724AD0C2C9EE5B9
+67E45804DADB1FB1C26B51C5EFAA5FE952D967865B960AF7CD53E953EA1C7A7D
+A835717B50597C42597E90779634E092BD934CD57F03BB31AC6146C7A348D9E0
+A13D72001AB0A08D2995987E2BB3CB749982B3F1D7D64F89FA8460B310EAC993
+08C21A961AB05C252C89BB3C31B9F78DB7BF98701877F36F65EAB2391338035D
+78B8DC516A9F981085CA2983E14462ADF901FFBEF17FD28D65B3054A0FF30D97
+E96CA7766FB6F6E8895434BDF46B39349C09F51AFD2EC708DD34A663106AFEF4
+BF467CB08631BE9DDC706910E05FB47A3995A0FA84E0757D1B06E8416FBE1939
+C87033DEE9B79A1153F38EE3896532BDC999E07302E8151069964AE90E5EE330
+67D385A4946B8EEA3E1A964BC32C413925868E533F482B9F246E003EF6F56256
+8DF8E279A646EFE77686B11694330CC84F866CA65A1A9951DB54A68433CB769C
+B4D49F3FE04A8B716EEEE57CD70353714E541A9CECA049D855A665ECE4643240
+E6078982ADA038E50AF8DC5C34D7A8507DB808739618D85AEE1C7B18626C80AC
+291ABB68F153E3A73E3054BBAC7E2F562CCC879DFF7B83FABBE64FD93556BD98
+36C8A72F27A60B7460D2DE35ED18EFAB2CF96EFD7F0E986151DDE3C76215193C
+1187CED055687CD39CB65D2EFF6108EB5C2E038731C79A51202A026F2681C8A6
+7D780D60FABCF9BA28F9FBBDD97D3798647AA41A6BBFC33B94DC23F14FCBF374
+170AA553FF5B09D30F1F7A5771740AADE1B17B881223629896DBACEB6B4F864A
+9B316ADFFF28FF484E79F97749393B4B3087F19864968C8EA38A8B0B7DB218D5
+30FB8BF9CFF38698447558CE7783280755D3BE24629EF26E75015492E27D82EE
+14B3EDB69C2414BBBFDB5662BF59CC0D3D5FA3E09C875A7ABF1D6172BCC7CD86
+CD579FB9222606F7E96A8D4199DB65A569AD2B12DD76DB3B1B1A5DB6A6D35B73
+6C4CDB1CFD80B89908DCEBBFD560E1B512DAB5C5283D8EBB5242B36B510CFB77
+FBDA07CB9FFDECB03B320CAD8A64187D496D7DC86D7CC9A1949C2190C9B27E53
+E993ECEC353401B504EAFA850E0ED68C272216C228B3D2F4C5F8DA9FC77C19F2
+FC97CB6B70266100C5359038FF649D792E1423D6E9FA96B46F257E04E7168230
+352B81D3DC5DB365B1477331B64589778C2B5DBB6A257A37762CE3A028668A29
+938D86E6C5198F140231FB94C1502A07FDF4549039C12FE18E4D4BC4BDCB10B9
+EEFEFF193880F185BF69D65BBC65B911A4096F476F74C16515B20C1E25C85F03
+365FA9DBE88FCF29A78257589DD6F937A0849C51FF0B03F82372647FE83160A7
+ED037A3B37B7EF1F9726675D4BEC401A6BA89933905B3ED73731D7746B3561D0
+1EC8F968B53AD8BF5EDF4267BA4FAC7EA160C8FAA84E5E30EB67E79083773C2D
+FD15FFF052042ED9F4FDE3BF8F47E7AE71EE118C87CD353F841AC458530128F0
+66CE8DF25E63B63DDCF55DCFB0D669D59D646401E3691FE1BD718B164E8FC9B4
+EED0F147B9AAB2B823CAF79FF1DEF3AED953CF90DF4E82224690F1FFF996912A
+E0A4FF9D6410ABE55E515D06F74DDD5EE9ACCB9D130FA8A480BDEE8372028EE5
+46D08A914F14DC9AA8E2EF7495B372C1A819C2DF4E9EDF7BBA796C4F206BC254
+3E2DD44BF5A78B564F5E0C52215AB9BA512F50B427319209F3C1A517F968C5A9
+154D88252BDBB01409AB87D853CDFC7CC15E82FEA5E95D611273EA4A91903BD7
+1F549637264E363375C01584DDFE8C7D67EF0CD12E449AD9510E231A33BD8429
+EFA1CDB43A88BE39632D7BD7FE8C21CFD081A7887B05C1D36F974A3BA1040307
+47335515136F70193D151C9CB219672D02B4C3B342B2E890A2D3C9B7BF244CB9
+28C6947975642590EB58E29687D84F9E5681C3EC651BF07E9B1D21A9D45615AF
+A672415609092D3A27337979E418DB38D1B4C70B7C6AFAF8D2AF6FE8CBCFC897
+BAE7A5B0163B7072892737491624D8CE33AE1F5FA4BC261B87618D9C1D8AC5E5
+558213126F5DAD1A00E6DB44D4544E7848F317208ABA64ED7C2539CA37C373BC
+1CFC769DF0085E5A642611042CBFDC131A5BB131CC0BB8F8834BC68B410144B0
+C6CB5D6A9C63E149F6DF818CA87D4100DD7EED802D110975C982A552E72FCC65
+863DA091703D660F7D231907F0B1A45DC5C7E616FD4281C7FB621669D4F1DFB6
+0844BE8CAAAF0D7E95A220A4F01DF8CD810918B8CB23BF5957638DB4BBB3BB26
+7424C1CCD5869ABF2C51D9D78115A40E98EC4186E37CED646981B4D28495C91D
+874D9653939282637746825F5062B691CF719DE2C204ED584F254F5445286EAA
+FDD2340509E18C1F882DF26527C63DB6E219DF28862A57FE4D7317F4002D860D
+F08D42ABB8B857FA1D2A9F9B437597A5A1A7169532290EFBB2907E147CB012E9
+1F0E8D2EEA8DBDE39C41FD6AE38D973DEBBE51FC678531AB7D0B36B0671E9D46
+B17E239705AC7D7538C4064F97A1FBC5C00D286763856947CD23D150CC91A8B8
+C2CCAF635E7389B7D25BD0DC2AA002A6828B73450E09C87EED0FC42E3D3B4BF6
+9132840DC4D5BBDFAF84DB9388989B3EA6B5F465C38D553071F677166294C316
+71152021AAD24E98179F9951ABA97F23186C317A5F3D579B89655BEDC917EAFC
+AF2FF561D065D24F1CC3D93D83EEF4E6A44F50E5CF4238DA0460F97DD9E4DB91
+9F765B1699170C8EE07CE303A84301086E8DC1644707F3A27AF43648F6E10A99
+BD1EB8E7F2F97815D9759672B7B9CC4BA9DCAC459C48A40D52B3D62887DA1525
+2DABCEC91CDDE0E9CBA2B61DB771D049753E49F019B1810C6B1CEA13242955EA
+D421FD4ADF880D3ADD6D0EE8E889845AA073B89C9CD5CA34AC0921DD38618F31
+0DC2860EF43EF952529350C6D35E8140217CC8AEBBE02C2D7434F1131DAE3EEC
+5AB169CDAD64FD02803D7B527C93BB79A36E0C71587E4269373E1F7BAFDF6F3A
+0EEFA4E8D7AC7B3BC95371FD3A40830B10AC4B3F035AF788AB56EA28A4572739
+D9650F676DE15E077CBE2901E211963B58C73E52BAF0F57401AE17F9F0F3B6D8
+1B6F5A77DFCE1786E031CCFC3F5D68477F00AB729707168B03E14D897984C0E5
+97D04009C5C586D822E98C193A40427E9346F9089DD43F5B3BB18A3F4DD6C839
+FE64A3D2B605685C2E64A909508E2862A233BD1F02E0AF38DEF065AF9E31F6DF
+6612A5A726AD67853C590B149608C9BF4726C9A5AF14CCD77E546B97FE747E42
+4ABBF59E8952D0A9042F4B0835D9C7731F8C420F54CB415FE88057773BED8C15
+9F8C46D54CDA8B3C320A34554991E3EE50BEDCC60FBB29EF9D7CA783632D5DE4
+EB1761CCB53A5FBF0ADA10AAC10D810C16CB6FD3579FA03FFAE54CD66BC88155
+77DD7C912D2DB2D35F956866CDD20377A7DEED73C7A721AC8945A89170A6ADE2
+C4150BAE03AC7D5962891E7E321F438E5EC88207643A4389E7B578128B88A03C
+FAB2274D4F68985E8A6671A16BEB2910B17DEA7FA44AEFCDC13A9A8A08EEA9E6
+704BB2D9E515A493045B9C583EC5ECCE3A27B3E2B6106E50D5D43C4D9CC99680
+11F072963C40EFE34B757A8FAA87CD0C53A11B19EB9177100FB3AF4CA3F1A406
+C86A248B038F22F7F929C5C990599367098B039970412E1C2A20300D86BC34C4
+B6A9F4E08D8BEF062CA72793B21153FBDF3C7D5CDD693D05874534BDD4810122
+DC936615B97142753DA81C48B246FE22F4E1CAF624FA7B9F6695DDDFE2580D27
+00D22735157B34F1B5FFFABE4B95D51947FD3A7A4572883EBBDFF81A5121CAFE
+7845830F854106807823A0F0AE934C76A22AD0C52905C234703CC77F078B2510
+177B6451B6B0A6837AD3FECA71D12052C5A2531D2A26548107063EB251838C32
+32D07752C23AA3D208C042F688021D552532731C53D58C1A3EE12F39500855A4
+FAB9AF1EED11A22BCA4DD1A07AF91441EF2DDA1AB96DEF8F4217DE62F7D0D62C
+65A39EBD1310B8C094F54905588006CF450087AEB1B6FF1CDD4E60DDB780A42F
+883333F0D66DFAC0EB64C2E5C5339E9CF9C0E0110CED2E2166FE5CE3832045C0
+7200EA4E4897F9D65CAB47ABF9035505ACFA3DF0DF2D87E9A1BA09451843D24A
+DA03920AD4BB9B51AF3AA7AC2F20FAF26274EC184117B71946F7B6EA0E24A39A
+2E685ACEA0A7DC6CF009FC1F049506C1BD0F0B37C22AA537C881D637FE746F40
+7C23CB264A3C146392B38D7EFC889CA2A06C37B72FBF0CA8A57742EEE5390A2D
+420F21691F3B23EA
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueID 5000793 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
+0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
+B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
+AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
+97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
+FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
+20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
+0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
+F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
+3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122
+A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379
+5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA1566B96E221864A
+45A24ADAEC63F61C9FD18376D3984449A1F998C318A8FE36D0D5020E18A49625
+0F3BB603BA1F3E66FF412F6A32433FF8BD2968D79CE4273AD0E0CDDA5153C2BF
+F8A46A2244F9394A49D339F763F5A7411A3C29336B21CCB01723705AF589B078
+3763035411FE36AB5D744E81379106890688CB5BC41184548B7FEBA08DE7288E
+E6570FEA20C51FACE8E8F824BB61A4A038AB817C47B87391611B77928B2565A9
+3B27A573C05D36ED01D8F27CB2C793370FA9B90021B5696280A55F2CB6117B64
+293EAE0EA5A243F56FD007773CA35DF71B3D28643C25210CCE25F37A5095D6E5
+9CAFD99DD1DB0D7EAD454C13464DF6FF5DD42339797AE5AE467084550FC00139
+6EE818C6365007B2FD6E26285B832CFE6EA7E99665A224C9813C036CED262639
+3FB39C1F05FF8F31D2DEF37BB9B883334F51EA1243332FE1E3FC91864C8AEA79
+16A726F924AFD84F2F4215FB795FC41DCFFC835C90B9E31D291E47AA4BB8C05C
+620F69DF31E91A0FBA8E217CDBFAD7C4D480EBC1EB396029CDE615C227A367AD
+72834BA95539D39A38EA0CA3CF7F1123F70792CF315BAAA38BBCB6DFA80B4493
+5025F33C3696DAD6A0ADF584C71BCB1D29E523EA4B81FFCE15F3204022BBBEA0
+A9483EE8EAC07D581162672A0D66199174821ABD097561A263C0C0F24066FBE6
+0951F31FBBF2675141F3FB4457CC2A94A40191EA0AB2A606CF540BBB8887B6DE
+715EDB1041EBB9D05D0F4A4672F534397B9529EF8743BE88BBA10C81E0A46259
+2F2AA7B638E20C9C8A3A827977AB58ABF7525BE15DB66CE8E9B81457552073B5
+85DF3FA70B5231C447C5724E14730B90FA35ED1B5723036F1658CA8E19EF5A6D
+D333B78E91E4D7032EFBFD40A5A2269B0DFD9F7C3438DB58F94B507EB93032F9
+99E5F15D9F5D8CB031BBBFBCA8A15A617ACEDDE70DD9C2D9EE21179FB17AD913
+B4BF577A9046994689D1BC6A6985FF5F5A67D699C2FD288FD9E5BCAD5453EEC5
+68287BD7B8872726C28CD288B4DED2246B843577173450B6E5760852CF2E1727
+01FDB0FFFBE12CA13ACF6434AEF4B59EFF3E0DB1E87D35075B1D55AC12633167
+5A83A39056C077EAE6F2F7D1DDED300BA43830B8034F0A6AEC562D3023270601
+6C594D0359DF6F230F7B80B54EBAE4880AF338956B813E3B8DB8BC778BE0F612
+7D84939C2878B43EAA45BF10E257F22C28C2C148FF48843D2B52626148E3CAA7
+4527B9F246C17BDE21C6E7EAB4906BB6D9E84906CD1832C4BD9E405AFFE33AA2
+AE086C25EA26BC23D68986639366B99C87359915EBB76D7162AA667ADE4954D0
+B1E18027FAC2468CB2FEA2568E23DBC201E9B6A1151FBF21129A088D89E3E728
+28B2785C1A8B2637F368A93EAB459F80506435BE23A85396969E2AC4E0D6E4B0
+8B12EACD150049EF8942C108B96843159D4408424394B33603F565D1622FCB78
+0290F784C53309D68795E81FC040FC646FFB498B0BF0C38B9ED604F703551885
+EA5E14AC9EC356F3ECB8A8755599F616F019ED01D6A03471FF6B3CCD92B80E32
+0A6A9BB302F27BFFDE531C2C0F26F468A4E81C56E58A7A1E9092F6E71E855062
+0F052738C1AAC57D0692DCC0905BAED906D1CD74C84342DEA80974777C07B8B4
+669FE2FE12C0009C1BF52ECA36A06168E45B460ACD3CF4D0A7538940A45E7B2A
+495714721BA74DB337FFDCD51DB52E698DB41907F2724CD2B8FE102BD0BA38C5
+D87B9089A3AACDA1625E91F2C396B7E55CC7962F48B8552F946404D03EB99B8E
+EED8EA4CEE868AD564D2A708531B71A0D6E0232F066C79B54676FF52E9C6AAC4
+AD89618BB711AF215AE896AAB085B4B071D4112CCFBC65187CA1713C69F4A2C2
+471AF106C5DB1B42915CDD9C7DFC516E6D36FEB1CF4D3A3F65357A18F3BC3AD6
+FA983518BDB503CB002A028BB670B4EEC1104D8A2456E7B9A383EED588D17D69
+F66EA721C8473112F83F7C012767D11EDC2C3B0EC19ABADADDE49AA4DA901D81
+235D698819406A78ED07ACC8993559BC2C6B3759E485D6A100AFBA6BCE2F280F
+5C909A50A8E21D928D1A990025C0A42133B1C623AD220208F656345699B8D3D7
+FCE44DD3FDED1CD32EFE1A28F6D933124AC9A6A88AF94EEC6A5B145EE48C25D2
+DBEE6334BD9A32C18784C4F39E6526059E1EBDFC98497C3B758AC6F8B6E27800
+24D19EA0C4A26C4BC38ABB1C4715F8FF9A22506D415B33D9C0FACCE78AD32F24
+1522369B4163F61C7B5982967CE9E9D501692EA82B8CD7FD50E0B96AB41D22D4
+0AC2BE7E2E8EC8A24B833D07A9370C76F7B28FC04BD4BA241CBE9DD5F05EA561
+29631C4B62B1C49E409BCFBA31A96173750E4F0533599153667F08B1A20B3923
+42F105AC9549256A4F94A2BC033721C459A4C13C0AAC79CF77F0237F76B85D1D
+8688A139DEE1A7CB91447B0727B1FEF45BAEAD5549BC3DA0264E90CEDEE03944
+ACC82EDC8502C5C0AF7445CCAB80F97BC04C28348E970127EFA0B37A862EAA86
+A82FA713F042AA4899EDEA42DD4D4EB34584E43A042236CA4EEAE9CC874B0961
+5D5DCDC5CC6B1C053F7DEFCC4EBEE5B844B8CF8750F86B0B62DD57F43C6F639A
+1DBF68B72CDEA4793C6985AE1F25181188E8E822C86C3E54A3C30B4E020ED83A
+3660B2C9D13F91B1B7AD8A47E4C28762526045C24818C088BF533C77063D3177
+71C758D850BC0CEE2A1D94E77927E2549087AF4F51FC6CB62A5F6DABC33E6177
+8B9E320A26E8132B9590644641DFDDC0C4242C373AE036B74910297740FC1D58
+8E7F68583262EE1CC5FF36AD2355DC30BD4FB61718AC3981E3F55AE0C19DA046
+41AECCD147A7212BF768EFA88C960BA243CB487A04C04D5C17073EA8CB10584E
+F447223816BDD4B401B90523ED078B8F1B381F0EA471BA5B2A253C7EDECADCDF
+00F60BFA5E2EE3EEE82DB20BB8B627880899CB2337CAB801640475734B97985F
+4736599C46251CA5C6AB9F9A32242B0EE7946BF8FA4489D0B9FDAEBEF5032A9C
+413CEFE8334CD7DBBAFB1AAB12B853857EC49E611D471B4359A14FEABD806CF0
+80E84D83332139AACC609C18647E1DA18A0CBEF4674E9E04CAECC6DEA69707E1
+74666A3FD7DD3AD3E84F49985A1E0DBFF3476A34C3F10B0F240F143C9B55EDC7
+78E79CA834E74179A8DE230BD6D41C496F96B66A698FA16CA4252A2A331A4B86
+80E405164DDE48743DD18449D13C2B7B3BAF708F3B04CA5277295BB50567F8D7
+B4723AD4C9F567898251E9E5609C81112472AC830C04E5C5027BAB933F0DEF0E
+8C259A441E32BCF605F2EFC482D0B1CCBB9BD44C9A9C5AF564E5AB0FC8622D04
+7701FAEF8590B0FF4E7A97C82E5641B2503E3E661A3CAF25DD50A9E0A9940563
+0A0944F714D3A80ABF69E6A9974BC93EA89F59D1BF0D256B0F6144C134D0F261
+BA9204C50A18513BCC83821B02AFF6CA19B880E179A941434B595355A905DDC5
+4526F6829FCDAD454D28622DB78C76F0ADB199748D4FA77DEEAF69F32F695700
+0969475888584E30D3630DFB20FE00BC8F43C87E571C92D469E16F239BF66765
+5BDD86D433CE301914A3DF3B1BD988C3FB3CB4465A4F222597490E4756F46DAD
+D64EB4845AA5625968DCDB93DE4611BDD0159DC1B5AB20718B7342FDF37B9E91
+1D52806465CDFA7BCFE1B1AA7FD8D5CF94C2035F2489BE268FB7537ED8DA31CC
+B9D3222AA891C8ADDFB70955E7C1C71F043BF8503A19BAFF18B5A62C7B2176CF
+143CC77AB3C1C0399D7C894B8AD8E7171A23B2F8E9E78C2A22631A78D4F8DF38
+43E799557663D57F08C258B38A323622480A6C7715DC67959732DAA4D00C0DA1
+54D09F27F98D968448126D8042DA54478276731B132F501E4D3BCF9E5AA85EC6
+9B6C7BFF3E60333C77A928AA28AC1F7C2EC05102BD89A4472120A43F03F97072
+6999D44AEE5C63F41EDA189E9DA8D569DAF437059229B0275A90FBDC7AEAA05F
+900D0862EAC0B5BA210B2DF8035AFC1C764E118843710645D7A443F6484DFD09
+CD966036D77E46F3B544FE262564FA374A2B1D8301C98B87F1A2C75B80C91C91
+95ECAC136266441480C23DC001E2A26E3FDCDA663FC716BBEEACBE2D1E80BBCC
+5069FE7C356F46B957252B401086E6CB144C2943852C6B2CC63888A3A8EE3136
+D50E95BEFDCA9925ABE1DFAB0C65146877FCD60D35832CD963C824EDA4547A76
+64BD7C58065A674CDFB0200602DFCCFDE5105CA153AF97D989EAD1779C1BBDBF
+A6DE6A71BBFEEFF43487BFD652FA80DB5F64B998D0AAD760F5E7280A3970A4BF
+85AB625897B76CD6D3AD0F38A92E1108AFEB2A5FD9A3E4EE48EB75C1A9D57277
+06AE147DE39177D263628040A5F88E6AA3AA3C3E2514B4EF1604ADE9C23E9CB0
+E686BDAF27EF001A4BB607E78D118C75D79BAFF427E3495AB2E507D3F14E5D0A
+4F0F2793118ABE20DF90493FCED41DC3D71A33F1C310C14DC7C2168FE760A45D
+487268CF316318FD55A456B67DD97222780C151E5F02C86687C0B8E1264C3728
+EB76ECACE79673128ED06CE010CC3213B5ECB46BDBEDF203770485EAEE14687B
+55B498D5AE2A65C9F6E974614C6ED462740C95B91AEBE73DED2A9E455CD066AE
+75D0531E62C497CD40576F80D1959741DF3D2D9E215848F6580F04B30488A346
+2E842B09867F2CD0A009BB11B5A535C0BC7503D3172DC35A36436B81586576EF
+F287AFBC3C740BDD1D01623120E34B94178644D1633B06E4C84B0646285CE644
+5955BAC4FAD013A687D4C7797505028B33DEC20DCBE7D982EC2E89E9C2FCDCBE
+F0C3D84DA608A12E2220A2C6F57E2784D543BC7EEEAE597267DDED89FF0AC761
+738050229A687773F98F96F8C7925E5F8F01DE7E3F19485006AA45E6C93AD397
+B1189B212DC0C732629BC0240925CA84F61344E49EA7A1A9EED07184038406BD
+B170E688776038BF3B7BC1A93939EC5D3D1539771E560DF8A77A23729AB955B5
+B721D7442363547CEDABA8A02D9D72CAFE9B2ECC9AAD41DBF03635CFA6624714
+20C6C66BB620F09AC35E4F32875C917D89E9BE6B85741A383C375EAFDB6E70E9
+DBE946445877262E7949BBCC9B0C7D10FC8CA562CBF82E000C37DC504383C461
+5A9C9C390B0D5C2C256727379DCE21BB5F45A5118FD85EF24B29B2BA388CD700
+8321EF0DCD88A3EA13B0822F56CDB9D190B7C638CC21BF551F5FE14C410235D5
+44FCB4BEF0ABADB3B7E0DAC79BFC79A20DFA810800AC086C33CE3EA222935CA1
+AE7D1FB034E87DC39551E20931E0F67DBA379CEBD2A68CF14C2B8D21F6DEFF52
+3D8AC5A2C3047BC72AD1C1724FAA11B4E29AF58F40025D338683D16584C5F10D
+1416B71DAAC3284D78CD1B1100058089B90FAB5F1AB9B65DE37D999DF360D8A1
+AB0F673F17EEA3028C431ADE53C78FC8039F1ABBCB53A0A853FEBA45A6E1525E
+F2ECAAA084E55D2C1331C52392D6AD8410AD78E6C470B65C5ABC6C0D842E13C8
+0939C4538432072100EB693040168BCE6F1460256B54885288E0DA834340AFEF
+52CAE36A68AF16D3AD222B5B3247971877B0E16E8CF1A8614C7E2A1029FBC178
+366C2221CA8C4A218DF916F82B812177B6F3AA9D8A4B3D34D2671F428F17DC4A
+2F3FB9D69FD205709571980C62F8A7E68BF13316B432340F44CA60C3B304C423
+421738601D258EB3DF40CCB8DCC512AAE85D0DE2A969CA17951FCB36EE3E7F84
+220792353A0B2F0ABB114A904C4BD0060A3EC8013B1F862B93AB339690700FB0
+058EE2E274F3CFB4EE1F63602187222279F00381F779BD89D2B12BF1154D64E6
+2136EF9ED1C9047DECA752028FEB199FC6C5410B62CF798E1B796B0A8FE8596A
+B9C34C095A02C68006B9D3133E0ECE786F371F145009A6D978DB5FF89254CAF7
+0686D4952BDACF2674D68958A1AA837D565B03FE8611AF8BDE66131246DC77F6
+01EC809041B651D9A18549EE91CFD6B4AAC66269A53BC4721DE9943FC11F4B1F
+FC30F7AA87BF51B9722F24D89A8C02721C3EE5569DA179B9C9AC4145A4A9DF56
+683D248F4AADD1069ABD40B563CFE294583138CF7568BD98D18046E26804CF70
+B53295BBED05FECF4A1EE8FC5D1290C060CD566FA39B1F91408F60195BDF6AEE
+35C794415CB6949783EBE6F96848D2A2D1A3BD92F05039CEF27E5BC28A515D0D
+090CE887E80FAFF6BF0793B41414784F268E37F1E58525695A3C8F1F0EC77472
+62D6AEAAB73E779A6115ED6275B63BBD2F95ABCEC80E2AAFE68384CE04756660
+E072A9625CB32E2C5F76EE7F4C2DE617A93912E3829A501B505F28D93A9610AA
+238474EEA8E7F3844ADC8B2C72224755621F9D94335DE8E0F5A214F27170B339
+8C7238ABE579B812FA4A4B14048FD27C21735889C521FEAC24D662986787E66D
+D46DEBE90703AB1BA082BFC05CB67D7A24622CEFA31314B24C9A1F2E996BCA8A
+4A85858A78E6F0E893BB49342404B0B28D0F473F3B9E7C643B5BD6B3485C7DE7
+49E9C847D1619B68064BD9382ECD5CD2E75CEDF57DF4DA6F661F576525CAB80D
+D95E67966E9771607314A50BB4551A6A69FE237EBB4BEAFEBE59A08B2B8E1262
+F153CBE00EDDBF3BE0053B887A1F36A95AF99AC750F6AC9B9B82F3CAD0E55FB6
+1EB6F7427880085C6204643DD765368299714EF119B7D538FB7A2A159E6E9B4A
+4E556339DE089100A2A6E0FC6C234EA80E0664EE9FCCAB202FC5E0B5D0E53408
+A883A7292F287B208509860770D3394EA4D3380EF348180E02DAD7068760EECD
+3153D99CC2C9355B627F5C54CBA064025DB6CDE14A2F2C77706523BB96583F50
+B110C3B7C97B0BF4FEC92C55704A72CFC81CB5857D2337F5980FAFA554A78094
+35FEDA40CB1A5460FA611FA376F9A62CA7478CBE6CF1674180E595075D354C59
+A5F9E7680C9C8E6ECD6C5E9A84B6CE8FC18BED74D76C9E3BCE09F0523939CA40
+32AA4A9A97443BC7F5C4FB522DFE420604F36D8B2D5F76E3FF36E8439A583AA5
+867CB7A3395F078341FEC0716367C00D26925DB76868C1756150F6832F0A2532
+218A36811C4E97BFE2E3F8C4961A1C230B67A9CA28A163D450C3D9AC61FEB1BE
+FB668E6CA039C41CB67598FA42239E09216E66E2AB4C62B03728AAFFBFC8455D
+A4CE5582215D227028E6F5A61490D984EFD0C8888F695227F5A5FE4F12CD6022
+CA30F7DFEA5D10D08263416E2A9067AB6065F3A7FBAC0A40E5DD8BC5733A02B7
+BDDDA7FF6F80F4191E3FC198A1D8CC19EC42CEA1D139D8BEDB5D7C8AC83F4B25
+D31BF181C60514262EE1993D31B494DC339882A17C1092C92A2F17BC991477C5
+756A08FD347520966DAB6D92B65D9AE47F7CC10C0F2C517AC17A23789B85A76C
+82B4C1599FABC47526AD10EB17E30C8BC1CA82FBC514871A012654ADDA42FBFF
+2E1C79B9A16370079E36D6512BA0F6DE79A850ACB7227A6E2E33E5A8CF7F6934
+79834C17D20A7B2873667A96527E9CCA6BBC15624D3AFF942BA3292C0EBC3E31
+12CD8755AADC301E8B595ECD27C0CE43746222E62EBFBA432C448AEC1A78456E
+0BE8EDC018CC38E1C14A86D9247A4B7B042FE5E156A01A3B14D4FA8BD6861F56
+3D82484B5AA7042E3E5CF0BB8D0B9C166CD1051FCBBBB9C7B819ADB81CE5974B
+E7A9740B7E6A2163145417DDBB032CF09F8C0B4873E5CA312D5FD640F454FD36
+42D190C39642B6111A3D621CC1D7E1131A85920F9FDB9E96C67D42BCEB80A48D
+E597F42123507D587F98CE85BFBA27517796136B2A00FBADBDCD0AF59E9EFF6E
+6E8CE558CA68BCC96845DAECB6077E72CF8121D623A5254F3A0882BE047D6441
+195254B462A76267F28786E0D6E6EBB266127F1CB81A96BA414D58D54FD1F26C
+20643D26B5B9A874B902FBDC07F156A6A43D5D3D5F800957612144253575B5D8
+CF062B2A019D0F5A82A0EAF54EA661F9B26C8F9AC066D9C2CDF1A12ECDC7B225
+62143183F927893BC7C7EF78B718D0F1F1CCDE9D84FC793CC8B7F85AFE4F6E2E
+2F21A2FF352714EE12EA9E725AA0A2C2F612B86EF894F96559694BEB35D52026
+7FD67531262EFCC9F4F06798870AA07EEC59A516D1CD62CD62093205068C2005
+A706C113B38D17DE1E88AEF05B653087E641B29CC7F7BC59494151A1090F3240
+260E9561D49D76D76D1D09B403522783EADDE11DB46366753DD921B965DB9C15
+3164094587C9081C4A5B7BE7ADE3CBDB160BEFFD7FB4C8D2CFBCB3585511E92B
+C07943EA765BFAE12A10091563831999675F0CC57181FDC2BE1541F2FA5A9D72
+34AD5B69D1C31FD08754C93A1377F6E944017C857563CA9408AAE156583A0126
+F1B9D7380FE3C350E1594FC79252289B4A6C880B77E35CAAFF2D4937F1325F88
+284C04A615426DBAFFD541685ADF1B8E09A80CE4A43CA436A211714FB739D3FE
+C5D8ACD1819EF42E62A270A3D54CA08DD380C3D5A31EEFDB4A6E78A9263B3C51
+13067E52575BD9510585A2ED9CD1304E0A79AA78089136DFC42332A98F5ADA20
+1F700F343B55C79269A3741E8B54203D0665BC3E61C1B315BDD6F86369F4E353
+D6B6D23535C979862C98773F0B91A3C202F182C474DCD1D0951AE167823D28EE
+AD8E7F5397B8A7162DD0F7FFD0C06E464BBD8C7C6CD44FABAC6C3ED1D55E04E3
+01315AB50FE2FBC3D83C197457441C8167AE78BF7AEE6A742F1D4E84FB028BCD
+40D645753F6EE686002E3C9EAFE404B70BA370B6BA92D8B4259AF47C132F9B52
+339B78A5EDD567E45762B3B23DEF008B955EC36EF5FDF43CE2F13F8F1629DFA9
+6EFD20E4BF7398B9365E7AA5AB93BCAAC6AAC048B26DC7CCAB8576FB5A2E48A0
+490237956D91393E35BF84D0960C0D6D4D197C1B1DEE232E7FC6042B5D9CFA83
+D518D58110BEDB56BAB674086C2ECA695CEF25832D358745E82588905BBEC2B9
+8453B5859F7B896305A235A713392544B69C38F0FB20F768AB5AF2F91FFA1A8A
+AC97B0AD8F0FA466F789C9FBC26F651E567215AF09A612CF9C56B85685FFFE8F
+CE20C2452B0E4165637C48D6A77965D2950BF1F3655B78E80B95D1F792772AF7
+3677291AA358943177A3DC4BD85E3A5FC30A2735ACD1ABF14DC1F53FDC75ED3A
+30A85B60AB873CCC7C3BDF87E66318D3DDCD85C55B2BDC5C7E0B2C7B086FD6A3
+4BBD087558A3BCD7E6FC0EAAAB0A54DDF50B6DE1A73349F6AA349F8B57ACF52F
+7FB5D338A86E87145DB5E1DA2DA338D48388082E301B00BF16D1D1D97EDDB987
+737393EBE184625713A378DF538436FF07A512826F370330EAFFCD4B63EE28D7
+3E5FC47604058ADE79497AD324573CAD9CD147DDDB85E986F2F6D624359FADAB
+35BDAE9D29D9B3AE3D98848E28D4384700E7BEA1C262F3A15F449D8019DA495D
+12EB6AA185812107D8797B916CA89C1E2178277D8CC6D93DB846CE65707E0E7A
+9989157BAB3E835F6155756A24CFCC0CC61E17FE04B02EB43708FCA21A7E077D
+DF0D4899846CC74265187D6CC764853466E36B3DA04FBCBCB1F0AEAC2726C5CC
+EC0696EE09C2242A3AA5D3E6D9D237D69DC3914F2857A9AA8A4C1EB771325756
+9606128C2D929EC9F614E59B17AB90A3DA7E43DE4E89FFEE7F94BE617D2E9AE8
+F2F9F1A029C50B2DDAD89369C5640649C7EA0B3EA2D69BC5B4CE7780A07B0697
+26BB163A9A1AC1CC0640D0D414035466CB56932ED20D62A0A17E714934E1455A
+3ECB406BBC320EFEF83A5E15F45FE544A1049CC0186E85B4CD648B2067C6C5DA
+54E5E6295BE9B9529FBDEDE027C65E20B5E3075BD8756A51993613BCE468F435
+81ECA8D664ACCBE36E73F19DD66DD9BCEB3E18105363A4CEB258D3F413C5444E
+BDFA0F8E84D3FD824497966755F70EA68EBD25533A68438AFD7121A3050001D2
+4C35CF2E767AF8B49A0F216AC26ADB4D1E34C9B2727CD54E4C39835C666FBD57
+062742C86DFC02F7B7A0607234988F33C4079BA5C6F018358C8E1EC21D808FAE
+B2D5D96736C598AA40E4D81C0A3F2C7728B21109BC85614480260C68277B1062
+5A6FD884D718D67E3082BE8D65C047A57546B6AEF3F50C910952CBA770027912
+60F2AE5AF2386347D33D0AC79E414B95B4855D125A15342C64A034FBD2551C3E
+D3602AF5AAAED24CB8657A843D909AB399A4778967E83A1DDE590F106DC7C386
+BE3E3B9203BBC88A15881A430838D51CFED4B6012FE749B6141554DBF4D7860E
+D1196F3D19CAFA33830EDA660916AB7719D5D6174C87FA6837F3702FE74C9DE9
+91FC9518B09ECB84B65BC01E475A533E0090C0C838D3C5288532C1EAA5543181
+D3027531CD05E4A8DE4A7ABB637E40EEF067479A91C99D31D2BA78B815AF7FB5
+C4846B87CD6486AEA24F7CCB4F9A528AB3641366CA355727111ABE42AD9C5AB3
+292F1C9601D8DB4A640CA555F381459DB1836764FB1B4CF06D3C737698A71839
+517C25747F6E4638F440DFB117B76FCE927C9F4D5097B2D0A35EF318D2C5E7F8
+F8A69DB02FE61FC5841FCCD666DDA7B4493B02F1D692AD499DD07E17503FF352
+2B181F4B40F924D4D0B762485AFC30D4BB0CD929A07138C07CC12165EE82B7B8
+10E346C1335428ECE41F7987292A579E2875C61D462BE1914C961514542D8F91
+BFBEB5C4ED9DF3A16B61CD590678C3D92833383682A833BDFE2BE06A950FEE48
+666F025A2536EF97893EB4FDD9A01A570B7C4CC6700592C57C7A6015978081BE
+87B5B1848390B5A1BB3B03DD3967EBF78317A5EB2DF8377A3365A6E1A501CA06
+5D9852878C98AD53FDABB234DBD8E3CD2189F925C5C04C532A0B880C1C95D242
+83869931B6080BEDB8F64974DC4AA2C6DEAFA3FB4AC3359017BE16AB6C9D614B
+A16C570E325D96146CD3D448C2AA1FDF9E066BD5E2C05863F41C19A4B67A97E5
+DE8F3DE2150B50098A783090A044126A82D6E41636850669AF85435DFE77D032
+A40A007411AE1F43C329488D84735C1AA792D6C735525BE05B7D7137FE9CEA03
+342A73FB69B59659A2F3D4794ED5E1618616D3C47F1BECEC1331F3FC49573F62
+B6E11AEB2305EAE74B32161F2CDA353459B1940F5ACB372847B90A2868F80209
+7D9A2F4D7EFE09AFD8FDAA444DCBC2266192EAA5AA98BAC0B1C2DB3399CE990F
+51430A426D02AA859D9455DFB0EDBF2535F52156D49110A2B0F79D59DB6A09A9
+129C6CDD18F21480327353D4B9FDF14AC51E43FC8823BAD29DED354321230135
+53DAFAD9DE6F3966006B1943471F6322618BA48B555EAB448137E7D9A8D2B2C0
+FEB2CAEA03FFA8BE7E3DCD4ED15115D13D30CDE52FA9C239241E1D069EFEB4CE
+D69BD070D0DC72EDA36820616FA022E6D7B94AEE27DE38CD19B29BF0E070CAD7
+B803B59B7FC26C274132B6FF13E65BC691BAB06E58DFF4D788AAC82EF8633613
+5440302EFEDE90892FD544CF5B3C7CE263EEA7EAA86B3C4B346A654BD0C616E3
+90A3A0E597233DEFCD35DFD11C609C70DE28BACAE19A079BADDB3A731C55D76C
+69FBD4EC5BFB21B8CF7B9FD12F525473F87582E2C08D568C22A985437A145481
+1BA72A09183C92005F2F9C8F08550D15B501C8468E51BAF07998E3F6CB201890
+DD0F36D29B05921F968413E44AFC37DE0D50016BDEABE2E87D28DE73097B05E2
+AC14F06499F4C47CC300A1CFCD532746BDE9AD830BDABB74E471321B5CD09D0D
+3A91D39BAE84791C57039C5D7E878266BA15285B97A04ED5B3BDBB3F442C58E2
+84CF6E6E86D838ED8E9A0367D1782C6B5C21F806E0488AE173D6FA05AA5F348D
+F34F425B4D786A3B3AB1B29B30843EC23A755014C5BCC1A035856BEC41815081
+CC08649E3FE729E56B5D6D36D92FC270E92B419AC3EE27442A3109214F72D229
+D8E464911A47191AE9329CDD32FF2DD2A1EAA2BA460D2ADA44A07B9D3F920614
+997F3DDFF9C987B1643B37942DB33B91AACE625F2586335AFE25BBCC7E0AAA93
+CED4ED54F42898C4A1C27F01ABA5D3DA1063CC6125DA18A58CF91DC68DE5A175
+7E8A5368C85F089FCA09222EA108A56810CC166518D4D31F1F926E578941523D
+4A4516B58C7B12C047D20B4A14DCAC96B9BE1FAC3CD997399832EFD140D4E865
+037AAD2F4DD170BCA222977F38CB5023C421FD0507A943A7A0AC172DAF3672E3
+CD332711E44A9AE8DBEB439688C30DC16F36487E8EB5AA9A388C95C36690D61D
+0110542BAE8D1065A2F40C0C732478D43ADAD0AB52BFAB90D0275D20BEE518F2
+679C7CB3DE9FA3916D7D28897566010C0C3D8023F7C745DC0A6E4FA2A2007E8A
+E903BD73DE5383A642F51BFDC14E7CFC2C3A7D826782B321214A0681F1D481FB
+A0ADB9B38A4B14D7682995F0A48D8C29CE51AEAB923F488D675C984D09D8A7DD
+FDE4ECE11EE3AB2868B9B55F5B31F95606FA7003CC08B162979BA4D334545813
+487FA6236DF01C353E1DD5B5C54D7C8A0A5BADD1A8A103F7592F1A2C35B032EB
+D9F41179691CDDB69F79F042AA0163B7EDB54C67156CED4B2AE78A51CB5E8C0B
+2090C99BCC93F57862819CD5B4B5602843FDDA81CC2F780C44F1A10DA3EACB59
+63656C11289E2E1622C32F2CA42B9E2F0A54142A579FDBC600C8265AAE781EF2
+8CE62609A846EADEDAB6C80650367AF78A35E192F83A9FA8AD33686C18F6CD48
+D1353BED5582D886885034480939E709D72913EE77CC89182D3DC208A352DC2E
+E160106813EDE45538D1E6A42B058374EFFC4CA57588D72D6D91FF4462B7997F
+2074C95FFC2C1A3E2E61D51D6607592B37E7C69262C99FE651C83220B6248A53
+1A7A876DFA75BAD2B74EDBEBBF57FE3F3DDE41EC182162392D3A7A55CFAF4E45
+687EBCF348904DF69E9DBFE4C7CA8732CC14317AD05189BC7F45926EF8920D15
+D0117E5C9E4158C763CC4EA90AA3C6F5224D96D64F5D2C949B0FF6408C5D2EBF
+BB413E10933751924021DEF7205E7186EEB43CBB733F571AFBAE80C9E75CED44
+4B4BBA96637F17472AEE4E88587C25FD55C05BAFB5F6C1BFE79932E4D5F0BE06
+931CFFB9DA799BB561DB4CAB5953A7396BC3824AB9E3A1E6E83F142BB6D5B169
+6E71D77C8B3A9CA3DFFCF92817B12E5CCA35B0E61DCAFEBD7D5D2373109ED6B3
+3B5DF4B1400ED5DEF119564D16832FD6342FB107C290DBCAAED574E3456CBE7B
+DEAEA8D2F063762C156732D8803188589DFDE81999044428CAF7531B1938498D
+D62BD8364709E318162794D3C78DBD4B385F9490E14337399C534D83500A8E01
+18720385CD80928C7B739410CA632DAD790C4D520AA87D3F995F1BE0AA5BFCAC
+EDF9C32DA415028720A9D9347727586F32A838D1A41427C8C2733CCAF6780B42
+282ABFEF4C67D33F3C0D64EC67FFC314C56C2FF6991D3979CBB95FDB9552790D
+6DEF38596B3B7F03046E363B783693AF4AE72E023B0B63215B65D6BA94B56A84
+E8099835F0D1E4FA0CFE5BEBB0812CC72188C706CA5EADD3D15533EFA54E0087
+F5962216710F6832ECAF1E79B2B01BDF8726BBBE22A650A4FA882690773781D5
+822BE67B2F8E944C08CBE60F7764882E1221BF1D9CF0C0BE55CDA80F966F7057
+78FFE0C328B60D02F9AF285A7C8A1BF590551622429C18C1DB51CF076882C141
+10EFCD59D8308ACFBAB91C18538AF23229AA71188858C8292261743CA5088697
+CF67A8E070C8018FAC621106AF4C702227D28C36A535A1E42FF5B07D0A5C835C
+12DAE66A9DBBDA8B66C3CF9C9A01E2FBBE45468D0CC43F52065A1C9E41FA2083
+9DBBC2B58DF600AC43163C22CB3D44E83EFF2E2FFD2938C7D8C0184760ED5C89
+422F8B6EC49530EBF0FC0E9BAED65D3F3E77AE0CD84FEA18D5C94832038C16EA
+E2C92B3C8310038600BB5614A8453E19CF2E3638B08A97BB88E4EAB72E372A43
+22723A41C14A58A07E2F39DFB44DCEF8E0EC08A02CEB33240E38F854A1C5F12C
+7298F13D70E27FD2DC10CE4D1B3F4C3EC940C7BAB62025729B408F12B001909D
+054A87B9C006B5994155F967AFC7804DFA4DAB8E69CBCA980A236BA46DB82496
+7AF668918576FED3D444797D0039261096DCA549D75ADEC62EC06F0FF99C63BC
+CF9493F76BE4D6F4ADA83D31AF623518E9F6A3E9065030D4A5EC146123C2E56D
+6C9AAC46CD09003995DCFFF5445FFCAFAEB794DFB21A3F57DC9FE8BBC09F9A39
+D91E42EC7EF7E045415CEBFB9EE4C055E0606001A9D9CDE0466F867815307B4C
+C34434866DE68262E84F0B7B6A6882C941D943501E09772E88FF06405123F00B
+B030DB4BE5A247A6794901C9065DF937B26B11A2C354315AC3DD23D50674E1D9
+42F217A002F319D2AA76600C687625AD4739AA6C75E3EFBA83C7D861C46FCE8E
+4BD9A479CA938C03DA2511B9C7CEE79D0AA8603892578957DB09D7EFEA9AB8D4
+A9AB219C8B0F7D9F8AADE5A03FDAFC52733C5F86B3032363CD880D4668D9204B
+1B60248A5FBCE97ADF14451CBFEE285BA1C94C55AE0F950FAA236F97392F1297
+6696A64A9565FC2EA94982BE7E0FFD3C0784659B0374C956C2679B46A8A0F5F6
+A3DC4298606334CD4976425EE31E3D48C2BA195E409C560FE09C7F5C556817DB
+8FA9D689EEC1C380C5617592630C002025FAA269C41BF8EA5504923DBBF00194
+750AD95E1E46781345C2010DEA5124FD7168DB98131F050ABC289EA1F0999112
+A632ABE28D20E7A21FE4BA087437B1D69BA76EF06493D3B04B0AB6602B8264AD
+32C04A3B99E790183D1B26E9D1357C66471099CF3D6E2E25B14B8F253143D080
+B7402D08022ED72C4FDDBA53D9C939C2F7982EC6B7EFEFDF32810C68AB89A390
+A4BE42723847D8ADA39A04A90F16A0144225DDEA4E00DCF444F7235422620606
+582D792C7D175DCBB91E157894439D8088F84202168EF2B6F6A2BBB74D84D2E7
+1828D293047B8F694005E644F499403F9E52FEDFC9D9D751144E115D555FEF2D
+0A8729447D05387749BA9241CEFE63EB08972754874C3A95E03D7AE4B479124D
+4026A964BF9460497CE0F867E0A8672FBF827806F0C5E704600607F58684F53A
+80F1E72555D16EDB2044FB43E73701DEA9546861AC79209B0753354550C0FBD3
+B421E6F1450DEF1836A9CB95AAC5E02DEA6F0674216777BB6E34A897789C3FF1
+3C06E30EFC83E3A6B9A3CC9EC9BFD19368F46F5E502CF35B4DA58B8FC25139B7
+E6D38B82B0C96C8472744CE23EDCAE7360767DBDEE1DB6B9FFBF52C523343C02
+7398C68587776D8206535D07562EA5A810B708FE37E8C027CD56B9F430C1B8A6
+26AC2ABB2ACBDA66CF3071D6EAF7FC9153C6FD646C71AE8A80C0EB0B21CC8571
+6E6F7885EFFDD2D21F734C493218AAC2B2A388585391ADEC1FCC4A6327972E76
+F33B6730F6E8D4A03C6211994E3FB80600385343076A7FA18ED645E7E973E3D2
+6899DF62E594608B64DA6A31F6B67E51979366ABBA449265B8531BCE82AB4FFD
+8A1623D1EA596C527E7E8DC59EA93686AAF866C6266CB4E3185C369FE1C1CC2F
+37481F51D119638A15209DAE28928D7F1CEA6FA475C8E00B5A6EE66FD24E5B07
+DF25AC2C6C9DE8F4083EB14AE83A1FDDBC990B05E76D75EEC1330B07EF9F2515
+3CB3A2DECE0EA079D6266A75F3FBFB994570E09BF8C2B17BA6BA3828BF56D6CB
+DFD7DADCBE27EB84D53DC0563FC2D88B81F6128F05C5C2332539B0E074C8FE62
+98B8FE245C67D79DF5A3B24EA7349965974F7037FFF9E5DF665C12E2B7D22385
+7B17D49E25A85F0951DD39EEF8E0B0924FFA1A3263064E5B73D9DA0DC00A61E5
+1C18B5D0F1CFADA56199D6FD46C4787CD23978ADEFF827EEF8E671C1C3E095F3
+32DCFD84CF8CFC8E9636F5D4B1DC98746670B2D6D6E201BAB498EBC2B5013A7D
+6F41F15CF0B617B85DA4C2FA824FA3C2F6187973149F7CDD8EACEE621456EB11
+6202FA4F3980624822BDB7FCC34B72BB78234B48826869F285A6213B7BEE0DC9
+EA517FEA86931B510F814E9F3161446379EC6CD1547462E7DD2A9BDF7434C5B1
+6051A4E37BD55F8621E1AD88EC5BF0C2DF959EEBEA57D6BFA7AB1F5275EE4396
+0B7EE99EB9792CAE0CD2D0830497C1CB7F65B26977853660CB511C2CD8C6C78C
+6994B1E678D74C94679C234DBC4A46D2A58F97066594AC3D8D6657160315376F
+E399C9531264DF10BF198A362FE814C738AAC1FC92628610AD3EEA045284C156
+38BE96F4EDAF53400E1E9007DAD2870DF92921E9009DF9B9461277F37848D2DB
+6615995E43F25526AC41B8FAFC7DD84702B8674419D8083CC6F5FB81AAEDE9CC
+05CCADADDE0AFEA7195C0711E4A23AB77D104417E6E1DCA38048A503C57C8478
+2F842732FAE8CB7DF9313BB5BF9C8BD34F8FA3E60A4E383321C9CA6A45F5C303
+C1107B39BD6339788E2E9A053951CA0754FC2989072FDBDBC31F793DBEE2D241
+E508D7AA00536F8EE2317887A48BD094E5EBD87726673508A91F20B303D1097A
+705FD4A05F9254F3E976887469CB60532399BAEF2D2A6A3261A580A7BBE982D3
+1C5349C6532B49C448662DE8CF77065AD53F107E518BD2BBF7598BEED804B598
+5E5A6CF4F33CEF6C753F3E39A0D9F71ABB5265FEF341EAFF6B6765DB583B7334
+71AFB58EAFC67A52AE85D25C4D23749C629063A5A30616C47554CD365A681DA4
+D800637710A09AFA352FD5A239342AF5674C1A03E789962AC52E367AA3A26DB2
+A2695F8065008FF37768F504EB4A1469709BDD677463FB56994057793A2213E0
+40A78666D20BB7F0A9FA19546D3D125FAA5830D4DDBFCB5B8385C731A01BA374
+36CE241BB0BDAC2ABDF5C6159FE9004D64FDA508148C2E52EFD8411E423C93A0
+31DC5116B13B528FA885D80912BE401490C72564C2E884CB8A876EB7C7027A09
+B4737ABD4B3DE2AAD3036E9A69BC2A8B992CF64EB084CD1217D8C2BA7F3D1AE2
+FA30C4E8AFA4DAE7710D5E42E21EB42391D9032BAE202836140B05F25BD1D39E
+CBEA5E5BCAF1134957757006D7F2D911F259B146A0A50A28344496A6EEE5837F
+DF12865B34FC0BC7098FC48CD6A38FF1AB13FCA38F41EACAB40AEAE48EB38622
+7C6B8AF3FCD466FF69AEAC16C92A43D6565DF5544B72370F0B9CF72ABCAB260C
+4897670977E6B4548E1283F4140151A22002FDF6B1DAFEA352642FF9F5EA0CF3
+90D3ECDFE6E36670919C0A89A9774F4D4A2578DFFF6F7A19468E11110E79E3B9
+96EEFE445EA31DB9EB1AAB2898DFE59074FFE0BC5C116094F5F90DA5586CA1C9
+83187B8843EC9A67F8E0B2F8CE60F98607FA233AB58862F57815BFE9A2353C68
+5FB99917F5159AB617883A326FAEB440CE8F3D89163061B1D267720E6430D60B
+17CEAA9922E78C4313F32FBD296B9780DA937E9057DB524FF32E24D9EB5BC282
+E4E95F580227DC454D90A2B9CF028ACFCBD64740112D21C87BDDA6FF63631CCE
+DEEA055CB8FFBD62ADE13B70B546158CC3C0C5C4C7F528CD5A3A04976F1844CE
+E06F6625EFB715A911F68F7C9EA740BF81CC81585C76EF3DBA8ABEF9C801A5AE
+C2F6AB80DA3CE5EEDF7E62C2E77B6F2D39B281DABEBE484C1AF45738D03FC8EA
+B19D501569D8493A821F12B2C7BBD5831A5BB2E5E1B7A20E9539B4AC027F84BD
+87E4108427523AF7ADECBF27E34449BF394555FD3A5CD93E77E07F6614DE381B
+0647C6946CC965940E32CFCCEAA0EF8D583750CECEE9F6F9B1811AC85F969C17
+711F90E023E46E94F954CA82C5CC4A261F13710D1CCF3C4FA29A487C31AB3917
+19276AFBA2D30969DA9B57FD53D8D95188390EB1844288A88BF24C6E72DE2923
+291375527CE8B3ABA0007F94B9A327BB14FBBD979E2493D063744B00B9BE0BB2
+95782982D62D9F339C39A0DE21BAB95A8AEF01B9F859B96A9AC88A1B30E77F87
+945A0DBE672B0CBE378B295CB1E77ABB92122EF18C862FF81E46E033948A76BD
+AC1947F6B7426C2CBC0C8D8DD54308096D28FD776A9311684BBB217DFDC5ED68
+748F6A8B594188188F08EB37CAA1642BC39EE931FCC943E131965A8AF3CF6E3D
+C0AA67C637EF6462EBB26A823ABF3A45E043D55684AF6B1E3677CA612B8565A4
+4CA9B2A8DCF7FA3E632C1AC3D90D4B049008A746B9B1988934CF3F71D326EDE9
+26C2F488BB4FEC813A25B7C00134D1F13046D968BBD8C1183B2F38A84CEF0A10
+199A9326DF070A0CCEF8D582C0BA8751BF8EFF07C39675DFC6C8856CDED4FAEE
+D36FBAE49AF8780AE0B0B1799C15E8BDE0180CFEAD7AC531E0EA0831D28B1DAB
+7053E185B46050FE779C47C5567DC49EB40129F756F95AA1E5F1D1AB23E6B943
+3AAB440FCAA6D24B794B6316F7B448012D553602C50D58C43BD15FB4AEF3BE6A
+F2FDF1804B6A2F03D29184164BA09546736F964267C503D9AB5330F1B75C43CC
+92CDD1CE007C691FD06744024946027E1577A046133B0139679375D2A3F351CB
+1371418735B0F50862BB71183AB0FD181FC839E2AD58986DC04641FF366C5CBF
+05E092593F45C3E7FF17056AD025DE3A102964B8AB8DFB5003F8A59F1686B1A2
+5DF77E234D5A8477C3910A5341334F6343CAF64E95F9F8ED998C55B9A1E01402
+55A44B138F9B8D9E6E0E7C55ED63861910B575280A574A11DCC77D950FAB137F
+81AD6F311C5E8D038A3E848F9DBB9995940DDD01C2FB82686FB155E5686FED96
+5B677A9AAF678A392826886D8A72BB022094335594338F33D12751F0482D99CE
+E78C1315ED0566808A31601FDB81295B3D819D5E3373AAB3027D238448E82591
+AD7189BCE3C8F7E6CD01B1807C6951F840357388EC04DD8293703A8FCF34B10E
+5B2BFDDE9219C46F7E1265E0B23E4451E94C8C883F731D843D49A37C346AF1D1
+A1A02E5647EEC7D93F86417C59170C49F1BCDF0FF84EA68E99018EFBE7A3B04A
+4E791E506EF5B6E9CC81596A2F733C79BF95E965E75A42088273CEA162108693
+408A1CF32D257EDDE9B4578BB74DF1A532A548EA49EEAEF474538380C5B42845
+217EBC88D1B7E7833A2CC7A136B2BBCF1056C365A15D7F90727FED240F705357
+F70C17BD938B103EE0A637F6EEF47FA2004895BC2E53A224A36B8C7CCBC84D97
+3B030A367720F54722F61D17FFB0512DC24D78C31786CF048F826B0CF1A3A761
+B56F14C8C817D5AB06209CBE5413498A3D2606C31DF3A38DD069852329A73F1D
+9FE5152DC88AA4F1B54F20F004B5AD0B7C0B9CCA2B1D04BADC8729F155AE14EA
+483B0C81B45130F8F6383901CF6682A3CD03585E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.1: CMBX12 1.0
+%%CreationDate: 1991 Aug 20 16:34:54
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMBX12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-53 -251 1139 750}readonly def
+/UniqueID 5000769 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
+7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
+20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
+B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
+68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
+D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
+26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
+F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
+77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
+BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
+C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
+30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
+148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
+E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
+E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
+337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
+0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
+472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
+A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
+3318B32500F76B1038FA6122C2AF6261B025BDD004EB9575D102D625A351A20C
+914D7D79EDB0FE343726526D57A9A8E3916B437A95C895F542DF4685E4683CC7
+5729A4B41F0C51BF910AE542A1270EAD05AA2FEB6B95C3C5D068210D457D1D9B
+9901C8946E0E7F47B23BA12743FE43A1E7DD18C56A6CC68C5E4A22180E24EB3D
+2F5A6484A170FF45D2C5CDFEC7958ACD37C305412BF2757630252907C69FE044
+85724CFCBA4A85C02D4F9BD5A5405E4C0FB1EFF4AF9CC41401B5ED407E78B0D1
+5C0676C625A5277809A8DD0E44091329701D8ACE4A981EAA0BDFEB0B26110396
+B24839B5C59B1FE13EDD5D4B4E7893CD85A4712726BE26357F427EF53B157DCF
+77791447877951ACC19D5AF1C2D7375BE53F8AEA5E0CD8A2A049A9A010F44016
+8EA0B32EE9732E0263BC6BC08CE2C21DED168F01F84901DCEDE4E7322BB0B188
+72E01DF47C8A09E4D1F8B9101D3CB4F99F14D73CE3C6513F42C07DC2A44B9882
+3E71C143105B500C6BCBE3EBC7822156F09B6218AE132A02318AB74AC975C384
+66FB129B40786C5A9916ED434F37B849432693B652DB8E763926F35877BD680F
+07D3F37A1530A7C1CF9C4736CBD6F37D8FDA3F3E315920308FE8E03D444710E0
+0C3A7CDE50CAEEF26F336033C286CE4A6A49AE54F1C04408F05871C1A97526B5
+2F7D454656CAD1F8E6EB9F00E5D92F477882784CC7B353DB1223EB8CECDB306F
+504CBDBD674580DD1F1D83377C7B0330174052B3F1BCE44D2DF40531E0F04EBC
+3F2F78F2DDC87555003EA9221898CB0DCF91536992D09DAC5CC3B4DFB5FB8795
+F7440C4C5D2093E742A68FBB91B62BB460A94FCB1E40359DE96CA2DADB381C09
+3785CC885CBFD3F0FF6E071447ED5A66F709220E694B7BE98DBF8EB0C58D283F
+D96B830E155CC238B74C746E9452CDF87C235FA620677341FA29030F6670CE34
+05E07A27695B172BE7A490FDA7A039DEC9A8F0EFFFB443A0F845B4AB29BE64BA
+CF1458E617D8E4641D4498A63F611726D1FA46D041A06B0A2D6EAE84CCE159CC
+F8E9BC776EF171CC1FC759B464BAD8958A3D59CE4A085E00FB67356600B242D4
+141C0BE6CF443BDB33A982D8D878E2E72542E415385E374924CEAA3DD022B523
+420011661E4C9CE26D00E2F6D81079BF2985A98941CDCAFDF7F79E2089DD82E4
+F4CBFC2F91549EA859FEC8FA310D80767A2CE6A6C22D3304BCE453CD627230E4
+D68A71441EDA836FB02466981BBCCA43EEE7D4A4DBB6DA80113EF317EE6F9921
+D7BE3711FFC06D672D6B9065AAC922A6C5ED4E083C781CCD144361BC9335BABD
+CCBCFA8CA1A6604E4CA6C6E733E64A9C64F14B37B06DE93A26C00539A0556291
+7DB29A10EEB205C938E7E221E501B383510674963A5646333432D64CF0086FB6
+E6FC471089EB6A2EE2707E7A654680106970720DC03123F6167114AEEBE9D7C5
+0169A9E8229BC43262DE297BB5417FC747C017BB8EA882990446EAC4C5E748CF
+F5CBC4B322AC52C526BD5C93C5E85B33FF89CAAF22280820FA37D7BCED9F5FC5
+FA1102AF04E97E376BB87097B685493A045092085DD52DA388E8FE37309BB9C9
+2CAA18ADCA556F3565A5A469123C9181E01940C8DC8F830AF7BE26B578E0A6A0
+27FB0050847EA0B904741AC997D7FE61137A40AA3F01F8DE0F5F395DCE3CA642
+6BADC8667F8CB0B55407C7E63BC3B2558BD7719689AA9A321ACF68902974D9B7
+9966412BE222A5F6FC314ECB68CF3EE36D3893AFFBB328175E91383508F7CE08
+E6805ED0207EF98D24E81F582551EC58F4E4B11A5F10567D6559A0BC43F52358
+9886589897A9B83E147BBEA3AD853DE76925F746F5820926FF0648081EA205AC
+0DEFAFB51CF9E6DAD1C54EFB2C5CEA2A0B06BA6E9F05AC0522A90B9B6202AC92
+C62CA81D8BBE71F6E0FE077FE7548F8F0129115504BAACAFA7D3644EB7F21013
+1709728DD27A5FA0EECC81A5CB67A7B4D62A9D8936A8A6E66E8902FD5816A95A
+5F5E93AF6C2194819E2AB7A14DED341A918AEBE313868E9157A0C181DAA8738B
+1D49BA8DDA1D53EA12D2830FFFE678C90974B608C9D2B64D4F5D03325DA85FE0
+4BE31BE362CC2EF7E1282838E3CF32BB77DE7BAE06D4323C4D88552A20368E35
+4EAB8AB8589A08B163F4B52445BA621436703B14085D86D607B77207A8196827
+135612C8F68A3CE8823452258ACD62B49197693DBE921B538BBC576F4490212F
+D3273C96234FD9CF8CCA91FBC604DEEF29FAB1886647242EECAAF9F3B459CA4B
+FC39D1558A995007E983E56D8CC102F54BDD83EE9B6BBE97F14BA59FE7768CFA
+9E66B67BE552295782D9EC921AF10827ADF4CE1F665B5E99B0AA0B1ED2347DD1
+CABED5C69A070A9E966B0AA2C446D72A213EA63C963F5ED259FDBC159A56758E
+17FAEE2261F2218C991F4C01CCF0588764C50FBAB5CD4A9D82EA5ADCF0ECD6F6
+2D0DD12467C9E56E5AC86AB4464A943232BAECDB35FC1570755357FDC6448678
+37F495DF81FA6B14E7CEB15DBD684413186F6926925B4446ADA6B2C435EBB83C
+1414A3510826C886EF3644D6D9EE1C8BC1D08EB8D2E89D0FDA8D620877B5476A
+4ABA3BB30EA169105717428CA3FDA5951F5CB9F9F25D6A728DE7793771FED8CB
+9A95114D62E9E0D8386B6A20BB2A29BDC89E9FEB443DEACD6BB98203C5ABC058
+F2A77135B0D1025FDD3FA69760FFACA3554FBA2D6D7869D57022D2DCF8FC0ABD
+C42D9A8ADECD313645C1875D95332005853FF338502191CBA545D54F4394B2B5
+C01E590FA3E1A05FE533D05E30E8D1273EB1F1CD50598E681E01795F07DA7D38
+8B13CD980633D0F912417CF6A03FB58422A41F7805238131DD6B5F386F794F3F
+91C1706E93A7CB8F4D52931039309CB64402A47ADD4D912B25733A83525C793F
+DEB65C79DF5B5ED1EC7BE0983F109DFF1AB8352D96B09E79CE067BA9A97AAFFA
+7079D65B671498382426CDB813C21C92CE2A7905377649FAEE71E92312E13FDC
+CC76BDDF5ADC6C1638FA64D24B1A20E3050A16374FF6D684085CD6DC7813B8D6
+AAB8940A5B3EB2765FC3DB232A2A7276E3098DA0D4149334B9063DEE4CF08F41
+6DF7C4B9E3905497CDC3AF27910997AF0F439BD717BBEF97631F1D686B8CB995
+B04C1EFF6D9A3128781327EFDD83DB00CA01ED39D487A65297063467B62F4A66
+BC1F3157E11654FFB57220752926716D2D76BDF2906713B36329E84AFFF83EA8
+6A52BAC88B8BBC21C9CC320D5642C594EDB81BF5F274F8CC0D7D271022E68D98
+076B6C83FC3FFC03F68CBC8F50121938CECA1C420764EE42103CBA57C3B42F3F
+97CD855C82C05EBA1F18A248AE741EAFA860C3D81E87320C2B4CCB9D8FFFC35C
+D25418221C663185F5704527CDF5A3269024C71BD9108DD611CBCA539F280BFB
+8C73A102FD9AE46CCED9AEFCCEF3C7641616FE4348F843326600D25C52625CAA
+46CF38F2506B7E9F899F161E424B0DBC6232A8C6D7DCE41A88BC996FCD0C0254
+8D19EC9263B30AD1D47536068E9A10CEFB585B56158C9408E9B67AD217FF6981
+AE5C27D9AC1BC7C1D8D549F9F1C4A20F9E94D6923F9E3257D41AD5C1030A05AF
+5B4A4BF214C8B2EBFFCF7196EB0D9AD416097460E744046356C388F5D61F4EAB
+ECC0BBB95E4F633A0753914C5FF19DE55AF5C2128DA653700F15E1496F4051AA
+E93EF416CD1709A9FCA1353D4F39BD52AB1F3FEE7F76A925A911447DB6643A53
+CFEC3605EACD5B77344E96A1616B23332C610F3C350FA60768CC69F7CEF3EC3A
+E83F45A7B8B93B32E5E8E155972F4BF5CF94D2EAEDFABE1411B657ADD719868B
+4E25F0AFF33C425BF0293FE25EEC2C1A5425B9EF2504DF462715978A95DB52C4
+E0C59A5F00ACDEC355348862CC3209BDA712504CDABA0450D9CB6D3CCFCA7AD7
+68F2216FF98DD2DB3C52EF34F2CEBCC4C918D6D12904EAAFE6D9864FB53C2A75
+0906419E1406D9A690D37202174F0BA55760E4C8C7C8C540DE62BF3C71FE57EE
+F40813776C01732E6006878D387D2495A985D479241BDCC39FEDBEDC3EB3373A
+3CD74B5CD0DF67B87B83211EE3FB7E3E0F724CF726F2F7CF4BA0FC99B4E0AF18
+61F2BD33C511A4F8A9125E123A571A1956B7959FD98FD69755D0938305A31936
+7FF05D3025920719E895D444D9D4466F815703EFFE9EA5207D63F3C0F637072D
+944E9B7278E39155D500BDADF2335FBFA219630A921D49447005E52E90EA2974
+F47F8525EC53A701E015866B3A5D49D2B96FED76BE9CB393046CA16BF5E345CE
+D57BA7357733D7E0A0256DCD83AA568E77CA62F015FB78B9A7C2FB34E9F88DBA
+FCB509E9DE54324DF2A345BB6823BA139264676E796B67C89169E247371B597F
+D52E59A47CBCF6F2D7A5B0DE6325CD92F25C05AC16B9E847E28C1F367D0CAC6B
+70E56C2A4259532F8BE34F3BF73D0E91F28D4F24DCBFDDE5F0B03D7002A0806E
+72A3FE6757BE5F9F6AC00F8A13E4D8A57B3DA9840FA78047F81338BA4A73719C
+08867BC242BA625EA95036438F786A6AE9C279700B0F8AE6770D900A4A03EC2C
+582C57444C4BE292C3E3F2D2A6F44EE0B438FC56CEA00B39DE2419530F5EC182
+2148A4F5B4051783480A877A9AC2DCDA457AA22CEAAC3ED8359D1A69FE4C5B05
+631F6EBCA62F5243CE6A12760D30E93ED9C4ED85434CC5CA892AC0BD436C3276
+E719027B7854CF43C64AFB7F1AFE440AA2BA051774B036DFC96829964D176D93
+7681181358C73866ADC17E2D123ED07025ACDDA6339D80FA49D367775DFAD732
+E18B657D720634274EFAEA275F986314F1DB4AD016C39955DB03E358D23E5F0A
+B20BDD2C8992C9A37AB53E9CBDE159BAE1A8C0E847627F956FAEBA8E4C88D742
+A59B1802590677C15CB01AAC4E800D0F389792FC3F069CB1435F0C127E0EAC37
+E546970E12B73B54015B69D03069DADE098C845A023880DB7A999019DD9A5C10
+B7EAA4C08925910EAA931FA54D984519E680DCE8AA9F1BB37B86E390FF69568E
+2435DFB1ECC0A76F5DA3A388C92C8AD2DFFDB343AAE97D2297B3A7DE009DC317
+40659B3AF073940FAD177CD36AAB3602A1AD2457672FD78660CEE647802E9619
+A95A171C59EB6659B736D84993108E3A3528664ADC37E421FC770CB42B1A0554
+4B0231840D50BDCACA9FAAE04CC1E616E83797026A1318E19B171E7ED02C58A9
+97C47B0EBCCBDA62BBEE544F1EBBD941CCC562174DEB2C0970C1F46A565D781B
+ED017D747F56E4B8E95F24F25C9E044BC1796C2D677762D59E27E79552B8EBD2
+7A6F3E6914BBE29CE44C1611CF15320D57121B47C59AF4FAABAB32CFC01C6FD6
+9B8ACABAA6BE1AADC1281E063B365AA0A7347336B572D074471FEAA3DBEE5A0A
+E28002D8500F14909565DC60061E9DE5100194D9D05F5BBD1C66CDA1713431D6
+DA26B6FBC5F9B6862FB974F0E55938F8C6B951593BAC412186F5AF2E812739D5
+A03EF04CF484523C95A741C3B51B8D74852ABEA8657049535228C3647E9BDAE3
+622CA31985132362D3FBD1D65A9875AFD0D453A520F645BE3BA48FABF53D6D7F
+F4FA4A09E300E437C19142740DF86801AAFBB446E857DB5E69E0BDD1224C7332
+924A21B233E92F1BED79DE12AA891D5518CF17334D00A0BB3B9F56E841A5D4E3
+80E42693D170D418127AEE7D758A501E34C1B434A8012BC94E7C5F3740D2F58F
+96DB1CA4B41CF9670BB76B0122893E8AAEFD7E2B255509A0C3B09D84334EF805
+C5473E7C2FEA7AED67C5D7D5F7AAC1D49F4DEC5E94A4AE87C9D17C114F71DCFB
+97B84C764BCDD59B13E100148C68B4DCF091145086AFEA1BE28F5147A47B4795
+3A60F6E3C2124C4102103F2EF933C6A05B1978ED95DED0381449DEE0A2890766
+66AD30C5398C985A54F8251DCE7F7D675EB6969F9B158C680DA99E509D1F446F
+0D69D74644F72E2D4CE98E964DA7CE4F834907842B4CB6053C029CC7DCDFE5EC
+DBF8898B1FB9743E86AB0524C182ADEEA78119762C7F01D93B3D06D8BAB22FEA
+EA21227B12B6AE49895607815CAACFFC6DCE06EBDE4EB89BCFDBF9EA53F8DDD2
+9C38CC226077455CC02411DFC73090D4579E68C4E9B2944701E64B2330BC0852
+FCE0B86ACC6E14315312F6D9D27AE6F45362160331C1E9324386EAAFA42C273B
+2E3A86A8AFF28BB15F37E006EB8050C51F1EEC39319EE91C8DF452D31856B3BF
+B35EE1CD1D484CF31CEE9AA4AB5CC08D7781140AEF44E67F36639D40761BFF30
+6C13FB87D3F99164EB7FB7A0DD947C11D896FA6BB7945436E2260EAE3E0405CE
+BD760023BC3AE6D16DFD44EF7FC446A31DAAEEF9F46D78F89CB778DC7F3D1F5F
+9622D3788C72FCC307B85C892C1A53EFFFC750E70010725D5D94E5CBD1B61426
+14A366B8D542F9C0DD1799206BD37BA61E6D3C073FD88DF142D9C3D9AE0ADE9C
+D8D7483581C7836C979EA816B5C9F7E725D119DF7C83D5A2F8FCC6243D380C34
+3E49852251BD6F2D7B6CFE9ED257948C25DF3118111C5215C37AC1616F8C4EA2
+E0285698A1F9F953F374D68B8E01553D5B4CBB354E8D37AC55C8C596678081C9
+75D7AC1168BF59B7DF5088B670E10011EC15CD7E43FA23427A18708A613E2159
+1F7313AEAA360D729FBA11BF7EB1B49490F87046DA0DDBC4D5AF2AEA5447ECCD
+449CB28AEB38F39A70B27151388A5BE0B6DC6A0166E70D1D5907A204892E8CC3
+C1A1FD3F4248619530CDD48D8DE663B19192544223B7D952DA788EA7324DE02A
+8A5BD917249831880E6EB84D94C28CF2FE8EF24210451A2CC4456DD827EF8E72
+B95440D3B4E3C6D4D93F21913E3F411D1B5DF381CC983F43672486EADAC9D6C0
+FBA62AD4602F1BAAA2F49E94B69A0A464B43959D8ABB6678F7452B5A44665F74
+5FB8F64752C0E60D9B6B1BDC28D3818FCE37158944AF9EE6125A1FF9247BD993
+C026316E6986FCA3F7D1558C923F0CEABE652176DA56A49329973F8E5709C428
+26CD37E5517710DE625BF642EDD8D1DAC9B7B0D36190F446D99887701136C4DD
+89091502F978DA69C4F4150F077F5EE77E8453063F0502CEB33478782748A519
+01D2A300E74102D5DD3EFC135D6A142217E5F22296863CED10CBD38257E9E83B
+17C1030715D375CEC6D149642BC50A444033EFF550EB346CC64B1E39233801A4
+997866DE97BE21D9967389FB4A2B39A9F5EAB73B9A36AB7E37861E23EAF0EF7E
+8463FFD79C38433AC0E63CD67A9D7CE835AA25CF92909EAB0E70D2BDAF4018C5
+ECB8D98E8A647EB8BBAABA4AE130C2BDA7CBC1F8F26EB70B8484D70F33830737
+BBDE88359F09476BBD6F1743C544F30E11DEE728DB0607A1EA183E3BEB1CF94E
+73CD46E16343B13831909499B291B712BB749A376FBDB968042497138364A66E
+394CB0B37135ED3A6A0A2A93B4EDA2E8202870FFEFFD26A78F8D31C5AAD59C47
+CEC85ACF77B340A5D0F93AB0E75F54C25C8F0685FF58169D3AE759B8B4869467
+291303B20529F6811B267879B06376BB43D987C5DC7B295DDA27961DB73E012F
+981192F6ABB391821228B61E08270C5E030354A736E6149ECB3B387DDF247E13
+2A96F9DDB2A385ED93575CA9885DC757C880969FCECC57E4184B44CDC324FB24
+9161D894444061B728699DC54CE2B8F71561BF2FBB3431C1424705D5360EBAC0
+7092D224B79DC24A5825347157B533A89C8AB759CE33C13617C685375BFF81CA
+034176A7340940196D4CBDEBE1E5A73B173B609B880BD7758DB6BCF2D6130351
+5C0153B5BEE6B08AE39BA07CA17DCD865DA8CE2176D86DEB5AD2202FEAAE1A36
+3182F60D8471E09C6BC3566C7543190F8FD85D2B0F6ACA6CA364BE0EADCB48C3
+EF35B897FAA70A8062AEB8610D092302723B476320C4E1899444BCF0C0B7BF81
+9E31215B9D3BAC548CD3DCD92AEEF29DC0C0E8DB063F446D0BD36DA181FD9C73
+C5D9BD4116449A0B5560A1BCD50C11F87797379B19FB70CD50CAD6552DF81E06
+B49F5365D63CF885DDDC6A49C3D1E75E42654451B3B232426D169E42C3238CA5
+CE2E5BA0A1917C69106D714E3F86CC261D58B19CE6F1F1DEFB9AA9325DABE8B1
+3B763A5B5720EA8285560C857A3E34DDD805970CE8168AB3360C3E71CEBE1811
+96B0C99E6C0BE400DA7BC384E99A3EA43325232D5F40CCE8C955924BF0D39466
+C27D857BE94A12117A4A89AA9153ABEDBEE210B5BD9F566EC066CAE8D548CBC5
+8E4ABCDD22AC6FE79DBB194905DA1C6601C7CE67DA2657C4C1527892C97D8EBA
+1EE90197513859C5F99163D802DAA9221F96BF35F1006486BE4ED43950219B9C
+C6B86C9B314CC1C87820F4B6DEAEFBA4F2B5DFC1DBC114DD467B9D452FE7F2D6
+142119C23737EA34368B449489135F9CA052DB22B5594AA4983FDB7FCD9C8EE0
+F68B5D27151D54C82D17011D4ED2FBC6167CB5B0767BEBCBE181C7480F984032
+968D03D771800F06069DDE864E835ACA60AC928FDEFE289647D559AE3CD19500
+E534A4A1D010C35BD8FCF83C2010AE5ADE65323D6AE65140B1000FC2B716E4BA
+F7321279EA9E7582C8F69DFA73436515150F634A66263C48975B266AE6BE19CA
+5FB1C51CD76BD1E92950D9C923D91E6B276FA90F8DE86F211FEB5B898D661AB3
+8B81EBD14533F060E436B636D8066CCF045AACB2682991CAA20A42C01086932F
+F59CC4972FA7ABFA283621D03A50BAFED17D287447696B88550B1FC94A4FC9F2
+018A0B73B99CB807B68C76EB227E15CC40F31AFE14900ED94B8CBAA6E499FE93
+23396B7FE08B116564B3BB6A02DD3759D8FA2E6C2784C068941DDDD42E22FC19
+83099E0636F47B242FB26F581119E891C82DC5965517DB3DDABB19D2F5845FF8
+49F10CABD7A2076120D08B27A3DC954976B71EE181BE5F1F5FBE93097B2C1C35
+CDB6F746D1EFDD7E1E94B59ABBC71A0B87B7D1C724E81047A95C1142AAFB6200
+9475A1DC6E14FD42E7BC2980EF7C5532E0E6C9AE9C848A57F42439006FB390AF
+29639EAC6130693439FBDF281824599F0E0F4EFCD9E4C2C4A9FEAF353D8C7CE9
+7946F4E5EE8725B924A2F013C348CA722A3ADE32557F175F6D5E3A748F4AF3B8
+AD86D55B8539BFA5C514291BFF0A4F0A339B808A94010561583F1F4D55129A6E
+46873035DF4FEFA423FA4E428056A2F2057613696C88A041D81D0C08F9AD85DA
+9C0480C8E035FAA865E5D788119F457C3BB2FC2CABE3C4F2FFF33257AED6D7F9
+A3A1B8514C4762E0A1F37F570FE125DD805E6413E92C9FD60F6414E20461B616
+2471612799765BB9F9496DBE0C591323C8A198BB8E7851BEC63CB06DFADCE548
+152589887B7E31A3EB33FF2D069E31AE2B105881377DFFD5B5A02622E36BDBB2
+6313E8F9744A5CA6F552F5F314A0CC4CA858E879ACF0835E7CBA5F66020BD5F2
+2ABC7BCE72CAAB9D536717C4A17AD39C2CB36657B85C3F519666B62B5ED0131E
+41BD3831B2463659017A5ADB6A86250A1C4130E6994AEBE1D1B3E5E5A92FA73C
+54E2FB2C8053C71F1D5D2DB72EC07B2F2C3DE0EB8618A679227988F05424A4BD
+C308C56194D712C295C8669CF11D737D7EE2CC60466045A32A150EE3BB27A3E7
+5A87BE8CE1C18AC0F299DABA3E732C7E78D8841E2DD596952E1F8D03B7304677
+68E206737C46CACD88A9B30276436C4C3C8EEC851E7EF2346D266BF084BC7B64
+929D3FBCA08679BB70509B9D204C3FE9B063A4E3BAA78813C49D31638ADF45B9
+DFD7C8DE89BEB2828DDC3677B3EEC76E57BE284E90CD3F7A6D1AC44B8CA056B2
+5E5315D88F1E0696AFC7605D535C5266ECD451EF8D210292BB4F4E29485F977B
+19AB3BCF5E47E163AC4565259FB82F92E129BABAF2C7DA2445D736CCBA83CB1C
+F54570D5BD67C5F68B8AF18649AFFA26268EB9F912887A42CFBAADC1CA4E9B02
+42ACB4B7F272DB81321B6D306478D9223E0BF4B3BB2A821BF07C9DD97F73E761
+5C26CE174A45D3D575F8B519F6692FEA7F5742AF3588D704C23F4F40C4BDDB48
+A941D6B19784908C6D03C1F0463BA8D00D31EB991D387C063BC99A31FEA107B7
+5194AD45E037646FE7BA8B2BAD19D47A6CF66D4BF1DAD3B604BEF519C2A3FF20
+C5C85F739E0FDB1E72B079117902EB0366368CC348E6273B5BAD3F0253D6F644
+96A71DA9537CB0FD1A6576FB12AC32A623DEACE9A909EA913397BD198C0702F4
+19B0943BBCF8DD7202F4370C2182A94F1169F7A25682945592F12E9E6FE2CE81
+1A1F152DFA151D7AE181C60026FA688D823AA6CC79290D7C9131DA5DDB45CB39
+7BD765244E40C93C2B17E1EEE5AF10F76EA8E4C5ED6D1B74C432BB1A46B449D4
+D56127DDF5AAF7BF24B2EE267292A5A089E84A9772D87EE2D5E0C013BEFB7E3B
+5023A01481A3AA04859B1DCCC54049FF4EDA30162044A1CC40B751AE480B090A
+80F5A58250D164778704AC5B38798F960CC32DDC290C75E33DDB4F8BEDF7A029
+E24EC4AAED86D67A5275D462F35006C918DF4FB85F52570555237BBACA64784E
+6B3A34863C9E2C97F9D7A8184462E552D2D03D71A5CCDC0003A680DA1A042F20
+4AB96497589A525761DF586B2FE5658CF3AB87C4A452A7BC7DC7D027D2AAEA11
+1AA28A42DDA555AA09290DF7C6F273094429CEF2C6DE53FFCCF55F3D1028F935
+8423DAC334702D73AAA9C34CC53E7C5234216DDCE243BF6F0AB4FBD5E3A9660B
+ECC4F3282D75799D809A54E1B7459F764F25E92CAA44C455A104D3BEF8A70292
+CDB279B2326540FBC2BDBDE1A73BAC2FC38A464A308900DA9698614F64FCACBC
+40D181EAD7014C3891E359E4CBAB61C30FA4F3E8E4BE20E2144D4D368F225003
+260122DC1C09A98DFDD96B3163F47D6C102935D7F1B08732009F1B707B3C9DBE
+8EFFA6D497CF1E501542FC1A5FA4B36E60DE763F80C6C970E5CCC4BB95FDCCB9
+031045ECDCBBB119B5C0F668C563C2D7F638B9B56A0FD3F2C463D1B8BEBFDA3A
+2B72DFBBBF93F68F917F914E9C4FF0C02339A2319590A53480E31C7F6841A491
+80DB1FB6EA8DB26A4BD7DAE14C537939473D8018CA6FE0B676C1090D5F2BC198
+E526A5655A2FCA3014A7CD3655C9C378CCFCC9A8BF35A99829DBADE9FA1E7CBF
+C7FDE60BF3207999267A3B3AC88551982F0BB9569D4D5B57304706657336F94F
+6A02933AF2A23B930BAEEA5EF015FBBA97249A6AB73D362430A8CE190D861097
+1929757AC73A517A42B858F06FFD40CFE4D38845B94C4C4F9A178911D369C389
+4A6DD604D8C21C08567CC1A43886433FA53DD2087A028E06D4D580AF800C59F5
+ED261A8840EA452303892B46ECEDEB66CA4D3D33DE25629214F08FB9760560CA
+973C20E48975D0FE19D43346F5034FEDC317A1F459B94AA5EB11AB1074FF82D1
+CEC86A4314262F0109E1AD306DF4CA87E79235D1C244702B54A749DAE1C6C992
+967BB77512D82DD92D54325B85DDDC6B393CED65E5AD8552695566E6A3A531DC
+0F9A8CC8172FAEE5D5866E9D7791D3FA1E925A31C10267263CEEE93DF75E7FC0
+9EF9E912CDB745AC92C0855FE60D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR9
+%!PS-AdobeFont-1.1: CMR9 1.0
+%%CreationDate: 1991 Aug 20 16:39:59
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-39 -250 1036 750}readonly def
+/UniqueID 5000792 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
+3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
+046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
+C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
+A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
+A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
+731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
+09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
+49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
+5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
+54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
+C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
+11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AD14F1CBE935942AEC
+D4004E6BEF379066FD72209DC88D2E634E79BCC2B98C766CBD92C561F2703F8A
+109E6C6CEC7B866F2FC7ADF646BF492E520319F3B949AB5D84AE990B33344A40
+3971F58DFDF8D8D67FA0B8F2A0D884F8C09A5A721319B911DBA0A35903877343
+C37BC36C5EB32353272D1E6ED5FCA611BE319A7E1E842CB7576E7DFA3E3E18CE
+63E072E2EFD7BF3769BADB61CD818E402C55D5B239A8DDD7A8BC41B57AB3EE50
+131276C8DCFF04DFCAE55A8434BBF3F08D6C1EED04E9F93B14F88F055F3E3892
+459B28EE8A5D64C8398F6822D9D327FCAE4C2ED8F3A87E63E91DDA5B9D704B53
+8DA806B27327A97238E593EFEC36A5C40520EFFEAFC4E1D93CBC519D168F538A
+F95D93E30F242082FE0F9BECB5A8557B51C0990E1166E77CDAAC2A30F1C59FB1
+9DBE0E2C81EC1D428F5149F2805FA0BDB1F5B4E9826A66228E1A2D15B08416D5
+15F15E0C1893F4BB16EB1F1C0F21481BEFDB595867CB165B1DCFAB5453BAB2B1
+7C114656ABF30B35452784D5272AE403A3255961A73427BF7B075DEA7327FA25
+8CFF1349F5FD952DAEDF4F80E39BC3C2ED66978993546F8C7E51E3A3E94488B8
+61E40576A4F38D4549A179FDEE124FB9206EE1E6F7BEE5C7332311EC56D7DE64
+6713D0A974F00C25878A26F289DB0F6C0DA4DD7637A5A2130448D79F9F629997
+A8870EBFCB2B757431825C169D0860738E6194465D4B9E30D440C15624EEAFB8
+2E55EE46F106C67E6988CE3A954A7AC2C079C053BBC0B6F14F51F0D8C47C26E7
+BD5C2AB7344039CB1497A1C6B4AAEC09D5819E68615126B36DB8B38AA1B21BF1
+418584C901500A51278230ADBE0A20CC80388489C1D8FEFC4F429BEC0BB482A2
+6AA148AFAD67C60E0E948385FB5053A53259ED6AFF7C3A69701ABD12FCC81CAF
+BC8B2307419AF854921223ACD8BD5437E5EBDB4344E8C4F54EE6BFBC097797C9
+B3046C039448F8D28D2E0783C6E17E351CDF4593B6A94742A6D31862DE266FAD
+ABA27F15D07B7637F3379DE52B13158D21B1DFB52D3647665DA43EF01EA7A2F7
+A70DA2F946F974F06905C6277C7C010E51B6EDA2E49EF31B4EFFCB167A7CB77C
+C7FACFCF12DA7CB9E0D0301D7D24DCC7603A4ABC412C8F615FF8E6AB47E9DBC6
+A8603C0BFC32B1A7677CEA5D9F5FBA33F7BFF3166A6BFE136B869E6870088613
+6C3C90B7137F4EDE3CEE34FB0835672B45710FB6707115C4F77F582DEF5A3C1D
+9E65B5EC4C75ACFCB783E9AEFE62C543539BCEE60B0E4A9B1F71E4A49E191A19
+5B892294617A45638664D8465B1AD25F797B041F2B70FBABE9D223AB33AEDE26
+8D910D45A09F42A59B94C54C410CC38C67D92BD90B4491ADA51CEFA5D9E34BA8
+70D7F052C65C0F0A0BA71E7AB7355714E8215A57EA72B5FB34342C3149DEBE4C
+45C2F595F71B761BADADCB10D5C307FCADD779F5DC198DEB13A342581813E1E5
+E8CB4F70F64A60432C433EC4A4E1F2185A546026DAAC6FF19B85BA7C05FCFA54
+879595A44C7EC59B443E4E2AD287651496FD52B4CB8A0D69736CF826C4639C2E
+392FFBB02BC240D9378F8F1169BA8D57D1549D27FDB6B5B2E7EDD1703EA81921
+F07F8058B82C8B94E59F1B40D6EBBAEBD215B362D7FA64626BEB9CCD2714E1B4
+98CCE6F04215C2453578DB8C3C855BFA4173B05701B87E54430171062D503BC7
+7236AD54A2AAD7BE390412430137625BD8257AFA11920208096F2F5665D2A37E
+FA7974CD929F4D115A2A766EB3065F10D783DB4FB0B07B398D4905829CE5D1F0
+571B19809DB8DA5876445D17B6ECBEBE9675842076EF29334FC4003EE6795EEE
+8926B560683E95B82FA3308BAD522EF20242E1807FFEB5B5241D5C287F1E1D3F
+089FEAEFE9ACDE1CFD9D9F5A1C3A8D3B7C849C18F085F94641D053F02CE0F3CF
+03F6B4CA6352813648DD86D814D4C86541F27F8937B52F21797350386E30966B
+FFC6818F8C1697557F521F32C9DDA6CB6668A17B5A94666ED867C6A1FEC254E5
+9BD02F35EA56C7778B218E6B3F6FB9F822F8CE0986CC21A14B3D3610294C0046
+74B5C4CDB227CDE6408A8BFD9DF94F5A7E86649E5F08555339720762DCCCFC93
+8BD6E2CACBE2AACE78EB9720E7A61ADBE61A400BFCD5C4549C8878C39AD645AB
+B1BE9DB9174D601E6B6B2CFA17DF38AFD7784C90B1466130D5EEA334A748449B
+29CF52B9E7FC60F15463132F4979F603D7F2A1EB9F6A7A80A6E02754CFE31EBA
+118881581E976BD6E2949AD242D87222C816DAA183B0D07B9A45B3E3CC11A4A0
+9C94CCF90C829CED22B2BB25110E9F424A76DE3069D68BE120D3AD9F6AFBCFCA
+E1F50AE2EC109A662C311894F1D2A143A6CC62DB509A8AF53FBA164CBC529A03
+D8479BEAC96DD5FE822FB6306BB1B7BCD354446FB5A0B20975BA0D9D3C3E6C40
+05247661AFBD81C029625C5AAF2EB1018EE97B8752D4D5178CC05AA22FC2F9F6
+31124A55227A08E030D7C5AD7BA23DAB34F2766BD2C265CF5256603BC3DAABEB
+B188F224D3806F9295341063480EE319DC5D58F4F27F838DD099F0674EA583DC
+A655545173D48DB7E8D3BC8D45BA87DC3FCE2C70978793B75F6210F6776605F7
+9F82536856B4AFAB70184A1172CE3C8B356D696C8D0E68BD327606094B234296
+2FDCFA6925528EB1E23CA007824BF682172515BFB44A8E79612A799BC2C4CC5E
+FE5027F0A143B8DF716ABCE50CBE1F32D0BE9E1712F286B197C25D444444ED76
+E51B63D16739B24E5F301FB38AE80B2180FD8FE5387795BDA231FC1179331DA2
+F253186228DEBC67EC0A1E9E8D42E1728EAE4BF4665F5C49293E398CFF4C5766
+7E00B6F75FDDB4983114DD164D42602EFA865E7EB0773ACC36030CD55A369A19
+E2C5A7DB609749C4E7AFCD8197902F42C4BA107DF5CD3FAA0EA5AA5E928C2C3D
+6CB2273C1C3625836C79B7C0948BFC6B7B8B888BFA9B420957A57E01105A9C60
+7A57DAF55BE1B63D39F3293F06A586BC5ADA0224485C4B1DD3C4D8C776879303
+9DFCE42A1BF41F443BA1394D3C62D2EBD657FEB318A52B4F4BA63BDB4025A7AC
+41C271EFA7C164BA06D92D3A4E6F6D7116BCCF5AB3F735562DB423F4BDADF275
+730645CABC617CD8339CA528DD5C671833A4C13BD744FD67B414C09BE70A2F59
+92745FA60D88B4FBDDA36FFC4C3179CF1F62F6BA2960DEAF6730026C50F2D30E
+B710E2B77D9DEBEF27782F5AC35F142E863407D8EC80AC986A42200DA8B7C9A9
+BCA966127B563ED701A0C5FA999965DD5A3265A45688FA70F75A94BE49012B69
+B5C0C2D23EB6530BC275EED5FDDEA5B5439B6171ED36E76E261492717377E9A0
+3C4EB9985B7D15B7A3EE519C857CCEFAEC5B4C666C8F3FD3A5ED68EBD8FB3ADE
+0A298A04DBF72C2A27A28726A8242A137AC8829FFE20842C5F8F35F33CC68135
+990852728D410C5C4F390859F38B7AED1D123F30493E4DD5B7847473B670985C
+2FAB5766E5E5B3F07D2DE17394F365483880BCC2A2E6836D4C1BA9AB280428CA
+50D23D685E2BBEDBCE069FD3D11F7C215426EE438793E57D4F39A24FDFABB3C9
+21C5746BB857FE49862DE205C84C3A8A13815CE21A00A52A9B1330749A134E35
+A54FEBA355DE3E0A042555E9E389D27DFDE57E5310ABADAACA14C7B0E964E08F
+5BB207650FF80F3EF1E2CB23D6811805F10F23BC37F0C9E256DA454430A872BD
+4075CCE6E9717DBEFA49FFBC06D693D558063C7B47F2D7E0BA0F59239DA68573
+D23F428FDA1991EB5E317049EE4BEB2882016CC6FA62DCF760665328DD5AC092
+00C51D2A6AD65A37F20F12EA539B704533C5A7C3ABE89EB1232F02DA156DE3EA
+0A841BD2C8D59219DD4CCCC6BF3FD73E60E387FD6770BE73A7B5F6D7F78D481E
+0E39F51F41E7D049C8747F2FD2FF936682834EBBA3EA6527A470487F9978EF0B
+69DFBB987958BDCDD7B8D4FB28230BBFB9FFDCA490CD144BB5412358251B808A
+A3DDE020B244BE69DA6CC61A69C8CD5ADA0B79D5CB5C9ADF6BD3044C8C86C082
+9D348B81BE6FABA5369103BEE449DD9E10EB68B895A7837C2DA4AD79E84E902A
+449F89775C1B0DC88758709771CB1A7273EEE4C6149A1A0736F4DF9EC823969C
+A00DF4EC14AD56632CEA367B281F3A7628D13EDAE2FB4E3DFC0B7BE7DA87F87E
+F46E9411FC00C4B7B7FFC4855BA849D0F20021F7AC18ED93B6DFEFD421C64FFA
+61E0F022FA27D1B9040D13F83259F63DD006AD379B8F5E10CE73F632660E520E
+A0772D73773326583ADAB686B8FD3302DDF78C07376135850145BC66132A6E2D
+93DF3A518F83F0390361BA40C02E8394A3F9B108D38D34636E7ADFC255C898B6
+4D6047335489EBE093619455A9E7B34AAFFCEC599BA4119DAF50CC81AE88AF7D
+4015B5F2EF8DCE32310AA38AA727BB208F95787B5A382AE308F520B473EBE6D2
+EB843A563EEC76C10D80613DBAB50E022045854322552BC4CCCD33F57671A9D2
+048CEC4B9913860F8CE9505A403DE262FD271DA4BE8FB2BCEBE4B5F015B9D435
+F605EE341A8E8746752E0DD6CDA01431EDDDFDF58F6AA2276A1410FABDFE9779
+812922E63FF707D2FAE6DFD34CC44933BCFD9573EDA0F3575F2D7BC65C2F38D6
+1A43FA675F073FAFF5C7E0BF8B9F66E58D5ED2D15A6A6B2F7CE42DC5C1FBCC7B
+E40D616C34A703B225677D3E7B2F8150EC055ED83D9134C3C01718584C45E218
+105B5AAB06A0C489192EAF746C53BED70846ACE1E36B56CBE0E0CB35696EC725
+E443546886B0514917E71C24376E6122DC70F664EDDC0A09013BC81B8B6F3BA0
+918EDCA65B7F7B0C038A9A21A1A9DFACAA3EEC866ACC71ABDF131F9693C17CA4
+2E67A91076A8DC72881276DD33D35BFBCA8E1343E7E450B880CED188FC942470
+433A8104D6FFD1376C422FDBD89A40A5979886274FF225E9284308D37E98CFFF
+C3B63AD4D03246843138BF0F09B5701F0B9F4EBE597F151A8CF11C4BD423C2C6
+B833576F121F4113AC497FABE7B3884C359CB8D534856AFC713B3AE26446D381
+C3C915F6F6F6D6018001E8FEA21C60E3484653BD238732808D654D5BEFE0D46E
+6125C8BD72FBE692BF9318BC7801E7BBA87E05F76840266506C54072566CFDC0
+8C3EDB387B3E191DFDBB324F1C37AD0E053EC503E7621918491F84F85C24ECF5
+576A6D812DEFB85619E8D61434A633F1251122C3F04AF582F7B14B93AB91FE5E
+D5D070C85750912FA1923DC24ECF8995836EE232562D5FE3FC2F24A4D2ACA68F
+BD323F1692F7D951E09F13C236074F52A5BCFCF5AC2EAE00519391E0CF6D6E88
+D13295EBBCEE8282B7D6B19526330F83CC54100C74D097500A722D3D6A07BE95
+63B50DA459492AA59BAF95196494CE992D6F30985E1A6C929B2947C91F51EC0D
+01D45180EBFB7D3BC63ED4FE7E865DFBF2B14E870290E7FE1B2A9D91750D5C61
+DDFC4DEC2DAD98B608B2F2058A92CA6C3D5FD7AE388F25BE1118B6FD90198D4F
+6F356D01A3CD73FADEBC968034120B2A08EB3B7CEF0FD31DC44D83109E7FD0E7
+D1A698FB8175C65E11406690FCAC945E53B4E0E1B17464195C62DC32B4CB5269
+3D9917CAA17343479D75B5156244312D1931DD6CA6A07063E99F2C62E0B80661
+76A33674AA7FD869A408A8AFA3555EC75D24283FDDF7C6C72A14D040DAFFB120
+234923F07BD1A4FAC6711E87926392799A304D500CFDCA7233682106C714BC45
+09630B201FDB43788994BC22CD99133E8CA129E0C5B73FD1D33DBF46C49EC385
+0D824B45CECAD29EC520BED06E54BB33E9B09D8049AC30D65D6F8B63E2C9B7D5
+23562368B8A599CEC00F5B2434A667C707F7B2B6B36DDCC2CD59A3DBD676947A
+BF2AD22334E7691893FFD94BD63141D3FB9EF9E5258057899BB7C4FF9183E47C
+9EB53C54209A9A4A805CFD05468037BC3ACC812748665C99DD49FEE5E2AB7E3B
+A41EE7FD82F86161C28C3C878F986D3C1B775AB1F7F7741DF5C751093886B8F0
+27DE5DB1495CE22D15A58852BAB1524BB3845C18E63B00827697A5D3FC562B1B
+94A856DEAD8E305A9F3BD012EE211BBC7F114FFF48015119760B195B6DE28E6A
+EBB79D9A75C4408C81518B7C3DF54ACA93FA47014BA7A73CC489EF63E4BF3753
+AA1D134CA33D6AF529F2F0647083F0141BD8751DE1592FF64A2E641CFCCC9818
+AF316AF2F571E6AC2CD8E57C38623C0E3845F28479072CB8FFF1DD00FB4CCE74
+9509646B420DC6619B508413C53E389E1F5638F3A94D8C017575175DFADF6775
+E35D523A88D8B545A784DFEE3BF4FEAA925021E64A928EB736FAE0A7954E52BE
+73C0DB1ABBB5766887CBCA6B1538BA22463F4047AABE05A821762302070D095C
+4EDAB4693E9297483CB35D1ADD782CB056ECA35D30F19419D58467D366F118E2
+25C5A15552A945876049C51C9B20DF162738879DF1F7F9C2926C3D254BDE01DD
+208A0DA4B375B3502D4B4361B5A12F473E7660C83264BE42379772ED3A7BFAB7
+A0E13F632AFC25858A7D4B0862842F459E0094463E6BF69402C8779C93D68DB5
+BF1B5ECC79F2774C622045ADB80CDA15BBF15CF7D80AF5E463FD645D75AAEA4B
+0BBB342ED49BA0DCBA9CDEB26FAEA20D1E4EA32C13AE94F4DE086ADA496541B7
+94BCCD6D6E4660D7104E11F6EA6CEF4F42FDEBB9DE2C0E43C61107909E4C6FCB
+0CC137B3D5F1C692FD587821E3E3D889E644547A28FD9BBAC840EC7E2A0E9EC1
+5472C2F917598EF668DCA1B409A05080D08BFDD45AB50391BE7CAF5D14103801
+F25F5C1E2C1FD69EC4AF68FD2EAA011CC01D6C5BB537B4C001C7D58E49D0B4BB
+3B81C85112D221BDF816AC2AF829AF31DB37438ABFB204AA722F5D4EC30F1F11
+A3520DBBF04212C336C6B2EC9DC1DFFBD60C52FD39B5B0864E02E57BA0D4B584
+FE3110F64CDFBFB29B424D4803785B1C3173511F4DEFBB71256FF9F95757BBD2
+CFFB9F07FBD9082499488DCC75D42A736F28C1ADCDC11173DF73F21F3504FBE6
+74E1151EFB2719D8C12CC41AD1FA0C197CC1331A182763F2AB292E5E3A2688FE
+B6C76A12B2671596756E5C00E86C71BF96626A81616C7D0196BC44F5F5048EBD
+7F6AFE9D281298778FE7478DAFFE60D8B24E2EF805F5CB5D1B2E8A6F5AD7BAD8
+EE1AF675264A8FB7E005564331CC811C788B7520B78F08B9D58383070AAF1DA4
+096F985AA7106C600DA50F762D61418620D1B78BE2D73A8264ECD241BE1E5BBE
+A9A8EF0F7345C6754954EE7CF22A152A299A83D3C3C3CB8150B11527F50C10E6
+54468BE6D4DF727F6B71DE9DAFED7AE8C67E51ADD09E3374F071693DE23374CC
+E7E8E89C65F6DE6DE6F8BCF15A9FA8EA5059ACC9C16B7AD9056D9429E07978DF
+C2DC03DA3345063F53EB443BB493375602DF07AA28F9716B30A21FB2FE10A628
+2F1C4C24E6C087B7086B01777D2839E248216BC53BBFD4E1232372FB0087F0C4
+FCEDD9DD7ED8610A818320C06FFF1760F54156D8F23156BB480ADB56C29831CD
+61E52861B5A1CCBD7E6168DEA14B0CAE4E79A873C1886D3F2B3C12A2AD7BB262
+F6752DBA98B4F56EF7BBB439CD8D7C96526C859E3377463ABF4706D0D4FB7CCB
+CE1FACEFDAD169C2F09308CDDD73BC43382740EE7A373C7AFFA2C1F46BF1A59A
+04579C5A4B104205A39EB0B6F7B5375C56394BEACC3A6E5371ADD2047679550A
+53D6972C28E9DEFDE2630EAC1C1095CED943D255393656085C6B3A38410B1866
+D7CA471D93A2A0071FD6E29EFBCF7F921E2CECC55A95D349DA68A93FEA72E0F4
+5489719CA26C1A36B23335FCB33EEA59E8242DE95BBBB882B2CC6FBE601F51E8
+D85158FC88FAD8FB02C86E6B9242200BD753CB806004088AEDD103E15A7CA5D7
+8C5718F701DEFDBE8E682CB0C438D8B2BE4F3C0FF9CE
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMBX9
+%!PS-AdobeFont-1.1: CMBX9 1.0
+%%CreationDate: 1991 Aug 20 16:36:25
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMBX9 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-58 -250 1195 750}readonly def
+/UniqueID 5000767 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+AEBE70DAAED49EA45AF94F081934AA47894A370D635D93B1823EC35EB8316AA1
+86031FCC99F57CB21E8400E54AA474B57112F0D4754A16BEC19117E9D3638986
+0777A71B135CC18E20E193AE6C2BCD89F4A27516DBD2BFE69FF9920D547796F9
+89E0825B6BD5F492B36AF136EA91B826501ADB1979A4204B2CB5C0517F2B9494
+9B2077F316D2B3DA256C99F7549E6BC4B04FE12072B09B4F5D482A126AE351F3
+97DB85F3026A793B51E6B28B54661FEB087F011F0BFF67272DD1E8825C180723
+22AE77CD6166D2605D0C0F131537417CB60086F08E7197AA916D590944BD801B
+DEE8F29FFC516E11396CCB8395CFEC9262E22521882DC0316B0A129DBFA5FB57
+E656890C2471675E0566FE461028FB05532E274E6DF77E7D320D09B2203BBB5A
+8B185B66B2F8A18A49589C4EE27596DD56260D0D759D2A12CEF7FC3010BA1B36
+85A2FD45129DC01A0C7570423305C25D957DFF9215102FFF35F428C823D549E5
+014E7F99ACA6C10B3C92805376D0F3F280D65852CEA54F5CC9DEF9EC1347824B
+0733D3341B34937316E77E952AD9366D3B2ED045165565F07CB636385E5A5911
+2620E185B105EF6C93890833054E05B6301137338A3F1D6AB2F80095E57AE60D
+6E5EE2764624849978C811EC38E014AE4A5823734C5CEB2BC22DDA46BB408D00
+4F25CA8ED287D35E26A4CACA77D2D4B986ED2ADD3BC0C3405741CAD56DE28C7C
+68E8944967C022CC55907B3DFACC1EFAFD38D3EDDA1AADB6E2C006ECBEFAC8D7
+18ED3C46C331623D8FAACC6CF9292B8F1B407806A0D4808F51A5BC97F6A34ACE
+2073F11C6D604D7E8C79CD5F8ADDA187DD1ACA932A19D7017C48B3F140403421
+F5ED72DC0725D98CD494C4BF567B19DAA4F8AFEB76A4A8ABFCD790BE1D051E8C
+5C14175D16AA464081AC43CE0AA358C70627B232E0D1C066D57B47402D48ED1C
+B8EA3BC935F3B38185D619E4E34B197E7F59DB9EA1D85DDADB729351699F0AAE
+F4132DF9D505F6889456B7937D3B73F8BFF8562FEB81A3B72E3467758F3FF242
+7123633290FBA60BFA4B7023BE0127D85FD885D41D9A3D0D6ABCAF8BD4AC78D8
+14EFA95F4B2448CDB65F9D8C6D3EE62599A5A31E84CB17506DAB61F507A9BCA5
+1DD2F0AA183EACA8856078170D26BC14F9EE0C5E95FA7916E06E9F4F4ECB512D
+911894DC3720B430D764EF2A5428A2204E662C245266884D302EE02BD3F21A66
+D0123D211E5FC6DAC195C9CEB60D4C507D030ECDC907BD1CBE870660B89837CC
+BB8597FD85F65A8550E18BD37914F72D703DCCC732976312F933DA76761E1F06
+D29BD4DFE04F98FCD434B15377DBE41F36AC9CC265DCED60D221BDD291918144
+1FAC1D42A8E835705B4B7503A63F445B1D428B270F8E05ABB4E73A694C9CE996
+0296064ECF7349C5F2C28795E852AD8B74534152808E9110FCC93992C73DF618
+8D61D8162013C681EED5B7FFBAD76D81832FCA75DE8055C2AC33E7E183BB9249
+34FE841A220AA648D57235CFE35F99FC2AED92027C7D38DCCB4B700E228F7E68
+BA0977D9CAA4D8E402BDBC9FEB94AB73CDEEFF3490C634A418E3EE806D6B91A0
+5FCF43298EEA638CE359BCE62C57A90EB5F77B72F86AF8DD2175DCF93FB31395
+889051AD071D679FB0F631B106CA803150A78371B5D83A4F83E46F58E62D6BD5
+3182B45FACD67EBB30BB94B848F07410DFDBC393DAD9B1C80B821AF5E20CEC51
+59D6FCF7EADEEF915F9CB028D0E8127634161D1DF6A125E0B4FD0C067F11BCCA
+6AF35D74E8A2322FEDE3FFDE98CEE06707EF26EA7E30C269F9C3D7C4E8DF2831
+C0368FF77798E6F819DA285DA48E488A8FE2268731BAB4824605033AE20D99D0
+EE6342D62F822F9673DE14F95F46135BE95B5FDFF28F0ECBEB5CC117E24AF4D2
+40422AF0BA83B58815074DA6F659E3E6AB5151C106EE1322CACA4FD375C626F9
+481BAA8BC48B7B43C34BCB9DD9A0A74B82DC24FAF981BCD70A4C25A20FECC24A
+766E5FE75023121F0B40DBC949B154FCD1DA098A7BD0843351C7C3CDD1D39FE6
+FD64713B11863D0E20364D51946C80FA78AD49B20675F6BD62C22CD990783368
+F9BFFAAA073BB9FD50507A9927A9D75544BDCFEEF402957AA471C6271162C614
+1CCDB937FD88F07BA4AD3919CD2CF2D37DB0829C19098B674DACBDF3EF4702D0
+0385BDCF093323767D6ADFCC9C02BAC06FE50318263633B4C917C0574EDCFE53
+4788D65E13E35C422D0FC268549883A757863D7B6FB3357DDA59E677A15CD273
+5A89EF223E373847923822D2258DC2DDB6A5C91FB2A6801C262F8178FD4FF333
+624B352357BCB5DA1DB50DABAFE7BCCF4DD1660E5B3D53BAE1BB02853A21B4AF
+D32B7CA41D0A8E1BA1F3152120A7608788515DB31EC737AC33B81C570CEEB54B
+338F5F95A7061EA4B323B6039A81D7378F1AC0C4E06C42C316A4AB13999CCB8F
+2D920CC1E50F61CF613F0A1BCBDD9246C9FB9EB0DB67A2B7332712A63480132D
+36
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMMI12
+%!PS-AdobeFont-1.1: CMMI12 1.100
+%%CreationDate: 1996 Jul 27 08:57:55
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-30 -250 1026 750}readonly def
+/UniqueID 5087386 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
+3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
+EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
+4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
+2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
+323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
+2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
+D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
+5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
+0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
+A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
+2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
+00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
+CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
+99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
+C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
+5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
+55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
+A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
+3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
+F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
+F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
+EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
+67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
+923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
+A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
+FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
+1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
+D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR12
+%!PS-AdobeFont-1.1: CMR12 1.0
+%%CreationDate: 1991 Aug 20 16:38:05
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-34 -251 988 750}readonly def
+/UniqueID 5000794 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
+59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
+51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
+DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
+AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
+45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
+821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
+96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
+9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
+26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
+140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
+1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
+1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
+377D3061A20B1EB98796B8607EECBC699445EAA866C38E02DF59F5EDD378303A
+0733B90E7835C0AAF32BA04F1566D8161EA89CD4D14DDB953F8B910BFC8A7F03
+5020F55EF8FC2640ADADA156F6CF8F2EB6610F7EE8874A26CBE7CD154469B9F4
+ED76886B3FB679FFDEB59BB6C55AF7087BA48B75EE2FB374B19BCC421A963E15
+FE05ECAAF9EECDF4B2715010A320102E6F8CCAA342FA11532671CCDDCBA50602
+34052CD9880110AC8AE2063D59E8A32D51B6B31E9B2E8157822D2D733D49AA46
+B3082E60FD96213DBFD8134DA343A180A28150509288C42EA981D39EF1D16265
+88B8B318A2E4B0FA324E600F1B29DCC913C8874AE5539315516911E0FAF77D88
+70DA5552627283F65FA116CB3989FE37FAAEB1167A1A56D131824749A159CD03
+CA45DFEFA0E5C3248F5F7B54C8349545BF6657A1C423D5C42951C92B1FBD0F72
+B2A30D169D864E5456DE060325B33E44A1290F3663409DFF11D7EB370C75EC96
+A063AA7D6B09C918C58A31A635FB2BEAC5EA7D0D198C01CABB67C715E519C7CD
+04856B309F3B18FB8B6DA72533DF9F97CF0B5A08FD887472B4BB0C20EEE83415
+A8D31091D529962E274620336D54ECEE5004E8DD2C727410A945850BF20F0C37
+51FCBE954A834D67C74991F6874C2635462505475C03325204E87B6056CE5A6D
+CDC12BAB3BBD011C5105EE6F50D66C08775966645674B60A6D0E26882BDB2C80
+3B1AD2D5C8116AA3FC57AD3EC487B742F999CC9243D4CF8E41B0E0B3E30F259C
+E642C432DF24AD0272A3CC2EF5A1EB0888F3B6413995F685E59F3C747690BC7A
+DA8B0394DFC23A6F4EF5D88F6A651888A6C710941157212E1CFAD92F1AF4FDC3
+FD66ACFBD064E39F3F8CB9975B48791CA27DE61173C05D0A60D1A541602F556E
+277FD52BEDA399A16F711C0426147C4B77C57C4698E7BBE08262014C5764EB18
+BA4DA064CC8440E681B8ACCAA0955239F05956CC6C97C6B236D3ED9D8687D139
+730DED7816622F0934BB39C0A6D566A175B9A1067FEE9666CFD26F412F4AD570
+03054E8772EAA37EBB5A84C05242C1F1EC777D3222B964E547F4F1A04EEC7E42
+4898138802C1A7A7621F80FCD8F75DAAD05899A68439BA2FDF4B4E566FA8259D
+CFE36D5CD192A8F307ED6D04414AD56AAB56A5707EE5DBD308D109DCC00361D3
+34508B991EDB4AFD6A838E2E8A6E0A9D94396106B5CBA5A2CD916B853EB95AFD
+9525B6109C42AF3EFBC49CFBF08E2CD35E4CC7A50C21324075D2B17F6EE8E6CD
+75427143D38D6805A7912DCA8152EC3A0C1F9E35D19AE210A9205C0EDADB58A3
+5EDA7E49E34424BF1B7574719DAF7EE18D59BF29DF5CE2C9F3BB91F0A0F27D85
+FA54B6711FB5DD73249C53DC27563E23620A2A9DF35E0B99CDA94BDE4F832E65
+566A0E489EF4977C14AFDE41725E032CE647D20B4A14E35E8EC7DC8F153800E3
+30932CD86290EBF60E895B13883CF4B1F593E79A11BFDD6B434D25819CCB1589
+7449FECB047BD725FD0BB8C6057C8F5A881209C537E9AF2EA4FC56D9EC36B94A
+3BA65BA043F13579A51DAECCF0E00ABC5D0C2A4AEB3ED8959D49AA1DD972C0F0
+C75AF40D4E3BD7B49513C7B144A3BC38C3D6AA5EA7CEB5F06FCA224CC9F7990A
+3F2DFFB3EEEC9B20DB5B7F5479091E23FD1142B198297194EBA505C2C40A045A
+C15528024D5124B1E36FA1D0E33E04D6D28DAF6753017590BCAE5248DAB217F2
+281C58057BEC929CEA3EA7B4007DE2C6DC7BD62E200DA8E9A0E7C15A2DFB64FB
+B5C418A417C464592EFE8D8DCF53756F812B67CD4962AE56C74E4DA654F71052
+0D236263EC5E0B77F14DFDD84F63DD111D1E07B09DD5F896CC0D7F47754360BD
+CF77DA022D6E00EA84C1462BF45689B9F8FC28FE776543D7F6606C9F5EDE8DAD
+86E1ED112BD6272AFE714B09B42351E3B812E3CBF0A6E307C9F474F40F3D534E
+71E75EA3FA7246911DC054F2AF192F6D9087DAC0AB341195C5D46C92BA8D62C6
+100587A91506F6AD7FCE1510D2F3BF8F53B8A2492383CE4B025247FB36333BED
+AF2CC7D6AA7711B9A2D7F1E879FB012C2D3C7061A0A8FAC88D85585B5911A7AE
+E962185150FBDD874FB5637901FA36BA9BBFC17C4CC9421ED5A43EEA7C4B89B1
+9E912A40B86534A2626F53DB2D928D9510A87756DF830AA96CFE3D986DDB4B1D
+37BEFC5500C3D310524563BF41E91ECCC90D549BD36DB7FFAC5A7992FB94BA76
+574D2F522C55EE631F81AF2DDEAA67C75FA8ADF9A28A7FBC35941D8DE270A1B3
+07093BCCDC55B14F470C2138E6395399787D07C48A851BA5BD77CA3397857C1B
+D2995C78F93A733754FD305DDC29EDA6E0FE596EE6791F4B4F3AD06A4B3D0AF8
+FB71EAC1597B0638135B30BD20C689BDA9072945CB66C4DE11E1CD29B8877CE3
+E78775D0917B374563EBF5F5CA3788D614F063E68AD6A4AF56ED7E1A30023983
+39D4ADFFF516AC1F478A30059F35963B7C0256FACC38D66743911533D0B20C1F
+12BF00B75F96106B058FB7A4E6865218708FE791A71DA4B642482415EB221942
+4FE09246DE4707EBED8BE7EDAD4180C22BA39B9070E026A03100448DFB11FF65
+C8FC7C834326CFE1A2D863A87E3B005A3FAC682EC6379AD4FA377537A398A2B9
+07C78B34523C9917D7E362DC66874F067F5F04E65D7738EBA89946964E15C1C4
+662175C76D32A0AEDA25FF864D0A0EC39C1E118244E06FA11B53BC84ADEAC681
+252F98CD6957C7E9770F68B137357B3878526577623C1FE63EAA0C22F465D98C
+D807DFCF3C584D565DECDC8AD547B6E47503113826DD854F8EB1F144F95D865B
+932C709BB225D548BA3ECD12BF6C250DB52816B1449818CE24C7F79DFD10F713
+1F01164BA0E27942A27AFBDE60770F3000F4E984A986A91E67B8E977DDF386E1
+2A7A14F316CE69A2D0CC961DD8EDDAA5DA0BF873000F5A560055C077C938262E
+96E1A3BA2281A1A3B1F8D2E8A6C3A02D2F768EA7B5AF7AD124F9BC6BD7B911F3
+14473B7F06B3D3AF0580DBD0102783464EF05DF766CBCC4353C6BEE7D976B37F
+FA71C026266B80AD7FCBBBC4B5C08967B38E5B00DEC9465AACA6F97A3BAF6D0F
+EA3346C45BE6ED39C3C47A324E903B17B213A5EC3CBF9E27FB2BECB6959CC4CC
+C04FACFB7023F4327AF8A81EADE3F6FD794D6A193B6ED1BF5C844AB7C2E31AE8
+BA9B48016F3C3D25D6926F4704B01B851DD344910DB069B81847C5AF8D5B56B2
+B57D4C350670DB3269932508DF3BD09131177B7DDA109B715455A95B0CFE95A6
+A9548DE3B31098FBCCF995DA569A7B26B847A27B1F05F14D391BD3859F3D80BE
+45A8761950B2A814E0E13F496CCC81A63716CBC093914E1679FC9CD6E35F48D8
+7FAD6CDC14B612FAB5E961C7228B37F1FBAA2DE9C322BE82DABDEA2525F0732F
+50B1937E8E587C0574015759D37A42E121469C4A6E592EF3D192D38A624A686D
+AD9C1B75FEA433F56AF52B3DA5F4539E1910F56375B6817510FAA0E6CF5ED0D7
+6F3294090C905642C77823444B25B358ECDA7F5306CFBFF5D4960ACCB02C41EA
+C13756E4BAEEC996914C12AF2C095262807694C5E07ABCD368F25BA60DA57251
+DB888567B393DA3E296F93861D44D98F92F5394EFDB21BE2AF940F87571F3D33
+87883DD9A8A54457EC22F0A8FAD945CF8609BF94E9A7CD6A83AC4F9D3BE230B6
+60CEE33A941253B8BAA47E9BA499B0EB97F28C1FDD4CF6EFB03165F81CF7AB6A
+7463AE3B32C259F693BAB8B4BE3C2764DBA9A477481A2DD8C323FD96EA318CC1
+3966E0F98F767858372813A76DE1D9D49E7DF28B5C72D6C461B3374FEDB94AD1
+1962AC2FB9504EDB1C39C8651C769B6F10612C7027DA51CF9DA4C48D37BABB55
+B4D3B88DEAA88FD10EF0E2C8884584513C57CA80E354DB4E0266E549EF1A485D
+6A6CEF7263D1C7D4C7563900DADAFF6B092BDD24B8705724980D355E97E06E97
+7F5E04B9F7C45BEF6ABF12705133449D310F7033884DFB1E4AA2FCA15CFCB257
+7E9FFD8DF143365F8A682BDE66F620AD82751AB87DC914F6BBF9B22A683EAC6E
+72E07C3AE4B1422147E20D72CB161126577AD0614D0BDC5835B3ED2FB2E709A0
+95272C2015AFE6664DCDCCF8AB5556196787B21CB89196CB77D7E29CC97C6C8A
+B782CDCDECFCCF15C722BC88D7D23770C3DACDB8DE2F3511D58C65FE1CFCC47D
+2C3E76D0857416DF8B3FE52B026096653A419A730C66722260C416BEFABF7A67
+E64599B9C855C69FE285383463B07CFC72B460A7E3B3211E621BFDAC75E6B6F3
+19F5774E4EF9EEF512AF2C8EAE034387B0669459305C9BBCE8ED19D1D9A44EBA
+4964187A723FC593F9D3F15228C893917F13F0CFBD818AC9FC6FE0FECFDC5F6F
+2BA2242527306749D900FE416BD3D7F5977FE0F4120876468598EE46D54305E7
+AB98F3965FC684729CE1402543B6EB4361E4246D5FAA31358F3CF2EDDA61F86C
+232FBD3420BB9354C452E72A76D1B2FA1147CC6D03F60D11E56B4DE0902BE99B
+8CF1160270DC1101914DCEA10D459DB1D69D0E4D1C9F2086376696648E3D00B8
+DED41481AE6A5439B64E87AE28C08C347411ECF3F9D52FE440313626CDD0DAE2
+1B5788A03998FE60ACD370BD3136AE515969751B5230748CCBA6FFE5A23189C3
+B87061820CE0234B41BC4077683E7BCC92540E34B4A9E20FFBC3C7A7D2056C6B
+4B3BD1A01F6F47F539E0E0452A8E1954B89FBED9E598BF42683F971ED65DA76C
+8F19B5862F04F4494B987E86D0929A9CB88F1B3D2FB2EA2995DFE7A890013CB4
+6289387C9403826DD77FF8C8605EA59FD207F26AC23F6BB4343009214E448757
+4123C48E667D79A942185DD181D2F996BB3084791FA72EA65AF5FE2267DB9EC6
+64BD96039C6B91A8731EDD8B142BC85C17C9ECD09E8EC213245AE716B569A947
+F6164B6AA5624065E6BB2B797B8AFCDE2749B85012CB477B5073C2F767D89EFC
+8679E9407E5B8BB76D22B5AE13E16CA9402E9A89101872528BF2E052F5BC3DBD
+C57194A0CCF73FD57FF585092BAF92E1EAFC94F160F4D2C42990BE027FA0C3AE
+3CE77F5E6FB62F2F28C052379B2700A7D253CA23C1BFD279FFD5CA9CC8D4A578
+7098E4C4FDB3397F49F5C54355D79A4BA62CE972CFD3CFF8153588494A6CF8F7
+C2B773F53919F051D3807B610F3EEF47C31F69E699CAE5E7FED38F4FE76AF5FA
+26F520AC52B69B81B8BAEA835883521783F41E3E5924296483F6A54B1FF1BD82
+FE96460D486550D489E9F11952C9B0867ABEFC1F2D5ED7611EB55682FBA60B0F
+9ADD019F830831CF4ABFC1FCAF469FDEF30A667EF12CC88DA8396D765EED5E9B
+D227312AE318BD106F2ECB6D46952D71B75B2CCB4E08248D92C0C442F159014C
+90B2B0CDE95053438DD8E5D4D2513A2C6F4D85F0996984E1BBF0A1F20A923C22
+FF4350F461699AF9B858AED0445B621B58CBF6F221A9399C1346169A65E9435F
+8EE42D7DF09EB5E58FDB066334989861A7B4CADB3DB938171205B8D5E0104A1D
+EA5DEB85C489166061DA2072855239E1C057F502B3D5889DB06822D66141210C
+9CD436AAB9206D348025732473949AC24054B8DCFF1DCFF59455D5C594A4E3B4
+ED579B037C21DE9F1A606E3DAAA4CEA292758A5EC2389E9F645C995D4F9DDCE3
+31BB1450B58C5CE588C29C07000D9E34EFF1AB111E31D4D655A1D19875630A97
+4F434C3FDD7379B9D5F0E4606D6B7DBEE4CAF7BCB45BE85CC552DC8AD78AC849
+47116B1326C08A38DA987B55810C27C8C47FEF5A8225BC81857F68EED0135C35
+B98CBDA1478F2559D0A98B24DE9461A971CB77B83934D1F2D3CCF8080B745FC7
+F8E06868246F0B609E9BE48EED638DED3E511CE1D3FF950BAAE9E9D42BA159D2
+61E44FC4A463B7F9B7EED350D842C6CD676F9B12AC314550A9477CB9CC81616B
+23CF340B6F9C8E4376379BB2C900A7FEA0F796EF5F85A1A509B115937A341F8C
+D000AD49C5D13B5B5ABC57A059E451A75AE35F302958D4C6B0F9CF9374A4F382
+DD310878185EEA83AFE602DD4327DDAC547D361299EE7BEDD8D638A9E94B1016
+D7EEE97526854A08C9F561608E143795EA3E5993EE3E1845EA5C66246DEDC457
+C3AF6EFEE247A65ADF33A61D87056AF0FE5164609EBC07C5323EEB6FBEEF057A
+BF203107503D4083D0108CBE57505C3B8E1F482A571CC8833A969935F5EB0C0E
+08AD5A6A67487F226405D2C33828255BE778B9543D9CE8EDD024B8171C72B30C
+9EEDA8B269F67F367DAEE81D00D63A859EF42FFEEFDD248479AC883D9E0E9D4D
+68720536558DDB34699884FB349EBF7987AF49732D1C55167D95874DEAABB006
+B90CCA09F96F6FE195B4FAB37E7999A6A1FB1EF495B781C9D38B01C8D80025A1
+1310AC76E7443A33D57AA2CBB96B47D7C06845A42DA58A26B7DFD39D52C3F3D1
+AC1C778039A7D7BF7083A84B6912BA238F323978B11BAE4A8E5CBD8A9CB27370
+53B12F944BCC6D50C3AC214D679279CE0CCD40E739583A05CBDACE31A358F63F
+FCFE33DC36CF0805D7F7D8AD28E98C58D2A612329147410D068E6E9C2F99172C
+E1A071E4A77691DD092F53ECFD4D41ADE0F48C6DD456B579B307E648F67FE1CA
+C3EBA3CE54928B6D46ECF935AC0568DB3224CF603B8EE613D30FCF2AB824EFF4
+6F9550BFD6639E3D24AB37A2428EB9300715FB589A4B78501E2245C67A343CEB
+542A463D7E2535AE76748051A5269C271EE5A7F0778D611AEF10574BA833438A
+CBA5C81738C942C01C6DF7369D2A2EB2C3A0F37510E676ABE933C76DA7981763
+DF2D516104553884B32BB7335A223AE1EB289259F8A6D09C9335933AE6454EBC
+DF356C114FAB18D969CFD52CE16336365F870D5E515DC811DF11BFD8EA4C63C0
+1C029EC2DA5F7058912ACCA033997633EF7E2C535C9D5BC360D28A9B82C6F091
+FBB1B451630741BC615671F804B2A410EAC0E315231DDD748A4EDCEE41130E68
+6EE8164D0F6A26C7ECB8502A3E0F1C9A01465C06C65F72A5674EA063824BD58B
+94B99535D7
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR17
+%!PS-AdobeFont-1.1: CMR17 1.0
+%%CreationDate: 1991 Aug 20 16:38:24
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR17) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR17 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-33 -250 945 749}readonly def
+/UniqueID 5000795 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F075EA0A10A15B0ED05D5039DA41B32B16E95
+A3CE9725A429B35BAD796912FC328E3A28F96FCADA20A598E247755E7E7FF801
+BDB00E9B9B086BDBE6EDCF841A3EAFC6F5284FED3C634085BA4EE0FC6A026E96
+96D55575481B007BF93CA452EE3F71D83FAAB3D9DEDD2A8F96C5840EAE5BE5DC
+9322E81DFF5E250DEB386E12A49FC9FBF9B4C25C3283F3CEA74B8278A1B09DA7
+E9AE4FBAAF23EDF5A3E07D39385D521547C3AAAB8EB70549756EBA8EF445AF4A
+497CA924ACCC3DD5456F8E2C7E36946A5BF14E2E959895F7C94F49137256BE46
+4A238684D52792234869EAE1A6D8ADF4E138B79472D2A90A6CA99E2394CC20CD
+3841733046175B20CEBE372327BF13428EED6A3E2FDF84C2DBA4B0AD584EE9DF
+B51828D3B8F385846158C29C9AC3496CB9692DD10219697B2ED4D425C3957FD8
+C4600D76E045C561216EF05D38177243C314877A69A1C22E3BEC611A2EE5A216
+9B7C264CF6D1839DBBD78A40610F2C0D7C2FE09FFA9822FF55035AD52546970F
+83EED2D30EABB1F303091EBC11A5379B12BB3F405E371519A53EA9D66174ED25
+A2E55463EC71A97BE4C04B39E68112956117C8252DB6FB14AB64534B4BCD568B
+246DB833982B38CDE7268BBF74B6B0C18091E1B1F87D32D66F4DD023D1F10D2A
+7736A960F72AC01F733A11023832CD68FB6288A5977743F781214D8FA9C0C3F7
+80001321D4397771F728FD9EE57CFE7D9192B887EC883EB1505068261DC40089
+7B7D2820F06515CD74513521F6397FEAB3AD3572D9A8269430E407E357422461
+1785FC2782047F4C0339D79B16862D939F3A37F78E4E2174E4FBF132539CB760
+207999FF86F6A3EBE48EB0A1CA635450FDEEF79EB16D853F3BF4B2B072EFA56A
+F8BA95D15BD9104B5B7597DE24CC36EEAA17617CEF2ED0321C284D0A614770BF
+C5312D940FC24C50D86178FC27B3FC29ECCD66E87074AF889D222DD12CB54D4A
+6EDB093B55DB97A23C7F8942FD0C686E6CE3128FFF13F684DCC58721B3E646BB
+467D917F83E1B5A2E2D289EB82237B20D14B336AEB7FC833BE218DDF26C773DB
+DA501CAA8503B879B461B2DA58EA61B57CAE5772B6D3E88277824DB0612C4839
+71A17C6FC89E25D79F7632F29E2B44065E05757C0C8E04C9D1DDC14A35BE1A77
+91A0C7807CC53D05E311F721429145D9485C591B6DFD5072D31924D2AC442C20
+CF9A8DC4F8ED521F53FB732F3EA247633FA1B516040B68A5E5E4A0F8A032C7E0
+989A5E63D87B054EB2DF57CFD65B64D89F437D2F91C269DAADE6A8944952B1C8
+791D8554FC381C56AF5BAE2573521AEF93FB419163B3B17F08BED7208D56CCD3
+1B619C39E7F27D3AD18562D94ECE4144136544C55EE6A6669AAF7A8B9AE17E03
+E258E91C43251920C067A0BCB4A62A3D6D89B5E5B8E0879C5FB9EF9E8A36DACA
+2E309C1472CF020A4F938A653D840E7BF47100A3878B954C546F86CB01AE95ED
+041BC9F618FBC569900F53C1E00E72011E57998B49C0EB2CE5E541ECA3257EAC
+5087A9F80654DAB8EB500B82D8FFB5BB481B489BCA61C945382BE92B4F44B952
+C69F5998F05FF221B777FD524385DA63EF8942DC9D1F2E090B5BC8F426959436
+659D5B7239A3800F6B2E091B8D5FF4281FB3FC55B98371C822B491BEA7917814
+D9E67117FB4EC2FDC3ACF03CF1C9E4478D717D504EA1AD79CE84489CB0615FEF
+A33A9F71D2EB3608FCDD9C7C34BB03C2ED03F78B7CB8A9EDC490F1EA0708FE9B
+24C0C9DC14983BC4229E2D028CA994FEBD20007AC87288A2F442109CB88B04AF
+E691A90974F19FCBDB214B88E0C2B67D233E7B6923414736139B40A5FAB548EF
+2DCC62E48264375E3F1AC532B006ECDC199508BF7D3ACE0602335CB4CE5A5C9D
+1E7EDD9E94B793BB81E6616062DE743CE17927ED60360D54DFF41221B54F390D
+2984F14954BD4AB08134605500EFD6ADA43D32DAE5A7B6F3A01368322ACF8229
+3492061C5F65EBD45F87631D48B16EEF1FE7500DC256D08078C0E4E67421BB98
+EF0C0D6E01C9293586D471A1BDD80481393969FDD38641FDE412F294B07B7DF3
+A7D6BD4CFDA1A103F253E7D34F68594287586FFE7001CAB60AE1A8A0B177BA9D
+1AAD7041C8802A7F8126D5295D2503234AAE5976C96CFCD67D79B2C06D2FDD9E
+A5FDAAC5713762F3C0DB512C2EA5DB13E8EA9A30CE11198398D807D2ACCAB525
+03565FCBF0004570F87EA4B0A13319FED515C1FD55870AF494C0964710F52813
+C5D99A21D507A5887DBDD1CAF282816C7367022872150C713D9F2B9B9EBD1653
+596CA51AB56D5E719F4410F1463E0CF93830544ABEC5F6D8D1A10CFA1F114AFD
+ACCB696017564EB2441953DE952DC86413F1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+TeXDict begin 40258437 52099151 1000 600 600 (documentation.dvi)
+@start /Fa 132[48 1[50 1[69 1[53 37 38 39 1[53 48 53
+80 27 2[27 53 48 29 44 53 42 1[46 9[99 1[73 4[65 6[36
+75 75 7[45 16[27 1[27 4[27 26[53 12[{ TeXf7b6d320Encoding ReEncodeFont }
+31 83.022 /CMBX10 rf /Fb 205[55 34[42 14[65{
+ TeXbbad153fEncoding ReEncodeFont }3 83.022 /CMSY10 rf
+/Fc 205[33 33 49[{ TeXf7b6d320Encoding ReEncodeFont }2
+58.1154 /CMR7 rf /Fd 255[52{ TeXbbad153fEncoding ReEncodeFont }1
+58.1154 /CMSY7 rf /Fe 139[25 5[41 5[39 104[{
+ TeXaae443f0Encoding ReEncodeFont }3 58.1154 /CMMI7 rf
+/Ff 133[39 41 47 1[40 48 30 5[50 3[34 3[41 1[43 37[65
+1[65 23 23 58[{ TeXaae443f0Encoding ReEncodeFont }14
+83.022 /CMMI10 rf /Fg 134[44 3[44 2[44 2[44 44 1[44 2[44
+1[44 103[{ TeXb6a4d7c7Encoding ReEncodeFont }8 83.022
+/CMITT10 rf /Fh 130[44 1[44 1[44 44 44 44 44 44 44 44
+1[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 1[44
+1[44 1[44 1[44 44 44 1[44 44 44 44 1[44 44 44 44 44 44
+44 44 44 44 44 44 44 44 44 44 44 2[44 1[44 44 44 1[44
+44 44 44 44 1[44 44 44 44 44 44 44 44 44 44 3[44 44 44
+34[{ TeX09fbbfacEncoding ReEncodeFont }75 83.022 /CMTT10
+rf /Fi 139[49 1[50 2[53 51 12[51 26[59 14[46 55[{
+ TeX0ef0afcaEncoding ReEncodeFont }7 83.022 /CMCSC10
+rf /Fj 129[42 3[34 40 39 55 38 45 28 34 35 1[42 42 47
+68 21 38 25 25 42 38 25 38 42 38 38 42 9[83 2[59 4[64
+5[32 2[54 5[64 5[25 10[42 25 30 32[47 12[{
+ TeX74afc74cEncoding ReEncodeFont }37 83.022 /CMTI10
+rf /Fk 128[42 4[37 44 44 60 44 46 32 33 33 44 46 42 46
+69 23 44 25 23 46 42 25 37 46 37 46 42 3[23 42 23 1[62
+1[85 62 62 60 46 61 1[57 65 62 76 52 1[43 30 62 65 54
+57 63 60 59 62 3[65 1[23 23 42 42 42 42 42 42 42 42 42
+42 42 23 28 23 65 1[32 32 23 4[42 23 18[69 46 46 48 11[{
+ TeXf7b6d320Encoding ReEncodeFont }79 83.022 /CMR10 rf
+/Fl 134[59 59 1[59 62 44 44 46 1[62 56 62 93 31 59 1[31
+62 2[51 62 50 1[54 9[116 2[78 62 84 1[77 84 1[106 67
+2[42 88 88 70 74 1[81 80 7[31 4[56 56 56 56 56 2[31 37
+31 31[62 12[{ TeXf7b6d320Encoding ReEncodeFont }44 99.6264
+/CMBX12 rf /Fm 134[71 71 97 71 75 52 53 55 71 75 67 75
+112 37 71 1[37 75 67 41 61 75 60 1[65 7[102 1[139 2[94
+1[100 101 1[101 1[128 3[50 2[85 88 1[97 1[102 9[67 67
+67 67 67 67 67 49[{ TeXf7b6d320Encoding ReEncodeFont }42
+119.552 /CMBX12 rf /Fn 134[41 41 55 41 43 30 30 30 1[43
+38 43 64 21 2[21 43 38 23 34 43 34 43 38 11[58 55 3[52
+7[58 60 3[55 20[21 1[21 29[64 1[43 12[{
+ TeXf7b6d320Encoding ReEncodeFont }32 74.7198 /CMR9 rf
+/Fo 139[34 35 36 14[39 49 43 31[67 65[{
+ TeXf7b6d320Encoding ReEncodeFont }7 74.7198 /CMBX9 rf
+/Fp 193[76 1[76 60[{ TeXaae443f0Encoding ReEncodeFont }2
+99.6264 /CMMI12 rf /Fq 138[54 38 38 38 3[54 2[51 1[27
+54 49 1[43 54 43 54 49 13[54 13[66 75 3[76 5[27 2[49
+49 49 49 49 49 49 49 49 27 33 45[{ TeXf7b6d320Encoding ReEncodeFont }30
+99.6264 /CMR12 rf /Fr 139[51 1[51 1[73 10[58 3[66 29[96
+67[{ TeXf7b6d320Encoding ReEncodeFont }6 143.462 /CMR17
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 0 a
+SDict begin [ /Title () /Subject () /Creator (LaTeX with hyperref package)
+/Author () /Producer (dvips + Distiller) /Keywords () /DOCINFO pdfmark
+end
+ 0 0 a 0 -137
+a
+SDict begin H.S end
+ 0 -137 a 0 -137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.1) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 0 71 a
+SDict begin [ /Count -3 /Dest (section.1) cvn /Title (Overview) /OUT
+pdfmark end
+
+0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.1.1) cvn /Title (Fixed Mesh Refinement, aka Box-in-Box)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.1.2) cvn /Title (Carpet)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.1.3) cvn /Title (Cactus)
+/OUT pdfmark end
+ 0 71 a 0 71
+a
+SDict begin [ /Count -3 /Dest (section.2) cvn /Title (Introduction)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.2.1) cvn /Title (Fixed Mesh Refinement)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.2.2) cvn /Title (Carpet)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.2.3) cvn /Title (WaveToy)
+/OUT pdfmark end
+ 0 71 a 0
+71 a
+SDict begin [ /Count -4 /Dest (section.3) cvn /Title (Compiling Cactus With Carpet)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.3.1) cvn /Title (Hurdle 1: FlexIO)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.3.2) cvn /Title (Hurdle 2: STL)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.3.3) cvn /Title (Hurdle 3: Templates)
+/OUT pdfmark end
+ 0 71 a
+0 71 a
+SDict begin [ /Count -0 /Dest (subsection.3.4) cvn /Title (WaveToy)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (section.4) cvn /Title (Running The Example Applications)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -4 /Dest (section.5) cvn /Title (Fold Your Own FMR Application)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.5.1) cvn /Title (Multiple Processors)
+/OUT pdfmark end
+ 0 71
+a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.5.2) cvn /Title (Multiple Resolution Levels)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.5.3) cvn /Title (Multiple Grid Components)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (subsection.5.4) cvn /Title (Example)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Count -0 /Dest (section.6) cvn /Title (Further documentation)
+/OUT pdfmark end
+ 0
+71 a 0 71 a
+SDict begin [ /Count -0 /Dest (section.7) cvn /Title (Frequently Asked Questions)
+/OUT pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ /Page 1 /View [ /Fit ] /PageMode /UseOutlines /DOCVIEW
+pdfmark end
+ 0 71 a 0 71 a
+SDict begin [ {Catalog} << /ViewerPreferences << >> >> /PUT pdfmark
+end
+ 0 71 a 0 71 a
+SDict begin H.S end
+
+0 71 a 0 71 a
+SDict begin 12 H.A end
+ 0 71 a 0 71 a
+SDict begin [ /View [/XYZ H.V] /Dest (Doc-Start) cvn H.B /DEST pdfmark
+end
+ 0 71 a 1691 503 a Fr(Carp)t(et)901
+760 y Fq(Erik)34 b(Sc)m(hnetter)g Fp(<)p Fq(sc)m
+(hnetter@uni-tuebingen.de)p Fp(>)1302 978 y Fq(Date:)43
+b(2003/05/02)31 b(14:47:46)1721 1276 y Fo(Abstract)323
+1407 y Fn(This)c(text)e(describ)r(es)i(the)f(Carp)r(et)h(arrangemen)n
+(t.)37 b(Carp)r(et)26 b(is)h(a)g(mesh)f(re\014nemen)n(t)f(driv)n(er)h
+(for)h(Cactus)g(that)208 1498 y(can)35 b(replace)i(PUGH,)e(the)g
+(standard)h(unigrid)f(driv)n(er.)64 b(Carp)r(et)36 b(supp)r(orts)g(m)n
+(ultiple)f(re\014nemen)n(t)g(lev)n(els)h(and)208 1589
+y(m)n(ultiple)23 b(grid)g(patc)n(hes.)34 b(Carp)r(et)24
+b(can)f(run)g(in)g(parallel,)i(but)e(not)g(y)n(et)f(v)n(ery)g
+(e\016cien)n(tly)i(so.)34 b(Carp)r(et)24 b(do)r(es)g(not)f(y)n(et)208
+1681 y(supp)r(ort)i(m)n(ultiple)h(grid)g(hierarc)n(hies,)h(i.e.)f
+(shado)n(w)h(hierarc)n(hies)f(or)h(automatic)f(con)n(v)n(ergence)g
+(tests.)0 1820 y
+SDict begin H.S end
+ 0 1820 a 0 1820 a
+SDict begin 12 H.A end
+ 0 1820 a 0 1820 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.1) cvn H.B /DEST pdfmark
+end
+
+0 1820 a 152 x Fm(1)135 b(Ov)l(erview)0 2054 y
+SDict begin H.S end
+ 0 2054
+a 0 2054 a
+SDict begin 12 H.A end
+ 0 2054 a 0 2054 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.1.1) cvn H.B /DEST
+pdfmark end
+ 0 2054 a 133 x Fl(1.1)112
+b(Fixed)39 b(Mesh)f(Re\014nemen)m(t,)g(ak)-6 b(a)39 b(Bo)m(x-in-Bo)m(x)
+0 2357 y Fk(Fixed)h(Mesh)f(Re\014nemen)n(t)h(\(FMR\),)h(also)e(kno)n
+(wn)g(as)g(b)r(o)n(x-in-b)r(o)n(x,)i(is)e(a)g(w)n(a)n(y)g(to)g
+(increase)g(the)h(lo)r(cal)f(resolution)0 2456 y(in)33
+b(unigrid)g(applications,)h(while)g(retaining)e(the)i(basic)e(unigrid)h
+(c)n(haracter)e(of)i(an)g(application.)53 b(A)34 b(small)f(n)n(um)n(b)r
+(er)0 2556 y(\(ma)n(yb)r(e)26 b(t)n(w)n(o)f(or)g(three\))g(of)h(grids)f
+(with)h(v)-5 b(arying)25 b(resolution)g(o)n(v)n(erla)n(y)e(eac)n(h)i
+(other,)g(where)h(the)g(coarsest)e(grid)h(has)g(the)0
+2655 y(largest)e(exten)n(t.)36 b(This)24 b(allo)n(ws)e(the)j
+(application)f(to)g(b)r(ene\014t)h(from)e(the)i(higher)e(resolution)g
+(of)h(the)h(smaller)e(grids)g(while)0 2755 y(k)n(eeping)j(the)h(outer)g
+(b)r(oundary)f(far)g(out)h(at)f(the)i(same)e(time.)37
+b(The)27 b(main)g(adv)-5 b(an)n(tage)25 b(of)i(FMR)g(are)f(that)h(it)g
+(needs)g(far)0 2855 y(less)g(resources)f(than)h(globally)g(increasing)f
+(the)i(resolution.)0 2987 y
+SDict begin H.S end
+ 0 2987 a 0 2987 a
+SDict begin 12 H.A end
+ 0 2987
+a 0 2987 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.1.2) cvn H.B /DEST
+pdfmark end
+ 0 2987 a 117 x Fl(1.2)112 b(Carp)s(et)0 3274
+y Fk(Carp)r(et)37 b(is)g(the)g(name)g(of)g(an)g(FMR)g(driv)n(er,)h
+(i.e.)f(the)h(bac)n(k)e(end)h(that)h(handles)e(storage)f(allo)r(cation)
+h(for)h(the)g(grid)0 3373 y(functions,)25 b(parallelism,)f(I/O,)g(and)g
+(the)h(v)-5 b(arious)24 b(in)n(ter-grid)f(op)r(erations.)34
+b(Carp)r(et)24 b(w)n(as)g(dev)n(elop)r(ed)g(in)h(early)e(summer)0
+3473 y(of)33 b(2000)e(b)n(y)i(Erik)f(Sc)n(hnetter)h([)1009
+3473 y
+SDict begin H.S end
+ 1009 3473 a Fk(Sc)n(h)1136 3415 y
+SDict begin H.R end
+ 1136 3415 a
+1136 3473 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__erik-schnetter) cvn H.B /ANN pdfmark end
+ 1136 3473 a Fk(],)i(then)f(a)f(researc)n(h)e(sc)n(holar)g
+(in)i(the)h(Departmen)n(t)f(for)g(Astronom)n(y)f(and)h(Astro-)0
+3572 y(ph)n(ysics)27 b([)310 3572 y
+SDict begin H.S end
+ 310 3572 a Fk(AA)435
+3516 y
+SDict begin H.R end
+ 435 3516 a 435 3572 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__astro-psu-edu) cvn H.B /ANN pdfmark end
+ 435 3572 a Fk(])g(of)h(P)n(enn)f(State)h
+(Univ)n(ersit)n(y)f([)1431 3572 y
+SDict begin H.S end
+ 1431 3572 a Fk(P)n(en)1568
+3516 y
+SDict begin H.R end
+ 1568 3516 a 1568 3572 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__psu-edu) cvn H.B /ANN pdfmark end
+ 1568 3572 a Fk(].)38 b(In)28
+b(spring)e(2001,)g(Carp)r(et)i(w)n(as)f(coupled)g(to)h(Cactus)f(as)g(a)
+g(drop-in)0 3672 y(enhancemen)n(t)g(for)h(the)f(standard)g(unigrid)g
+(Cactus)h(driv)n(er)e(PUGH.)0 3804 y
+SDict begin H.S end
+ 0 3804 a 0 3804
+a
+SDict begin 12 H.A end
+ 0 3804 a 0 3804 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.1.3) cvn H.B /DEST
+pdfmark end
+ 0 3804 a 117 x Fl(1.3)112 b(Cactus)0
+4091 y Fk(F)-7 b(rom)27 b(the)h(main)g(Cactus)f(w)n(eb)g(pages)g([)1264
+4091 y
+SDict begin H.S end
+ 1264 4091 a Fk(Cac)1402 4034 y
+SDict begin H.R end
+ 1402 4034 a 1402
+4091 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__cactuscode-org) cvn H.B /ANN pdfmark end
+ 1402 4091 a Fk(]:)208 4274 y(Cactus)g(is)h(an)f(op)r(en)h
+(source)f(problem)g(solving)g(en)n(vironmen)n(t)g(designed)h(for)f
+(scien)n(tests)g(and)h(engineers.)208 4373 y(Its)33 b(mo)r(dular)g
+(structure)f(easily)h(enables)g(parallel)f(computation)h(across)e
+(di\013eren)n(t)i(arc)n(hitectures)f(and)208 4473 y(collab)r(orativ)n
+(e)26 b(co)r(de)i(dev)n(elopmen)n(t)g(b)r(et)n(w)n(een)g(di\013eren)n
+(t)h(groups.)37 b(Cactus)28 b(originated)f(in)i(the)g(academic)208
+4572 y(researc)n(h)18 b(comm)n(unit)n(y)-7 b(,)23 b(where)d(it)h(w)n
+(as)f(dev)n(elop)r(ed)h(and)g(used)g(o)n(v)n(er)e(man)n(y)h(y)n(ears)f
+(b)n(y)i(a)g(large)e(in)n(ternational)208 4672 y(collab)r(oration)25
+b(of)j(ph)n(ysicists)f(and)g(computational)g(scien)n(tists.)0
+4813 y
+SDict begin H.S end
+ 0 4813 a 0 4813 a
+SDict begin 12 H.A end
+ 0 4813 a 0 4813 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.2) cvn H.B /DEST pdfmark
+end
+ 0 4813 a 150
+x Fm(2)135 b(In)l(tro)t(duction)0 5045 y
+SDict begin H.S end
+ 0 5045 a 0 5045
+a
+SDict begin 12 H.A end
+ 0 5045 a 0 5045 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.1) cvn H.B /DEST
+pdfmark end
+ 0 5045 a 133 x Fl(2.1)112 b(Fixed)39
+b(Mesh)f(Re\014nemen)m(t)0 5348 y Fk(A)32 b(standard)f(w)n(a)n(y)g(of)g
+(solving)g(partial)g(di\013eren)n(tial)h(equations)f(are)f(\014nite)j
+(di\013erences)e(on)h(a)f(regular)f(grid.)49 b(This)32
+b(is)0 5448 y(also)22 b(called)g Fj(unigrid)p Fk(.)36
+b(Suc)n(h)23 b(an)f(application)g(discretises)g(its)h(problem)f(space)g
+(on)n(to)g(a)h(single,)g(rectangular)e(grid)h(whic)n(h)0
+5547 y(has)i(ev)n(erywhere)f(the)i(same)g(grid)f(spacing.)35
+b(This)25 b(grid)f(migh)n(t)g(b)r(e)i(brok)n(en)d(up)i(in)n(to)g(sev)n
+(eral)e(parts)h(for)g(parallelisation)0 5647 y(purp)r(oses,)j(but)h
+(parallelisation)e(should)h(b)r(e)h(transparen)n(t)e(to)i(the)g(ph)n
+(ysics)e(part)i(of)f(the)h(application.)1869 5989 y(1)p
+eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.2) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 125 154 a Fk(Increasing)23
+b(the)j(resolution)f(in)g(a)g(unigrid)g(application)g(is)h(somewhat)e
+(exp)r(ensiv)n(e.)36 b(F)-7 b(or)25 b(example,)g(increasing)f(the)0
+254 y(resolution)e(b)n(y)h(a)g(factor)g(of)g(t)n(w)n(o)f(requires)g(a)h
+(factor)g(of)g(eigh)n(t)g(more)f(storage)g(in)h(three)g(dimensions.)35
+b(Giv)n(en)23 b(a)g(constan)n(t)0 353 y(Couran)n(t)i(factor,)g(the)i
+(calculation)e(time)i(will)f(ev)n(en)g(go)f(up)h(b)n(y)g(a)g(factor)f
+(of)h(sixteen.)36 b(This)26 b(b)r(eha)n(viour)f(mak)n(es)g(it)i(easy)0
+453 y(to)33 b(\014nd)g(problems)g(that)g(cannot)g(b)r(e)g(solv)n(ed)f
+(on)h(con)n(temp)r(orary)e(sup)r(ercomputers,)j(no)f(matter)f(ho)n(w)h
+(big)g(and)g(fast)0 552 y(those)27 b(computers)g(are.)125
+669 y(Apart)h(from)g(ph)n(ysical)g(insigh)n(t,)h(whic)n(h)f(often)h
+(has)f(to)h(b)r(e)g(used)f(to)h(decrease)e(the)i(problem)f(size)g(un)n
+(til)h(it)g(\014ts)g(the)0 768 y(curren)n(t)20 b(hardw)n(are,)g(there)g
+(are)f(also)h(n)n(umerical)f(and)i(algorithmic)e(metho)r(ds)i(to)f
+(decrease)f(the)i(resource)e(requiremen)n(ts)0 868 y(of)30
+b(the)g(application.)44 b(Most)30 b(applications)f(need)h(the)g(high)g
+(resolution)f(only)h(in)g(a)g(part)f(of)h(the)g(sim)n(ulation)g
+(domain.)0 968 y(Discretisation)h(metho)r(ds)h(that)h(don't)f(require)f
+(a)g(uniform)h(resolution,)g(suc)n(h)g(as)f(\014nite)h(elemen)n(ts,)h
+(can)f(implemen)n(t)0 1067 y(non-uniform)c(resolutions)f(v)n(ery)h
+(naturally)-7 b(.)39 b(One)29 b(problem)f(with)h(\014nite)g(elemen)n
+(ts)g(is)f(that)h(man)n(y)f(ph)n(ysicists)g(to)r(da)n(y)0
+1167 y(are)h(not)g(familiar)g(with)i(\014nite)f(elemen)n(ts,)g(or)f(sh)
+n(y)g(a)n(w)n(a)n(y)e(from)j(their)f(p)r(erceiv)n(ed)g(complexit)n(y)-7
+b(,)30 b(or)f(are)f(not)i(willing)g(to)0 1266 y(adapt)d(existing)g
+(\014nite)i(di\013erence)e(co)r(de.)125 1383 y(Fixed)k(Mesh)g
+(Re\014nemen)n(t)g(\(FMR\))h(is)f(a)g(p)r(o)r(or)f(man's)h(w)n(a)n(y)f
+(of)h(implemen)n(ting)g(a)f(non-uniform)h(resolution)f(in)n(to)0
+1482 y(a)g(unigrid)h(application)f(with)h(minimal)g(c)n(hanges)f(to)g
+(its)h(structure.)46 b(Instead)31 b(of)f(only)h(one)f(grid,)h(there)g
+(are)e(sev)n(eral)0 1582 y(grids)g(or)f(grid)h(patc)n(hes)g(with)h
+(di\013eren)n(t)f(resolutions.)42 b(The)29 b(coarsest)f(grid)h(usually)
+g(encloses)f(the)i(whole)f(sim)n(ulation)0 1682 y(domain.)44
+b(Successiv)n(ely)29 b(\014ner)h(grids)g(o)n(v)n(erla)n(y)d(the)k
+(coarse)d(grid)i(at)g(those)g(lo)r(cations)f(where)h(a)f(higher)h
+(resolutions)f(is)0 1781 y(needed.)37 b(The)28 b(coarser)d(grids)i(pro)
+n(vide)f(b)r(oundary)h(conditions)g(to)g(the)h(\014ner)g(grid)f
+(through)g(in)n(terp)r(olation.)125 1897 y(Instead)i(of)g(up)r(dating)g
+(only)g(one)g(grid,)g(the)g(application)g(has)g(to)g(up)r(date)g(all)g
+(grids.)41 b(The)29 b(usual)g(approac)n(h)f(is)h(to)0
+1997 y(\014rst)21 b(tak)n(e)f(a)g(step)h(on)g(the)g(coarsest)e(grid,)j
+(and)e(then)i(recursiv)n(ely)d(tak)n(e)h(sev)n(eral)f(smaller)h(steps)g
+(on)h(the)g(\014ner)g(grids.)34 b(The)0 2097 y(Couran)n(t)27
+b(criterion)h(requires)f(that)i(the)h(step)e(sizes)g(on)h(the)g
+(\014ner)f(grids)g(b)r(e)h(smaller)f(than)h(on)f(the)h(coarse)e(grid.)
+40 b(The)0 2196 y(b)r(oundary)30 b(v)-5 b(alues)31 b(for)f(the)h
+(\014ner)g(grids)f(are)g(found)h(through)f(in)n(terp)r(olation)g(in)i
+(space)e(and)h(time)g(from)g(the)g(coarser)0 2296 y(grid.)36
+b(In)28 b(the)g(end,)g(the)g(information)f(on)g(the)h(\014ner)f(grids)g
+(is)g(injected)i(in)n(to)e(the)h(coarse)e(grids.)125
+2412 y(Strictly)j(sp)r(eaking)f(there)h(is)g(no)g(need)g(for)g(a)g
+(coarse)e(grid)i(on)f(the)i(regions)e(co)n(v)n(ered)f(b)n(y)i(the)g
+(\014ner)g(grids.)41 b(But)29 b(as)0 2512 y(stated)19
+b(ab)r(o)n(v)n(e,)h(the)g(resources)e(required)g(for)h(treating)g(the)h
+(o)n(v)n(erlapping)e(region)g(on)h(the)h(coarse)e(grid)h(are)f(only)h
+(minimal)0 2611 y(compared)26 b(to)i(treating)f(the)h(\014ner)f(grids.)
+36 b(And)28 b(b)r(ecause)g(a)f(coarse)f(grid)h(with)h(a)f(hole)g(often)
+h(creates)e(complications,)0 2711 y(this)i(ob)n(vious)e(optimisation)h
+(is)h(often)g(left)g(out.)0 2843 y
+SDict begin H.S end
+ 0 2843 a 0 2843 a
+SDict begin 12 H.A end
+
+0 2843 a 0 2843 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.2) cvn H.B /DEST
+pdfmark end
+ 0 2843 a 117 x Fl(2.2)112 b(Carp)s(et)0
+3130 y Fk(Carp)r(et)24 b(is)h(a)g(C++)f(library)f(that)i(pro)n(vides)e
+(infrastructure)h(to)h(describ)r(e)f(regions)g(of)g(v)-5
+b(arying)24 b(resolution)g(in)h(a)f(con)n(v)n(e-)0 3230
+y(nien)n(t)h(and)g(e\016cien)n(t)g(w)n(a)n(y)-7 b(.)34
+b(Carp)r(et)25 b(con)n(tains)f(routines)g(to)h(manage)e(grid)h(hierarc)
+n(hies,)g(con)n(taining)g(the)h(relationships)0 3329
+y(b)r(et)n(w)n(een)34 b(the)h(comp)r(onen)n(ts)e(of)i(the)f(grid)g(on)g
+(the)g(di\013eren)n(t)h(re\014nemen)n(t)f(and)g(con)n(v)n(ergence)d
+(lev)n(els.)56 b(Carp)r(et)34 b(has)g(a)0 3429 y(notion)29
+b(of)h(sim)n(ulation)f(time)h(and)f(grid)g(spacing,)g(whic)n(h)h(are)e
+(necessary)g(for)h(in)n(terp)r(olation,)g(and)h(con)n(tains)e
+(e\016cien)n(t)0 3528 y(in)n(terp)r(olators.)125 3645
+y(Carp)r(et)35 b(can)g(run)g(on)g(sev)n(eral)f(pro)r(cessors)f(in)j
+(parallel)e(using)h(MPI)g(for)g(comm)n(unication.)60
+b(Eac)n(h)34 b(grid)h(can)g(b)r(e)0 3744 y(brok)n(en)25
+b(do)n(wn)h(in)n(to)g(sev)n(eral)f(comp)r(onen)n(ts,)h(and)g(ev)n(ery)f
+(comp)r(onen)n(t)h(has)g(a)g(home)g(pro)r(cessor.)34
+b(Carp)r(et)26 b(also)g(con)n(tains)0 3844 y(op)r(erators)g(to)h(mo)n
+(v)n(e)g(certain)g(regions)f(to)h(a)g(di\013eren)n(t)h(pro)r(cessor,)d
+(or)i(to)h(sync)n(hronise)e(all)h(comp)r(onen)n(ts)g(of)g(a)h(grid.)125
+3960 y(Carp)r(et)21 b(is)g(also)f(an)h(arrangemen)n(t)e(of)i(thorns)g
+(for)g(Cactus,)h(implemen)n(ting)g(a)f(driv)n(er)f(and)h(asso)r(ciated)
+f(I/O)g(routines)0 4060 y(for)j(b)r(oth)h(ASCI)r(I)h(and)e(binary)g
+(I/O.)g(It)i(should)e(b)r(e)h(p)r(ossible)g(to)f(substitute)i(Carp)r
+(et)e(for)h(the)g(standard)f(Cactus)g(driv)n(er)0 4159
+y(PUGH)30 b(without)h(c)n(hanges)e(to)g(the)i(application)e(thorns)h
+(and)g(th)n(us)g(use)g(Carp)r(et)g(as)f(a)h(unigrid)f(driv)n(er.)43
+b(Making)30 b(use)0 4259 y(of)i(the)h(FMR)f(capabilities)g(of)g(Carp)r
+(et)g(usually)g(requires)f(some)g(rearranging)e(of)j(the)h
+(application,)g(comparable)d(in)0 4359 y(general)c(to)i(the)g(c)n
+(hanges)e(necessary)g(for)h(a)g(unipro)r(cessor)f(application)h(to)g
+(run)h(on)f(m)n(ultiple)h(pro)r(cessors.)125 4475 y(The)20
+b(driv)n(er)g(section)h(of)f(Carp)r(et)h(con)n(tains)f(the)h(logic)f
+(to)h(manage)f(storage)f(for)h(the)h(grid)f(functions,)j(to)e(tra)n(v)n
+(erse)d(the)0 4575 y(grid)k(hierarc)n(h)n(y)e(for)h(all)h(sc)n(heduled)
+g(routines,)h(and)f(to)g(automatically)f(apply)h(the)h(necessary)d(in)n
+(ter-grid)h(op)r(erators)f(for)0 4674 y(prolongation)g(\(in)n(terp)r
+(olation)h(of)h(the)g(\014ne)g(grid)f(b)r(oundaries\))h(and)f
+(restriction)g(\(injecting)i(the)f(\014ne)g(grid)f(information)0
+4774 y(bac)n(k)27 b(in)n(to)g(the)h(coarse)e(grid\).)125
+4890 y(The)31 b(ASCI)r(I)g(I/O)g(routines)f(use)h(the)g(quasi-standard)
+f(gn)n(uplot)g([)2237 4906 y
+SDict begin H.S end
+ 2237 4906 a -16 x Fk(gn)n(u)2369
+4854 y
+SDict begin H.R end
+ 2369 4854 a 2369 4890 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__gnuplot-info) cvn H.B /ANN pdfmark end
+ 2369 4890 a Fk(])h(format.)47
+b(The)31 b(binary)f(I/O)g(routines)h(use)0 4990 y(the)i(FlexIO)f
+(library)f([)731 4990 y
+SDict begin H.S end
+ 731 4990 a Fk(Sha)865 4932 y
+SDict begin H.R end
+
+865 4932 a 865 4990 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__FlexIO) cvn H.B /ANN pdfmark end
+ 865 4990 a Fk(])h(written)h(b)n(y)f(John)g
+(Shalf.)51 b(It)33 b(allo)n(ws)e(e\016cien)n(t)h(and)h(platform)f
+(indep)r(enden)n(t)h(I/O.)f(The)0 5089 y(FlexIO)27 b(format)g(is)h
+(based)f(on)g(HDF)i([)1211 5089 y
+SDict begin H.S end
+ 1211 5089 a Fk(HDF)1391
+5033 y
+SDict begin H.R end
+ 1391 5033 a 1391 5089 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__HDF) cvn H.B /ANN pdfmark end
+ 1391 5089 a Fk(])e(and)h(also)e(supp)r
+(orted)i(b)n(y)f(sev)n(eral)f(visualisation)g(pac)n(k)-5
+b(ages.)125 5205 y(Carp)r(et)29 b(is)h(cop)n(yrigh)n(ted)f(b)n(y)g
+(Erik)g(Sc)n(hnetter,)i(and)f(is)g(a)n(v)-5 b(ailable)28
+b(under)i(the)h(GPL)e(licence)h(from)g(a)g(CVS)g([)3588
+5205 y
+SDict begin H.S end
+ 3588 5205 a Fk(CVS)3756 5149 y
+SDict begin H.R end
+ 3756 5149 a 3756
+5205 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__CVS) cvn H.B /ANN pdfmark end
+ 3756 5205 a Fk(])0 5305 y(rep)r(ository)-7 b(.)1869
+5989 y(2)p eop end
+%%Page: 3 3
+TeXDict begin 3 2 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.3) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 0 71 a
+SDict begin H.S end
+ 0 71 a 0 71
+a
+SDict begin 12 H.A end
+ 0 71 a 0 71 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.2.3) cvn H.B /DEST
+pdfmark end
+ 0 71 a 83 x Fl(2.3)112 b(W)-9 b(a)m(v)m(eT)g(o)m(y)0
+324 y Fk(Cactus)35 b(comes)g(with)h(a)f(sample)g(application)g(called)h
+Fj(WaveT)-6 b(oy)p Fk(,)39 b(whic)n(h)c(solv)n(es)f(the)i(scalar)e(w)n
+(a)n(v)n(e)g(equation)h(with)0 423 y(v)-5 b(arious)28
+b(initial)h(data)g(and)g(b)r(oundary)f(conditions.)41
+b(An)29 b(an)g(example,)g(I)g(ha)n(v)n(e)f(extended)h(W)-7
+b(a)n(v)n(eT)g(o)n(y)27 b(so)i(that)g(is)g(uses)0 523
+y(Carp)r(et's)j(FMR)h(capabilities.)51 b(W)-7 b(a)n(v)n(eT)g(o)n(y)31
+b(serv)n(es)g(b)r(oth)h(as)g(a)g(test)h(case)f(for)g(Carp)r(et,)h(and)g
+(as)e(example)h(of)h(ho)n(w)f(to)0 623 y(con)n(v)n(ert)26
+b(an)h(application)g(to)h(using)f(FMR.)125 739 y(The)19
+b(equation)g(solv)n(ed)f(b)n(y)h(W)-7 b(a)n(v)n(eT)g(o)n(y)17
+b(is)j(the)f(w)n(ell)g(kno)n(wn)g(scalar)f(w)n(a)n(v)n(e)f(equation,)k
+(discretised)e(using)f(the)i(Leapfrog)0 839 y(metho)r(d)28
+b(with)g(three)g(time)g(lev)n(els,)f(yielding)g(second)h(order)e
+(accuracy)g(in)i(space)f(and)g(time.)38 b(A)28 b(t)n(ypical)f(set)h(of)
+f(initial)0 938 y(data)22 b(are)g(a)g(plane)g(w)n(a)n(v)n(e,)g(and)g(a)
+g(t)n(ypical)g(b)r(oundary)g(condition)g(is)h(p)r(erio)r(dicit)n(y)-7
+b(.)35 b(Those)22 b(allo)n(w)f(long)h(term)g(sim)n(ulations)0
+1038 y(as)27 b(w)n(ell)g(as)g(easy)g(and)g(meaningful)h(comparisons)e
+(to)h(the)h(analytic)f(solution.)0 1179 y
+SDict begin H.S end
+ 0 1179 a 0
+1179 a
+SDict begin 12 H.A end
+ 0 1179 a 0 1179 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3) cvn H.B /DEST pdfmark
+end
+ 0 1179 a 150 x Fm(3)135 b(Compiling)46
+b(Cactus)f(With)g(Carp)t(et)0 1527 y Fk(Carp)r(et)36
+b(has)g(b)r(een)g(written)h(in)g(C++,)g(using)f(templates)h(and)f(the)g
+(STL)h(\(Standard)f(T)-7 b(emplate)36 b(Library\).)62
+b(Both)0 1627 y(templates)28 b(and)f(the)h(STL)g(mak)n(e)f(writing)g
+(and)h(debugging)e(co)r(de)i(a)f(lot)h(easier.)36 b(Without)28
+b(templates,)g(I)g(w)n(ould)f(ha)n(v)n(e)0 1727 y(had)e(to)h(put)g(m)n
+(uc)n(h)g(e\013ort)f(in)n(to)h(making)f(Carp)r(et)g(supp)r(ort)g(all)h
+(of)f(Cactus')h(data)f(t)n(yp)r(es.)36 b(Without)27 b(the)f(STL,)f(I)h
+(w)n(ould)0 1826 y(ha)n(v)n(e)34 b(had)g(to)h(sp)r(end)h(quite)f(some)f
+(time)i(implemen)n(ting)f(basic)f(con)n(tainers)f(suc)n(h)i(as)f(lists)
+h(or)f(sets.)59 b(I)35 b(still)g(had)g(to)0 1926 y(implemen)n(t)g(a)e
+(custom)h(v)n(ector)f(t)n(yp)r(e,)j(b)r(ecause)e(STL's)g(v)n(ector)f(t)
+n(yp)r(e)h(is)g(optimised)g(for)g(large)f(v)n(ectors)f(only)-7
+b(,)36 b(and)e(I)0 2026 y(needed)28 b(threedimensional)f(v)n(ectors)f
+(of)h(in)n(tegers.)125 2142 y(The)32 b(inner)h(lo)r(ops)f(of)g(Carp)r
+(et)h(are)e(the)i(in)n(ter-grid)f(op)r(erators,)g(that)h(is)f(the)h
+(routines)f(that)h(cop)n(y)-7 b(,)33 b(restrict,)h(and)0
+2241 y(prolongate)24 b(b)r(et)n(w)n(een)i(grids.)35 b(Due)27
+b(to)f(Cactus)f(it)i(w)n(as)d(rather)h(easy)g(to)h(write)g(these)g(in)g
+Fi(F)n(or)-6 b(tran)30 b(77)p Fk(,)c(whic)n(h)g(mak)n(es)0
+2341 y(them)i(b)r(oth)g(fast)g(and)f(p)r(ortable.)125
+2457 y(Carp)r(et)35 b(is)g(an)h(arrangemen)n(t)d(in)j(Cactus.)61
+b(It)36 b(can)f(theoretically)g(b)r(e)h(compiled)f(without)h(an)n(y)f
+(other)g(external)0 2557 y(library)-7 b(,)22 b(if)h(y)n(ou)f(don't)h
+(include)g(the)g(binary)f(I/O)f(supp)r(ort)i(whic)n(h)f(requires)g
+(FlexIO.)g(I)g(do)h(recommend)f(using)g(FlexIO,)0 2657
+y(so)32 b(y)n(ou)g(should)g(install)h(the)g(FlexIO)f(library)g
+(\014rst.)52 b(Although)33 b(FlexIO)f(is)g(already)g(part)g(of)h
+(Cactus)f(in)h(the)g(thorn)0 2756 y(called)d(CactusExternal/FlexIO,)f
+(this)i(seems)f(to)h(b)r(e)g(a)f(v)n(ersion)g(that)h(has)f(FMR)h(supp)r
+(ort)g(disabled)f(and)h(is)g(hence)0 2856 y(not)d(usable.)36
+b(Y)-7 b(ou)28 b(will)f(ha)n(v)n(e)g(to)g(install)h(a)f(complete)h(cop)
+n(y)e(of)i(FlexIO)f(b)n(y)g(hand.)0 2988 y
+SDict begin H.S end
+ 0 2988 a 0
+2988 a
+SDict begin 12 H.A end
+ 0 2988 a 0 2988 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1) cvn H.B /DEST
+pdfmark end
+ 0 2988 a 117 x Fl(3.1)112 b(Hurdle)38
+b(1:)50 b(FlexIO)0 3275 y Fk(I)21 b(suggest)f(that)h(y)n(ou)f(enable)g
+(supp)r(ort)h(for)f(the)h(HDF)h(format)e(in)h(the)g(FlexIO)g(library)-7
+b(,)21 b(although)f(this)h(is)f(not)h(necessary)-7 b(.)0
+3374 y(If)28 b(y)n(ou)f(don't)h(w)n(an)n(t)f(to)g(do)g(this,)h(then)g
+(y)n(ou)f(don't)h(ha)n(v)n(e)e(to)i(install)f(the)h(HDF)h(libraries)d
+(in)i(the)g(follo)n(wing.)0 3457 y
+SDict begin H.S end
+ 0 3457 a 0 3457 a
+SDict begin 12 H.A end
+
+0 3457 a 0 3457 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.1) cvn H.B /DEST pdfmark
+end
+ 0 3457 a 101 3574 a Fk(1.)42 b(Install)22
+b(the)h(HDF4)h(and)f(HDF5)g(libraries.)34 b(They)22 b(are)g(a)n(v)-5
+b(ailable)22 b(from)g(the)i(HDF)f(w)n(eb)g(pages)f([)3214
+3574 y
+SDict begin H.S end
+ 3214 3574 a Fk(HDF)3394 3517 y
+SDict begin H.R end
+ 3394 3517 a 3394
+3574 a
+SDict begin [ /Color [0 1 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (cite.Carpet__HDF) cvn H.B /ANN pdfmark end
+ 3394 3574 a Fk(],)i(and)e(they)208 3673 y(can)28
+b(b)r(e)i(installed)e(with)i(the)f(usual)g Fh(./configure;)39
+b(make;)i(make)h(install)26 b Fk(triplet.)41 b(They)29
+b(should)g(already)208 3773 y(b)r(e)i(installed)g(b)n(y)g(default)h(on)
+f(most)g(mac)n(hines.)46 b(The)32 b(con)n(v)n(ersion)c(utilities)k(b)r
+(et)n(w)n(een)f(HDF4)h(and)f(HDF5)h(are)208 3872 y(installed)26
+b(automatically)g(when)h(y)n(ou)f(install)h(HDF5)g(while)g(HDF4)g(is)g
+(already)e(installed.)37 b(\(That)27 b(means)f(that)208
+3972 y(y)n(ou)g(should)i(install)f(HDF4)h(\014rst,)g(and)f(then)h
+(HDF5.\))0 4026 y
+SDict begin H.S end
+ 0 4026 a 0 4026 a
+SDict begin 12 H.A end
+ 0 4026 a 0 4026 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.2) cvn H.B /DEST pdfmark
+end
+
+0 4026 a 101 4138 a Fk(2.)42 b(Get)28 b(the)g(FlexIO)f(library)f(from)h
+(the)h(Cactus)f(CVS)h(serv)n(er:)208 4238 y Fh(cvs)42
+b(-d)h(:pserver:)p Fg(yourlo)o(gin)8 b Fh(@cvs.cactuscode)o(.or)o(g:)o
+(/pa)o(ck)o(ag)o(es)37 b(checkout)j(FlexIO)p Fk(.)21
+b(If)i(y)n(ou)f(do)h(not)208 4337 y(ha)n(v)n(e)30 b(a)h(login,)h(then)g
+(use)f(the)h(login)f Fh(cvs)p 1538 4337 27 4 v 30 w(anon)f
+Fk(for)h(anon)n(ymous)f(access.)48 b(The)31 b(Cactus)g(w)n(eb)h(pages)e
+(describ)r(e)208 4437 y(ho)n(w)d(to)g(do)g(this.)0 4470
+y
+SDict begin H.S end
+ 0 4470 a 0 4470 a
+SDict begin 12 H.A end
+ 0 4470 a 0 4470 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.3) cvn H.B /DEST pdfmark
+end
+ 0 4470 a 101 4603
+a Fk(3.)42 b(Con\014gure)h(FlexIO)h(while)h(pro)n(viding)f(the)h(paths)
+g(to)f(the)h(HDF4)h(and)e(HDF5)h(libraries:)70 b Fh(./configure)208
+4703 y(--with-hdf4=/us)o(r)38 b(--with-hdf5=/us)o(r)p
+Fk(,)20 b(assuming)k(that)h(HDF4)h(and)f(HDF5)h(are)e(installed)h
+(under)g Fh(/usr)p Fk(.)208 4802 y(Y)-7 b(ou)28 b(can)f(also)g
+(con\014gure)g(without)i(HDF)g(supp)r(ort,)f(but)h(then)f(y)n(ou)g
+(will)g(not)g(b)r(e)h(able)e(to)h(read)g(or)f(write)h(HDF)208
+4902 y(\014les.)36 b(FlexIO)28 b(will)f(then)h(supp)r(ort)g(only)f(the)
+h(built-in)g Fh(IEEEIO)d Fk(format.)0 4951 y
+SDict begin H.S end
+ 0 4951 a
+0 4951 a
+SDict begin 12 H.A end
+ 0 4951 a 0 4951 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.4) cvn H.B /DEST pdfmark
+end
+ 0 4951 a 101 5068 a Fk(4.)42
+b(Edit)32 b(the)g(top)g(of)g(the)g(\014le)h Fh(FlexIO/Makefile)26
+b Fk(to)31 b(matc)n(h)h(y)n(our)f(actual)g(con\014guration.)49
+b(The)32 b Fh(./configure)208 5168 y Fk(script)d(of)h(FlexIO)g(is)g(a)g
+(bit)g(simplistic,)i(so)d(don't)h(sp)r(end)h(to)r(o)f(m)n(uc)n(h)f
+(e\013ort)h(trying)g(to)g(con)n(vince)f(it)h(to)g(do)g(the)208
+5267 y(righ)n(t)c(thing.)208 5400 y(On)33 b(m)n(y)h(mac)n(hine,)h(I)f
+(had)g(to)g(c)n(hange)f(the)h(settings)g Fh(CC)43 b(=)g(mpicc)p
+Fk(,)34 b Fh(C++)42 b(=)h(mpiCC)f(-DMPICH)p 3266 5400
+27 4 v 28 w(SKIP)p 3470 5400 V 30 w(MPICXX)p Fk(,)208
+5500 y(and)29 b Fh(HDFINCLUDES)39 b(=)44 b(-I$\(HDFROOT\)/in)o(clu)o
+(de)o(/h)o(df)24 b Fk(b)n(y)29 b(hand.)44 b(I)30 b(am)g(using)g(Debian)
+g(Lin)n(ux)g(on)g(an)f(IA32)208 5599 y(with)e(gcc)g(2.95.4)e(and)i
+(MPICH)h(1.2.4,)e(and)h(I)g(ha)n(v)n(e)f(an)h(HDF5)h(library)e(where)g
+(supp)r(ort)h(for)g(parallel)f(I/O)h(w)n(as)208 5699
+y(enabled.)1869 5989 y(3)p eop end
+%%Page: 4 4
+TeXDict begin 4 3 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.4) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 0 71 a
+SDict begin H.S end
+ 0 71 a 0 71
+a
+SDict begin 12 H.A end
+ 0 71 a 0 71 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.5) cvn H.B /DEST pdfmark
+end
+ 0 71 a 101 154 a Fk(5.)42 b(Compile)27
+b(the)h(library)e(with)i Fh(make)p Fk(.)0 203 y
+SDict begin H.S end
+ 0 203
+a 0 203 a
+SDict begin 12 H.A end
+ 0 203 a 0 203 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.6) cvn H.B /DEST pdfmark
+end
+ 0 203 a 101 320 a Fk(6.)42
+b(The)29 b(library)f(cannot)h(b)r(e)g(installed)h(automatically)-7
+b(.)40 b(Y)-7 b(ou)30 b(usually)f(use)g(the)g(include)h(and)f(library)f
+(\014les)h(where)208 420 y(they)24 b(are.)34 b(If)25
+b(y)n(ou)e(w)n(an)n(t)h(to)g(install)f(the)i(library)-7
+b(,)23 b(cop)n(y)h(all)f(the)i(header)e(\014les)h(\()p
+Fh(*.h)43 b(*.hh)e(*.H)p Fk(\))24 b(and)f(the)i(library)208
+519 y(\014les)i(\()p Fh(*.a)p Fk(\).)125 719 y(Y)-7 b(es,)27
+b(I)h(also)e(think)j(that)e(this)h(is)g(w)n(a)n(y)e(to)r(o)h
+(complicated.)0 851 y
+SDict begin H.S end
+ 0 851 a 0 851 a
+SDict begin 12 H.A end
+ 0 851 a 0 851 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.2) cvn H.B /DEST
+pdfmark end
+
+0 851 a 117 x Fl(3.2)112 b(Hurdle)38 b(2:)50 b(STL)0
+1137 y Fk(Some)34 b(op)r(erating)f(systems)g(do)h(not)g(ha)n(v)n(e)f(a)
+h(complian)n(t)f(STL)h(\(Standard)g(T)-7 b(emplate)34
+b(Library\))f(installed.)56 b(If)35 b(not,)0 1237 y(then)28
+b(y)n(ou)f(are)g(in)g(trouble.)37 b(Carp)r(et)27 b(do)r(es)g(mak)n(e)g
+(use)h(of)f(the)h(STL,)g(and)f(there)h(is)f(no)g(w)n(a)n(y)g(around)f
+(that.)0 1369 y
+SDict begin H.S end
+ 0 1369 a 0 1369 a
+SDict begin 12 H.A end
+ 0 1369 a 0 1369 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3) cvn H.B /DEST
+pdfmark end
+ 0
+1369 a 117 x Fl(3.3)112 b(Hurdle)38 b(3:)50 b(T)-9 b(emplates)0
+1656 y Fk(Some)32 b(compilers)f(con)n(tain)h(switc)n(hes)f(to)h(instan)
+n(tiate)g(some)g(or)f(all)h(templates)g(automatically)-7
+b(.)50 b(This)32 b(usually)g(do)r(es)0 1755 y(not)c(w)n(ork)e(when)j
+(\014les)f(are)e(put)j(in)n(to)f(libraries,)e(whic)n(h)i(is)g(what)g
+(Cactus)g(do)r(es.)37 b(The)28 b(sc)n(heme)g(that)g(I)g(found)g(w)n
+(orking)0 1855 y(on)g(all)g(mac)n(hines)f(is)h(to)g(instan)n(tiate)f
+(most)h(templates)g(b)n(y)g(hand,)g(and)g(ha)n(v)n(e)f(the)i(compiler)e
+(instan)n(tiate)h(the)g(missing)0 1955 y(templates)38
+b(for)g(ev)n(ery)f(ob)5 b(ject)39 b(\014le.)69 b(This)38
+b(is)g(the)h(default)g(for)f(gcc.)68 b(On)39 b(SGIs,)i(y)n(ou)c(ha)n(v)
+n(e)h(to)g(pass)f(the)i(options)0 2054 y Fh(-no)p 137
+2054 27 4 v 30 w(auto)p 343 2054 V 30 w(include)i(-ptused)24
+b Fk(to)k(the)g(C++)f(compiler.)125 2171 y(The)k(C++)g(standard)g(sp)r
+(eci\014es)g(a)g(limit)i(when)e(using)h(templates)f(as)g(template)h
+(parameters.)47 b(Carp)r(et's)31 b(use)h(of)0 2270 y(the)c(GNU)g(STL)g
+(exceeds)f(this)h(limit.)37 b(Gcc)28 b(requires)e(the)i(option)g
+Fh(-ftemplate-dept)o(h-3)o(0)21 b Fk(to)28 b(enable)f(this.)0
+2405 y
+SDict begin H.S end
+ 0 2405 a 0 2405 a
+SDict begin 12 H.A end
+ 0 2405 a 0 2405 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.4) cvn H.B /DEST
+pdfmark end
+ 0 2405 a 114
+x Fl(3.4)112 b(W)-9 b(a)m(v)m(eT)g(o)m(y)0 2689 y Fk(Unfortunately)i(,)
+31 b(PUGH)g(and)f(Carp)r(et)g(cannot)g(y)n(et)g(b)r(e)h(b)r(oth)f
+(compiled)h(in)n(to)f(a)g(single)g(application.)44 b(\(This)31
+b(will)f(b)r(e)0 2789 y(\014xed)k(so)r(on.\))56 b(That)34
+b(means)g(that)h(y)n(ou)e(will)h(ha)n(v)n(e)f(separate)g(executables)h
+(for)f(unigrid)h(and)g(for)g(mesh)g(re\014nemen)n(t)0
+2888 y(applications.)125 3005 y(Con\014guring)28 b(Carp)r(et)h(is)h
+(not)g(quite)g(trivial,)g(b)r(ecause)f(Cactus)g(pro)n(vides)g(curren)n
+(tly)g(no)g(w)n(a)n(y)g(to)g(auto)r(detect)h(the)0 3104
+y(settings)35 b(for)f(Carp)r(et.)59 b(Hence)36 b(y)n(ou)e(will)h(ha)n
+(v)n(e)f(to)h(set)g(the)h(settings)e(man)n(ually)-7 b(.)59
+b(I)35 b(prop)r(ose)f(that)h(y)n(ou)g(start)f(with)0
+3204 y(on)29 b(of)h(the)g(pre-made)f(options)g(\014les)g(in)h(the)g
+(directory)g Fh(Carpet/Carpet/o)o(pt)o(ion)o(s)p Fk(.)37
+b(T)-7 b(ry)29 b(e.g.)g Fh(carpet-harpo-sgi)0 3303 y
+Fk(for)j(an)f(SGI,)i(or)e Fh(carpet-lilypond)26 b Fk(for)31
+b(Lin)n(ux)h(with)h(gcc,)f(or)f Fh(carpet-lilypond-i)o(c)26
+b Fk(for)32 b(Lin)n(ux)f(with)i(the)f(In)n(tel)0 3403
+y(compilers.)j(Once)25 b(y)n(ou)g(ha)n(v)n(e)f(a)h(w)n(orking)f
+(options)g(\014le)i(for)f(y)n(our)f(mac)n(hine,)h(send)h(it)f(to)h(me,)
+g(so)e(that)i(I)f(can)g(include)h(it.)125 3519 y(As)h(for)h(the)g
+(thorn)f(list:)38 b(Carp)r(et)27 b(has)g(its)h(o)n(wn)f(ASCI)r(I)i
+(output)f(thorn,)g(whic)n(h)f(outputs)h(more)f(information)g(than)0
+3619 y(CactusBase/IO)n(ASCI)r(I.)f(The)h(thorn)g(list)h(that)g(I)g(use)
+f(is)0 3818 y Fh(CactusBase/Bound)o(ary)691 b(#)43 b(boundary)d
+(\(grid\))h([)i(])g({)h(})0 3918 y(CactusBase/CartG)o(rid)o(3D)604
+b(#)43 b(grid)f(\()h(\))g([)g(])g({driver})0 4017 y(#CactusBase/IOAS)o
+(CII)734 b(#)43 b(IOASCII)e(\(IO,Hyperslab\))d([)43 b(])g({IO})0
+4117 y(CactusBase/IOBas)o(ic)735 b(#)43 b(IOBasic)d(\(IO\))i([)h(])h
+({IO})0 4217 y(CactusBase/IOUti)o(l)779 b(#)43 b(IO)f(\()i(\))f([)g(])g
+({)g(})0 4316 y(CactusBase/Local)o(Int)o(er)o(p)561 b(#)43
+b(LocalInterp)c(\()k(\))g([)g(])g({)h(})0 4416 y(CactusBase/Time)866
+b(#)43 b(time)f(\()h(\))g([)g(])g({)g(})0 4516 y(CactusConnect/HT)o
+(TPD)691 b(#)43 b(HTTPD)e(\(Socket\))f([)k(])f({Cactus})0
+4615 y(CactusConnect/HT)o(TPD)o(Ex)o(tr)o(a)474 b(#)43
+b(http_utils)c(\(httpd,IO\))h([)j(])g({)g(})0 4715 y(CactusConnect/So)o
+(cke)o(t)648 b(#)43 b(Socket)e(\()i(\))g([)g(])g({)h(})0
+4814 y(#CactusExternal/)o(Fle)o(xI)o(O)604 b(#)43 b(FlexIO)e(\()j(\))f
+([)g(])g({)g(})0 4914 y(CactusExternal/j)o(peg)o(6b)604
+b(#)43 b(jpeg6b)e(\()i(\))g([)g(])g({)h(})0 5014 y(CactusIO/IOJpeg)866
+b(#)43 b(IOJpeg)e(\(IO,Hyperslab,jp)o(eg)o(6b\))c([)43
+b(])g({IO})0 5113 y(CactusUtils/NaNC)o(hec)o(ke)o(r)561
+b(#)43 b(NaNChecker)c(\()k(\))g([)h(])f({)g(})0 5213
+y(CactusWave/IDSca)o(lar)o(Wa)o(ve)517 b(#)43 b(idscalarwave)38
+b(\(wavetoy,grid\))g([)43 b(])g({grid})0 5313 y(CactusWave/IDSca)o(lar)
+o(Wa)o(ve)o(C)474 b(#)43 b(idscalarwave)38 b(\(wavetoy,grid\))g([)43
+b(])g({grid})0 5412 y(CactusWave/IDSca)o(lar)o(Wa)o(ve)o(CXX)386
+b(#)43 b(idscalarwave)38 b(\(wavetoy,grid\))g([)43 b(])g({grid})0
+5512 y(#CactusWave/IDSc)o(ala)o(rW)o(av)o(eEl)o(li)o(pti)o(c)168
+b(#)43 b(idscalarwaveellip)o(ti)o(c)38 b(\(grid,wavetoy,e)o(llb)o(as)o
+(e\))f([)43 b(])g({idscalarwave})0 5611 y(CactusWave/WaveB)o(ina)o(ry)o
+(So)o(urc)o(e)343 b(#)43 b(binarysource)38 b(\(wavetoy,grid,ids)o(ca)o
+(lar)o(wa)o(ve\))f([)43 b(])g({)g(})0 5711 y(CactusWave/WaveT)o(oyC)691
+b(#)43 b(wavetoy)d(\(Grid,Boundary\))e([)43 b(])g({)g(})1869
+5989 y Fk(4)p eop end
+%%Page: 5 5
+TeXDict begin 5 4 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.5) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 291 x Fh(CactusWave/WaveT)o(oyC)o(XX)
+604 b(#)43 b(wavetoy)d(\(Grid,Boundary\))e([)43 b(])g({)g(})0
+254 y(CactusWave/WaveT)o(oyF)o(77)604 b(#)43 b(wavetoy)d
+(\(Grid,Boundary\))e([)43 b(])g({)g(})0 353 y(#CactusWave/Wave)o(Toy)o
+(F9)o(0)604 b(#)43 b(wavetoy)e(\(Grid,Boundary\))c([)44
+b(])f({)g(})0 453 y(#CactusWave/Wave)o(Toy)o(Fr)o(ee)o(F90)429
+b(#)43 b(wavetoy)e(\(Grid,Boundary\))c([)44 b(])f({)g(})0
+552 y(Carpet/Carpet)954 b(#)43 b(driver)e(\(CarpetLib\))e([)k(])g
+({Cactus,IO})0 652 y(Carpet/CarpetIOA)o(SCI)o(I)648 b(#)43
+b(IOASCII)d(\(CarpetLib,driver)o(,Hy)o(pe)o(rs)o(lab)o(\))d([)44
+b(])f({IO})0 752 y(Carpet/CarpetIOF)o(lex)o(IO)604 b(#)43
+b(IOFlexIO)d(\(CarpetLib,drive)o(r,H)o(yp)o(er)o(sla)o(b\))d([)43
+b(])g({IO})0 851 y(#Carpet/CarpetIO)o(HDF)o(5)691 b(#)43
+b(IOHDF5)e(\(CarpetLib,driver)o(,Hy)o(pe)o(rs)o(lab)o(\))c([)44
+b(])f({IO})0 951 y(#Carpet/CarpetIO)o(Ser)734 b(#)43
+b(IOSer)f(\(CarpetLib,drive)o(r,)o(Hyp)o(er)o(sl)o(ab\))37
+b([)43 b(])g({IO})0 1051 y(Carpet/CarpetLib)822 b(#)43
+b(CarpetLib)d(\()j(\))g([)g(])g({)g(})0 1150 y(Carpet/CarpetRed)o(uce)
+691 b(#)43 b(reduce)e(\(CarpetLib,drive)o(r\))c([)43
+b(])g({)g(})0 1250 y(Carpet/CarpetReg)o(rid)691 b(#)43
+b(CarpetRegrid)38 b(\(CarpetLib,driver)o(\))f([)44 b(])f({)g(})0
+1349 y(Carpet/CarpetSla)o(b)779 b(#)43 b(Hyperslab)d(\(CarpetLib,driv)o
+(er\))d([)43 b(])g({)g(})125 1549 y Fk(The)21 b(thorns)h(pre\014xed)f
+(with)h Fh(#)g Fk(are)f(disabled.)35 b(IO)n(ASCI)r(I)21
+b(con\015icts)h(with)g(Carp)r(etIO)n(ASCI)r(I,)g(and)f(FlexIO)h
+(con\015icts)0 1648 y(with)36 b(the)f(external)g(FlexIO)f(library)g
+(that)i(Carp)r(etIOFlexIO)d(uses.)60 b(I)35 b(disabled)g(IDScalarW)-7
+b(a)n(v)n(eElliptic)33 b(b)r(ecause)0 1748 y(there)24
+b(is)h(no)f(elliptic)h(solv)n(er)e(for)h(mesh)h(re\014nemen)n(t,)g(and)
+f(I)h(disabled)f(W)-7 b(a)n(v)n(eT)g(o)n(yF90)22 b(and)i(W)-7
+b(a)n(v)n(eT)g(o)n(yF)g(reeF90)22 b(b)r(ecause)0 1848
+y(gcc)28 b(do)r(es)g(not)h(con)n(tain)e(a)i(F)-7 b(ortran)27
+b(90)h(compiler.)39 b(Carp)r(etIOHDF5)28 b(is)g(not)h(y)n(et)f
+(\014nished,)h(and)f(Carp)r(etIOSer)g(needs)0 1947 y(the)g(Ser)f
+(library)f(whic)n(h)i(is)f(not)h(publically)g(a)n(v)-5
+b(ailable.)125 2063 y(The)33 b(CactusConnect,)i(CactusExternal,)f
+(CactusIO,)f(and)g(CactusUtils)h(thorns)f(are)g(not)h(necessary)-7
+b(,)33 b(but)i(are)0 2163 y(nice)28 b(to)f(ha)n(v)n(e)g(around.)35
+b(Y)-7 b(ou)28 b(can)f(safely)g(omit)h(these.)0 2304
+y
+SDict begin H.S end
+ 0 2304 a 0 2304 a
+SDict begin 12 H.A end
+ 0 2304 a 0 2304 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4) cvn H.B /DEST pdfmark
+end
+ 0 2304 a 150 x
+Fm(4)135 b(Running)44 b(The)h(Example)h(Applications)0
+2653 y Fk(Although)32 b(Carp)r(et)f(w)n(orks)f(\014ne)i(with)g(the)g
+(standard)e(W)-7 b(a)n(v)n(eT)g(o)n(y)30 b(thorns,)i(all)g(the)g
+(example)f(parameter)f(\014les)h(in)h(the)0 2752 y(CactusW)-7
+b(a)n(v)n(e)26 b(arrangemen)n(t)g(use)h(PUGH,)h(and)f(can)h(therefore)e
+(not)i(b)r(e)g(directly)f(used.)125 2869 y(The)c(co)r(ordinate)f(thorn)
+g(CactusBase/CartGrid3D)f(do)r(es)i(not)g(pro)n(vide)f(p)r(erio)r(dic)h
+(b)r(oundary)f(conditions.)35 b(These)0 2968 y(are)18
+b(normally)f(pro)n(vided)h(b)n(y)h(the)g(driv)n(er)e(PUGH.)i(Ho)n(w)n
+(ev)n(er,)g(Carp)r(et)f(do)r(es)h(not)g(con)n(tain)f(an)n(y)g(b)r
+(oundary)g(conditions.)33 b(If)0 3068 y(y)n(ou)20 b(w)n(an)n(t)g(to)g
+(apply)g(p)r(erio)r(dic)h(b)r(oundaries,)g(y)n(ou)e(will)i(therefore)f
+(ha)n(v)n(e)f(to)h(use)h(the)g(AlphaThorns/Cart3d)d(co)r(ordinate)0
+3167 y(thorn)26 b(instead,)h(whic)n(h)f(do)r(es)g(pro)n(vide)f(p)r
+(erio)r(dicit)n(y)-7 b(.)37 b(Unfortunately)-7 b(,)26
+b(AlphaThorns/Cart3d)e(is)j(incompatible)f(with)0 3267
+y(CactusBase/CartGrid3D.)17 b(There)h(is)i(a)f(v)n(ersion)e(of)j(W)-7
+b(a)n(v)n(eT)g(o)n(y)17 b(in)j(the)g(Carp)r(et)f(arrangemen)n(t)e(that)
+i(has)g(b)r(een)h(adapted)0 3367 y(to)30 b(AlphaThorns/Cart3d.)41
+b(I)29 b(suggest)g(that)h(y)n(ou)f(use)h(this)g(v)n(ersion)e(of)i(W)-7
+b(a)n(v)n(eT)g(o)n(y)27 b(instead)j(of)g(CactusW)-7 b(a)n(v)n(e)28
+b(to)i(run)0 3466 y(test)e(problems,)f(b)r(ecause)g(p)r(erio)r(dicit)n
+(y)g(mak)n(es)g(for)g(nice)h(testing)f(setups.)125 3583
+y(Y)-7 b(ou)30 b(can)f(\014nd)i(quite)f(a)g(few)g(example)f(parameter)g
+(\014les)h(in)g(the)g(directory)g Fh(Carpet/WaveToyF77)o(/p)o(ar)p
+Fk(.)38 b(I)30 b(esp)r(e-)0 3682 y(cially)i(recommend)f(the)i
+Fh(wavetoyf77)p 1264 3682 27 4 v 27 w(periodic)p 1643
+3682 V 28 w(*)f Fk(set,)h(whic)n(h)f(comes)g(in)g(t)n(w)n(o)f(sizes)h
+(\()p Fh(coarse)e Fk(and)i Fh(fine)p Fk(,)g(corre-)0
+3782 y(sp)r(onding)26 b(to)g(a)g(small)g(and)g(a)g(large)f(sim)n
+(ulation)h(domain\))g(and)g(three)g(di\013eren)n(t)g(re\014nemen)n(t)g
+(hierarc)n(hies)f(\(with)i(one,)0 3881 y(t)n(w)n(o,)37
+b(and)e(three)h(lev)n(el)f(altogether,)h(resp)r(ectiv)n(ely\).)60
+b(This)36 b(set)f(th)n(us)h(forms)f(a)g(con)n(v)n(ergence)e(test,)38
+b(whic)n(h)d(y)n(ou)g(can)0 3981 y(run)26 b(and)f(test)i(y)n(ourself.)
+35 b(The)26 b(set)g Fh(wavetoyf77)p 1552 3981 V 27 w(rad)p
+1711 3981 V 30 w(full)p 1917 3981 V 30 w(*)f Fk(uses)h(radiativ)n(e)e
+(instead)i(of)g(p)r(erio)r(dic)g(b)r(oundaries)f(and)0
+4081 y(should)h(also)f(b)r(e)i(nice)g(to)f(lo)r(ok)g(at.)36
+b(The)26 b(\014le)h Fh(wavetoyf77)p 1868 4081 V 27 w(rad)p
+2027 4081 V 30 w(automatic.par)21 b Fk(is)27 b(an)f(attempt)h(at)f
+(adaptiv)n(e)g(mesh)0 4180 y(re\014nemen)n(t,)h(whic)n(h)h(ma)n(y)f(or)
+g(ma)n(y)f(not)i(w)n(ork,)e(dep)r(ending)i(on)g(the)g(curren)n(t)e
+(status)i(of)f(Carp)r(et.)125 4297 y(Second)34 b(order)g(con)n(v)n
+(ergence)f(requires)h(second)g(order)g(in)n(terp)r(olation)g(in)h
+(time,)j(whic)n(h)d(requires)f(that)h(at)g(least)0 4396
+y(three)27 b(time)i(lev)n(els)d(are)h(presen)n(t.)0 4537
+y
+SDict begin H.S end
+ 0 4537 a 0 4537 a
+SDict begin 12 H.A end
+ 0 4537 a 0 4537 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5) cvn H.B /DEST pdfmark
+end
+ 0 4537 a 150 x
+Fm(5)135 b(F)-11 b(old)44 b(Y)-11 b(our)44 b(Own)h(FMR)f(Application)0
+4886 y Fk(There)33 b(are)f(three)h(steps)g(to)g(tak)n(e)f(from)h(a)f
+(simple)i(unigrid)e(unipro)r(cessor)g(to)n(y)g(application)h(to)f(a)h
+(full-blo)n(wn)g(FMR)0 4985 y(m)n(ultipro)r(cessor)27
+b(pro)r(duction)h(application.)38 b(Those)28 b(steps)g(are)g(almost)g
+(indep)r(enden)n(t,)h(and)f(I)h(w)n(ould)f(lik)n(e)g(to)g(explain)0
+5085 y(them)g(and)g(their)f(implications)g(in)h(some)f(detail)h(b)r
+(elo)n(w.)0 5217 y
+SDict begin H.S end
+ 0 5217 a 0 5217 a
+SDict begin 12 H.A end
+ 0 5217 a 0 5217
+a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.1) cvn H.B /DEST
+pdfmark end
+ 0 5217 a 117 x Fl(5.1)112 b(Multiple)39 b(Pro)s(cessors)0
+5504 y Fk(The)29 b(probably)f(b)r(est)i(kno)n(wn)f(of)g(these)g(is)g
+(the)h(step)f(from)g(using)g(one)g(to)g(using)g(sev)n(eral)e(pro)r
+(cessors,)h(also)g(kno)n(wn)g(as)0 5604 y(parallelisation.)35
+b(Because)27 b(man)n(y)g(p)r(eople)g(are)g(already)f(familiar)h(with)h
+(this)g(step,)g(I)f(will)h(describ)r(e)f(it)h(\014rst.)1869
+5989 y(5)p eop end
+%%Page: 6 6
+TeXDict begin 6 5 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.6) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 125 154 a Fk(In)28
+b(a)g(unipro)r(cessor)e(application,)i(it)g(is)g(p)r(ossible)g(to)g
+(access)f(ev)n(ery)g(grid)g(p)r(oin)n(t)h(in)h(arbitrary)d(manners.)38
+b(In)28 b(order)0 254 y(to)d(allo)n(w)f(m)n(ultiple)h(pro)r(cessors)e
+(to)i(run)f(e\016cien)n(tly)h(in)h(parallel,)e(the)h(grid)g(is)f(brok)n
+(en)g(do)n(wn)h(in)n(to)f(sev)n(eral)g(rectangular)0
+353 y(comp)r(onen)n(ts,)j(and)h(eac)n(h)e(pro)r(cessor)g(is)h(assigned)
+g(one)g(of)g(these)h(comp)r(onen)n(ts.)125 469 y(The)41
+b(comp)r(onen)n(ts)g(will)g(usually)g(o)n(v)n(erlap)e(b)n(y)i(a)g(few)g
+(grid)g(p)r(oin)n(ts,)j(so)d(as)f(to)h(allo)n(w)f(the)i(pro)r(cessors)d
+(to)i(e.g.)0 569 y(calculate)24 b(spatial)h(deriv)-5
+b(ativ)n(es)24 b(\(whic)n(h)h(require)f(neigh)n(b)r(ouring)g(grid)g(p)r
+(oin)n(ts\))h(without)h(ha)n(ving)e(to)h(comm)n(unicate)f(for)0
+669 y(ev)n(ery)j(grid)h(p)r(oin)n(t.)40 b(F)-7 b(rom)29
+b(time)g(to)f(time)h(it)g(is)g(then)g(necessary)e(to)h(sync)n(hronise)f
+(the)i(o)n(v)n(erlapping)e(region,)g(whic)n(h)i(is)0
+768 y(the)i(only)g(time)g(at)f(whic)n(h)h(comm)n(unication)f(happ)r
+(ens.)47 b(This)30 b(allo)n(ws)g(the)h(application)f(to)h(run)f(almost)
+g(unc)n(hanged,)0 868 y(i.e.)k(without)f(in)n(v)n(oking)f(comm)n
+(unication)h(itself.)55 b(The)33 b(sync)n(hronisation)e(routine)i(is)h
+(pro)n(vided)e(b)n(y)h(the)h(driv)n(er)e(and)0 968 y(not)c(b)n(y)f(the)
+h(application.)125 1084 y(Of)g(course)g(a)g(serial)f(applicate)h
+(usually)g(will)h(ha)n(v)n(e)f(to)g(b)r(e)h(c)n(hanged)f(to)g(supp)r
+(ort)h(m)n(ultiple)g(pro)r(cessors.)37 b(In)29 b(order)0
+1183 y(to)d(do)g(so,)g(all)f(the)i(op)r(erations)e(that)h(the)g
+(application)g(p)r(erforms)f(ha)n(v)n(e)g(to)h(b)r(e)g(classi\014ed)g
+(in)n(to)g(one)f(of)h(t)n(w)n(o)g(categories:)125 1300
+y(One)19 b(category)g(con)n(tains)g(the)i(so-called)e
+Fj(lo)l(c)l(al)30 b Fk(op)r(erations.)j(These)20 b(are)f(op)r(erations)
+g(that)i(are)e(applied)h(to)g(eac)n(h)g(and)0 1399 y(ev)n(ery)25
+b(grid)h(p)r(oin)n(t)h(individually)-7 b(,)26 b(and)h(that)f(do)h(not)f
+(dep)r(end)h(on)f(an)n(y)g(other)g(grid)f(p)r(oin)n(t)i(except)g(nearb)
+n(y)e(neigh)n(b)r(ours.)0 1499 y(Eac)n(h)18 b(lo)r(cal)g(op)r(eration)g
+(will)h(th)n(us)g(in)n(v)n(olv)n(e)f(a)g(lo)r(op)h(o)n(v)n(er)e(all)i
+(grid)f(p)r(oin)n(ts,)i(and)f(in)h(order)d(to)i(run)g(on)f(m)n(ultiple)
+i(pro)r(cessors,)0 1599 y(after)25 b(eac)n(h)g(suc)n(h)h(lo)r(op)f(the)
+h(sync)n(hronisation)e(routine)h(has)g(to)h(b)r(e)g(called.)36
+b(An)26 b(example)f(of)h(a)f(lo)r(cal)g(op)r(eration)g(w)n(ould)0
+1698 y(b)r(e)j(calculating)f(a)g(spatial)g(deriv)-5 b(ativ)n(e.)125
+1814 y(The)21 b(other)g(category)e(con)n(tains)i(so-called)f
+Fj(glob)l(al)32 b Fk(op)r(erations.)h(These)21 b(op)r(erations)f(do)i
+(not)f(dep)r(end)h(on)f(individual)0 1914 y(grid)h(p)r(oin)n(ts,)h(and)
+f(th)n(us)h(do)f(not)g(in)n(v)n(olv)n(e)f(lo)r(ops)h(o)n(v)n(er)f(grid)
+g(p)r(oin)n(ts.)35 b(The)23 b(result)f(of)g(a)g(global)g(op)r(eration)f
+(is)h(the)h(same)f(on)0 2014 y(all)f(pro)r(cessors;)f(therefore)g
+(global)g(op)r(erations)g(don't)h(in)n(v)n(olv)n(e)e(comm)n(unication)h
+(and)h(don't)g(require)f(sync)n(hronisation.)0 2113 y(An)30
+b(example)f(of)h(a)f(global)g(op)r(eration)f(w)n(ould)i(b)r(e)g(to)f(c)
+n(hec)n(k)g(ho)n(w)g(man)n(y)g(time)h(steps)g(ha)n(v)n(e)e(b)r(een)i
+(tak)n(en,)g(and)g(decide)0 2213 y(whether)d(the)h(sim)n(ulation)g
+(should)f(b)r(e)h(terminated.)125 2329 y(T)n(ypically)19
+b(most)h(op)r(erations)g(can)g(b)r(e)h(classi\014ed)e(or)h(rewritten)g
+(to)h(b)r(e)f(either)h(lo)r(cal)f(or)f(global.)34 b(But)21
+b(often)f(there)h(are)0 2429 y(op)r(erations)h(that)i(\014t)g(neither)g
+(category)-7 b(,)22 b(and)i(these)f(parts)g(of)g(an)h(application)f
+(are)f(hardest)h(to)g(parallelise.)34 b(Applying)0 2528
+y(the)25 b(b)r(oundary)f(conditions,)g(to)h(giv)n(e)e(another)h
+(example,)g(migh)n(t)h(seem)f(at)g(\014rst)g(to)h(b)r(e)g(neither)f(lo)
+r(cal)g(nor)g(global.)34 b(But)0 2628 y(in)28 b(a)f(sligh)n(t)h(\(y)n
+(et)g(completely)f(correct\))g(stretc)n(h)g(of)h(the)g(term)g("applied)
+f(to)h(all)g(grid)f(p)r(oin)n(ts",)g(b)r(oundary)g(conditions)0
+2728 y(can)g(b)r(e)h(classi\014ed)f(as)g(lo)r(cal;)g(they)h(are)e(a)i
+(lo)r(cal)f(op)r(eration)f(that)i(just)g(do)r(es)g(nothing)f(to)g(most)
+h(grid)f(p)r(oin)n(ts.)125 2844 y(T)-7 b(o)18 b(giv)n(e)h(one)g(more)f
+(example,)j(calculating)d(an)h(error)f(norm)g(do)r(es)h(not)g(\014t)h
+(these)g(categories.)32 b(It)19 b(is)g(neither)h(lo)r(cal)e(nor)0
+2944 y(global.)33 b(It)19 b(is)f(not)h(lo)r(cal)f(b)r(ecause)h(the)g
+(results)f(in)n(v)n(olv)n(ed)f(all)h(grid)g(p)r(oin)n(ts)h(\(and)g(not)
+g(only)f(nearb)n(y)f(neigh)n(b)r(ours\),)j(and)f(it)g(is)0
+3043 y(not)25 b(global)f(b)r(ecause)h(it)h(do)r(es)f(in)n(v)n(olv)n(e)f
+(the)h(grid)g(p)r(oin)n(ts.)36 b(All)26 b(op)r(erations)e(that)h(do)g
+(not)g(\014t)h(the)g(t)n(w)n(o)e(category)g(require)0
+3143 y(t)n(ypically)39 b(sp)r(ecial)h(handling,)j(and)d(often)g
+(require)f(hand-co)r(ded)g(comm)n(unication)g(in)i(the)f(application.)
+73 b(Luc)n(kily)0 3242 y(calculating)25 b(v)-5 b(arious)25
+b(norms)g(is)h(suc)n(h)f(a)h(common)f(case)g(that)i(there)e(are)g(sp)r
+(ecial)h(routines)f(for)h(that)g(already)e(presen)n(t,)0
+3342 y(called)j Fj(r)l(e)l(duction)j(op)l(er)l(ators)p
+Fk(.)0 3474 y
+SDict begin H.S end
+ 0 3474 a 0 3474 a
+SDict begin 12 H.A end
+ 0 3474 a 0 3474 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.2) cvn H.B /DEST
+pdfmark end
+ 0 3474
+a 117 x Fl(5.2)112 b(Multiple)39 b(Resolution)e(Lev)m(els)0
+3761 y Fk(There)25 b(are)f(sev)n(eral)g(reasons)g(wh)n(y)h(an)g
+(application)g(migh)n(t)g(w)n(an)n(t)g(to)g(incorp)r(orate)f(more)h
+(than)h(one)f(grid,)g(o)n(v)n(erlapping)0 3861 y(and)i(eac)n(h)g(with)h
+(a)g(di\013eren)n(t)f(resolution.)125 3977 y(The)k(most)h(commonly)f
+(kno)n(wn)g(reason)f(is)h(probably)g(a)g(con)n(v)n(ergence)f(test,)j
+(where)e(the)h(v)n(ery)e(same)i(problem)f(is)0 4076 y(treated)e(in)g
+(di\013eren)n(t)g(resolutions.)40 b(Di\013erences)29
+b(in)h(the)f(result)g(are)f(then)i(lik)n(ely)e(caused)h(b)n(y)f
+(insu\016cien)n(t)i(resolution)0 4176 y(on)24 b(the)h(coarser)d(\(or)h
+(on)h(all\))h(grids.)34 b(F)-7 b(or)24 b(a)g(con)n(v)n(ergence)e(test,)
+j(the)g(grids)e(are)g(completely)h(indep)r(enden)n(t,)i(and)e(it)h(do)r
+(es)0 4276 y(not)i(matter)f(whether)h(the)g(sim)n(ulation)g(runs)f(on)h
+(all)f(grids)g(sim)n(ultaneously)g(or)g(sequen)n(tially)-7
+b(.)36 b(In)27 b(order)e(to)i(treat)f(the)0 4375 y(grid)h(sequen)n
+(tially)-7 b(,)27 b(the)h(application)f(do)r(es)g(not)h(ha)n(v)n(e)e
+(to)h(b)r(e)h(c)n(hanged)f(at)h(all.)125 4491 y(The)35
+b(reason)g(of)g(in)n(terest)h(here)f(is)h(of)g(course)e(FMR.)j(F)-7
+b(or)35 b(FMR,)h(the)h(order)d(in)i(whic)n(h)g(the)g(grids)f(are)g
+(treated)0 4591 y(is)d(\014xed.)52 b(As)33 b(describ)r(ed)f(ab)r(o)n(v)
+n(e,)h(there)f(is)h(\014rst)f(a)g(time)h(step)g(on)f(the)h(coarse)e
+(grid,)i(and)g(then)g(recursiv)n(ely)d(sev)n(eral)0 4691
+y(smaller)24 b(steps)g(on)g(the)h(\014ner)f(grids.)35
+b(This)25 b(order)e(do)r(es)h(require)g(certain)g(c)n(hanges)f(in)h
+(the)h(application.)36 b(The)24 b(sequence)0 4790 y(of)j(op)r(erations)
+e(that)i(form)g(a)f(single)g(time)h(step)g(ha)n(v)n(e)f(to)h(b)r(e)g
+(iden)n(ti\014ed)g(and)g(isolated.)35 b(\(Whic)n(h)28
+b(is)f(to)f(sa)n(y)g(that)h(there)0 4890 y(has)32 b(to)h(b)r(e)g(a)g
+(routine)f(that)h(calculates)f(a)g(time)i(step,)g(that)f(is,)h(a)e
+(complete)h(time)h(step,)g(and)e(nothing)h(else.\))53
+b(It)33 b(is)0 4990 y(then)28 b(the)g(task)f(of)h(the)g(FMR)g(driv)n
+(er)e(to)i(call)f(this)h(routine)f(for)g(the)h(correct)e(grids)h(in)h
+(the)g(correct)e(order.)125 5106 y(Other)g(reasons)g(for)h(m)n(ultiple)
+h(resolution)e(lev)n(els)h(are)f(e.g.)h(m)n(ultigrid)g(algorithms)f
+(for)h(elliptic)h(equations,)f(whic)n(h)0 5205 y(I)i(do)g(not)h(w)n(an)
+n(t)e(to)i(men)n(tion)f(here,)g(or)g(shado)n(w)f(hierarc)n(hies)f(to)i
+(determine)h(truncation)f(errors,)e(whic)n(h)j(I)f(also)f(w)n(an)n(t)0
+5305 y(to)f(skip)h(here.)36 b(Shado)n(w)27 b(hierarc)n(hies)f(are)g(v)n
+(ery)h(similar)g(to)g(the)h(con)n(v)n(ergence)d(lev)n(els)i(describ)r
+(ed)g(ab)r(o)n(v)n(e.)125 5421 y(Apart)33 b(from)g(this)h(order)e(in)i
+(whic)n(h)g(the)g(op)r(erations)e(are)h(p)r(erformed)g(on)g(the)h
+(grids,)g(there)g(is)f(one)g(more)g(com-)0 5521 y(plication)d(for)g
+(FMR.)i(The)e(b)r(oundary)g(v)-5 b(alues)30 b(of)h(the)g(\014ner)f
+(grids)g(ha)n(v)n(e)f(to)i(b)r(e)g(calculated)f(from)g(the)h(coarser)e
+(grids)0 5621 y(through)j(in)n(terp)r(olation.)53 b(An)33
+b(b)r(ecause)g(the)h(time)f(steps)g(on)g(the)g(\014ner)g(grids)f(are)g
+(smaller,)i(there)f(is)g(not)g(alw)n(a)n(ys)e(a)0 5720
+y(corresp)r(onding)20 b(v)-5 b(alue)22 b(on)g(the)h(coarser)d(grids)h
+(a)n(v)-5 b(ailable.)34 b(This)22 b(mak)n(es)f(it)i(necessary)e(to)h
+(in)n(terp)r(olate)f(in)i(time)g(b)r(et)n(w)n(een)1869
+5989 y(6)p eop end
+%%Page: 7 7
+TeXDict begin 7 6 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.7) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 291 x Fk(time)27 b(steps)g(on)g(the)g
+(coarser)d(grids.)36 b(The)27 b(alternativ)n(e)e(w)n(ould)i(b)r(e)g(to)
+g(tak)n(e)f(smaller)g(steps)g(on)h(the)g(coarser)e(grids,)h(and)0
+254 y(this)i(w)n(ould)f(b)r(e)h(v)n(ery)e(exp)r(ensiv)n(e.)125
+370 y(These)33 b(in)n(terp)r(olations)g(in)i(time)f(mak)n(e)f(it)i
+(necessary)d(that)i(the)h(driv)n(er)e(kno)n(ws)g(whic)n(h)h(grid)f
+(function)i(con)n(tains)0 469 y(v)-5 b(alues)28 b(corresp)r(onding)e
+(to)i(what)g(time.)39 b(The)29 b(usual)e(w)n(a)n(y)g(to)h(ac)n(hiev)n
+(e)f(this)i(is)f(to)g(ha)n(v)n(e)f(sev)n(eral)f(time)j(lev)n(els)e(p)r
+(er)h(grid)0 569 y(function;)d(three)d(time)g(lev)n(els)g(allo)n(w)f
+(for)g(a)h(second)g(order)e(in)n(terp)r(olation)i(in)g(time.)36
+b(Only)22 b(grid)f(functions)i(with)f(enough)0 669 y(time)28
+b(lev)n(els)f(can)g(b)r(e)h(in)n(terp)r(olated,)f(i.e.)h(b)r(oundary)f
+(conditions)g(can)g(b)r(e)h(calculated)f(only)g(for)h(those.)125
+785 y(F)-7 b(ortunately)21 b(time)h(lev)n(els)e(are)h(rather)f
+(widespread)h(in)h(applications,)f(so)g(they)h(are)e(no)i(new)f
+(concept)h(to)f(in)n(tro)r(duce.)0 885 y(Unfortunately)j(they)h(are)e
+(often)i(abused,)f(so)g(that)h(v)-5 b(alues)24 b(corresp)r(onding)e(to)
+i(the)h(wrong)e(time)i(are)e(stored)h(in)g(a)g(time)0
+984 y(lev)n(el,)33 b(usually)f(with)g(the)h(excuse)f(of)g(sa)n(ving)e
+(storage.)49 b(This)32 b(will)h(in)f(general)f(not)h(w)n(ork)f(with)i
+(FMR,)f(b)r(ecause)g(the)0 1084 y(driv)n(er)26 b(then)i(cannot)g(in)n
+(terp)r(olate)e(in)i(time,)h(leading)d(to)i(incorrect)e(v)-5
+b(alues)28 b(on)f(the)h(b)r(oundaries)f(of)g(the)h(\014ner)f(grids.)0
+1216 y
+SDict begin H.S end
+ 0 1216 a 0 1216 a
+SDict begin 12 H.A end
+ 0 1216 a 0 1216 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.3) cvn H.B /DEST
+pdfmark end
+ 0 1216 a 117
+x Fl(5.3)112 b(Multiple)39 b(Grid)e(Comp)s(onen)m(ts)0
+1503 y Fk(Sometimes)24 b(it)h(is)f(con)n(v)n(enien)n(t)f(to)h(ha)n(v)n
+(e)f(a)g(sim)n(ulation)h(domain)f(that)i(is)f(not)g(a)g(rectangle.)34
+b(It)25 b(migh)n(t)f(instead)g(b)r(e)g(an)g(L-)0 1602
+y(shap)r(ed)h(sim)n(ulation)g(domain,)h(or)e(a)h(domain)g(that)h
+(consists)e(of)i(t)n(w)n(o)e(disconnected)i(rectangular)d(regions.)35
+b(This)25 b(issue)0 1702 y(b)r(ecomes)33 b(more)g(imp)r(ortan)n(t)g
+(with)h(FMR,)h(b)r(ecause)e(there)g(it)h(is)g(often)g(con)n(v)n(enien)n
+(t)e(to)i(ha)n(v)n(e)e(sev)n(eral)g(disconnected)0 1802
+y(re\014ned)24 b(regions.)35 b(As)25 b(long)f(as)g(there)g(are)g
+(enough)g(pro)r(cessors)e(a)n(v)-5 b(ailable,)24 b(eac)n(h)g(pro)r
+(cessor)f(can)h(b)r(e)h(assigned)f(a)g(region)0 1901
+y(or)29 b(a)g(part)g(thereof,)h(and)g(no)f(new)h(concept)g(need)g(b)r
+(e)g(in)n(tro)r(duced.)43 b(If,)31 b(ho)n(w)n(ev)n(er,)d(there)h(are)g
+(few)n(er)g(pro)r(cessors)e(than)0 2001 y(regions,)f(then)i(a)f(new)h
+(problem)f(arises.)125 2117 y(A)38 b(common)h(case)e(for)h(that)h
+(problem)f(migh)n(t)h(b)r(e)g(a)f(sim)n(ulation)g(con)n(taining)g(just)
+h(t)n(w)n(o)f(re\014ned)g(regions,)i(and)0 2217 y(running)25
+b(on)h(a)f(single)g(pro)r(cessor.)34 b(The)26 b(re\014ned)f(grid)g(the)
+h(consists)f(of)h(t)n(w)n(o)f(comp)r(onen)n(t.)36 b(The)25
+b(problem)h(then)g(is)f(that)0 2316 y(the)g(t)n(w)n(o)f(comp)r(onen)n
+(ts)g(cannot)g(b)r(e)h(treated)g(sequen)n(tially:)34
+b(Imagine)24 b(the)h(time)h(ev)n(olution)e(routine)g(w)n(orking)f(on)h
+(\(sa)n(y\))0 2416 y(the)d(\014rst)f(comp)r(onen)n(t.)35
+b(It)21 b(will)f(at)h(some)f(time)h(call)f(the)h(sync)n(hronisation)e
+(routine.)34 b(A)n(t)21 b(that)g(time)g(there)f(are)g(no)g(v)-5
+b(alues)0 2516 y(from)23 b(the)h(second)e(comp)r(onen)n(t)h(a)n(v)-5
+b(ailable,)23 b(b)r(ecause)g(the)h(second)f(comp)r(onen)n(t)g(has)g
+(not)g(b)r(een)h(treated)f(y)n(et.)35 b(Therefore)0 2615
+y(the)25 b(sync)n(hronisation)d(routine)i(cannot)g(complete.)36
+b(That)25 b(means)f(in)g(turn)h(that)g(the)f(time)h(ev)n(olution)f
+(routine)g(cannot)0 2715 y(complete)35 b(w)n(orking)e(on)h(the)h
+(\014rst)g(comp)r(onen)n(t,)h(leading)e(to)h(a)f(deadlo)r(c)n(k.)57
+b(W)-7 b(ork)34 b(on)h(neither)f(comp)r(onen)n(t)h(can)f(b)r(e)0
+2814 y(completed)28 b(b)r(efore)f(w)n(ork)f(on)h(the)h(other)f(comp)r
+(onen)n(t.)125 2931 y(The)j(solution)g(is)h(to)f(break)g(up)h(the)g
+(time)g(ev)n(olution)f(routine)g(in)n(to)g(sev)n(eral)f(smaller)h
+(routines,)h(eac)n(h)e(consisting)0 3030 y(of)k(a)f(single)h(either)f
+(lo)r(cal)h(or)f(global)g(op)r(eration.)51 b(\(\\Lo)r(cal")32
+b(and)g(\\global")f(ha)n(v)n(e)h(here)g(the)i(exact)e(same)g(meanings)0
+3130 y(that)h(w)n(ere)f(de\014ned)h(ab)r(o)n(v)n(e)f(for)g
+(parallelisation.\))51 b(A)34 b(lo)r(cal)e(op)r(eration)g(w)n(orks,)g
+(b)n(y)h(de\014nition,)i(on)d(individual)h(grid)0 3230
+y(p)r(oin)n(ts.)j(Hence)26 b(the)g(lo)r(cal)g(routines)f(ha)n(v)n(e)f
+(to)i(b)r(e)g(called)g(once)f(for)g(ev)n(ery)g(grid)g(comp)r(onen)n(t.)
+36 b(A)26 b(global)f(op)r(eration,)g(b)n(y)0 3329 y(de\014nition,)j(do)
+r(es)g(not)f(dep)r(end)i(on)e(individual)h(grid)f(p)r(oin)n(ts.)38
+b(Hence)28 b(it)g(has)f(to)h(b)r(e)g(called)f(only)h(once)f(p)r(er)h
+(pro)r(cessor,)0 3429 y(and)f(not)g(once)g(p)r(er)h(comp)r(onen)n(t.)36
+b(That)27 b(means)g(that)h(the)f(driv)n(er)f(has)h(to)g(b)r(e)h(told)g
+(the)f(category)f(individual)h(routine)0 3528 y(is)g(in.)0
+3645 y
+SDict begin H.S end
+ 0 3645 a 0 3645 a
+SDict begin 12 H.A end
+ 0 3645 a 0 3645 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.5.4) cvn H.B /DEST
+pdfmark end
+ 0 3645 a 132
+x Fl(5.4)112 b(Example)0 3947 y Fk(Let)28 b(me)g(\014nish)f(this)h
+(section)f(with)i(an)e(detailed)h(example.)36 b(Supp)r(ose)28
+b(y)n(ou)e(w)n(an)n(t)h(to)h(solv)n(e)e(the)i(equation)1570
+4169 y
+SDict begin H.S end
+ 1570 4169 a 1570 4169 a
+SDict begin 12 H.A end
+ 1570 4169 a 1570 4169
+a
+SDict begin [ /View [/XYZ H.V] /Dest (equation.1) cvn H.B /DEST pdfmark
+end
+ 1570 4169 a 1595 4112 a Ff(d)p 1580 4149 74 4 v 1580
+4226 a(dt)1663 4169 y(u)83 b Fk(=)g Ff(f)9 b Fk(\()p
+Ff(u)p Fk(\))82 b Ff(;)1464 b Fk(\(1\))0 4374 y(in)n(tegrating)34
+b(using)i(the)g(midp)r(oin)n(t)g(rule,)i(i.e.)d(the)i(simplemost)e
+(second-order)e(time)k(in)n(tegration)d(sc)n(heme.)61
+b(Giv)n(en)0 4474 y(v)-5 b(alues)30 b(at)h(the)g(previous)e(time)i
+Ff(u)1074 4444 y Fe(n)p Fd(\000)p Fc(1)1204 4474 y Fk(,)h(one)e
+(\014rst)g(calculates)g(a)g(\014rst)h(order)e(solution)h(using)g(an)h
+(Euler)f(step,)h(leading)0 4574 y(to)c(the)h(in)n(termediate)g(result)
+1344 4756 y
+SDict begin H.S end
+ 1344 4756 a 1344 4756 a
+SDict begin 12 H.A end
+ 1344 4756 a 1344
+4756 a
+SDict begin [ /View [/XYZ H.V] /Dest (equation.2) cvn H.B /DEST pdfmark
+end
+ 1344 4756 a Ff(v)1387 4722 y Fe(n)1515 4756 y
+Fk(=)83 b Ff(u)1711 4722 y Fe(n)p Fd(\000)p Fc(1)1859
+4756 y Fk(+)18 b Ff(dt)23 b(f)9 b Fk(\()p Ff(u)2168 4722
+y Fe(n)p Fd(\000)p Fc(1)2298 4756 y Fk(\))83 b Ff(:)1237
+b Fk(\(2\))0 4939 y(The)28 b(second)f(and)g(\014nal)h(step)f(is)h(then)
+g(calculated)f(via)1193 5156 y
+SDict begin H.S end
+ 1193 5156 a 1193 5156
+a
+SDict begin 12 H.A end
+ 1193 5156 a 1193 5156 a
+SDict begin [ /View [/XYZ H.V] /Dest (equation.3) cvn H.B /DEST pdfmark
+end
+ 1193 5156 a Ff(u)1241 5122
+y Fe(n)1368 5156 y Fk(=)83 b Ff(u)1564 5122 y Fe(n)p
+Fd(\000)p Fc(1)1712 5156 y Fk(+)18 b Ff(dt)23 b(f)9 b
+Fk(\()1983 5100 y(1)p 1983 5137 42 4 v 1983 5213 a(2)2035
+5156 y([)p Ff(u)2106 5122 y Fe(n)p Fd(\000)p Fc(1)2254
+5156 y Fk(+)18 b Ff(v)2380 5122 y Fe(n)2425 5156 y Fk(]\))84
+b Ff(:)1086 b Fk(\(3\))125 5379 y(The)27 b(corresp)r(onding)f(pseudo)h
+(co)r(de)g(w)n(ould)h(lo)r(ok)e(lik)n(e)0 5445 y
+SDict begin H.S end
+ 0 5445
+a 0 5445 a
+SDict begin 12 H.A end
+ 0 5445 a 0 5445 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.7) cvn H.B /DEST pdfmark
+end
+ 0 5445 a 101 5561 a Fk(1.)42
+b(Calculate)27 b(Euler)f(step,)i(storing)f(the)h(result)f(in)n(to)g
+Ff(u)1866 5531 y Fe(n)0 5611 y
+SDict begin H.S end
+ 0 5611 a 0 5611 a
+SDict begin 12 H.A end
+ 0 5611
+a 0 5611 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.8) cvn H.B /DEST pdfmark
+end
+ 0 5611 a 101 5727 a Fk(2.)42 b(Apply)28 b(b)r(oundary)e
+(conditions)i(to)f Ff(u)1377 5697 y Fe(n)1869 5989 y
+Fk(7)p eop end
+%%Page: 8 8
+TeXDict begin 8 7 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.8) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 0 71 a
+SDict begin H.S end
+ 0 71 a 0 71
+a
+SDict begin 12 H.A end
+ 0 71 a 0 71 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.9) cvn H.B /DEST pdfmark
+end
+ 0 71 a 101 154 a Fk(3.)42 b(Sync)n(hronise)26
+b Ff(u)713 124 y Fe(n)0 203 y
+SDict begin H.S end
+ 0 203 a 0 203 a
+SDict begin 12 H.A end
+ 0 203 a
+0 203 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.10) cvn H.B /DEST pdfmark
+end
+ 0 203 a 101 320 a Fk(4.)42 b(Calculate)27 b(a)n(v)n(erage)d(of)
+k Ff(u)1017 290 y Fe(n)p Fd(\000)p Fc(1)1174 320 y Fk(and)g
+Ff(u)1384 290 y Fe(n)1428 320 y Fk(,)g(storing)f(the)g(result)h(in)n
+(to)f Ff(v)2342 290 y Fe(n)0 369 y
+SDict begin H.S end
+ 0 369 a 0 369 a
+SDict begin 12 H.A end
+ 0
+369 a 0 369 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.11) cvn H.B /DEST pdfmark
+end
+ 0 369 a 101 486 a Fk(5.)42 b(Calculate)27
+b(second)g(step,)g(storing)g(the)h(result)f(again)f(in)n(to)i
+Ff(u)2133 456 y Fe(n)0 535 y
+SDict begin H.S end
+ 0 535 a 0 535 a
+SDict begin 12 H.A end
+ 0 535 a
+0 535 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.12) cvn H.B /DEST pdfmark
+end
+ 0 535 a 101 652 a Fk(6.)42 b(Apply)28 b(b)r(oundary)e
+(conditions)i(again)e(to)h Ff(u)1598 622 y Fe(n)0 701
+y
+SDict begin H.S end
+ 0 701 a 0 701 a
+SDict begin 12 H.A end
+ 0 701 a 0 701 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.13) cvn H.B /DEST pdfmark
+end
+ 0 701 a 101 818 a Fk(7.)42
+b(Sync)n(hronise)26 b(again)g Ff(u)934 788 y Fe(n)125
+1001 y Fk(The)34 b(ab)r(o)n(v)n(e)f(algorithm)h(lo)r(oks)f(a)h(bit)i
+(di\013eren)n(t)e(from)g(a)h(naiv)n(e)e(implemen)n(tation)i(of)f(the)h
+(midp)r(oin)n(t)h(rule.)57 b(One)0 1100 y(di\013erence)28
+b(is)g(that)h(b)r(oth)f(the)h(\014rst)f(and)g(the)g(second)g(step)g
+(store)f(their)h(result)g(in)n(to)g Ff(u)2751 1070 y
+Fe(n)2796 1100 y Fk(.)38 b(This)29 b(is)f(necessary)e(b)r(ecause)0
+1200 y(it)e(w)n(ould)f(b)r(e)i(incon)n(v)n(enien)n(t)d(to)i(apply)f(b)r
+(oundary)g(conditions)h(to)f(the)h(in)n(termediate)g(v)-5
+b(alue)23 b Ff(v)2956 1170 y Fe(n)3002 1200 y Fk(.)35
+b(Remem)n(b)r(er,)25 b(in)f(order)0 1300 y(to)30 b(apply)g(b)r(oundary)
+g(conditions)f(on)h(the)h(\014ner)f(grids,)g(there)g(ha)n(v)n(e)f(to)h
+(b)r(e)h(sev)n(eral)e(time)h(lev)n(els)g(presen)n(t.)44
+b(With)31 b(the)0 1399 y(ab)r(o)n(v)n(e)26 b(sc)n(heme,)g(only)h
+Ff(u)g Fk(needs)g(sev)n(eral)e(time)i(lev)n(els.)36 b
+Ff(v)31 b Fk(is)c(used)g(only)f(as)h(a)f(temp)r(orary)g(\(and)h(could)g
+(conceiv)-5 b(ably)26 b(b)r(e)0 1499 y(completely)h(eliminated\).)125
+1615 y(Note)e(also)g(that)h(the)h(\014rst)e(step)h(go)r(es)f(all)h(the)
+g(w)n(a)n(y)f(from)g(time)i(lev)n(el)e Ff(n)15 b Fb(\000)f
+Fk(1)26 b(to)g(time)g(lev)n(el)f Ff(n)p Fk(.)37 b(The)25
+b(midp)r(oin)n(t)i(rule)0 1715 y(can)g(b)r(e)g(rewritten)f(\(in)i
+(fact,)f(is)g(usually)f(written\))i(so)e(that)h(the)h(\014rst)e(step)h
+(is)g(only)g(a)f(half)h(step,)h(leading)e(to)h(the)g(time)0
+1814 y(lev)n(el)j Ff(n)20 b Fb(\000)356 1782 y Fc(1)p
+356 1796 34 4 v 356 1843 a(2)400 1814 y Fk(.)44 b(This)31
+b(is)f(not)g(p)r(ossible)g(for)f(FMR,)i(b)r(ecause)f(in)n(terp)r
+(olating)f(to)h(the)h(time)g Ff(n)20 b Fb(\000)2998 1782
+y Fc(1)p 2998 1796 V 2998 1843 a(2)3071 1814 y Fk(is)30
+b(not)g(p)r(ossible,)h(and)0 1914 y(th)n(us)d(there)f(could)g(b)r(e)h
+(no)g(b)r(oundary)f(conditions)g(applied)g(after)h(the)g(\014rst)f
+(step.)125 2030 y(The)i(second)h(thing)g(to)g(note)f(is)h(that)g(the)h
+(application)e(of)h(the)g(b)r(oundary)f(condition)h(and)f(the)i(sync)n
+(hronisation)0 2130 y(ha)n(v)n(e)23 b(b)r(een)h(separated)f(rather)g
+(arti\014cially)-7 b(.)35 b(Normally)23 b(sync)n(hronisation)f(w)n
+(ould)i(b)r(e)g(considered)f(part)h(of)g(the)h(b)r(ound-)0
+2230 y(ary)k(condition.)43 b(In)30 b(this)g(case,)f(ho)n(w)n(ev)n(er,)f
+(the)j(applying)e(the)h(b)r(oundary)f(condition)g(is)h(a)f(lo)r(cal)h
+(op)r(eration,)f(whereas)0 2329 y(sync)n(hronisation)24
+b(coun)n(ts)i(as)g(global)f(op)r(eration.)35 b(\(It)27
+b(is)f(not)h(ob)n(vious)e(that)h(sync)n(hronisation)f(should)h(b)r(e)g
+(global,)g(but)0 2429 y(as)i(the)h(sync)n(hronisation)e(routine)h(is)h
+(a)f(part)g(of)h(Carp)r(et,)f(it)i(w)n(as)d(up)i(to)g(me)g(to)f(decide)
+h(this.\))41 b(As)29 b(explained)f(ab)r(o)n(v)n(e,)0
+2528 y(lo)r(cal)f(and)g(global)g(op)r(erations)f(ha)n(v)n(e)h(to)g(b)r
+(e)h(separated.)125 2645 y(Separating)35 b(the)j(ev)n(olution)e(steps)h
+(and)g(the)h(b)r(oundary)e(condition)h(routines)g(is,)j(on)c(the)i
+(other)f(hand,)i(just)f(a)0 2744 y(notational)27 b(con)n(v)n(enience.)
+35 b(There)27 b(could)h(w)n(ell)f(b)r(e)h(a)f(single)g(routine)h
+(implemen)n(ting)f(b)r(oth.)125 2861 y(F)-7 b(or)26 b(Cactus,)g(the)h
+(order)e(in)i(whic)n(h)g(to)f(call)g(the)h(individual)g(parts)f(of)h
+(the)f(time)i(ev)n(olution)d(routines)h(is)h(describ)r(ed)0
+2960 y(in)c(the)h(sc)n(hedule)e(routines,)i(i.e.)f(in)g(the)h(\014les)f
+(called)f Fh(schedule.ccl)p Fk(.)31 b(By)23 b(default)g(a)g(routine)f
+(is)h(assumed)g(to)g(b)r(e)g(lo)r(cal;)0 3060 y(global)j(routines)h(ha)
+n(v)n(e)g(to)g(b)r(e)h(tagged)f(with)h Fh(OPTIONS:)40
+b(GLOBAL)p Fk(.)125 3176 y(The)g(tag)h Fh(SYNC:)h(groupname)37
+b Fk(indicates)j(that)h(the)g(group)f Fh(groupname)d
+Fk(should)j(b)r(e)h(sync)n(hronised)e(after)h(the)0 3276
+y(sc)n(heduled)35 b(routine)h(has)f(b)r(een)h(called)f(for)h(all)f
+(grid)g(comp)r(onen)n(ts.)61 b(This)36 b(ob)n(viously)e(mak)n(es)g
+(sense)i(only)f(for)g(lo)r(cal)0 3375 y(routines.)72
+b(Using)39 b(the)h Fh(SYNC:)e Fk(tag)h(is)g(preferred)f(o)n(v)n(er)g
+(calling)h(the)h(sync)n(hronisation)d(routine)j Fh(CCTK)p
+3363 3375 27 4 v 29 w(SyncGroup)0 3475 y Fk(directly)-7
+b(.)125 3591 y(The)31 b(example)g(thorn)g(W)-7 b(a)n(v)n(eT)g(o)n(y)30
+b(in)i(Carp)r(et's)f(arrangemen)n(t)e(is)i(a)g(bit)h(simpler)f(than)h
+(what)f(is)h(describ)r(ed)f(here,)0 3691 y(b)r(ecause)k(it)i(uses)e
+(the)h(Leapfrog)f(sc)n(heme)g(whic)n(h)h(consists)f(of)h(only)f(a)h
+(single)f(step.)62 b(I)36 b(w)n(ould)f(suggest)g(lo)r(oking)g(at)0
+3790 y(W)-7 b(a)n(v)n(eT)g(o)n(y)26 b(as)h(an)g(initial)h(FMR)g
+(example.)125 3907 y(The)33 b(thorn)f(SpaceT)-7 b(o)n(y)32
+b(is)h(implemen)n(ted)h(v)n(ery)e(close)g(to)h(the)g(w)n(a)n(y)f
+(describ)r(ed)h(here.)53 b(It)33 b(ev)n(olv)n(es)f(t)n(w)n(o)g(v)-5
+b(ariables)0 4006 y(phi)36 b(and)g(psi,)i(but)e(it)h(is)e(also)g
+(coupled)h(to)g(the)g(thorn)f(HydroT)-7 b(o)n(y)g(.)60
+b(This)36 b(coupling)g(in)n(tro)r(duces)f(some)g(additional)0
+4106 y(complications.)g(The)24 b(thorn)g(HydroT)-7 b(o)n(y)g(,)23
+b(on)h(the)g(other)g(hand)g(uses)g(a)f(predictor-corrector)e(sc)n
+(heme,)j(whic)n(h)g(is)g(also)f(a)0 4205 y(t)n(w)n(o)c(step)i(sc)n
+(heme)f(and)g(th)n(us)g(more)f(complex)h(that)g(W)-7
+b(a)n(v)n(eT)g(o)n(y)g(.)33 b(All)21 b(the)f(coupling)g(b)r(et)n(w)n
+(een)g(SpaceT)-7 b(o)n(y)19 b(and)h(HydroT)-7 b(o)n(y)0
+4305 y(is)27 b(con)n(tained)g(in)h(SpaceT)-7 b(o)n(y)g(.)36
+b(I)28 b(w)n(ould)f(th)n(us)g(suggest)g(lo)r(oking)f(at)i(HydroT)-7
+b(o)n(y)26 b(\014rst.)125 4421 y(I)g(assume)g(that)g(con)n(v)n(erting)f
+(an)h(application)g(to)g(FMR)h(is)f(straigh)n(tforw)n(ard)e(after)i
+(handling)g(the)h(time)f(lev)n(els)g(has)0 4521 y(b)r(een)i(straigh)n
+(tened)e(out.)0 4662 y
+SDict begin H.S end
+ 0 4662 a 0 4662 a
+SDict begin 12 H.A end
+ 0 4662 a 0 4662
+a
+SDict begin [ /View [/XYZ H.V] /Dest (section.6) cvn H.B /DEST pdfmark
+end
+ 0 4662 a 150 x Fm(6)135 b(F)-11 b(urther)44 b(do)t(cumen)l(tation)0
+5011 y Fk(The)35 b(individual)g(thorns)g(in)g(the)g(Carp)r(et)g
+(arrangemen)n(t)e(migh)n(t)i(con)n(tain)f(further)h(do)r(cumen)n
+(tation,)i(whic)n(h)e(is)g(also)0 5110 y(a)n(v)-5 b(ailable)24
+b(in)i(the)h(thorn)e(guide.)36 b(Additionally)-7 b(,)26
+b(there)g(is)f(a)h(do)r(cumen)n(t)g Fh(internals.tex)20
+b Fk(in)26 b(the)g(arrangemen)n(t's)e(do)r(c)0 5210 y(directory)-7
+b(,)26 b(and)i(a)f(do)r(cumen)n(t)h Fh(threelev)p 1340
+5210 27 4 v 28 w(initdata.tex)23 b Fk(in)28 b(thorn)f
+Fh(Carpet)p Fk('s)e(do)r(c)i(directory)-7 b(.)0 5353
+y
+SDict begin H.S end
+ 0 5353 a 0 5353 a
+SDict begin 12 H.A end
+ 0 5353 a 0 5353 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.7) cvn H.B /DEST pdfmark
+end
+ 0 5353 a 148 x
+Fm(7)135 b(F)-11 b(requen)l(tly)45 b(Ask)l(ed)g(Questions)0
+5699 y Fk(Here)27 b(are)g(a)g(few)h(of)f(the)h(more)f(frequen)n(tly)h
+(ask)n(ed)e(questions)h(with)h(some)f(answ)n(ers.)1869
+5989 y(8)p eop end
+%%Page: 9 9
+TeXDict begin 9 8 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a 0
+-137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.9) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 0 71 a
+SDict begin H.S end
+ 0 71 a 0 71
+a
+SDict begin 12 H.A end
+ 0 71 a 0 71 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.14) cvn H.B /DEST pdfmark
+end
+ 0 71 a 101 154 a Fk(1.)42 b Fa(If)32
+b(I)g(run)g(without)f(an)m(y)i(re\014ned)f(grids,)f(wh)m(y)h(don't)g(I)
+g(get)f(the)h(same)f(results)g(as)h(with)f(PUGH?)208
+279 y Fk(There)e(are)f(t)n(w)n(o)h(p)r(ossible)h(reasons.)41
+b(The)30 b(most)f(common)g(is)h(that)g(the)g(y)n(ou)f(are)f(not)i
+(comparing)e(exactly)h(the)208 378 y(same)35 b(output.)61
+b(It)36 b(used)f(to)h(b)r(e)g(the)g(case)e(that)i(norms)f(w)n(ould)g
+(disagree)f(\(this)i(is)g(no)f(longer)f(the)i(case\).)60
+b(If)208 478 y(it)36 b(is)h(the)g(ASCI)r(I)g(output)g(that)g
+(disagress,)f(then)h(y)n(ou)f(should)g(note)h(that)f(the)h(default)g
+(output)g(format)f(for)208 577 y(Carp)r(etIO)n(ASCI)r(I)24
+b(giv)n(es)g(more)g(digits)g(than)h(CactusBase/IO)n(ASCI)r(I.)e(If)j(y)
+n(ou)e(w)n(an)n(t)g(to)h(get)f(\\iden)n(tical")g(results)208
+677 y(for)j(this)h(output,)g(try)f(setting)i Fh(IOASCII::out)p
+1735 677 27 4 v 26 w(format)41 b(=)i(".14f")p Fk(\).)208
+802 y(The)27 b(second)g(reason)f(is)i(subtle)g(di\013erences)f(are)f
+(bugs)i(in)f(the)h(implemen)n(tation.)37 b(Go)r(o)r(d)28
+b(luc)n(k)f(\014nding)h(these...)0 843 y
+SDict begin H.S end
+ 0 843 a 0 843
+a
+SDict begin 12 H.A end
+ 0 843 a 0 843 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.15) cvn H.B /DEST pdfmark
+end
+ 0 843 a 101 951 a Fk(2.)42 b Fa(I)32
+b(switc)m(h)f(on)h(a)g(re\014ned)g(grid.)42 b(Wh)m(y)32
+b(do)g(I)g(not)f(see)g(it)h(output?)42 b(Wh)m(y)33 b(is)e(the)h(output)
+g(strange?)615 2971 y @beginspecial 0 @llx 0 @lly 612
+@urx 461 @ury 3060 @rwi @setspecial
+%%BeginDocument: Grid1.eps
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: Grid1.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Fri May 2 11:09:16 2003
+%%For: hawke@xeon06.aei-potsdam.mpg.de (Ian Hawke)
+%%BoundingBox: 0 0 612 461
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 461 moveto 0 0 lineto 612 0 lineto 612 461 lineto closepath clip newpath
+-49.5 526.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% Polyline
+7.500 slw
+n 1200 1200 m 10800 1200 l 10800 8400 l 1200 8400 l
+ cp gs col0 s gr
+% Polyline
+n 3600 1200 m
+ 3600 8400 l gs col0 s gr
+% Polyline
+n 6000 1200 m
+ 6000 8400 l gs col0 s gr
+% Polyline
+n 8400 1200 m
+ 8400 8400 l gs col0 s gr
+% Polyline
+n 1200 3600 m
+ 10800 3600 l gs col0 s gr
+% Polyline
+n 1200 6000 m
+ 10800 6000 l gs col0 s gr
+% Polyline
+15.000 slw
+ [60] 0 sd
+n 3600 3600 m 8400 3600 l 8400 6000 l 3600 6000 l
+ cp gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 4800 3600 m
+ 4800 6000 l gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 7200 3600 m
+ 7200 6000 l gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 6000 3600 m
+ 6000 6000 l gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 3600 4800 m
+ 8400 4800 l gs col1 s gr [] 0 sd
+% Polyline
+30.000 slw
+ [15 90] 90 sd
+n 6000 4800 m 7200 4800 l 7200 6000 l 6000 6000 l
+ cp gs col2 s gr [] 0 sd
+% Polyline
+ [15 90] 90 sd
+n 6600 4800 m
+ 6600 6000 l gs col2 s gr [] 0 sd
+% Polyline
+ [15 90] 90 sd
+n 6000 5400 m
+ 7200 5400 l gs col2 s gr [] 0 sd
+/Times-Roman ff 360.00 scf sf
+3525 8775 m
+gs 1 -1 sc (4) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8250 8775 m
+gs 1 -1 sc (12) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+10650 8775 m
+gs 1 -1 sc (16) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4725 6375 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6525 6375 m
+gs 1 -1 sc (9) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+1125 8775 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7125 6375 m
+gs 1 -1 sc (10) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 8550 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 6150 m
+gs 1 -1 sc (4) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 3750 m
+gs 1 -1 sc (8) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 1350 m
+gs 1 -1 sc (12) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+3300 4950 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5700 5550 m
+gs 1 -1 sc (5) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5925 8775 m
+gs 1 -1 sc (8) col0 sh gr
+$F2psEnd
+rs
+
+%%EndDocument
+ @endspecial 0 3154 a Fk(Figure)h(1:)380 3054 y
+SDict begin H.S end
+ 380 3054
+a 380 3054 a
+SDict begin H.R end
+ 380 3054 a 380 3054 a
+SDict begin [ /View [/XYZ H.V] /Dest (figure.1) cvn H.B /DEST pdfmark
+end
+ 380 3054 a 100 x Fk(Ho)n(w)g(the)h
+(grids)e(are)g(indexed)h(in)h(Carp)r(et.)53 b(This)34
+b(is)f(an)g(arti\014cial)f(three)h(lev)n(el)g(example)g(using)f(C-st)n
+(yle)0 3253 y(n)n(um)n(b)r(ering)27 b(\(0)h(origin\).)36
+b(Note)27 b(that)h(the)g(n)n(um)n(b)r(ering)f(is)h(with)g(resp)r(ect)f
+(to)g(the)h(\014nest)g(grid.)208 3524 y(As)39 b(so)r(on)g(as)g(y)n(ou)g
+(switc)n(h)g(on)g(re\014nemen)n(t)h(the)g(w)n(a)n(y)e(the)i(grids)e
+(are)h(n)n(um)n(b)r(ered)g(b)n(y)h(index)f(c)n(hanges.)72
+b(The)208 3623 y(n)n(um)n(b)r(ering)34 b(is)g(done)h(with)g(resp)r(ect)
+g(to)f(the)h Fj(\014nest)42 b Fk(grid)34 b(but)h(co)n(v)n(ers)e(the)i
+(en)n(tire)f(domain.)58 b(An)35 b(example)g(of)208 3723
+y(ho)n(w)28 b(the)h(n)n(um)n(b)r(ering)f(w)n(orks)f(is)i(giv)n(en)e(in)
+i(\014gure)1809 3723 y
+SDict begin H.S end
+ 1809 3723 a Fk(1)1851 3669 y
+SDict begin H.R end
+ 1851
+3669 a 1851 3723 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (figure.1) cvn H.B /ANN pdfmark end
+ 1851 3723 a Fk(.)40 b(It)29 b(is)g(imp)r(ortan)n(t)f
+(to)h(note)g(that)g(this)g(also)e(applies)i(to)f(the)208
+3822 y(n)n(um)n(b)r(ering)g(in)i(time.)42 b(So)29 b(with)h(the)g(grid)f
+(structure)f(of)i(\014gure)2259 3822 y
+SDict begin H.S end
+ 2259 3822 a Fk(1)2301
+3769 y
+SDict begin H.R end
+ 2301 3769 a 2301 3822 a
+SDict begin [ /Color [1 0 0] /H /I /Border [0 0 12] /Subtype /Link
+/Dest (figure.1) cvn H.B /ANN pdfmark end
+ 2301 3822 a 29 w Fk(output)g(for)f(the)g
+(coarsest)f(grid)h(only)g(o)r(ccurs)208 3922 y(on)k(iterations)g(0)p
+Ff(;)14 b Fk(4)p Ff(;)g Fk(8)p Ff(;)g(:)g(:)g(:)n Fk(,)36
+b(for)d(the)i(medium)f(grid)g(only)f(on)h(iterations)f(0)p
+Ff(;)14 b Fk(2)p Ff(;)g Fk(4)p Ff(;)g(:)g(:)g(:)n Fk(,)36
+b(and)d(for)h(the)g(\014nest)g(grid)208 4022 y(on)27
+b(iterations)h(0)p Ff(;)14 b Fk(1)p Ff(;)g Fk(2)p Ff(;)g(:)g(:)g(:)n
+Fk(.)38 b(Note)28 b(that)h(here)f(the)g(\014nest)g(grid)g(is)g(not)g
+(the)h(\014nest)f Fj(existing)35 b Fk(grid,)28 b(but)h(the)f(\014nest)
+208 4121 y Fj(p)l(ossible)35 b Fk(grid.)h(This)28 b(is)f(con)n(trolled)
+g(b)n(y)g(the)h Fh(Carpet::max)p 2122 4121 27 4 v 27
+w(refinement)p 2589 4121 V 27 w(levels)d Fk(parameter.)208
+4246 y(So,)i(there)g(are)g(plen)n(t)n(y)g(of)h(reasons)e(wh)n(y)h(the)h
+(output)g(migh)n(t)f(b)r(e)h(strange:)307 4395 y Fb(\017)41
+b Fk(Y)-7 b(ou)22 b(are)f(requesting)h(output)g(on)g(iterations)f(when)
+i(not)f(all)f(grids)h(are)f(output.)35 b(F)-7 b(or)22
+b(example,)h(requesting)390 4495 y(output)35 b(ev)n(ery)f(5)938
+4465 y Fe(th)1040 4495 y Fk(iteration)g(with)h(the)g(ab)r(o)n(v)n(e)e
+(grid)g(structure)h(w)n(ould)h(only)f(output)h(the)g(coarse)d(grid)390
+4595 y(ev)n(ery)27 b(20)f(iterations.)307 4711 y Fb(\017)41
+b Fk(Y)-7 b(ou)32 b(are)g(requesting)f(output)i(along)e(an)h(index)g
+(that)g(do)r(es)g(not)g(in)n(tersect)g(with)h(an)n(y)e(grid)h(p)r(oin)n
+(ts.)50 b(F)-7 b(or)390 4810 y(example,)27 b(the)f(line)h(de\014ned)g
+(b)n(y)f Ff(j)i Fk(=)23 b(6)j(in)g(the)h(example)f(ab)r(o)n(v)n(e)f
+(corresp)r(onds)g(to)h(the)h(cen)n(ter)f(of)g(the)h(b)r(o)n(x,)390
+4910 y(but)h(do)r(es)g(not)f(in)n(tersect)g(the)h(coarse)e(grid)h(at)g
+(all!)307 5026 y Fb(\017)41 b Fk(Requesting)25 b(output)h(along)d(a)i
+(line)g(de\014ned)h(b)n(y)f(a)f(co)r(ordinate)g(v)-5
+b(alue)25 b(will)g(giv)n(e)g(y)n(ou)f(the)h(index)g(closest)g(to)390
+5126 y(it.)37 b(This)24 b(ma)n(y)g(not)h(agree)e(on)h(the)i(di\013eren)
+n(t)e(re\014nemen)n(t)h(lev)n(els.)35 b(In)25 b(the)g(example)f(ab)r(o)
+n(v)n(e)g(the)h(co)r(ordinate)390 5226 y(v)-5 b(alue)33
+b Ff(y)h Fk(=)d(5)p Ff(:)p Fk(1)g(is)i(closest)e(to)i
+Ff(j)j Fk(=)31 b(5)h(on)g(the)h(\014ne)g(grid,)g Ff(j)k
+Fk(=)30 b(6)j(on)f(the)h(medium)g(grid,)g(and)g Ff(j)j
+Fk(=)31 b(4)h(on)390 5325 y(the)g(coarse)e(grid.)48 b(All)32
+b(the)g(di\013eren)n(t)f(lines)h(will)f(b)r(e)h(output)g(but)h(y)n(ou)d
+(should)i(not)f(exp)r(ect)h(p)r(oin)n(ts)f(that)390 5425
+y(app)r(ear)c(to)g(o)n(v)n(erlap)f(in)i(the)g(output)g(to)f(agree)f(as)
+h(they're)h(actually)e(not)i(at)g(the)f(same)h(p)r(oin)n(t.)307
+5541 y Fb(\017)41 b Fk(Carp)r(etRegrid)31 b(\(whic)n(h)g(sets)h(up)g
+(the)f(re\014ned)h(b)r(o)n(xes\))f(kno)n(ws)f(nothing)i(ab)r(out)f
+(symmetries.)48 b(So)31 b(if)h(y)n(ou)390 5641 y(ha)n(v)n(e)k(a)g(sim)n
+(ulation)g(in,)j(for)d(example,)j(o)r(ctan)n(t)d(mo)r(de)g(with)i
+Ff(x;)14 b(y)s(;)g(z)41 b Fb(2)d Fk([0)p Ff(;)14 b Fk(10])35
+b(and)i(y)n(ou)f(lea)n(v)n(e)f(all)h(the)390 5740 y(parameters)26
+b(to)i(b)r(e)g(the)g(defaults,)f(the)h(follo)n(wing)f(will)h(happ)r
+(en:)1869 5989 y(9)p eop end
+%%Page: 10 10
+TeXDict begin 10 9 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 -137 a
+SDict begin H.S end
+ 0 -137 a
+0 -137 a
+SDict begin H.R end
+ 0 -137 a 0 -137 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.10) cvn H.B /DEST pdfmark
+end
+ 0 -137 a 456 154 a Fa({)41
+b Fk(Carp)r(etRegrid)35 b(creates)f(a)h(re\014ned)g(b)r(o)n(x)g(at)h
+(the)f(cen)n(ter)g(of)h(the)f Fj(index)j(sp)l(ac)l(e)p
+Fk(.)61 b(This)35 b(migh)n(t)g(co)n(v)n(er)545 254 y(something)28
+b(lik)n(e)f Ff(x;)14 b(y)s(;)g(z)26 b Fb(2)d Fk([3)p
+Ff(;)14 b Fk(7].)456 370 y Fa({)41 b Fk(When)28 b(the)g(IO)f(thorn)f
+(requests)h(the)g(output)h(lines)f(and)g(planes)g(it)h(do)r(es)f(kno)n
+(w)f(the)i(symmetries,)e(so)545 469 y(tries)i(to)f(put)h(the)g(lines)g
+(and)f(planes)g(as)g(close)g(to)h(the)g(origin)e Ff(x)e
+Fk(=)e Ff(y)k Fk(=)d Ff(z)j Fk(=)d(0)k(as)g(p)r(ossible.)456
+586 y Fa({)41 b Fk(When)31 b(output)h(o)r(ccurs)d(the)i(lines)f(and)h
+(planes)f(don't)g(in)n(tersect)g(the)h(\014ne)g(grid)f(and)g(so)g(y)n
+(ou)g(get)g(no)545 685 y(output.)208 851 y(Morals:)35
+b(Comparing)27 b(1D)g(output)i(on)e(di\013eren)n(t)h(re\014nemen)n(t)g
+(lev)n(els)f(can)g(b)r(e)h(v)n(ery)f(frustrating.)37
+b(2D)27 b(output)i(is)208 951 y(usually)e(m)n(uc)n(h)g(more)g
+(informativ)n(e.)36 b(Using)27 b(symmetry)g(conditions)g(with)i(Carp)r
+(et)e(is)g(tric)n(ky)-7 b(.)0 1242 y Fm(References)0
+1324 y
+SDict begin H.S end
+ 0 1324 a 0 1324 a
+SDict begin 12 H.A end
+ 0 1324 a 0 1324 a
+SDict begin [ /View [/XYZ H.V] /Dest (section*.1) cvn H.B /DEST pdfmark
+end
+ 0 1324 a 0
+1341 a
+SDict begin H.S end
+ 0 1341 a 0 1341 a
+SDict begin 12 H.A end
+ 0 1341 a 0 1341 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__astro-psu-edu) cvn
+H.B /DEST pdfmark end
+ 0 1341 a 100
+x Fk([AA])55 b(Departmen)n(t)27 b(for)h(Astronom)n(y)e(and)h(Astroph)n
+(ysics,)1915 1461 y
+SDict begin H.S end
+ 1915 1461 a -20 x Fj(http://www.astr)l(o.psu.e)l
+(du/)2868 1378 y
+SDict begin H.R end
+ 2868 1378 a 2868 1441 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://www.astro.psu.edu/) >> /Subtype /Link H.B /ANN pdfmark
+end
+ 2868 1441 a
+Fk(.)0 1507 y
+SDict begin H.S end
+ 0 1507 a 0 1507 a
+SDict begin 12 H.A end
+ 0 1507 a 0 1507 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__cactuscode-org)
+cvn H.B /DEST pdfmark end
+ 0 1507
+a 100 x Fk([Cac])41 b(Cactus)27 b(w)n(eb)h(pages,)921
+1627 y
+SDict begin H.S end
+ 921 1627 a -20 x Fj(http://www.c)l(actusc)l(o)l(de.or)l(g/)1915
+1544 y
+SDict begin H.R end
+ 1915 1544 a 1915 1607 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://www.cactuscode.org/) >> /Subtype /Link H.B /ANN pdfmark
+end
+ 1915 1607 a Fk(.)0 1673
+y
+SDict begin H.S end
+ 0 1673 a 0 1673 a
+SDict begin 12 H.A end
+ 0 1673 a 0 1673 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__CVS) cvn H.B /DEST
+pdfmark end
+ 0 1673 a 100 x
+Fk([CVS])42 b(CVS,)475 1793 y
+SDict begin H.S end
+ 475 1793 a -20 x Fj
+(http://www.cvshome.or)l(g/)1397 1710 y
+SDict begin H.R end
+ 1397 1710 a 1397
+1773 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://www.cvshome.org/) >> /Subtype /Link H.B /ANN pdfmark
+end
+ 1397 1773 a Fk(.)0 1839 y
+SDict begin H.S end
+ 0 1839 a 0 1839 a
+SDict begin 12 H.A end
+ 0
+1839 a 0 1839 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__gnuplot-info) cvn
+H.B /DEST pdfmark end
+ 0 1839 a 100 x Fk([gn)n(u])47 b(gn)n(uplot,)550
+1959 y
+SDict begin H.S end
+ 550 1959 a -20 x Fj(http://www.gnuplot.info/)1462
+1876 y
+SDict begin H.R end
+ 1462 1876 a 1462 1939 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://www.gnuplot.info/) >> /Subtype /Link H.B /ANN pdfmark
+end
+ 1462 1939 a Fk(.)0 2005
+y
+SDict begin H.S end
+ 0 2005 a 0 2005 a
+SDict begin 12 H.A end
+ 0 2005 a 0 2005 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__HDF) cvn H.B /DEST
+pdfmark end
+ 0 2005 a 100 x
+Fk([HDF])c(HDF,)498 2126 y
+SDict begin H.S end
+ 498 2126 a -21 x Fj(http://hdf.ncsa.uiuc.e)l
+(du/)1413 2043 y
+SDict begin H.R end
+ 1413 2043 a 1413 2105 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://hdf.ncsa.uiuc.edu/) >> /Subtype /Link H.B /ANN pdfmark
+end
+ 1413 2105 a
+Fk(.)0 2171 y
+SDict begin H.S end
+ 0 2171 a 0 2171 a
+SDict begin 12 H.A end
+ 0 2171 a 0 2171 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__psu-edu) cvn H.B
+/DEST pdfmark end
+ 0 2171
+a 100 x Fk([P)n(en])e(P)n(enn)27 b(State)h(Univ)n(ersit)n(y,)1075
+2292 y
+SDict begin H.S end
+ 1075 2292 a -21 x Fj(http://www.psu.e)l(du/)1826
+2209 y
+SDict begin H.R end
+ 1826 2209 a 1826 2271 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://www.psu.edu/) >> /Subtype /Link H.B /ANN pdfmark
+end
+ 1826 2271 a Fk(.)0 2337
+y
+SDict begin H.S end
+ 0 2337 a 0 2337 a
+SDict begin 12 H.A end
+ 0 2337 a 0 2337 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__erik-schnetter)
+cvn H.B /DEST pdfmark end
+ 0 2337 a 100 x
+Fk([Sc)n(h])52 b(Erik)26 b(Sc)n(hnetter,)803 2453 y
+SDict begin H.S end
+ 803
+2453 a -16 x Ff(<)p Fj(schnetter@uni-tuebingen.de)p Ff(>)1920
+2379 y
+SDict begin H.R end
+ 1920 2379 a 1920 2437 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (mailto:schnetter@uni-tuebingen.de) >> /Subtype /Link H.B
+/ANN pdfmark end
+ 1920 2437 a Fk(.)0 2503
+y
+SDict begin H.S end
+ 0 2503 a 0 2503 a
+SDict begin 12 H.A end
+ 0 2503 a 0 2503 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__FlexIO) cvn H.B
+/DEST pdfmark end
+ 0 2503 a 100 x
+Fk([Sha])45 b(John)27 b(Shalf,)h Fj(FlexIO)h(libr)l(ary:)1236
+2624 y
+SDict begin H.S end
+ 1236 2624 a -21 x Fj(http://zeus.ncsa.uiuc.e)l(du/~jshalf/Fle)q
+(xIO/)2757 2541 y
+SDict begin H.R end
+ 2757 2541 a 2757 2603 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://zeus.ncsa.uiuc.edu/~jshalf/FlexIO/) >> /Subtype /Link
+H.B /ANN pdfmark end
+ 2757 2603 a
+Fk(.)0 2669 y
+SDict begin H.S end
+ 0 2669 a 0 2669 a
+SDict begin 12 H.A end
+ 0 2669 a 0 2669 a
+SDict begin [ /View [/XYZ H.V] /Dest (cite.Carpet__tat-physik-uni-tuebingen-de)
+cvn H.B /DEST pdfmark end
+ 0 2669
+a 100 x Fk([T)-7 b(A)g(T])42 b(Theoretisc)n(he)26 b(Astroph)n(ysik)h(T)
+r(\177)-44 b(ubingen,)1602 2790 y
+SDict begin H.S end
+ 1602 2790 a -21 x Fj
+(http://www.tat.physik.uni-tuebingen.de/)3054 2707 y
+SDict begin H.R end
+
+3054 2707 a 3054 2769 a
+SDict begin [ /H /I /Border [0 0 12] /Color [0 1 1] /Action << /Subtype
+/URI /URI (http://www.tat.physik.uni-tuebingen.de/) >> /Subtype /Link
+H.B /ANN pdfmark end
+ 3054 2769 a Fk(.)1848 5989 y(10)p
+eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Carpet/CarpetWeb/doc/first-steps.ps b/Carpet/CarpetWeb/doc/first-steps.ps
new file mode 100644
index 000000000..d5488a5e8
--- /dev/null
+++ b/Carpet/CarpetWeb/doc/first-steps.ps
@@ -0,0 +1,2719 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
+%%Title: first-steps.dvi
+%%Pages: 9
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: CMR17 CMR12 CMBX12 CMR10 CMTT10 CMSL10 CMTI10 CMMI10
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -o first-steps.ps first-steps.dvi
+%DVIPSParameters: dpi=600, compressed
+%DVIPSSource: TeX output 2004.08.05:1643
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: f7b6d320.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
+% cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
+% cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10
+% cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10
+%
+/TeXf7b6d320Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand
+/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
+/period /slash /zero /one /two /three /four /five /six /seven /eight
+/nine /colon /semicolon /exclamdown /equal /questiondown /question /at
+/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X
+/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 09fbbfac.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9
+/TeX09fbbfacEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown
+/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla
+/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam
+/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
+/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
+/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
+/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
+/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
+/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
+/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 74afc74c.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10
+%
+/TeX74afc74cEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /sterling /percent
+/ampersand /quoteright /parenleft /parenright /asterisk /plus /comma
+/hyphen /period /slash /zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /exclamdown /equal /questiondown /question
+/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: aae443f0.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10
+%
+/TeXaae443f0Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa
+/lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi
+/omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf
+/arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft
+/arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle
+/twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle
+/sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash
+/greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow
+/slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p
+/q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector
+/tie /psi /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta
+/theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon
+/phi /chi /psi /tie /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.1: CMMI10 1.100
+%%CreationDate: 1996 Jul 23 07:53:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-32 -250 1048 750}readonly def
+/UniqueID 5087385 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
+990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
+6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
+DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
+59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
+D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
+8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
+6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
+1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
+03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
+95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
+74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
+3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
+47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
+AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
+42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
+40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
+B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
+95601766777978D01677B8D19E1B10A078432D2884BB4F7B8C3293B68BB78100
+16724E495064BA0168CC86D413CB48560D6D318357397832F7A858CD82030C7D
+8A4A1919716E8B26AFF8789AAF489EE4E0A88DC477551A87C7DF2856189E4596
+FE015956AFE5CC019F5CA6323A12B763B7B08B92C1A2940D3C566C43729E5482
+63C6DC5E834AEB4DAFB5AE8F0B8931A4687C94D11587B9071C8D81DA14F12776
+53A1985A3EBE37827656BD4635E03F09C3231F906874645E7DB3E59045A59D67
+E745D8487CF73FC50F64060544F624F357BC998A87FBE468DEBB38A09449EBCA
+D041D7C29225ACD16CB8A59E87924D15A9125F064710A6CCCA3AD3103D8FCC94
+CC3571C6F9192774FCFE5BB42A14B27960903144D28BF047BF4C77646EA7BF6F
+440D4EDEB712C63F2E8080419E42D1D58EED685EB5CDD49F80DB6E5553B519FA
+C6A39A093155802F3EC607721F390307E91ECB597ABA60A537E3F8C045BF5DD3
+D88CF6518D37FCD95D2F295D902D617440D23516D962F47750A682A319ACE1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.1: CMBX12 1.0
+%%CreationDate: 1991 Aug 20 16:34:54
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMBX12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-53 -251 1139 750}readonly def
+/UniqueID 5000769 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
+7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
+20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
+B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
+68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
+D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
+26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
+F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
+77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
+BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
+C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
+30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
+148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
+E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
+E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
+337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
+0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
+472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
+A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
+326A3828FE972BABBDC761978EB577B7EFE06865DD3A7668059A126B063900E2
+6DD36FBF3B050E0F14DCD8FB0A0D93F30588A01E56F022E88E99DDDC2AB8A953
+6D943F1CEBC66F7EEB259027A42DC747639B16D2B8288EF43501803FB65EB77C
+075A59F0A8C2BCFA0CABCBA3FF622D06B99F18196DC4BBCC264B39D51CF7292D
+E60447A04B22582FBDB940AA3C867D3872AB2767A9056E6F9FB3DF4E1FFCB960
+88710709100E7A44067DC5E4103222E109E7AED84D18568B59D7215DDF8F9494
+17D730DEF1A9FBEF4C99F98901E53E35CD8B61C8D0A81CD471B2266E47729003
+145E31B533C0F5D84640A458F50BEBF122FB257B6229AC0ED5B65E47A9FCC007
+8DC3F3775D9047DF0059EEE4D2DEAF3A42D8C36D4F413E8717EF2F3C3CFF922A
+3730E5BA1FE7EEF81C3AD7FCAC4FDF043ED536928B48A8DDA54C7F37BC234665
+D01BD9B9C7C98321E649C1036B2EFA7116DE41161BA156BE71CDD85EC8066C6A
+F37FC82B6D56EC79AFB23D2580DDE7A6A43588BBEDEACA6949A7172ED8EE13B4
+B3CD8ABDCA42139058372C0FBA26A52E3FBFF2D9BAFE7CA0F22BE6F40C1EBF4E
+40BA8E2E23A4BA38C9DA1BDCE62AE820A41BAA9A84556EB621896308F58989FE
+44DCB1DC9D181B22DAFE5AC6FE397E77FFC4674195E1B332B65CC922E361BAA9
+BAEA7DB3AB7945EAC2A1B48DA0E780789C2C479112C90DE400C2F8FE22A8707B
+6680A4C9211DD012407C66917501FA39902E3FE393CB515FAED4C892AE96125A
+4F1687B8A3FEF53D89D063B5ECA8F8B58A5EFD842DCD9DA17FB3D691A6745C4C
+CA4400377687152A1D12904024DDF2FC802C21CCFD0953790CC8DD335704A24D
+909BBC8322633985F79D61AF228AAA13869E72277A57CC61ACF28EBA081D916B
+0CF53A69F0E19DA4F2BE7C04F28A5179CD8D2237715C4AB690F8F513E0657C3C
+E0CD581D68F565678EC5BE642FAA0608A9B4B8DE2701267906AF73740DCAE4FE
+735912385FA01914A4C662E5C85D0CB3EE56E1847A553F1D47614206E0E17E97
+8CB2563F37D64D7AE95B4CF115FB0C3CE9EBC9A94D6A349029D82BE1B0547866
+FCB97992F1AE29619C26E33A434244F9AC4C8F94B98CA6A18ADCCA3392101098
+A428861588076D543243316C11248C3F980B021EC8DB08BCEBE3F208C889355C
+78C480AFDF7DF8C0C17DC3DD987BA67BBA80C8125E20D48FE73BAD5B74398A69
+27BF90E3484C289BAA4DD04D30BB6B39268DCA7C9C676F442F7F5749A7049DB0
+0F331114597E7B85D3BDE1AF33F42F606EFE20D002461F01996FE7C5E500C6CE
+B054384B21F2D3703B64105AA616B226BA5D9EB1CBB37716F9419F561F3336E1
+54FB3484C9F6F1D57A738F2EE7B1981C6B14B0C64073A1930631A2731B28EEA9
+65AB7561B5FD9F0B97B3C7332FB97879F743C54B6A766149770AFA3A3967D288
+0D9C060EE198271ED5E3B26E02DB27E9049886C1DAC569033DEBFC390E5B3EB4
+A044786380D375EC461249C6BB8A234A7E5880B7860E61555E3C89771DDE503E
+B78B5DE9B325B35E682BB351F1A6657B0A3D6E426816FE9CCD19D3624A61B581
+EAA7ED7C29F3BB9CC5558BBAA95723A8123BC4CF55459B54279BBE6911BBC6F5
+31DA4C88149E94E6FA1A9321B52F8F78842337FD6E5B969064BAB8F3600CC406
+B9E72FABB4E56D282B5D89868259BF551F7881E8AB1CC207950A178E4FA1466B
+F4841E71938892A283A113AC884D8E40B3213C04D77CDE4F845A959CC6728CE1
+269FAAD253B1CE956F20471F7E0197A467F33C39D1B29DDEADC1EA402FD28D13
+AC0444A7785B15F2822FF13525500444A75809725CBFCCDD0F5B6BF5420A7797
+29B603F16B228AE5D2AB7CF1DE7EC56A7687EBE5825D3F62CCC6E6CF60D6A09E
+A91B419366961C98C706B324095A2E2F7B9BAF58626788E6BE5CA67DB4C50936
+93EA3CDF3A1A3355F0DD337CB8474F6E2F83CEDB3C18A1238F0088C627028CC5
+A3D1CF04ABC807AEAD0484136291D5031FAE2B4281A9BBA61B2DE3F37991AC23
+B049F2AAE9F00851CBADA724E76ACE3600B574266A7DA81EA7F601B679E28A34
+0ED005B2DC1F63D40CDCD0D0876E4EF8C6692773DEA8B61305B364DD6C5AEAF7
+75EFF0396D89B5E5F400121442EFC940852E8CF339895ABC3525BDD09D925B9C
+B83D3141111610FF6A2E1CB030B8FE3B212BE863B28A19226606E147315F32D4
+474B8AC1735B0DDA653223423405D8DE81070543EFA352FB6347007177D8E41C
+9BDBE598A8F621629EBB2C5B3233446573C34369FF2BE923D2788A823A6197F5
+8DE62E1F90358A972C9EEF536336D58ED4345C6997DC9ED00457B2B2E628693E
+193778CB0673C44E408259ED2574E7D83470903B3AE6EA3A92C36E7D5FF1B35E
+C4E0580D51F830FE29CEA16B3D99529D07A05DECD8D27648E5338AF5B8384FC9
+287ADBEAD54F87D296E0726F5E4E4519237C684820F6F6B04DCA2A5F28171D11
+25409BC857C62CF335BB7F617B520EF95389494F5F0791713C75AA83007A4FB2
+C9A1231558B04CC8AC1EDF8835171DD0E1A1D8334F8D4395345B16470A40D832
+65AF84DDD9706820E0F748B2A9E99419B0A6B150D64FDF7BF3BE6115F703C45C
+EEC368C30EA993E2FE3883EAB3142A22C93F4E75BBCFE7477460E1F50DAEC7B5
+69CBC67484F544624061EB660307F1256FCB7C00A5875BC9AD6CE560F0E88F8B
+E08C22F152A34D8B6A5A7B8DA9E0EF5576727BD729B752583C47EB0D3C804148
+194D3D1609BFEF0A220878F91EA2A2C36001AB76A209A2CAE5DD348C3F03C9F9
+E3E54B381A7A040A91F445AEED31DF4B8299DF97BAD6109481B7B1C768EA0207
+105401E08EFEC4B69DE297A1F306DCB0C590D8B2B570608F9392922116F92EB4
+79DCA8F908D4E64B1747655FC2115495D4BCB26348238A3CD23B0BC59D0287C0
+EE46A73225D2D05BA2967C4F3FC252BE2CDD21035DA65BCB1916BF7E594AC221
+0813D837AEFC5F674311E3FA42CA3237332E22CD2A33ECA5629AF45E68D2F84F
+FB6CC3ECD43E9D133A1BE7B242CBD99D24407520479600164075879736DD7779
+23A2B34FA590059D184564276E5170EEB185D4A0E25FD39855E154A96234319C
+9B420C6C95995B89A9C46C835F5084EDDCCF865FACC4A26901DB2ECA688D6C07
+C32956F9552B1BBD468A5AC667D834B1C864B229B67340CD5D22B01B24F79849
+3E1124F9A6CCD49E56D4D9165A529F1A8EA9B61169E335FFC274FCC99D98D4FB
+468232F84FC3DD58B7B142291A2024A803C0D71C2A10F3C5A048EB2FA15F1445
+9C8D8F3F7E0CD459BAD1D53C2C358AAC6D0949485EF6000A5FED02DFE7F30847
+74300F971762FD3FB7231B9CD92868AECF5933FE7081BB095C72F2643DBF0D76
+103872C32351FC5E9A7A229BCFFCD80EE0D2C0BA8A6EAC1F7AE4E7194CC38A53
+A4714FB527FFDB199C97C6BF19FC9E8A1A5A725FE5DFC92AA2711454ABD92B55
+951F6CE78AB6022B477D996AE0770F2A0600F7CD9B21365F5D389ACF63A47148
+983FE541998FB2328F245E07577DBF11AAFCEEB626134D4900CF7D40AF0E9588
+38EF6314F33BFCC98868B32223ED4EEEC2DE2ACC1A23BC75B6071344F19B4B7D
+B5A88F63FEA1DDA7BC4029EFFE12D281EBDDE805FA5C53E93A4BF54237077209
+0E7CF8A16E2FA4ACF3DA1E5AD6329968BA2DFE2131A5C7E42E1FDE4D1A8F9BE2
+D64068709EF404D5F1B8989C06DB5CBB3104D3C57A51B1C02C2AB2FA45E0F180
+F79FDB477AFDB19628980810C736073A01CAB49D791F75B2AF387C1300BBE790
+2D0C3B08FF794364DDE78E7AB5F610297E7A4AC90E5A097670646492AF9973D7
+026F330A2BE8F7EA7A65C5E12C8498EEF9EF0596C0B1C68895EE38B22AEEA36A
+2226B0E5ECA6D4B33937A4580C32135DA04B6882D326A355F2BD08D92FAEEEB0
+19C074BAAFA2FF5F91DD888618B342F76DC0540DF5E0869C7593B93E01A20AD1
+93BAE247C022C8B0C168A8687E1278564EC2E7A9B5353CBA13E3CAA7ACB741BA
+0094A2F8D4A2E94A46F8A1441F6C8518B8DD628F2C7AD949833BC6BB3807C47B
+06916F18EC5B0568236626890292FB4413006FF2447C966BF411D3AADF2BA814
+EBFE6AC82EB140CE3905D53C5F76D96BE6EAA296875B84A36CF5E7F9F085A057
+FDD0DBDA97E819B189C34A76B2C7334AE71AAB942D215E5A1D83A472BB84F04A
+A47DC5DEE2FBE8C2D1E8DD894EB5384D5F5F74B8374F1DCCF9D4AB1182709747
+162BC3F52809226AB7BEE6E3C19CCC43CBF84FAD6A21B31C5C67148AC7F4A2FD
+DE6ED7E38EE6126672E1E239EFB8A42761FC438ED656FB91A05FA5DCE995C221
+FADB1B912DD99FB9D3C2A295DC63A363E1622F87C5378F9E24FB18ED9E254E9B
+66112E59EBE1E07AC73125EA7F7E038DDA57C6FCA81B2FCEF8628B27D62720B0
+9C9DD2D3684E20D8A2CF2A1357DD0256EC8E3413DDE9416490B863AA8A638D1C
+4AA8F249CBA0C1BED0FC5DA55F6F1F9B005FE82DEBDF6ADFC44436FAFC1CC06A
+29E50B099CB1E02CEE87D9A74A59459703A8F2285E795C7C80DFFCBAADDE3493
+1673800C06670733C377D5C52BDBE6E110341ACD7C33875D64B96743FB2B8D9E
+FA91541F2DACD0C29DBF74F25D2EC1B42D0E4F8C4BD8B62DC93F49C26D6AEB82
+5124DE1E13889F13BFD4896E891561736D285B44C87667FE19FA66F5137BC3EE
+13E6E2235669F45EC2C435DDC06FF060C3043ADA30AD849752D8691FC62EF47E
+E2083659764C57816987E631F10D8A38BD7F2580BE091248F63E10BC25FF487B
+E78B83244EAF8B975C8E1A64C0BEC59051E8080D435C6EFC926664D3C3A94F64
+206237957C02FA34BB46BC685173A646B6631D159E418A9AE7C682F0F840FF4D
+0EF052630F27BB6AD1284193A35FF4C7735217017FAC5F4A553BEA8EE86AD539
+C33DE0DB15BC65CE96D76943AFE6B93292EB5AB3D52CB3EB5793BAF4C68B3203
+AF13D02A744788B0EC33C79BF49D6725C377914D320E6C95883EB5F46EB8210C
+C86494E59A02240085B5E48E7FDA8EF7DA555F8B15F6E7750A0CB0DAF231807D
+CEA2BDD3947572E1DA338D39CE5E82090D3DF1647AC46AD0EC9D2A98BC0EA65A
+307ECD88E0AA7BE72382D877A63F39103F9EDFBA01DE6831AE4E0BE631C32EB3
+B49CCE6404D2BA960189B74B199E308EEEE27E63E384F39DE3EDB8141347EFF7
+782BC0F1D0BBC1B51C23EC112DAFBEB74694477E34916006F4AFED8AB4A1C7A6
+6B139E3CF78A2E53DCC783305B7EDEC99602E38A462C1CC3DBD546C4FB3BE547
+9AD1EFCB01E8958D97E46EFD4A08FFF6137FBA035477838D755A87215925DA24
+1260BC5E256CE4E59ED96C8723EE8524A9DB23EF0923E2F38FFBE49352478279
+17DD5CAA32009DCED721AB4EF5EEFF41BA43D61EFB397DA7B45E2D6F637AE61C
+50F76DCC4F8E73142E55F0A9760DFF7505B6EF44AEB1CD406225D2FBEEA1A66B
+DC3D8F85B520987D11D777C97D960EE07C3B6C8A77CA51A1694EEDA4706B3318
+F221E7DE0DB4B91A62B0F1ED04B7A8470D0709639D481FC70DD410F6CF016A88
+1C62BE8A3C5C9E83D77C8706F4A503DA39CE44F088338A2A9045A3BA070303E8
+3E3311987414FF0B50B712D373308B9A8FB57E9E26F8CBC967221EB3A69CB06B
+3D31E834F39D4DC17FBB28185F54735FE72A5FA8D11CEFC63142C88869BE4F79
+739A5B8667D288575268931B83B35DFC61F443D218C7B894E953700CD515F36B
+EE73FE06C4F487741B18477F658524500D6FBAFA5E369CC29AAE71EF4B5B2AA1
+051FFF8F7277BE7B0AB7EA54BB274065D703BCC02C84BB5DB89E780E2F84ABB1
+65C0EC14BC116088C10111396EFC0DC0D865F8B292322A4E8244577208F2D4A1
+44720132B0727A54BBC88BADCEF5D8BF8385538DECA18D842302517E1EF6330E
+6356F635FADD4C0D479D02C7F6560B9B07759E13D34FCF2587473C8EE26557CE
+9E445C35A14B8479EACC4BF26123C9AF5964343C64F7A8B563BC584462C85DAD
+399B2D2D7BC70F53B2E86B8B24ACDA6E6D4826C676028CCC276EA60E03FFB116
+648E994C19EF4A1A18B53CD6F02C66B7485856AC183F01D5678CA9E37E8DEE52
+805FBCF13427D9D56699086A39AE55B17112E16A54721FC67E56B045E1EDD238
+5B7A9A9594075ABB5AC597849AB494374326668960288281A343E73FF071CD54
+880C24120538BD664C253297E13C208D97A3A29F059868065ED98F15A66D0F83
+892BE8740630CFFF706642EEBE3DFB3C6640D304E3BC8C4F89D134E724290DD6
+0E403C317BADE2D3176EF099550F20960B326FCAC0D1681EED54F615D48B154C
+793BAB8843A6E14DE5B80F51BBEC5102F5B7AC3CCD9DFAAC10D480CD789FD8F4
+38D449ABF4D7DDD1E4D1316D8926A337F0B132787DE4AD5BA0F7974CEB916A3B
+51FE3544160EB0C80EB1663E75674F3B48CD96D1987093F37A42DB341D24AFA5
+C3E15AF9FC572B8A8003223AA540AD440271BFCA7639B382EA5BA6B495EFC656
+48D9EB85D39DFBA9CE6E46B63E94B97579FD1769A47A85E7A28C430D47A3021B
+9F661EE2ECF5E19B138C800A8F52C560C50AF2CFB637E071222AD9DD1D54C638
+A799E663524776846388238C5707F5DB938E24DD024AD74A95A6CA8F78BD471C
+D693911FA2A076B46FF7BF4F0FD2986B50A1C691793EAEF1FE52E50D2DC63DD8
+84E5DE98F4C2A4FCD3C07395698867E490C1BD3DAE26D76FFFA12C932DE45B4F
+04D2324E5714FB2CA60BD319B15007FAF5AECAFC4EFC3CE7C53FC181250C6F1E
+093794C9EDFFCED2557BCF2E20C635D6BA53D1A5D5B4D521F514A64B3263BA72
+66C7684378E2B53E29C8443CB3E1F5F7CE4E7B45EC9E1C84AA6E9E0E0D92D6D6
+B8677E87F9902B4B48F2F0BD3DD8ABB7D96C7AC9FD874930F590B9FECE52150F
+48E7053D3CAB1BD7A2832C486DBDA626CA46FA8BF71736E631B5250917B6A2A3
+0D4E93B65055FB4A6197192309E28C295A8E98C15F92F82679F718191D21B478
+E9AA44599043144A522493EFB9394D5A938E2EF6ABA420D6CE45E251E00526BF
+4951257E01353E1BC644B2854FAAC6D2E6B02B41CBBF53FD38575EFD6449B649
+00AF0B2B98746454C7D49E1D37DE767B965AAF7122D564BEB298095B979B994B
+51A418F0A5315FD1099A02B97175A352414443B78E619940B6B8BEC2AFE5FF4F
+68A95F71A6CA77ACFF6E6045C34926208B48797554D9C74955A07DB1DE34B2B6
+00B0BE9560D4186DDC28B8889BE03639C916AF16750F59C3BDDB18FC787334F5
+634A4DC7CB1B5C0A74E44576E51FA2271DD71EDECC165C9E96E6004FC8B37DF6
+56B33D3B12B66706C17014697CB0B58E5B94AEE42933830A0C6459DD52FF94E5
+19D392B1078DFA65C725BC606BDDDA243171C28DA61CBC22D427585F285F0B6D
+C78EEE5FDA083E7B245D79FB5215B6AFC3E9F098EB47C2F63BA597854D7DD5A3
+FFAB6029AAA4A812333C7F896F1F7CFDA0D790375A9F1FD7A1C80C3639939427
+EAD48E9A243934C964BF1E86633476695F3C9D6D85E95ECFF5B4B28993508B9A
+004B70AD715E553356185FB460AC3BCCC747AA95C63E3553842201F88AA276AD
+705295E472240DA7D3C54056F4A31698015A20A45FC2CC9047FA6FE149394BC0
+05BF0F15A26C322A215BAA37ACAD34896EED735FB7FD5992819103B8BC0F27E2
+C2EC4579BADB77E1C275FE29AB2080BC4F310B316CBA6103BACE178C52D1FB2F
+B0F5096E5ECB89BA02E217C8235B12EBDC853247AE066E786029EDCCC7E9C6E9
+9DE286BA8CEEE539C2D10D0E5B9F7DD1BEF9EF5F7C52C26B699AD244CC903E91
+248995ED9F8F38B6F550F86A4B990509FF588F4E2B2EAE62B895728E385D01E9
+6712D9E06CBF2A93E2E2B00C53E61B047C6F21860D27FCADBDDAFE2D357C622A
+5E878A609C5997E08560E3A4E34F5068DD4F8F9A114D7A68E353FD54D4001C6E
+E338A30773F6081616260F47E51B9388B1C6784785AFFA00C03440FDADDF9DE7
+8A1F0687908D935FDCFE65BF6429FEC2BC4AC65D1922AB39F7DE4D727B284628
+DAD429B6B9327EC45A77C1868B5F3D63C422FC561F6C210C834AC7EF085DDDBE
+541E6C4C244B14A19B0C87C4CF98E4D637790EF3C999B39859AA9EE2CE6B0CD0
+EE1C12A9CCB174C6777E3C5779A5E01B24865C4DD84B1E27D34A7F4CD10F8214
+15DA8A1A98C22E7077E0127ED84D27793F0B8190AA593BE6FB111CFE487DE241
+AD03DBDF15C6F3E3A38D332B42554B84DBAE2B9DCCC8C7E7A18DFFBD2C661CB9
+06A2B00A5508F0572B7D321095F5B2850920567EB7E3DF22009CCFFDF8D42B7F
+658D9D6D43AED81F0ED5DD1DC052D923428061ACA674984A0072EA610081D3F8
+F7E876501CDB7E568E0CF96B378C22EB54EFAD553DA5A1F4618E2DC7557BF04B
+C19CEAF19BC0D3342E14DAC41ED8C64173719F7A881BF284D9368555B42D76F0
+A9CC63E14D0BC49D734930E62AEE77A44FF1C0101EBE95BBFAC5405A169EFFF7
+2C9DB33663A6CE271E89F78AD5BF38E5A2AC984E9AC9EEFE6376064393559BF3
+9C8E223D27BCE960977D2CE0205702A0AAE02F7E318685FF137BC70AA976C775
+AA3A62D6B27D99AD12C59D9D6DCD165EDFE3D5E79511FF154630328E280DA6FD
+E657E3274DFF4EA2B6D2A4F2B7A20E5D7B48A8CD07C67CD124A92341F9A1640A
+68044FE3CAE4B0E94C1CCA0899F350E8551870878CD6BA9D78EFB900C9618F07
+0E55F956DF0C1859280A4FAE6F257CB0FBD115D13DD7382CB1E72837E93218D3
+75819A264A109DF7FB3728449CCF5BCB9DCBE2ABA3068115CA6FE015CA4BA5A6
+A2D8BDB89DA2F3C5D3ECC6490127D06855D1E5143A92C357CFC8D723BB42F60C
+83B3F4DC88BC3C1628F1562F6098E1EC27DCA5DF416502AA0FC2D40E23235111
+BFF9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.1: CMTI10 1.00B
+%%CreationDate: 1992 Feb 19 19:56:16
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMTI10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-163 -250 1146 969}readonly def
+/UniqueID 5000828 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
+21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
+06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
+55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
+B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
+0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
+1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
+7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
+7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
+356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
+19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
+C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
+244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
+AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
+5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
+D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
+993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
+2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
+E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
+309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
+F42EDDCF39AE522A1DC2D80B2772B05DA60F3DC15A815A6BAFEDC399C7956E75
+3851CB3588E22936FBFB63A58300298B11C45D82385C083D07AF133BB1BC941A
+FDD9F34D5E0B8087EF2A58C54D8AB7580EE3ED58AEB83B72CB9028F472ADBF11
+05A77651F118824F6CD00209EFB60C1D32D46A78E8C8DCB8B0E742828E3B7D17
+DF5200D68189C91FB8489CDEE8BC223C4281DDCA5F7DA80BD5C2D66A14695EA1
+5F05E03500579ADD440ED2C57F535807560C6FE3873143D792734FEAB93AE8DD
+633BA6FC51887E252E8CA463340490CA6634BFA6F5B74354D8087857E9E1724F
+3FF689C0CEAFE3E98D5590D95FF236DAEA305C717390262787DCF2B5D539C589
+F8BDA7F1FE3FEF7CC7CF3B4E33451B7EF31FC38B01ADCC35BFCE72843D2F9E35
+CB11A73E8D78CEE16671D907E735103A94CB0462BFCEC1D0647D0C6097BA849E
+FF60BB827CF5B8A7D71C74418E6E90E83EA97FEDDB89AF3CD82C30646EDFF0DD
+0FEF19F1BF7993439A91B14CA694FABB7EC4BBEE94AC101C413CAF56CD0CAFD3
+069AF507AC635507A0299E27C31B9820711E997D98195572A64C2E305C409921
+59CCB19119EC5A73C1CC98AFC46D944D9E634321BECF9969E4F40691A148BDB7
+D858953AA978FABF4AA88EA60C65FFE7CBA1D6E647C11C29D3799DFEA39CCE2E
+B0349F6A7F19BA37F8360806D7688CCE15E160FB401ED9A3DB8E6652FDEEC161
+444CF0478464B226A01EC4B7DF92C7AA7763485088806C9B116B0FE2A1D99BB7
+21C0C0C17C64A44741911CB4E1BA63455D2F5A07E1108AE8E8E1CF5971121DF7
+7173A9B97152BCFAC5D380BB478452CD474C058C37DD7FAB55E116BDFC359F89
+83668C53ED1E3F877201EA068AB1483F7FEBCB914DCA5DDED1960BE01512D1D0
+29B7CEA5FC59231C0365715E7E70455CFAC735BC9A23FFC6947795CA3ECEF6BE
+32E452490C1B29C434B1181235E04A9C345CC527E37B26720B67B04400798B09
+D711A814519AF422CBC8B29BD21B8E512D7FD8481EAB9198C7992D06629BAF04
+8810FFF7ADE59F42787673CBFF9A7780FBFBFF84B094AAABF81843EE63EB4982
+485DF12E7319DC52ADF0F12F9A78168D466E858C171CF899F7F3FDAA93674515
+BB485EF88A7B7D89E6FAC8890BAC50477930209860C4EA2DCDFB4DA6DCC543E6
+8E2327523B409FE3E49189CBB2A11FD3E4BB0E66753C2128B625FD62B302FDA8
+D7C4153D9FF4BF315DE56D59E83A4ADB8DD26B83FCC628D58BE3FE36B014D9D2
+B4F014E1BA589B3930C38AD1F6BB16F84855A249B6136CAEC08FB20D678C6CEA
+826BD965CE23CD0CBF26123271686587FEB7AC55FD476702651C7A5FA6B0E450
+88C4112A19F287AF9B041B9B6FA3E4EA4C2B39EEF476BCBE12643BA665638845
+FC85821F0C613958DF2AF269344E8064EBBD3C9A99A7E0276458B6DCA480CC81
+9BC6F0A54A8FC117B19D98A10730F6C25DE29874906594F8A5EBCBBC2CFF48F2
+FDAE556D16ADDC870CF1C9D6DA29C5529D566D937E3DCEA7E4AB797532A0411A
+1798C230B45B61BA963FD00936BCE43A81B5677CA8C3FACA5FAC17F91C34FB68
+CD61D7492A8F5289ECC59DB30FA719313491F7DE190CD2B259FCA498AB834519
+7D161DBF1F34BF2B5CAB0B0651D81B087055A1AA9F7DB1903A57BD9580A70B36
+C44E397338628A5A303BDD5D1E20FE464E76552248CC6F1B6EB944A497BBEA5C
+9C448A35883FE9ECCC56493852389D4C4FFDF4B4E21FBE602DF9503E58106B11
+35CA9A3CE723B6F662D9DF9970FADCA2920D527E7BF9D1266D8F6757CCCEEBA9
+3D9DE4E1460FDE45ACAF2D79D36F8FE38480D3AA1320F1E4939E231ADD1992B9
+12F7999E12FF7C992A9DAF141331BE1BAB8D27F25216FC9FA3B85A10241E4470
+01039D758FDA33F5AA1E96853C0B48070280AE5CC4EF39DAAE0DE551E2DB256C
+B3E9E5B2E936BF9824F1C14626E5B589D0BD56D149AAB199DE147B8F943B1D50
+FB1757A96C37DBCBEF052FB42850BE8D5524066B8361646BC8C642BF370B9291
+25879095682AAEA6CE0E6931095C6BAF7DDD66560FC235E1809A6CF8228A7451
+35F5218A857649FB04E9FAD40080E70FC3BFC3D727C5447D0AE04B9587547B7C
+C477D2C7C670640A289060D460FF593EBB897B39BA7D1C1E620876A221BAE9D5
+D42ED6B6ACF8C8F92CEBFCDC5C3E9D14F1175EBF65E40BD23D5B45290133D634
+E606E6BF5C94295D858ADBB5DC952E7D05A70EE02FCED4A6B758251B390C9609
+56D3C5139175A07AFE6CD8E69FCBD97C7A0B5F4ABF3B8F90317D114CE0C64976
+44A8063D7D2C8BD712E069B14449F03E765B80315BCB990D070362F418683AA3
+989BFA70A0BA09C8B937BD316E749025B4CBA49CF244D3ADE123BA3FE68ABAC5
+B2E1AFECB73344B4CB18FBCE6780517D0D2FE3B09551B39C433EE169D7A3F74C
+D15D79BEB5D42E4E85BDDE5CBA8D254FF22011E0E458AE95E6167556A286BC21
+6D217C536917125735A3E52B71C136775FC4FFD08747A960FA069E2A92731E56
+3DBD4F1809510007887A8AC62EC793EA0B0AC68047E8F0075D70CB461E50194B
+319FF3F63F6DCAD2377926717FCC249D94EA3FEB008F74A678B78364290DFDD5
+D557F95815799A88447BE2C9FC49F1568FECD8C46F95B60472A6D5B6152D80B2
+E812420B45D89456915A30984C90E1782E404C46E986F6305320DA40A3BF48DB
+4F3E9DF0406B48ED4B973C707AE6A6DB8F2DF4D31B0FC0EEA946E245234F9C5F
+553181AD20CF39A8BE532D35FFC849C9E5F6E719B3E35E63838895ABEC7D0545
+3C723430A08508308922AAE98CF42008A01D7EA10073D99EF71DED59ACA6408E
+BB8A85915F40B6DB0B0061DCA7A46375BEB2E56552FAB992C7463AE0380D388A
+9157F6CCED86B0680D93919F33A13B656441E31E96218BB5441F36BBC8CD8329
+28179A1A79A2C5AC246AE1D3D1972F0C4EC1617656C02DEA551E63EE06571B80
+1038AF7068344EDCCD7AEF83BD513D2C451E41C82138380091B73208E0A99C53
+38B55A415F9565C578BA6037B06AA6016577F1751D64C1F88BB95DA148C76301
+6C95FE08A2426368A298D73E5EFB738316E163FA9F8600490B4F2482DC737376
+CC175E1DFA11A079858870ED9F62AE641720C1C91839F4D37827D493DAD94E51
+0FF4B62F7ACE1E01B28A261FFD232B8B2B7732D1123295C5F92F01F29CD2DD32
+BB88C76379DB50D037C694F1D8C87A60C6E4E259589580F36197BCA9B4349CAE
+7A731A9593F17A53359C9455A3DA0758A0B673A6756780F6CB7DA25D93AB4E66
+076A0BFAB1E34F98508FF05E3582D730FB54852561170D8CDBEF5DC8C0E70D2F
+1E52AF61A666131882FFFE828EBEF961D5C8747A535F7CA25367AE2BDA892629
+D5F5118290C112AD41CDF88565C9FEE52EA7B9F9826D16D37E2C6F3AB32F91AD
+E9E2B0D6BA7C05263197BE2EF961EE9FEA489302C145D54F03CE180EA91DB85B
+7F4C5027D75306C291834E27F6097A4EF455A1A411C43857131B7F52D869B728
+0D6C7B46AA68E00704ABB95D7BA6E40ADD0B93B195F72F57CE080B4292A16AE4
+1EAF970508F398F1493D7F84FACFA581BE62E6ECB06FB47E9F39B35556FE8AEB
+5D45C61F77F9974ABF17786A96BA4DFAE03ECEEE022D8A1EED85971329ECBB55
+5D829690560CF40C8E6CA34227ACA5D890CF24C25F4A4BB9B6A6B7E990AAD272
+57B7DD0391F8284DD0DE28546829BD2153151D66A6FB5AC458B63C15CB01EE68
+38F8D5D3484C2DBEC38E3FC3E2A510C0B4B2334A471491091B2406BF6F8E43DA
+E1E689704CB9AAD604108FF6D05C075B54CE12564D1817A5D4CF6E79AFEB3C4E
+C46E9D400895C6C0DA82F67B2D2940387081C334943F15F4667F9EFC4CD5F555
+FEC285697CD9CA5E14963AEEC7FF228434316AF56F9866A80424EF07FA4A2457
+F3B6DFDE70DD3B263D61B8C84F626B0E1E8D4F365B2DC1BAC58A082A8E15FCBF
+5C96D0E232CD3F0185AB07E68D9F1A016B923CE91EE21C78CFBA9BCEA358CDEE
+B46E5B9FB34EF2F69FA141D8C3EA0E92480C47C2A6072A6737FF0F2AB65B2412
+DD9F795FB0E35A9D3DC9888D2973D15D584959C2231860F151C3A7E35C7883DF
+E338EEA241B15447F2243D17B688FAD8591B27C72845236F0435CE1F4470C88A
+C15F331E3D2A44F041D787F841CC27244F31A4C88C7D41C750B4BDD8DD8F0F2B
+FAF1F196B0FD86D9BA2CEE99E37D9CC1C4C160B22C6FEF4D795EEDD06F4F0D14
+DAE1D7F5CF0307492F0A41A8F91F6B11C48160F40D24A2CD9FF2AA08CC24CE6B
+8DEA85B667204B8887B0D545EC89F02D21433CBC99E2DB036CA690F8D4958358
+5E9A92C52C75B390DC5D4AE6D45876A5A35844AD4EB03896F35FB7C9ED3CFF13
+D1EE84E5FE2C022E8468CEB011C0AFA57362EDBB3DFE1586CE6035404DF0D530
+D08797C9A4FCE0EA5F26654D45B10C6BF220125EF30C6F2AFE1718FD67BD04D7
+6949B2915D2044B4BB3FBEB963F216CB60DED61AED1A62490638908DC4D8FE89
+8031791840FFB2C5C20C09858663
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMSL10
+%!PS-AdobeFont-1.1: CMSL10 1.0
+%%CreationDate: 1991 Aug 20 16:40:20
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSL10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -9.46 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSL10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-62 -250 1123 750}readonly def
+/UniqueID 5000798 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142
+08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C
+30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF
+C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A
+BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78
+5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D
+43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1
+374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23
+DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4
+B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83
+63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B
+89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A
+5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2
+C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5
+7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B
+EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850
+4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5
+7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40
+30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9
+2E080C10DE923C1E45EC0B7D763D80C9543651FADF6389C92EF4A113933BFB4C
+E6389AECCE95D0D45DBAACC7BA5803A0DE87416F940F8F3BD1EF3B9C8A6727D9
+B5E8C867C3E03C91579A8CB58729B9B1B0C5257DF76B3AFF6ECBF96C615F921B
+1D30CBCD71033C4BFFD8BFC2A9E626CA24F62902AFFDF922022A2F59EB8326C5
+C2E5C34DC1FFDB588254CDE857AF699004F26F694105CE4533D65C90FBB6C726
+A67CB28D1494A6B4C1F7A2C1E18187E21CE23855211295A200FB4544DA7DBDFC
+7069FCB658A8B6BF016A7B25402EBC7FD5D5ACB4FFB029E0935283A8DD569E31
+F897A6CD94075335E4D7A456B8865A37206971472B3A0FFBF0B58AC6CE29AFE2
+C19B9628F1BE03D1DFA46E8B87AB533195931997D584CE8B80DBD4BD273E0AFE
+4BAD797F028065B4F5B091EEEA6A8CE012B9D2378CB05FD521DD7F31E66F6E7C
+564EDD55390F7A91FE973FB1992C6249D38694CED5774FC3A73F314AA28754F8
+D29A098472DD9DEE1A01EE839D45634B330A82BF3A23FA5D62D44471C69F3F08
+10A984475125BD1D66D25FFF3F23A28F34EBDBE4D7E9D8DAB6AAC9821EE8BD3E
+F249BD0B1DF458D69640F4A7DFDC9D4CF3D277A9D2173357C60FDA0AAA18FA08
+A27B767EBA731E81CEE8290E81A4BB70B38EE6AAA72D82183EA6049D777C71CD
+736AD721C58B6B3B621B64A833E4BCF0004721078834098BE74AA81613088D73
+CCC3F95ED1F4E4ACEC672E58EDD03362FAE451E2FB86265D92C51CFA00CD0E9F
+47D507CE95B0F727FF03F6F135B074E3CC93526D1E2081BA80314662DB8D1FD8
+8C5682A0953E11EE77BB35794EB49A733CC8D276C2628F4590DF05FF02571820
+CDBC6A249A3D687B46A0C1E63A27EDF0A955C6391F27D4B6717CC8CCFBE94F88
+A9A771D803F3D42946639B94F1D474A6FBC4F858D4AB6AE1F20C3C88445A0246
+44730F8C5BC4D87A90C2F0E083CED05B7FB5B30ECDF5211905A717E38E43506B
+BE252828D99B9350D099D6A26A23FFE83406FB18B7D78AA0AF99CA16A5FB12E1
+BC80391642832D374D6965E50621D418303FD0F833F7DE4050D577B0C96EE3C1
+5A990FB4F70494D1FEB699BFFB6C628C01DE7EE9BD2331B8F64C8ADC939106D3
+348621769CAF4D039E459F8F7CEBECB590694E5DBE75F0D156CCE899C94E55D9
+CB0CF9F6333269672DBA1A809053F3215B91F06986C0DDE941BEDFF69369091E
+8E0922066052386DA36811B904AB9DF630828D7F65D1335D79636CFB06DD3A70
+AC088B84406B00DC788E2E7FA5F7682FF7A543F527D6BAF81A26D456DF2B5B4D
+E2A75185B30BD85E59971F46BF27A44BF1ADCB6BE609BB9579D5581B792449DE
+675C335CF1C3C972EC18E9FA358E34EEF495C70403410B4C1B9B1D33689D8449
+5C6B4C8C54CFE29972ECA55910705D9E5C438B23C69FE8696403B7D3C435C0D3
+E7361633204D3DC13C1BB86B0E3C5B44FEF02B5E4220734DE3853C519B3224EB
+52999C702596F2EE11B1461624540345D0A19484729CD373CBA2262D6E2B856B
+08F83BBAF6E4E8D8FCBAE69D600DC69E353AC4A0AA968E975A4869B3D3FD1BF4
+0C0FA31E59D3DF0D0B750757FA264739EE21C1E17B7784CD681848E94A73456F
+7C530E144AAA2D227DC7EC8FBE9516E848E9E7436C8F2641CCA71D44D123E0C6
+064A0B8D5740F4610F9E04C9F838F54AA620017AF2DE291E8D9B0549CAA81847
+B32ADEBBCC91D107D9BDC7E476647C5C8716C1B74351C3D7B898386320743045
+515B4E027EEA7C5CDD92E5A5EF14D1DEA1923A6AF8D4EE2D568FCAD873287D48
+E7CC131981D027EC61635E864C9CC9EB41B364CFDA4CFCCC555810B49A6C1474
+DF7E0FA0A26E1CD9FA6B267C19698F4B320771D23DB65236F6283D9EF36FA1E4
+17C8B63105CD03DCFBD53934CB60BD54785B97F7196DDB33D1255E95792DA6D0
+774A39D60D12E24A25D87E0E5DE56AC8434B2ADBF921C14B4DBCF05120FBB1D2
+D7C27DB586F7416A9806AADDA2C3E8C35D90A85A3CB33BAB01286EACCAB8F5E7
+9AE82967BEC550CAEAC4EE4DDA0BB2849C88CD3E385F76EDD743E190077DF36C
+35FC5EAF0FE0BEB51B9E96C084F9837904EA6C6505011085039CA3F8F320802B
+7849333A6648A4A0501E8235B7FE22BEB7FD0E18169DDAE21302D41274FEA66F
+34F76C871479EB56BDFE2C4C392CEABB9338DC7B646B2A9450E1C5F4695870DF
+8DE484D364DECB01543FEA2DB4B3F920DDF473A8B0F1D74FAF5D7B727695D136
+ED2D164F50BE82FD5C2834DA827A78AD2296BBA19AF205F20D2FE7F1901E2FAE
+4F88858047394DB859B89FC9439EF9D6472A636D29FD537D0C03321754BEB67F
+B8BB1CE6A0C67819CE678C053279D3E3B7907034F7AA864486E08A1EC58BA760
+9D580805904BEECBCE53CFD3F5AC8DCF0BDECE30B55C4CC2E2AD194DF84E26A7
+2CD62EA8AEBEE8D3AC2BBA9C80ABA771162440CBD96026469E0CD15D239369CE
+A6E71FD89CC58AB2D0B9442E5C4EB8FAD6DDA534C8007721730ACBAC8776EC91
+3D5176A6951234BD40C7BF5A9EB6D742D59905910BCC2DDAA02F6736882E3591
+C3EA87EDC929AE2C7715D8A8C883D1C103FF115D636CA8C511805985332D5A91
+3870FBC16CD5D0D3ACCB414FAD2C464BECB6D077B59AA46BAB6E42F9A0766613
+FAF20E2B223B9046B4C95BEA66EF1D37F4F30E9DCC88D2DA27240DCBAF587890
+B076985C86EE40F900C0243EDC0AE74384BF8E038659514DECC40148A71CDD1E
+A0FB4C2281FA40F497FAC4BD5DDB3DA4F72AFAF7DD63F597EDC93829410CE362
+958775C70D83179565EAF3C2A8FE3D593C41A6A60C78231289689703A28DB625
+CD8BA6D34D0D21512279F308B09BAE7D09A6915B8D2470BD3C92FEFDA360ADD4
+998DE22C5A8EE6A9174928B337BC4154FE185EAEA6D073AC65B0A87D9CA9CF48
+D990E84DF5EE641B09DCE79221720A6F88962B52573B4B3ADD3AF29394396FE3
+0FE72A5C3EB21A3F57DCB05D870D47E62E36C1EE86B4873DF1576FF9267BE163
+FC8AFC3B17E4C540CF78C02A93C2831CEC7157DF1E52F32429DEAAF5B4FD63C2
+BE2DC6D9F04F586DA7F8BD877157DF58F2A96A67063CFE69EE11EBC80481DD59
+5D27B785BD2BDA34E761B7A186FD2575F5097FE4EA5A6EFD0B8217A37514B991
+017D080672647D13C0994D43268612D3B295234901EE176EFBEEF7BA971354BD
+A727E2EDEB7DF8B47DF726CB664594072F15A61BC9AB3FFB9F7E37BAD66EE3E4
+FAFDCFB90C3ABC16068081D63D0225CDD260948D872B0AF83E56AFDF9280B3A7
+1BFB48783424CC9E46A3531F565B524FC6D1597E62B71423DD71C31DFC096435
+24D52B1768AFB2BE10F0D5A3C55F2F19B31BC71CB84AEF323560994DBC10AAC3
+75F08093A710C518DD62842AC81ED3569DE5738D9EDCE2E111F5A9D66752A736
+DFA4E01B07DA6B1C7CF239E5244103A6DB79F6C3AB925171BF050082A81307EE
+E8BE84BDD97B1F4103D39E7E0F338634BDC86CF3885B9BCE0313816E96838484
+0767E5FBB55E86341FED70BA3185EFDB678F892DB727E0FF9D04AAF0B27C6432
+6F4C4E7192F8BB47917CA209E8809AC4AA83B7C287B39A7021B4E8320D25033F
+7999611F9E6156ABE9DE212E400229C7A4B2FEDB7529B1FCC7033D3095BDAECA
+686CC7A62409EF443D655741758479E0BB1EFDA0C1DF1F83129F063E4A906BD6
+79D4DCE5411C1C443062ED4B7E2916EFE5A0A0A761B99838367703BB0F70CAB3
+E304D2195CE2BC3092D108CA6D292528FED6BCB5053F4B28228EB785F79A5CB6
+295A630E9DCCCEB35FD287E9D598D0B668F28C2FCC98F4DB8DDA05852AF74181
+6CD518C40EEE78EAECB87A55CF8840FDEF36EABBEB8835255EF45EABEBD0B8CE
+1EC4390462CF55DA7A405DAC2AAB45D41B404D1E98B3BF205C15AB1A59DF0144
+E7C1F93C2CA249511A66034F834FBC1A72336AD0F83A76B0B25794F8F93695DB
+8D960AD71CA09FDF7D8BBFEA279F259418F10057B74C8CFC42E877D97EBB3387
+88ECAD938E6FF0EEAB87DDD4E365427E35DC352C30C88934F78007044385BF12
+75005729083A31BE7D56F5576AE3833029C5FD9ABA0DF583E575588BFA11E2C7
+5FB9B23AF8A6B3E789809475E9E4C1181ED9B5ED7966B976310DFF8531B822EF
+367674E5F5C83AD775B119C75E8CE9A7E6185CD0C350FA0D17661C133083A9B1
+2F8897CECC9D8A4B896FE10CDBD6DA30F598951228D427D77653746B5F70ADD7
+2C0D9919E48AEC1053ECC0203AD886E090803D4347F19032927BEDCC10342A96
+7FBC644B99837182212405D3E87658062E564E350BA2DD7311719C6CA9F230A6
+9105283D1AD5D13434BCE3232DAA488E8B2D99C5E270D6D2CE21FA0E17DF63CC
+32AA3147E7C1DB635066F4341613EF6BA1F1E88A68AE7F33070DE49C04F82DFB
+F32472E8B1EEDF0186CCEE5E8A8B3D64B996FE6B28DAD70005CEEE312B6AD9E9
+FF3562E4664547A9279078593484FEFD756A8BE37DFEDAAAA2E6D1E47EFD6C83
+00FFCC6F463B914113CE3B4F0440DB923E47605C606C1CB80631B908B3D97BD2
+2DA5A13F6642BDFACD245FC12938D78C086DBECD0B576D99151FB277ABB709CA
+4EAC92B612250401A3981003AEAF057C566E3344CDB0324B706FBD44FA33CC59
+6CF71D05B082EE0EB0EE0387EDF30E2080FCCEB351BBAC634BC2999FE94CD191
+3582F084EBEFFAA13DFD9544E6498D15B7A2F420875B2BF50AA293313BACD87B
+1FF73E16F50ADB50232A8FD537E24EE956A8FCCFC2D533C47E95C49BA0C3C01D
+2D6C57D455E83BC768EB984E9E5C7293867E2FF9145C09F4614449A74967CA72
+54BB6CE1663ECCBC6B362D1FA39061A53BFAB33259836CFEA813D893EEE72DE7
+534BD2795249F492A1B3B4659254BD4E8FF63502B0B4D0A3FD91A26127B02002
+6A0CB9311B6A9F002CCA6FF47C0EB57E646872DB4DE98EEB1A512DD3D7D61322
+53242F4D61BCFA210BC714AF89D3454EE1E71FA915B0E7685B9EBA6A255D994F
+98A54E6E4A5A11E37B244A6EFD42377318C9306F66B4719EF2ACCFB1BE8AE2B9
+38BAEC8C66087647FF6EA21E57CAD6E5F07A7B841DF6A54B07838A42A643FA74
+6B7603876CE42097CB5F3ABA83E90F9E8CC660502F304042177587266600C8D8
+0C97C4E68F4B31EB586893D3BE8208472B69FAA8424164356261B027F894238E
+C848F252C6C4ACAAD250138F7C4D8CF462B7FDDA0DD119134ACEADE8EF6C485D
+281F8F1C8BE7BF730F95A97BF5CDB6D4FC46DD273417C3C4F8118152BBD25781
+02C467504345C4313932EF9367DD8A639E149307BDADE6EBC2DB7D8AB794E858
+12D0FC8B103E1AEAD9D01C8272481A45DE464864C6CE500E769A0D4B1589B755
+A478DBDB2CDF70D6A1BD9498FBD435F8133FBCE702D708268B101DA1407E7CED
+6456C5E958091C19C562AB3429B46EB9293DFFBCFA57F333172042C518446238
+91192C5378B3370324192B2E6938D16D57FCE13642B31749A78938D4FD6CBD83
+7504286BACAC0B4688F425E5F6BA0534517FF93461F55550726394310B728D4F
+E718F22DAB0C1A4C72318A167FEEB088668FE8E63DBCAC774A4485581B745A0A
+A62A3AFDC241DA276AC37948368BAA8C6A73C0463016E0931F2A49550FE14FC0
+A9445CAE2BF8E8A0759515959E4E821989A96E260F8FA3BFA9707B177B4F6D1A
+3087D9C45CA603E5EEA0FC89D251C8C1B20F93979685B05B6A8D284821D8EA58
+83FB334F6D54C57F8AC7F1CE52CC228354E655FD2BF64631328B940036ACEA18
+DC6A3671688859E666B4569787E6BE9A6998ED8DA360CCECA6FA556F4BFB88F3
+2E9A023EC3B837C03120BDA5F2B1FB6BAEDA67216FFEA6FCC9F7A2359122D361
+FDF89EE24CD742992D9FBA2CBE682FCC84BB77A2115A1096CC8B1BF6B1CA3173
+33BCCB14061FB1B19FB7A63D7075BCA393E300FCF51F5E4E61F91320BCB1B70F
+4A3C8330D2677B373BBB7E5FE6D7C116C85C2F80F1C8FD830C33F2EF9827F2BC
+95A23CE89D2605B4B488820FF3CA01FAEB701C08A66772E63E9D1AB24EC1BD6E
+A95578A114D27C236480B4A3D081D0FDCA448064D1DEC6A69C1CB1587214C498
+1F8B25C9BC9BA5BFDD11104B9B10512E01E999230637943FF4EE2588EF31F711
+123BC5FE9D0F8B685699808459FA75E2B070504FB8F751920133696FF3DD2BAC
+3C69294FC2F17C1ED7A09715E4CDF1A400640CB152F4DFAB82D46D9C73846505
+6503CA88C82B449FC8498E94F59E7FF96BEE75D7FA070087E9D2E5AFE9632ECA
+F4B42D02FD09B4F5641A3CE6FFA057614BE30BA69003ADAD5DDF69E149213440
+C33178362BAA1B7D96B614518E5CFF521C4950C137A8177D0D5AB5CCB41CE908
+D6EDC2C703DF3AE17FD94533387E15D7D00D6F0781CA95AA345515E1E9C186EC
+38719F222D77F58ECA30EC071895CBC372964B9A658F3B2A6871B8CB0E88E598
+A0A07B0A2D70C04DCDA0DEB9F5412535780C89724DE516AA92BC2D70D95351FF
+319F58FEDFBF16738EBC3A181D572560B8F4F9E9C24031D30A80128564EB399F
+A41FA31B6EC7C53301FDD0D071901CC84BDF227F4C49A0A8F40B468982F63155
+C186070C4D8633BF90338456FD89DEDC76F17386AAFFBA0EE1DF410BD81EFC21
+F8DA25B5B7099BE1FFB47CD2DFB9BE864B78C055ADE72F79EDDE2CD76D6BFB44
+9F60CD307D74FF3C0769226A2E101F0E07035F833DCFCE27E08203C1B536F195
+AE7E168DF0F985F738F65FB07C869A3F910E5E933B906B93D0F1231A616F5B93
+B32F1BC18447DAECB6D81EE786D682ADD6392601CFC399A3C9F3DAA2BBB31C25
+1CBEEE8413274C58D09AB617B6CEC570F0DE316EFD331685FB5F4BEF4174FB2C
+70DD36A82A47BD7B9D37FE5ED95DE4B4E83859CFCA8E40ECE618343D85880613
+FD6F623A99C6BB0FBDBE03EEFE9FB5B1F0537B6E15B039970EEB35DDF8C0CABA
+C1BDE150775B68BCCCD34A46A27B9E4727C6E48BFC6E52275F4EB63AC30B7910
+32BA9897FEED0C4E996DB26A00489128EC4766906BF826DEA02E8C72A6C70DEB
+A95B497F58760D81BC80186DFE013061613CF676D96BB3E570887914D00245D7
+288D2AA609B6A635DACE6A003CD5C0F481A14483F131D100AFC2737FD5CE954E
+969C8FC0B9E1FF885E9DFB35A5FB68E98641836F98A6582E1FC412B1BA20
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueID 5000832 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
+38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
+D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
+EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
+A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
+F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
+4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
+6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
+A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
+E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
+1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
+452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
+8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
+5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
+DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
+BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
+741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
+E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
+E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
+D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
+C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
+FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B
+984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876D88C8C097384
+46D8D7E41CA1A8979F9B07EC3337E70CBBE3A377235B04C79BBBDB66CE1C1A41
+89DAB7CE91F2FC0CAF6DDAD09992D56F72299068192610EE3DE5DB7CF6366B4C
+D74F414484DCCDBA449BFAADA39D0F27574E604E31CB513B18E3821A33076151
+C2BCB6E957C77A0AECA48C587ABB5E8C7624D56B32F80BBCFDC874AAD6EA5119
+C9B06886F08CC7DE5400E0F52B07483FD4BAF26C1556CA27B259F845681D61D0
+2D28B185C9F052844D9A5F91CF19210CBFB21B55CDC8C684448E9B5A1D249E15
+56632979760E2CC7075DF794E06EAC2C8E770828837AEBDFF1A5EAE67338CA7D
+F0A477DA679EAC876B6E0F0300ED4D9097E654F197198FD861ECAD138AD5B484
+A28E3CFBEB4CA387F488BDA739EBD767BA225E1E0E7CF5D75C85B4DE5437481B
+011B4B5C9590CB8309079CDE324CE4C2EBC40CD2A6B6F20AF0CA05B89586EB58
+4210AED367DCB3FC3A5845CC77126DF2DAEA475CCB4D94EA9CDFEBFAB137AB61
+D03EE9555BA9C6065EF9ADD376F6ED4971D546608D763570B9ABD3F692D505A6
+49543687AB7A8CD379693F71C6C859796B12E9C834E18DB0FC0063D502AEF1F6
+F5324EBC13AB3FEB378BBF9BA3A9CA9F2DC6C03E2D2102C5F245242F736450A3
+2BDC1E924E1C6F28DDFC3900CDEFC793B94EAFBAB1D8974A95B424C6F9D71EE6
+AB1414BEC47E836BEEAE29C8AA3A1BB09067CBABDE9701D65075D75A43BE26D2
+B0153E6EA2226BDCC9DD52FC8ACD2437BFFA60C48B558A3481CF70EB9B4810DD
+9DDC306C60835972912D1C8B91E37BFBA6D073403B7112D28DAFF0C7EC8C5AEF
+2222EBFA58B67472EBF5CE8986EE3681AB1CA8D16D9A2D6E64C3EA177A19D756
+655231063A387F1BC3EA15A1670867D9025A82421D1DAE6A674D9909398E1199
+49738C66FFDF170D54A748C8F10E22CFF8F0AB6B0C6EE870B589D3E3D9E548FE
+405D01D18D8D883151034AB0973A3E52B2394C2DB707DFBFB26BB937B4F16FEE
+5FD39DCBF8FF3B1A6258B0860829C1923ED50520680FC6AA3409F9BCC0E571A6
+9F9EE2C2838982303318BA603014762E1354039D59AA3A0D6B503AD545050663
+7BF58018253C2E99CBD1868FE34CD15C0F9ACC04AE1DCFA5B0ECFC5DF9D80D15
+4FE32A9AE6E9F87C93076E82523007C23212A8260C8BD482C7D23E30FEF4ACF5
+9A4B94EBF83A4F1B6DB41CDB54EC245E1EC5C4140CB4584F7B6056CE06000501
+FE9C79C1020C6A9EA3FA140CF0B55AFA82F6212024919EF66F56906D41A3B519
+0EFB17D31126A88C873DB1B7A25DC4F296C85F3047F9A9511CC4B32A3789D505
+9A3ECA5740856373192BD49BCA63C46B7DBC002AEBC4F2484BF5DBAC1F9BA370
+670049AB6F2E3AA634257257D168D8082D71B7665CB1890E68521CC7D2116F05
+21B3F4DB70C46070366D3EB6FC298C99DC41E03592BE2EC8AD4FEC813EDA5A18
+6EEB8E07EE584D6DF1F16EE21E6781D640040E2F3D71F9C58F4D0E9A3A34447D
+2E408FF2D02FFEDD33B4ACD8ABFBA9B66373D00B05168B4CAE9A6D8C91B7BD7F
+AE12BEC836733B44F11C516FE27E76190339CF63132727F9B89BC7D6599AA439
+3FEECD1BF36B7656F61A8E29ACB878D911F7A71E5A901BE5AC2F3690271321F5
+F449605B69B0468043A9EBE20CE4A863CCC0B8E283CFE6A3DFAA157D4A82327A
+E2608D0CE94322C23359177DCD061CB606F0961355C418B76B8464FE1B67BA9A
+76FBADDEFD86B2FC6787265104A6015D351CD7F90FF07960959715995DC1C933
+0F25B64AF8ADC5B11FC9647021D1E6DC9FF8E31D6CC6BCDB299A8F2D55DDF895
+1FB07798DA62848ECCA0A1D1B25D4A0A9BFB3AA76981EEE6C9195D9EAF6788D9
+0DC2DBC0F26CE50D9A610D168EE7BEEF19DDC6C9DE03E6F8C479148F0A383BD6
+546B6E91DB135DFDB5BDA10DDBA1800461CB74D777FE7ACF982157DB92A03236
+DC0ECB3E0E18BE59EE8C643D6B9B93E3E2CDA858A9AB0CC8D11B640B8AF4F85F
+8676E8F2AE9BC9203AE0A7BBA69560FEE8C0BECEF7287B0FC459BE49114632C2
+48E7C5E7F6F0D8B05C4C73A1458773B98C53CA1DA273D4BA5D4B3EC7C0A9A268
+55A040631EACDD42E957B42C0F16397179DE1EDB4306501F994B95D8906BB961
+884AC16DB6DE37FABF47FEBAB1889B5969298A4CE1883ABA08D185782BF7E358
+245D7446F7B7D39D4700D388D7552C77CF611AC3F03F1ED5BC00D83EA9B4B873
+05795A8D6429FEF89F51095B7E7DBD1A786024013CA226272D4EC78EC535575E
+14BBDF50E7EBFDC0BF0F8EED69D7C3D5F1D7BE8E1A769B3824EFD5098711B136
+1D09D7C22894430E0E3502BE930F9537738BACBE94F0803A55113297AE1EFAF0
+73287BC008475F9D80852C34564E3E8D8B13A3CC9CC9EAC19C70C907A3C16D07
+93310AB5CF482DCCFC02095BCF401A447EA5539DFB2C1B41A176791A7BAD7270
+C36A9A58102FAA407217960BDD5C8DDE58EFB1F270F511A93812E932CB812FDB
+2A4EFB93F90C29A8A2195FD4D219108BD7B5B08B7FB3D1BF98A8588537E88CAC
+5196388E84219061DF0238DD44F0457C0A56DF926A1F0E7A702BD7DC296F7A9C
+3B5445C38E1ACA49DD56A305F4EA99F110BB19E1AB584413913A36B64400AF52
+F753FD399165717D843F67640CDEAAE00E02BBA23E92B36C6CDF9C31B2A9FE6B
+1F44E26ED3890E41A380A3FF31F75F3829911955F95272427FCB7ED6F9E0B6DB
+A82C21D2E38A5693652ECBD1E93E44A00E730A5C0F9480D46C012FCA9319225A
+123D865C801DCF29A27AA4BB9997DD56D94B45EC376FAA0AFE593EE3621EFBE8
+1496D9E0444C70752C44876E1EAF456C7232FA1635F62414CE4C5898439723DB
+9DC782CEAFA03FE41BC9EBB023A739A7E587E3B8CF64B8BA49677F54743A22D8
+F44AA72319C81EC45BE9924AFA4F435C79640D1BC4DAE1D43C228F8090594808
+6AF5ED36281008A49D1B259F8E34A26B7B98A6C1D6B33A529AB844CAE4A91C58
+4D2C8131A2A8636A494391783DFB5E8462772146EA33790B0332EF0AFA1875C0
+FF76F48FE3F1FC3A474B48B6816A1438672A670CA68DC45F9302656DF972607C
+7A94001AD25ACF95A68480D893CE5F98559455CD63A26DD65BFAFE6998A41482
+F27BF0F09FAA54602E70B6C2D0C3AF11EAE02B6C9A855F63D0688504C71F146C
+9470695028D98A268F5A49ACCE9767E47988A9360D6628434A9DB0406BD31BB3
+55476B7F5D42D0E70E242D1359AB078C8ED3A06AE6CBFB72F15547EA6E0139EE
+6712C2A93549116867CE43A9DFC048900FE20878E36159E41FD6E5E75D1C426A
+09ED02B1666CB47B6C124B003DD8AA5D1D51AF3DF6529A2F4540E7F4384A1114
+0B38D48DFA5F7FEE6FA00FB8AF2A4E4646C1D0D819152DA147B895E57E584474
+86B6921A5D22A16EE5F5B737B660DF7968BA456E5EBEF34270A19964B40429F4
+16083B93233C17E78A5976E8F673523DB86F253CCAEEDEB8FC70768881121540
+16705583769033CDDB1DE142C8D117BF2D817A24C84CDF3451937658A92B5F49
+6E3BD4C91C94C13AC8213AE3F20A6524C675C34FE2317E0F0DACB97080A04634
+721978D1C0C3B9F087FAEAB8DEF57FD1B0FACAC1BE30FD1F7652F491104D5BCA
+6D79285DE55CFE3B27B939A0414EAC360953CA32FCE7BAEE4976AD39CC7AEBF5
+58F9850500497A31C70C16BCBBB56CC418A93EAB6060D5A80C65728FB2CECEBE
+2FC02F4981AC1649733F2469BBA51DC2CD078955E3E14DA9CFAB5C3121564F3D
+33293B93F015A7A23CA470539BB15931E427666BAB3B3EFDF1F7C91ED9027628
+A313E06A021DCB73A192691C810F6FE1DBB9306302632CACFCAB07F1FF911F62
+4DB2ECEADAA3FB343B07BE4BB0EBB3EE66615433BA4B4A4F8B6C77279C0125DE
+9E9A6E78728D05A1B1DD2B84405AE9E0A8D9B48F98C1524AF5AF004FB323CAFA
+572C80F2AE60A3C109623E05C62208DCD91EF74D6216C4BCD1C2C7ADC592B0C0
+44A372CC4094481C30AB534237CCECF417CA529987B4DF62FDF0B99D4D0268AF
+EFCC1DEB65582D49B17EA94B936F78D2337D1FDB666AF779A3D799B387FC3CC0
+074F981DDD0F8DCFB7D8163B6B13C5A0D93240B7277E97E6E97693F4C8F07E23
+29F893C2E350611D25DFD1B6511AED3B34625BCD4ED830CD6BC5E1CBAACDA7BF
+7B30419C9ECF6B19D9B9D38483DAFBD5726CF73AA8E1EE0E28F530115E7C87D6
+0DE4734946B992A1CB10411B9C8672EE7CD9654ADC9D471EAC5203357F521F76
+F5DF604AE47CACC8AB4C6BAD6D33164CD1435D2C3286FDC33C0B382CCD5A65A3
+7A6772A974E4BF1810A1E7EB625D43CCF3D79A2CDEABBBED3E03A39FACF792A1
+B3C606B9A9BE04F46872E1FF7B189EED094E5B772719E6C9F1B35ACF8C86ABB7
+14F8A3B6BC29EBADB1DC4628F52CC28B69F2E93849E19CFF6BF9083E7946F27D
+813B46BCDB237FCF770C085F2667857ED77714DB10C12A2603B784BA9EDCC76F
+6D78A6EF5755CD6124AB838BC30A617B5A70CC56B60AFC9835F953955DB4E9AF
+36577B0F06133A24F1014E9EFAD6B3C61A6B5DFCB261168F0CC3672AE0BC7DC1
+52400D7DB600F6874711027A43504F50DB6640BAC057F66E5CED2930424E12FC
+5E7C06AF7B6CB754DA19F228D8D7FCD42CE7736BA4031ED7CE66A9A7E2F63C4D
+06E81545538914AC860C96EDF5575D97138995D710EB3C3455A45B37EF9ED205
+E62DC5B97CA06C85F68A2BB997220ACEDD7C5663CC5046BA35D9EFDF89321A3B
+15DB5E266FC6B718F749BF053219024F142AB08ABB4B5CA4FC46F0BE33FEBD49
+1CAF4D4D88705BF8104364A3747C22C0F534E7FE185C6344F57860BA6F30F26D
+54B8220576A16150AF93397D065010F51FCFCA9F25B299AF585117047B83A2B1
+8DA384798970A750EB9A0D48E234D1ED0CBD2881A6DE1F30E9F65B98C489632B
+CFB54D7B4B6C66A3DD42BD361CAD9ECE48881D740BD04F895F746D3CF067EFE7
+6F32C41EC405C6755569AB3181E43277CEFCB1D1D0BF0A47AF276E1A5358D129
+3DA5EEB617EC5F047F8C702A7DC2C6F5833E1F474AEE2DCDBD997A81587E091C
+D8F9E9F7B37FB0637D46DB8851CD09B9BE943E24C8F084A864DC105BD482390F
+0C2AC99FC5E0B80C975CAE19E743C3313FE308266B9F716AD419DBED3AC32FFD
+261D5B8B781946BB3F740217BA45D88F0A421CF0CF3F62EF0F9F8D7BA064EA3A
+0B7707568B9E735F30E11C29370522F3233268211479A46F8155A90F4726927D
+D3A3D83A21E090B8F6F7FF784D9C385E8D15DE80C3CC596027679C26C703A527
+A445C32971CBCF21E9F86CBBEE4F7C3F16CEA170DDBB8A9B6C14F4FCC47E7BA6
+A8E42A8FB6A528276A8CE9924177376AE430EB4239A0200EA3BEC776ACA8363F
+6620FDA2B6F92108B349C8C044BD39C360134BD2A269E3449137442FA1817847
+CFABF3160717650B9AEA0437157651249D7E2F2AD4D02611C3E46270FBFE4A9E
+9A36E4BA1B4D78CF662B74AB38127DED2814251720ABF916A18887FA66F26994
+2AF2EABEEAE826CFD438D37ED72CACCF978CD0CF59E18CCC0900C377CCE06BA8
+123F4959D8674334160A7CB516B608D6477955FD8E8EE0159342378EA68A6275
+81B6810503605F81227CFBC99B2EE5B3B6AFD0B12742A12DD7D0A31F1CABD722
+E24903FF815E01A681335D70D5B8ADFCA363411DC101DDF53E6EED56E6C5A3CB
+A2B0914A2E47A9677A0A5D0B3109AF55A823EDAA6A568BC2826534ED563D549F
+DD4E4F578F3E46B74064E9B710D324965EB68812BECF707ABDE547995B48B5DF
+16FE03BCE8128529602FFDCA6055FAF3B604DCB4A0D3F7692237837BD8ADCC08
+722CCC3D26D648740838C5E05834089B3CFA5B0AAD446F416D8B5B0B448D17B4
+2C3ED886647BE375BB21C4235FFC39968B835A1104BFF01642F08C059988C2DF
+D780994E379DE7CB7E8DD5923B5DBDFDAC249E10D1C570AA2B295C145DA331AC
+8F5A9266044FD85250CB703C9F51D77A48BC34BBBFED37C8A2BF3BAEEAE61B00
+53AD07EA0D7C9D16F745BC9FEC8C28A048FEBBD89BC50D26846BF0C33496BDD0
+C9F4F453FB7F4B963964A342C9DF7649AE7B8DFC525E05FEE7BA8D8BFB7D3705
+B2290D51FD5E45CFABB28F6335FE47125A9D9938DD0894F5B7EA224CE04FFE56
+81CD3B6C1D11163E91B47C85185EC13DFAB9C8F90D487A3C5F90746FD58F4556
+0F6E23709307E75FABF476DF7D8E58447056F9D4F87DD43C64327DA7A74177B8
+4C59C7E25D8EF13EC769E5FACB4A227D8D0FBABBAB5B35B9693E314C6BD805B8
+E626322570EBDDF24104B5EAF96F29E7D3191DED0E245E2F36E3C811B3AD89C3
+4501F20FF8CD2F55B68B21EAE312A2484441DA8CF84745F96A229562FE8C3394
+094A13602280D1B14F2610267832251909C75D440742C38E00F9825DDEC2C31C
+AF80EE42E75CA755AB7229073C694D2CF2536FDE08E19D02A32A80801DB87B75
+260CAB10F83796A963F624BB0BFC897727C43E4FFCB8A6CE5FCD9993EA2CB913
+DE5DE94DA9ACFBC9BC66BD4B642FAFF612D804BDFBAD470CAC2E6F29313E0FC1
+B30A319F3B5E57255B8C050863477E88317AE92889E87DA63D6650596BD55F09
+3C49EAF4035159037FA5CAB06C90DC70A415AADC0C0C596931FE391C13100105
+BBA0D04726A561B83E330D1F0FDBD53CE9FE901AE485117C0B1F1AB2BEBBA68F
+66965929CD0A61540D76696718F1C146B51671F2F42B9947FC9D380CF9CF5BE6
+E6AAFDDF9AE42FE10E49C97EEDD35C24EC1C35E217FD0AB2D78EA8E3758B31B0
+562937747411FD02105A77AD598F7DAFC4F125BCD5B8B3AD92BB47CAA5424A2D
+2DEEBFA8F09B5A1B303BA84392348ECDD98B52BAB49470C914CDD33079F094B5
+5D8D1F35FC5122E134D2476B1EAD5A35809D83A6DB7FE011069927943854BBF7
+85BA25D418A669B075530FB3D4212934C46BFC0C22AB20883AAD710EC22F4647
+0DF5AC66FF980CBB11F689FDCF37E8EFAE5CCBE81AD506419119BF80A544DBFB
+24983149DD58E10A4696007DCD06B6B09B1B3A3B01C98CEDD9E19258BF0158D3
+AE4CDA157E23930D86D54E8C187D338229B90507911084F18F2E98B22762650A
+372C591F1972078512BF9814269EED72570B98C7B8F59FCDCB3AB5D889F86A05
+5DF4A8CFE1711A3E5A880B546A6DE4B105A05299E111D4321BB7EC9CBFDFBB2C
+C55003EEB86E0AE25C748BADD6CCD47E392FCCD186FD98D978AF29EDD2CD0046
+4EF977188604469AE4C4FE0548721422428EF59C52E2235037A788C0EFAAA709
+62EEFD6D43D7CC92A0EB4E6C5366D93E3017DA415D2B785E384963D99803EB54
+C5EF81CC98E97EDC17A5AD312A114296A0FAE02CA973D77EAA4AA4603035C2A1
+289DE3B9299A9236716616D94A96207A43EC2810E011F12F870E51B2F4246BB4
+1EADFAF7CAB75ADD29D488CAD4CF93F4D156BB34D931127A42B450ABB03F8FBF
+1F167D4084078FC52801314CA4352A913556F5BDBA8ED21FC35D5AA0DEEA725A
+C7CBD7B1F6A019DCB44E5D01DB9F3E3FD13B061BFBA386A0DE320F50297DDE62
+1ED7C609E6DFC0AF71269D0B196D6A324D6B0F06E62F5F619CAD5780C2784235
+71C405CFE8A3DC7D0DB2434DD52123A56041FEC0524EF3D2D4244FD977E965FB
+B20E843FE6367B07E0F5C2D8EE33EF7D702EE36B0B4C6F67826F8B894632339F
+B3AEC46A8E9F1C10E079BD6745576582500E77AEC87F6515C0B1E5180B66EBC9
+F496852754AF655DF9F8A23AF6DC34A7D91C04BB385D7EA69785E531E4768CC1
+B9480A3D14033509AA89C6F684CDB58E9640C1585BBA92E4791D1D6BC261EB8A
+2F0AF7B7B049AC14362AFE6E0C84543A50ED0F6DBAB92705763B63305EE4013A
+169BDD419CC36EB5C54AC805275B1D3F94466A4198B07EA86C40470A2C213E6C
+82DDDF1C9A7CB3F9D2B5E044954B8ECA69D1CA9740F1D8D92E5520F33BD8FA09
+1B596E38500E80D5D7A7EA32A81D16CC83F31D3F0E8C6E707F6930994026A5B6
+DB3E55537D01E255F04B76083CAB6C82F5B0DDF21EEFF601FCEF44558DDAE2E5
+5E3ADEDF2BB1C8DD93FE250B1829369B5CCDAF908D35AD79D8E2013BAEC1597F
+AE020CCDFD6634BA07600D49F526120CA7698DE44F932EFCEB41E3463230C9A8
+488933C97EAADFDEEDF37E3217AD882030E3373433FBBFBF1A7A332CB93D965C
+5FFFA7F50AA595CB223384A7C65B0268D9A66B4D7B07FD8ADEC8A93B067015F9
+138E1D08341B44D305431D8A145F3ABB361D3272362F32CC451B4D6AF9D7C8AB
+C7BE31CA6919B5ECF7599653E9F7F0169FC3B77E7033DDDCD295E71B747627E4
+F8C1374C162AD302D6266C44557841C203E55EE9134EC853245B0DBB9CC1E882
+4641B51C6D25523C1CEE3EDAFEAD9546DE64887E0FAAF5652FAB6760ECFA30B9
+83FF7B2E96F6271BEAA0A27AB16EF99AEF54E4D223EF7488602095FF153698B4
+096F6A32C400A413A1F79319EB1BED6B96B809C2ED91FDB797B398A4348BC725
+E840B39819F8BB14C513F40911BD0217FB927F46314C512E5AC58FD0FB050F47
+05667F9966B4D49A3B3BE6C595B123C3E135E214B4A8BC1D4FEB2A0914799D8F
+899C07F644FE5237E7600FC2C9E56BBB4C7EBB57C8D35AB47E47D1ECBC9A5F7D
+DB0C03097F557841A90B96980A7ADC64DAAB5C9C983F269A7D68B382C571F90B
+10839A278D2B66144DD827F1483DEB9BED9D564C7417BBD74D38EC5A5F980FF7
+431ACAF8B1C25E97BD2E618563FEC54E6216D8C889375FD52843258B0A4FEAAD
+8C9FC3BC264DD2A0C5DA603E292A0D2AE2015840DE198C621F41B82C06496CD1
+20D66D5EB12AFB2D1EAE11DB7BBFB4D8D01C52D0554A4BED7E7A2775CC5ED363
+BDF308DBBBD0991FA473D67CB7402FE577E6E0FD36EDD49BB0F2D00500688595
+A73113B80D54BADC72706C2D25F4A4E57B14990AA77611F50F2E82DD0B6FEAA5
+A111C01F11E894AE310AF5A29489EE5E2D525BD56D000A28D1D9F3A06A829B89
+7A63793C9B9F548417CFD37511E60B53750CC474080BD2A1D6FB047A8E69FF96
+42BB69D6F537C873EFF26BD2AE730B5806E1A4CA34AEE509318C7B74AE905F23
+BB6B6614BE23AFE70CBFAEA5FABC5C552D62CDBB6DFA567E37B47CA5D58CDF9C
+11AF40E8683E1096AAAAF605BDF6DDCCCFB5ACCDE07A5ED05A3992D8B610A2FF
+84BF85CBDC72C4CB1C13F5B99E5B5382A96428FCE80FBD77F47745F902C4937F
+7F2372D562A8E0D21730727598310237FF8E0B5777F5468E651F39F9CC7AB803
+722494797C2690D07984496A8B01C344920CD0D69336AA9E22F66597AAB9DE36
+847E1408CEDB4EDEECEA5FE4DDE93599A73B7748D493BA5FACC4DEC1F3E041BC
+3434C05F9CEBAD4216351AD2B91D70A284EC0A3DAA64A21CEC0AF197679DB85D
+2C3E2850F92CBD675C60B5D7E98449234B7F055B88BB778AF8A6D087288EF249
+B218BC47F923F9678D1F59CF473C6BAE2517A7549AAEB683ACFAE239C6307DCF
+2F5F4441E66587158F3BD7F8CBCEBC98FB86AB6425DB3853C2D20892774D8EBA
+24E5C1BF43F1E7715AAB440060EB67358117DA2E50E94F236177E05138F31D09
+9123702425C088A2A9874766D9DE8F2A5BA85A50BE7F0E433586C17019344E7E
+AA21C3005A05EA097C9610C8CDA288966C124180A9C02229AE30CA07CD3D49F8
+7FE20D96966FBD8EB2FFCFFBD7186C530A171A959F658D99441F2220CE047ED6
+15872106A563F7D9A9EA96F63EEDF1D3BB72A0E25BF2CE11070261FFB7FB4D7C
+C75DF9E8B671D4C1A01D7F6E4B6F4BEE015FC5F9AC46DD5D1653115CB7820BD2
+DBF46CF8F4D1619BA29EC07988F5D368DC5B3EDE01B84AD865FFC678A8FE075D
+BAF67811FE825D3A45A7F672A3A870EBED0A901DC42D5D645A2C90E12E9EA244
+23E73E6D5FFFBC20E661DF6E014C064FBFEAA09D471F74D8506998CE7E30FD88
+AE5B2C3DA67F179E86CC30DF06945186A64CA9DAE60C36F6643A8C567439AB85
+489BBE34676CAC134777145ED15CC7893E96EF9A2599712F7FECF13EAB5F6FAC
+EE2CD519B3A2D70832C6A70A910C0BFACEE1685BF1D1F130D309A125B352DBFB
+743870849A56054C8C80E9AC9A4B8EA3F53F052A81CE02EB79A269DF90629D32
+1D0AA2B37C0D0EAA79E58E77394E2D2D13C0D89ED9B80A6D6986ADA0F66970BD
+B13DAC056B7C6CF640806733A0B5B3986FC6F7D5F256EDFF419EF0DFB8E96F87
+49F481EC14247B72DF51F08C8E7DB57F34C1E141E22BB7DC480DBFB4B496FE14
+D82A0E32F50668D5B523BEB8691568A434CA7F6FC74872FB41464B005FC97546
+C1D724862B4D377E35192C8A587821C108CAB632CDA4FFA7A6A432FD20776965
+494A2AAC1B2DE27CEACDC36DD8C24C50F94750DDF8F1513EE8B74F810A7F73E2
+17832B8C656A3002427FE13BB6652F8C560236522F827D6629DBF4A7DE91A7AB
+222BCA357F108E23708E166421AE339EE8D39BED32FE7F119EB29BA3D387FCC6
+A9E8BB446B93F30A61551EAF41D2691AC64051AF9C62B5CA634F292971B2A52F
+DCA6631A785B5B8FE4315565128E4355718B13EAD903BE849C49870222DE6CB6
+DBDC2ED4FCF3213B6AD2123DADA51C5370B292DFF210D48DFDD0F177EDF5F4DE
+BC815FF64ECE48DAC060CE24CB4FF4DE718313F8F5D7471FF457062943E81E48
+DA5BDB0EA68654CDF60CD24909AB0C28D794D16C29D545E4776D9E67419DFE23
+FAB5E4DB6834EFE1AA2E911420A9C0A4A1091A205453B1AF2B92F66DE1DD5D27
+A659799F5645BF801B6D5ACEFEBD7AD422BF4A53A3B46CC532E87026BED785B4
+9EBEDF146F38220E3E74D6232DA55FEA2D8BEF37E836C57946AC681877B7E497
+183F6E545967A4911ED99586E6DFD24C043FFA3D779D472756E0C9A091BE37DA
+3CD5FEEB37C9CDA111963503A348268917A42DD084BCADC8F23A7780ECF19797
+15BFDAF5FEAAC92DF90D41DD3AC5995616AF80751C2A3C0C8F318EDD2AE56EA1
+CCFC33C34AD2D4BD047DB89EC699ED3293E2B3F8B381F8152BDF7A0C41437D53
+458C177E7C5E62208E06A32AD8B08BE0FD9853E3BBF28DE6973A425F52102C0A
+E5FAD08FC438D06A83BA49BBADC0AA1ABB9481122B53F8AD867622739277C3AF
+3424751610E75ECBFA93EFDAAB0131DB927E7A88ADF95AF9136FFA2805DB6DC9
+63E0626D7F1E4498B86D2FBDFBAE1E815AA1B7CD45170BA89D3709729EAE82B6
+0CFAC4DD5D4C7DB25B65BDD7A2A977F476F74061D57F3BD805EE17F43E22C054
+D4A5796BA414D5F9A8513EA4988D2587D0CE2A322F1F3C36A8ED33F0D627CC74
+45EB3EE8AEA55F969882AD1446B300783C52BA25D1EF5E0627CCD8A95E0083C7
+50327AB875BBFE2E6775CAEF79067983B9C80B354FC4FB39F3561458A3590A0B
+193824A36CA7FF408D5DC44583D603C44579DF05F583688F59DFF1B9F85B4822
+DFEC44AFD63E20F3DAB490ADBDA7C179ABD2E3E2EF5596B37E39448CC9B2E7CB
+176B3B1D9012DFEE0D8419B2310AFCE83058F683834D3347A8D949C5A4ABE2E3
+3E6CE33BE935943E888ABA165FE509EFEA2ED3AA547A51B20DEE975CBE89F40C
+7ED26D45BE8E0F0F194749B600AEB30EB7D1B149A595211984CE60CC61087D2D
+AED8067995C926FB4A38D9CE9E6DED10EDF9751AC2D8EC7CFE15315ED97A11AD
+00BFE386240B385E41859B0EF0D3BA38D2799380BCA3FDFD6DCD96A3E0C7BC05
+782CCD39FA6CE31660C91DA7468E8F09F6EDBD8BAA3DE69C6300E084E21A3334
+5D01889B87FAF43527419B2A8A62A6CEB60EE8EFC7D905346E6FD7DFD96BA184
+114CDEC8E8261472E5792A589ED4B93BBD7DACAD5CF6F9D5E418D9981A4075B4
+7B1B50D2A177BF089E183B81D17FF69F342A929925B80D475DE83614A03ADDD4
+B1FA1F1EF027CF48EA9004BA981C600B0F6EB3DA0D092E780C6ABFD7A5B2155C
+66B0D68C60473C23BD1A259B64F0E092A0952F887B0026995721EE18F3A5CD80
+D63B8196CEDF3805FF412CD4CF155B266BC5D0127959842BA707C5359DA6AA2A
+8433BFB3DC903935E394487969D06906905D715FD4A21F07C646E32E56DA847A
+FE76852B14833131860DD3212217D7847CDE40D3B0825DA9BC1C8FC598124AE6
+A1AC381B90C5B770AC1BD39D7F567819BDA0E14EA1218E494E90008AAE44436D
+ABCA08FBAAC3B57307817DCAE9EBE36E32266F5248A69E469B479716CDC5E104
+1121BA2CA11638F29BD6F25578A4F16515E90F5180A1DCC72FF3178B7F570979
+B40AE28F3FD18D24B630138DBE04D9944A9012D9410C8609E3D32AFCD0ABFB33
+1D01046E538DBD89E98250F661AE8C309BC6A9D249317CFB6E2FB10A6AB42ECD
+F7D0651B65E1FE7B2E9FEF10B7A94E0C3DD136F85D96579A01B2483C0161F7CC
+53C5D2FB83FE098F3996A8A6536B23A2368FCCD9475E3E8AC8AC01902DB65275
+3BBA04A7E8AF3DF2BC3B7BF942B65605F8E31A2F3C19A1E14BC05678DEC03E32
+E266993924E7A1169AAA80494BDBA286D29B843E5951DA16EDB5C357D7AB9564
+2A00004C9F7ACAFF4D97D169EEAA8C640972832004AF45322A1AF43BD769B323
+EF68D83CC874E4C95A08D026177190C7BCFD73E9F65781B8005D25095E1E0A7A
+A5650B34FC85D676318E9F043A024EE98894E742EAA53020EFE38FAF320191D2
+23496DF2D9B374BB643CD27687DF2D32EEDEF0BC159C41FF6540C453220C4D5C
+0CB6CC9484E95561027B09F01CB3D6E6DFD32C7479B56A8902B46D29ACABCFC4
+095720FB96758B7EB6024F0F6A14B0CA7B74E3D6E773A901523E39A3B9FDCF31
+D0F41F13B6B003FABD50EB692FFE27C2486B6E6E3BCE9A18A68BE7A05344457A
+8CEAC34341863F1D3FEB728A695DE226794C56FDD09E8C0B6AF0B3E3AFBC5E2D
+76D4B0D8B7D0C3923262F1416B21F086405F82CC41C8636701734506D17615D5
+FA9A829925B90841D02D24327CBF1D75329FE213BCD1026ABF8EA98C19CC36D7
+F9D429D15468CC08CCB2080CE82C3EAFD2C965EFCFBDB7B462EB20D6EB239706
+5BA53C0D08CEE85A5CE287A7AC794BE3AA47F1BA9BB3606499A7D00014B70383
+56F71EE693D805F99B6C75CB5F727139C88F2212A335BC7D3AB3169E86DEC401
+0249B7E332EF4A48FD0EF30B1BE6B00C8C11139BFC05C72523BC7BC6538668F4
+6F5E503466BADDB8856DAEF7762726969A3367BF089024DE96BE958B2059E305
+E244EC47A04F7B182B7BE3D4100C0E7BB3DCBC40B6FE3CB9693CA414CFBD74E2
+549A89B9CCCB473112F55E24A07EB37F432BABC8909B22B4563C14DB51062897
+F19BACF4776E50E9D99665392A63E9A341F89703F3FDA3B1BE2E865B3A4BECC5
+5825820E6E2A9585B7F331FBCF910482BFC95995D3266A7493A5F96123FF22FF
+3AA4C30D942340BFC3E92224D94D51EA626974352F1F6D7AFC54BE3D5C50E18B
+4D0B883219662B94DCF4FCE2C96A983F0D8193CACA59B579AE704270FBA7BB55
+DE96525733C4C1EA776767E6167191C7163133F8CF60784369DCB07E0D7244EA
+578AAEB5A9F9C1B1A845AC88BB79ABD941931CA9FF92FFB88D2F5E3ADB218D75
+03E9B2488F7C5E0307382A921FE485B004809F0A7FA4AC17817E4E843C878FA7
+C3F081865569C84B071DD95716908B3E9A016FCEBFC50E0B28EB6B3E18958A26
+288E67A1384CCD0DB027EA2F72D1C5D6221D98A37DCCB851E51616BDC99CB8B8
+61E8411E7AAD6E33B1C51FF1E00EE0A27D1357BB269E7572AEE6E7722D6E5FB7
+16F6DDBFDCC849ACEEB3F83109677DBE07C461C33ACF5337E1393C85AF7F8135
+DEF4536AA7A8870137EC1D91D95B57A3F68D92E41D8FA8986C14A84A1C5F2561
+EC15F27E3A542DAFA80202B6418CDCECAA4932E9A1ED3218A790D6FFD9D89174
+587827577EC71E26F112BEE3C7415BF884E437D5A551E6C54FD021CA28938944
+6821C0D94DBE88CF2ADDBCEAE5D1AB35BEA4A0B26239943AAF1F4602F8BAD9F0
+0AB61FBF4F291D8D26E03AEFAE3A237EFCD9B5DEEE95989C0F5571D050B38162
+99A5860E2A6EF3DCB182F190DF7CA9817EC0AA3C9077C4ED0DEE384DC0AACC4B
+0BEC2E7A6F5A62DEFBCE3360B5165DFAFBED364DFEE1961AEC127E016BC565B5
+2023EA6C5551E64C454D2DB7A3EF07D4CA4F3C9B9A08E6390339630D7719D383
+295FA416F5FDAC2C563F0ED92AB11D8972B902AE1DBC3D3D17DCC06EFF2077B0
+BA2226A5EF618391225E02580426CF35D00CC95A43B6745F5BA1AA6CE7C365D6
+E512B08DF7AE89062093BBC5BC3078FE7222706C207E48A91479DB88F26397AD
+841350C686DE39D81B397AE005FFC24CBE4785B53BD56A2014AAA82B81286520
+9C03DCBC5ECE61419E4460D5EABA14CD060BCC56335C32B1B88E126DA0F450A5
+94EC03EFE8C6FD1A7C05CBE70E189CB320519016C15B7931CFBD1E0D8FB96911
+C2440DD2023CE6067A8965D7C7DB85CD7CEBEAEDE39FF5B3F13ECDDC3B00CE07
+89351DC194A9ECE26A3B67183DAE377409D685460B6BA691ECD6EEE168A0B5C3
+E06436B8026F9D6308AE11B37D487B060F5C6ECC4CC08C9E7A022BA06ADFDC90
+AFDFBBC29194E767AAEA640B4E5EFA2570BD9AEF8EF9D3A1DE990EE225C2FAF3
+5C38782EDD7E1998159ABFEB4B91453DA8382E86B622B08592E8BCFD020EC8CD
+6952F0D422CEE5DE5F6B49D38D8D0FAF0A01327934FFD582BC29E9D9F4E45546
+DF4BE4399D54E050B79E01D34C74D72155A4E0D9775DDD3145B2B3A5FF0B0820
+7AD1F5E08FC7B7FA1B4F04EFD9F83EF42F2A584DE64B4700C59D8FF3725ACC36
+2F8996FC26ED7F0FFB8E7ECBC4B6D27DFFB3811FD6532F84091205FD4306C17E
+49FDD7B4807252C5B2CC214869D837F885352EEF78ECA23E64D62A9BDCF1ABCB
+10C428B8E7BC241875E5F58F090A8665CBC16126258A216524F7963EAB8C5BC6
+8A509E39E1F791DE2B11AF975BF1BD2288C3095B3F9B6827256394B9C9C872A9
+1060215069EAFD87E0B72D814B87E1BAF8DDA1C7C9A0C951F08508D66C046A7C
+1D5168900362CB548633CE1B65134CF8BBE41638CB29B32E4DDB7FC8E27689BF
+8A455D9F00F6
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueID 5000793 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
+0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
+B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
+AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
+97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
+FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
+20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
+0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
+F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
+3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122
+A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379
+5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA1566B96E221864A
+45A24ADAEC63F61C9FD18376D3984449A1F998C318A8FE36D0D5020E18A49625
+0F3BB603BA1F3E66FF412F6A32433FF8BD2968D79CE4273AD0E0CDDA5153C2BF
+F8A46A2244F9394A49D339F763F5A7411A3C29336B21CCB01723705AF589B078
+3763035411FE36AB5D744E81379106890688CB5BC41184548B7FEBA08DE7288E
+E6570FEA20C51FACE8E8F824BB61A4A038AB817C47B87391611B77928B2565A9
+3B27A573C05D36ED01D8F27CB2C793370FA9B90021B5696280A55F2CB6117B64
+293EAE0EA5A243F56FD007773CA35DF71B3D28643C25210CCE25F37A5095D6E5
+9CAFD99DD1DB0D7EAD454C13464DF6FF5DD42339797AE5AE467084550FC00139
+6EE818C6365007B2FD6E26285B832CFE6EA7E99665A224C9813C036CED262639
+3FB39C1F05FF8F31D2DEF37BB9B883334F51EA1243332FE1E3FC91864C8AEA79
+16A726F924AFD84F2F4215FB795FC41DCFFC835C90B9E31D291E47AA4BB8C05C
+620F69DF31E91A0FBA8E217CDBFAD7C4D480EBC1EB396029CDE615C227A367AD
+72834BA95539D39A38EA0CA3CF7F1123F70792CF315BAAA38BBCB6DFA80B4493
+5025F33C3696DAD6A0ADF584C71BCB1D29E523EA4B81FFCE15F3204022BBBEA0
+A9483EE8EAC07D581162672A0D66199174821ABD097561A263C0C0F24066FBE6
+0951F31FBBF2675141F3FB4457CC2A94A40191EA0AB2A606CF540BBB8887B6DE
+715EDB1041EBB9D05D0F4A4672F534397B9529EF8743BE88BBA10C81E0A46259
+2F2AA7B638E20C9C8A3A827977AB58ABF7525BE15DB66CE8E9B81457552073B5
+85DF3FA70B5231C447C5724E14730B90FA35ED1B5723036F1658CA8E19EF5A6D
+D333B78E91E4D7032EFBFD40A5A2269B0DFD9F7C3438DB58F94B507EB93032F9
+99E5F15D9F5D8CB031BBBFBCA8A15A617ACEDDE70DD9C2D9EE21179FB17AD913
+B4BF577A9046994689D1BC6A6985FF5F5A67D699C2FD288FD9E5BCAD5453EEC5
+68287BD7B8872726C28CD288B4DED2246B843577173450B6E5760852CF2E1727
+01FDB0FFFBE12CA13ACF6434AEF4B59EFF3E0DB1E87D35075B1D55AC12633167
+5A83A39056C077EAE6F2F7D1DDED300BA43830B8034F0A6AEC562D3023270601
+6C594D0359DF6F230F7B80B54EBAE4880AF338956B813E3B8DB8BC778BE0F612
+7D84939C2878B43EAA45BF10E257F22C28C2C148FF48843D2B52626148E3CAA7
+4527B9F246C17BDE21C6E7EAB4906BB6D9E84906CD1832C4BD9E405AFFE33AA2
+AE086C25EA26BC23D68986639366B99C87359915EBB76D7162AA667ADE4954D0
+B1E18027FAC2468CB2FEA2568E23DBC201E9B6A1151FBF21129A088D89E3E728
+28B2785C1A8B2637F368A93EAB459F80506435BE23A85396969E2AC4E0D6E4B0
+8B12EACD150049EF8942C108B96843159D4408424394B33603F565D1622FCB77
+51E9A5D061DEDD18017CD2B1DF1394B1944B02AFDC25B8DF87C73771C201B366
+55D9E26FD091501DA8C009A25AF7D2CFC697EEA0D29A3207C42DA93909C75543
+B633A71924238E42ECCA63C26AE73F04DBFB8E6FE86E5AF48E21F06D3A7C12D5
+2E27E292C53DECEAC5849F11C910F3C0FFA8E9BE8D4301ACA5583FB62F635962
+731DF265D9CB3A0B299AB24E29AFE7F127F9E0BC12A106F21E04B71AC3FD5CC2
+7934E6FC44CAFF87E0BA39DD8BF8813AFBFAC1436525F3A2513FABC673975E1B
+321EB89D4E5E0BE59513947310B00B6BF81D43ADF9B3D8EA1DFC8063DE284579
+8A46D36BD199718B233D5779F145CDC968E83A4F5C70167110751D6C0E766D6B
+912FCE96BE10D62C897C4DFD4CDBD92968639B37F45E260BD71F5787099530EE
+7FEAEC22C769CCC47D9CA1A4D207B9924303C3126803C3590509590FAFD72997
+502A21C25B9041E46CE23E0772A12A14CEA6F8962F0EFA0BAC414BF838150050
+B9A1B525D314DEF55D7905A2416501AB6F90BBF393DD044DC6242207726D4117
+8B4CF2E8B88921D0C15F06EDFD337A3500957CB4AE8876D4F4AEB990EE3DA7FF
+67BCC9B285B02EBC9E61714C94A2DFCDB59FEFB7FB51B9033D339DB3BE303D12
+C1DFDE558A90DFCC9C35DD060BD24F0FBE1954060529D826B0B172DE5051DD43
+154649DC5466B09C9F37216AE2C983656E7DA6C5D8C352A86DE04C6DE087E4EF
+3698A08B76E409CFC4B14D220161FA8C3B6289B397C9D39C527B25EFAB6F0E2A
+A0C0173341AC38E4F67E1910A66A97D37C02A998EF8EDB9A84BD5DE317874AD4
+3778ABB1FEE00F15BF740E58F063A07E8BAC0E690D481713E0817402D1C05334
+B31436EB3AE068B1C784D1659AB8A318A474F0253B241C08E7A1C267DB616ED1
+F2F13E860575AC64DFB133B7A01DABDB91A6923F99CD769910E25E195CC4FE85
+5A952A1F13DC00EFBE5A614C96C8F4240C6751D1E7142BE79F309A92E43C2E9D
+554A598A8985E914B8156D065DD56E04A06D392ECF7BC4CD8472EB8FD058CB07
+5550EC31FD5B2CE1272C5A6C94E319FC445783F66DBB9029E1B3FAAA7402E204
+AB3633EE95F982FA7F295794D2AD3E960C4F62C824D7D9CFA1623F5273D570AC
+6A11201216C66FFCA03AF54133677FC8D42909BF200F2E6B786539CADA41B862
+A9F4CF0F76E6CD341CB1057A08ED7B3FF6CB10613431A143C1FDF5DDDF45F96D
+E3B90BAEE6F1E28AF7A7721025F8D26664DC85797D2EC34F07AAEFDF2F3BFC14
+09E82034F38245155CC13FDA43C125CDD70A70238C40DA1BBA0971C5D2B4DD09
+15ACBA579C66F3D3A117C3C3746EF963B58F1F09488D879603C94C026FB5673A
+F16B47C365311AC8DF2C72F60BA235F460CC95F898E8AFAB7088318689003F71
+9ECF94B4543328FEF00CAE907D360D1A211DE800D7C3AEFFFBCC80516A9C17DE
+3F0522F49A24BFC178A3114CA1D4ED0214A8BBD5284FF130CF698609416F2DA6
+D9C98A57CBD37E5151614A771116A9D20AF84A0F1AD7A96641E588C4301CA2A2
+C876FE26EE65621CECCEDE90868FE15D2E7B066CB448F3B691497ACFDBF13AB0
+F0F565B5C22EBBA7DBF3BF0F6D3A3834FA0EFFA650F8201EBEDC5C47ABD8F345
+D7C666186BF98F989C886BEC3BAF08BD37411DB4ED7441D92B1DD155AB3A1F37
+D4A61BDC513F6C506C97D6541A89EDF7C68DFB5F93943F8402C3745C49B725D7
+E18BF1A4C10AE7CB1F9AD9A06F66F81FC6D2E9E896C51B6DCFA9549BDD3FD46A
+096B6BB8C8C713C233FC2F0E608CA27285CD380FFA54A63ED01FA6E4A3ADABC0
+AB5969BA5D42B013B4BFF3911956F26FE02D019B3847EDD9F9C0934393F46110
+2F753FD8BECD49D3176794815B82E527DBF0309EC6490560937AD2DF28D82A2C
+66F2F6A2B7088E34764C90B76239103C2E8CF563AF743B2544DDD39F6F6A5D9F
+F342D318204910CE20A435667460931A7A8C1BED76A7126689CDFFD458B0B8FA
+0CCE233EDD0AF004C488A77A365EA310BE478A7932AE0494757B0A011FBC165D
+8218A5A8D87F2D2E3F6164D9E7D073B01277F2E26A3A9D33767952C1B0219664
+FF7293726AE07C1B92C80926108B1B7D5BA4F9740BFAD282292A9B8256E1C510
+56545EA574B2A77EAC45DBF60788B59115068136E15CCD6026D62ECAD858AF0A
+814F431320E6245EB39A74F332F535760CF6306BE87111B5C44C11C938667DB5
+783193A32C1FC42FEBF7262BBFB376917574437ED4FD29A1912857146295D20B
+796606C8B07F6BF3B39B45C6CF49229418ECE7F4E0355C648B68DD070D48B279
+CCDA0FE6085BC55FF27D02997085B04F471E8BDEF7862BB747E94E9ADCCCA4AC
+6FC5322B9D9CEE6C0BA7C4B5E68316B69730E55224E45F1C7D8FBD1E065A065B
+113CF57E567A3F4E519D13403DC8D7F89BC16E15BAF2AB6E4BC5AEF95CDB8C66
+5BDBD99500D16A24E33C9C3B4592271E54613DB8AA8A3F3D79D616E6122A4162
+E4E4C35B5AF48F5349DCD620736C670FAD2ABCCF10030E81C9A57E858F0DC669
+3B6F9DD553EEC8B7C00E021F1B812CC9359BAC282FC6789BF29A46A72DF9117B
+ADF9E079C3E93DD754CC27A839DAFBBBFB6EA76D8A07B498FB292913E115780A
+9F6F3ABE61E626BAADBEE15381CDEDE9E11556BB4BB31C51C1B1D39AF698063B
+8466410F352D450B4201A834AEB6A1F1758194614E4059868B6926C0E724CFDB
+78E38BFCC42DC0888BF1F4B3D8C0D3BEDF96A7CC488865358992191E02B04144
+A082858E6FA5554EBC0FEED0480F2A3C5795ED7AAEC93973E64755043A77FB3F
+C985B9C2FC94BE21A05D561FE9348BD95E93E8CF0627833EB5EDF5BC4E6CC97F
+1FC8269D8092DC590686BB80F53EE8E452C61B49A7BFF5C353E0111D6EAADD85
+89AB80627A1D744D6A6EE0B34288A4FC74178F6A947C0BB39E3081D4A2FF018C
+E406381B86512BD9F3A44E4980382BA8AD7A08123021B19C1C1F2750DC4A3858
+9DAF269E154502C2AB86616A70298D2B5E5F7F21C32BCBA6C7CDD404D30527D2
+DAF3E3E4D8C969A9C9316730974BADCD6CF9CD8C2A2CFB426E484CFB9C9EAF03
+1CB1636C28EEB03FD24D6AC61892F4712C0640E4FC4A18E59AA5B69578881600
+CF320CB6575CC03031EA337ABEFA117035B7AC0E6032D272AFE5678C5604EF30
+79BBD24811C8FF2E952F978D8DB866F4F5FCE78D545845FE507E06C151408C62
+CA791C15D57FD2629558430220F64DB5D6F88C8B27A96FA3E5BCADE1E052F87C
+AC5846DE37DA5B06FAC2359FE0F9A78E9B4528947C56E438304A2EE83A45ABF2
+EFA34A745E44EE7F57C72AFF58CA9BE25E197F96C25C744F8EF379FD83414DE2
+B2CE967635057A96CB95044370FD52AAF4599F846B78842B067024367F6A8342
+C27AEEFCDC181FF2FBAD7E2E1ADB502DF56DBC1BBB3E333F8D5691BD8D55434F
+273ADD6CD134D36BAFFF565BC0820173EB4C3C06F2AE63F7F1147A6F1CBA65DF
+9B1314F8FD39E7D41D2370FDBFB0CFC3E0D7F5DB6D85E712A22E1663151B68A1
+581CA7AE7A9C6A82758B848EEDAD40F0F665EF1B9CF45B136018C810925A6E0A
+5FE7E0C6562F1893D2CA9700AEE804BBEDFE634A79ACB617E5E0825819AAE090
+E78AC15F7BC65C1B58906A599F1E21C5F2FC836CB57623892458C1BD0B94A489
+6FC504DC9BE0F92CAD20958FBAC4AAD3AB1A3061692C35AE1F11D338D20F64FC
+DC9605AB930D9D1C2B6ACBE4F6BCD6E9C29C41082BE202C410381EAF514C21AB
+222C4F8B7988C75889B0CFA5CC1B3E286ADADBDF1C75082252180653D5406C10
+CC4EED66605DA0639310AE6EFE96A5E8BBE3ADBD1D1A90F9670E3542BAF0E876
+B1F8224C2E79837E20D44C1B1F3CAFB8D3C785D2A65DD0E1C13BD66B030F9B22
+1ABEA1135F489E67BC8BD933AB828EFAD0C3C866CB0608FB863D798E5A5377B1
+19D7128265ED7C17BDF9DE5832548C5F58D9719143EDA3A257DB57FC2D9AC18B
+5E0FFA10B72FA46FF43DE30B385C9AC4916DF31EAE9BFF4E7AFB50B13F96C6BF
+D4988A16A1120CBF28C835A32C7B36D1A4833EA8981FA9CBD1EF9D4256652EFB
+BAB52397D7B0CB363E4AE9BE4D5E5F385A9069F690B7EE4911BE2132F2BDB8C4
+7D524B1A89D04035174608A815052A1C485B7DC301D5F370756ECF6BD53D82F1
+AD04C010C0D4D215B43267B4ECFD7092E0FEC22155597709131C868C89B4099A
+9E210FED9E0F290E9174E188A8DD5392D68C622CD9818CD4A707EAD47470225F
+77A9D2DAA80E968004E71CD1E37EA04E728F3C8BA47AB1571BB59E9DB47FB24C
+F8A2153BF455D65E96588D5C3A7141A210A889A3C3C1A9BB7FCE87B0AD1CF354
+5B8DCE8ADC780954AA892C670C9785C4D88E6053D88F43F9757B12C40E52929D
+D891A73C685501BE6758078F08FBE573F93793643B8D7FF6440A22AD89E3E0CF
+97C9618B9BA9DB2C960B64777607C5D1EE82FBBA1A5B3680712AECAB193C2026
+60DF32457C70822828D45F317095C968C45AC6F01D9897B03159E1975D4B757F
+0C674B3961EF104603634E8D90E18BD15F15E3F029BBB39B6ECFA6FA7D10B3D9
+0396A14B5F1E731BAC583D8F994216C225B13459EF7E18D79284874A6566BE0B
+CE887598D975CFA3770CC8EFB67BC4DC6783F1AC2E826EFEA33C341DDE1A00C8
+1F4C969C3FEDC8EE70BE61612BB447225B9F9174247D430B219E8B2632CE8BB4
+DC418F1B8F68D690E45BA4A3DAF40F8D2EE69AAB03774C2CDD5D215DE3D540BF
+447291271A910B3B44512E199A2AE2481A4557424C7A4245A9244233B8C679B4
+AA1EA48DC839A6033CAF3950B249FD08C22CA9AC911ABB80D3FE986E93C352FC
+D5B5903989AE3855298A063FB3349BCC1BD45AE8B04FC6195816EAFCFD373A5F
+6C4C1F01FAEF637452704C7568F6BCDD96A135ACE024D9DB4401F30B93CBBC2D
+0065639B11FD8DC3FAEB5ABE3DDFAE85F5B9A5AD8A6B86BFF06B51A435A432D1
+87EEAA434F1B92CC6A305995F0C4B26C1648A3B38A3C3CBF889C95A59056E998
+464404B49C3214C8246A2272F25ED65F31B58372FF2D192439D0A45B65717911
+528DF977F05FBE9955CF978F87B421377D011B26CC8D0D53F02E5F50D9632133
+EADCEB9F40D81C2F18F475E2480C21FA98F325FA3A89080FF395D3D8E17AB863
+E8A03178B82DEA5E6C773B6175E02D48BDBE014941F030E80E09FA824155E670
+EA63B8808E63EF7CF97F286C2DEB774C9E4963BE7D035C6F2BF7D5BF8523288C
+50055B844591FB870836FD5FBC828866C9D4963F33F4D8CEDCA505CD93601F0D
+1FAE1467ED835E3E4C4A4FB65BDBD8F12E1D5CAAD48409FFD2AF73D89D0357AC
+58C065D91FCAABA6A1E9527A59CD0D149F88239AEFC82FE5DB4EF14D810E4B70
+3E7A379F110789495B8FCAFAD2667E970EFBA5AC7FBF695E2BBFE06CCD19BBB8
+BB9B1CEE55EDAB9CD7F03882B95514986094FCA796370D34D6E11E0CE5295630
+8983D25CEFA5B03B3C48CBD3859B0F8238DC696D2AA61E61CF87887C0297686C
+177A635A70517FDFE02ECCF7D89B4A3828CB70A7567FF4DB62814C864FC65F64
+E6C93109382C7E5601E67360E94B9F17785320721D6462C69D898922C3B28285
+1BCB95134E4693529BD1D5E071DABCD4BEF282D9D28F13059AFD3EE2700140EE
+3DB6E11989E80F3FFEE40071257D0EA79E98133E0C27500BA4147C3B6098FC1A
+C549B8B11CA5A4809A19460EFD62F3C662D1B6A179BB15760AAB2976E38FFD21
+B0040C1ED1E193C26D826905A3AADA8FB9829E4EF506B26006B582B6B6DB9C46
+6C4347D766DA3B2A57E2D5A9BCE41FED66E2F46C9A51D984601323CD498B2995
+5E8FD462ABEBA365BE3C8D12761079D0514FF753BAE8381B9D0135770F6E7FD9
+8A37C040FB6AC73203B0AF65D7BA8D3E2BC17982DAF6D9C6A8CA54457DEBE309
+46861B355E09C3F3522C1311C410B74A950C561644727D5C6BDD46CC9101D5C6
+E3688887D3A48E818D69265EDCA330D84AB961AA1EEB8DC98FDBC20A85CD225D
+28C0DFFA5A9A12EDED2E3F27DBD540B33E29464BCEE21754A363D094FEFC2C3A
+15E5D7A5F9455CDA0A92AD4209D364373F0A70FD914276990327459B30B711D2
+A6C178F71D5EF68C68253FD063823D9C4ADF1437B9C607B43AAC6FC8553BFE7E
+B6DCBB6F475434C0592EA95BD0A1F69FCC147164745458D7102D90DE4A647826
+E09982D59FA2E1B23FD1338C5BB48A44AB3F364EE3A74CE032783C19CFCE4835
+02AFD15137BA2D1AD05B5CB536CC826BE09F45D8368F41282E88B746F812DC31
+6D6380BC473F0D71505BD984EE04AD85595F3760497CD44E9E7BCE6469A1B7CA
+0590C4B1ED5B8AD47444DE9844492151304099AB42366A919CCAF315398036DE
+D410B85C1789AA150EFB4BFFEE24802F29721F4C423F128CB13A52BF897D728E
+9AE95E847EC1392E3DA525045B6E9155384CB5180F0B49CA07FEB167C3FE1079
+9015F9107318529E4E0EE78B528ADFECC44C4E8DBA62DFABC9E72A6694A23C0C
+DF50EA6C570B4B0D2DE608377B7E8F82317789DF2476D1D4783C39FF5EB4AC6D
+C40B9DB968D1B925BE24ADB334862EDCD62A10952D28E3C5C1FDDB0175420FF7
+40C2D91DC58E1CF0A43A47BA1BA9C12CE6B02AC6FB8FD5AD738A289A1362E65C
+01035158DF2C3D5BFDC6473BF1E4677EA40A23A16D18B6D7022D14111F8E2406
+C5229A9F891BE263F0A915583E6377A0B023D6F8D35E788CC1144EA3DBF68D81
+6836E7BFD1FFD0DD589B95E97336823B5EFC1AFF6FF659B9A720772EFA717CB9
+4EE8D85228474F3D5CDF0CFDEF99874E9D62E5F5FCC1597A91858FFBD732E5A0
+5FF3E125B02B1EDBC9E322AE48E753E8D30ED5CEA418C182A6960A246681B8B5
+39EADF34C7FEE4EB3CAFE157BC98337D8E18BD5B88A4CCCE013C00B8F8897226
+E6ACD0A31BAE70DC7E975244198711A5B211B9DA710838FF5D87C3980F833F52
+871DF8D7EA74D0719F2E329B277BCA003350A45ED58111838703D3E322DE1C2B
+B27CBD2A1834BDEECCF5E243226D5F0A44521670F6F6BB9A2277546BBE872B0F
+0A6D3CC3CCD86D142CE0A2BADDC12A02F30510A41143D5020B58DE90AE7919AD
+BC7332B5D4CB7DDBAB72DC4623CE70437875405E36A3DC5154666C89579828C3
+3FF168A630EC5DD66F32F9FCF78E1BCFA89C5645C941D62C91AE6F8828BB0573
+EC0A6C8E7B3303A87BCB72D02AE151FAA8DE5C699372C3DEC66C44DCB1AA975B
+CC2A1CC433A8DDD08F95A2202767565B3E4CA1ADDD516F37B5FED92C8D20D065
+706DE9BCBC0E47258C9EF1986ADA06273DE29C3BA7145AB7412FED41CE8DC33A
+90C7692866EBD606E96194A41649A3B9B30CA8BC82576430720870634B8B265B
+AC7403FD4C61960D73CBEB01DBA0DED6792873C49064D14E6B31BBAEA3C3975E
+C44AB4926C973CADCFECD266BB699100FDCF1F3C1CFDB7F6AD839F325476BA84
+ECDA187D4F2257C750686E602A17094ECB47C54DB4E468770BC205CBC41D57A8
+84794FD9200C429A437FD53EC9CE767BB01D32613BAA13A593CEE44FFC9C45DE
+DCD1CBD3BC1C7B8F777522C9A6FE7D06DDBD56E71BC8CFF220C6305EE202ABC3
+CC612B277BC158A38958B2BF68F1E25BDEED65D1D95FD0608A32425C89009AB0
+B7893E908FFBE38E4E0A20C1357ADB58CB261BF456FCFEA45A4F919523629EF4
+B41104655060BBF44661F5557989BF37970EF3097A5AB9F2F6C116DA721634BB
+C0E37D0CCC51F96FA4E6C4611021120E4960B7DAC93E4DE5670ACC927B2C06F8
+36173A93F04A9FD99B6B4CCEDCE3B6AD9D268CDE761E3DA251DCE455FCA3135B
+B270517ACEFE44312EB0D9F113E26D67920E45FD591415B449F0A9FF02343A63
+6609C990B444FEB8C42A0B0DE7F954291C1ADEAF91FAC6BFA3D2D7ED9FAA3AC2
+B92AF4A46EF0B9D6C9167798CA1B027C0CE191F77A2C82096BEA50E281EB3797
+A3A7B5B10E9F48732F1DCB23B03F533CE8B6F1A3A04A02D7E0C133D840D315EE
+39B51251B550A1D88D055088382E3BB730E25FCAC0EA0EF9AF7B4B01FC63527C
+4A73B5945CF90363A9E00762CC48CDBBC8997DB95A0BD429C15755EB48616FB4
+6CABEF95AD3F3BB50FCF754C3452E394B6DA0C14D17FE0A0707068F1EE989E31
+D8981CE702E17024BB0DAA233796578A53CFE08A570FA907CF23E3DEB70B0714
+BB79331411CBCFD02794BE7AFC1A84583F13B3BE1F393B112DCFFC5B29A745C0
+FA980F18B0627A5948F2B6EB016406BF0B2337858B9029637F07280A811AC9CC
+0B9B08C3C5D0FDDCDE6E7043589DB481B2EC2ADD9A95A3B1DE93BB13EC380317
+D8D2FD555A94951AE1689A4A5C52875399DCEBAA001D9D3369B8ADA80AAC8718
+369914EE26A28FC7530BE6067763E42F3A6DA059CE1BE3B07ECCF362D5925DC0
+65CC11EA72C749C680F3434D82CBEBF0E3C70196267FA08AEFF88F46FF8A3C2D
+1B4C45504BECFDD0EC7EB39B3374B23D56C59D121ACA8085CF860DA9DD89949F
+1FF41E76F22C052918D2D40E812CF441C06C7744C7FB6F8AA779C2D4068B372C
+0B4B2750A472309E5CD745CF25233B4D8309D7015CBD82407C860F0E60A7B753
+B3D828CA69FA610491A16AC0CAAEEDE48DB1510D3381A93B0E04048425672BEF
+B65E45CA9D44454373BE2ED6735423E3A414EC4E516EABAF634C9E9810774767
+1151005155B475418E5B027412D853E2B520979204ACA7F628995590E72D6BB1
+775E3DB5A2501DAB999D0837961FCFC940BB989477DAAF7FEF4655E59B3D16E0
+209981FDF1E33E899FCD7FB2F8F8BDC4CAC083907328BAF25894716525BC6648
+C11AB5C2056FD7CE9A563EC5F619D01A4395CB63B798431E74002682AAED2A25
+9A06CC30D5C2B8A6795BC216DFA9DA95296EA21FD28C1797AED59CAB43C39988
+DDE1BFF9483C7068CD5895ED7B181162759662E81316CC0958128519FD120A5F
+D62429A4E4313738ED4EAFFBE8E8286CFA1C782FC7141742EEB3AE4603A23944
+83B5C72112939D1CFBAA645CE05A9EACEE5B3E88C91DFF352829C2F330AD7087
+A70A35D1A26F8D55549097548E23A511A32886F9BCCEC4C823F07FB723E2D29F
+FAE3F5B83884B6F0BB9440DFD204D4A69FECED05825F98AE018AE9EDEE6E53A9
+ADAE8891B4893D45F47B2299651C222E43796E3DB850162947F862D6D7C45677
+1E231120301FC99681571746E007E53459B85C68095B840034833BFDD5050091
+FB2432AC4539703DC65B3304770DBA78E6CDBB376826456EEDB2B03752EF9C6D
+F9688F76855F5848FD0991E55C124FE04A8D303D2C708E01396627FD8480EC47
+8047DD9A008D18DE9D1847FBEAC621C79C8D30F87E1D7FAC5DE9DC4315530CFD
+995952599EEB9479E5E14F26634655EB94E245E1E6A2AAC2001870E7E3387086
+6400F430066C7165563A6CEC86CE1AD83F2137F44E32D99F337F04525F88AF61
+8897F6E61674D282E8ED69700F127EF825304EAF4127A1D91D3D7A8CCF3B4B26
+05E498A79F2133E4C3C2507F0C013F3A932E306518F2DEA6D1094C77144087BC
+6151ECD430DE0E8E4CEE2947D1A6C4C5A7CB66362EEC3D1112F51144F27EAE83
+4F171FC917A1D300596CBB0ED4DF1C5A7C76250A6BA0FE7A999609A280E47C96
+75F2289B4B9E05A2A5DE3AB20D0129B74F10B1A4F0429D172A74471FF9740802
+535470291A441AF5A4E874EEFB203CB570C0FA1978302FCCD249ABB2699F56D6
+B85ACA9E1D6304643B809CB8B86AE6CF9EB15503AF4DC518C05D24C7FCD89EE5
+E17D7B185CBD36C99DF26339D41AF089EB62294B8D45EF629F7A2B74305954BA
+5EB8B2F86AB325CBABC83B6AB7AD1289F8B86112A3B502172A23590267AD3DA9
+E036EFE3E2C10E7150DB58001B5D8A921A72F5C33522319E96AA05393470D815
+D861FE1B4034832FAF47069AF4B818A9F16121EDA1D24BF7463343246450B070
+5B899EAB2B1EDC1A133E2ED444EF6A71F961658A5C46161BF9DD3ECE80426874
+DEE96AE9B32B5AD8B7F5CA142AA894C250035D7276332151D20412049AFA6DC2
+9F4450F40601E64CF29248A2CE88FEC9D6FE607540CF45DF6E9EDBC4E5022007
+3A2184F0050FC610A2CF85BED1FB7C1E48D436D84F666D96EA1090FE37D1E506
+DDFB7CE42CAE40C2443ABD6B450A11DDBDAE65B31D14B32C40B9D90477A766FE
+F4EF89C1E985FCB73DE5A7D3F6C152D8D2A0E955C771FBBD28A9A8C3CAB40294
+3693AA00FEE07D4857E2F09FB02AB229D1982FD2DA50E625E532C496282D3BC9
+587C9CAED53936D6FF2772899BB79A4AC0F3692E256D9E3CB222AF826776B0DF
+13B98663CBB0993063AC96E3618A918A3F3145DFDCBF3F1F9E1FD75E6EA274F8
+D4158BEB332DA44D86F2AFBE3DC04959C4280438B8B9486BBBBD42C2B0F17EA0
+E188A8837B58D70B5EFE6B559A53E58F100A97413F5F17D8BC7910BBC341C538
+AD95A5BE0E021D1E69018ED771EC97B8A1F9F9933E15D8A788EFC576E16E5217
+575ACD20DAA7FF073C33592CF1E874D72CC3DA2DE894B165B1D6355B46C6250C
+2B0134840D019F0C81C4826C73952CF0B1199E0E7D870592BF7432448E3D8692
+48F687FD4217787A3803BEDFF9D89540820D8697FD0E5EEF26E2E81C013BB742
+4940FFE3CFD2668AEA6C584621C413AE37D6A6704D8BE8EB2228155B48E74CD9
+F3719E66EE1CC5ADD8FAEDAF2D9F4AFBB5B5A92A609F3103E8169710291B911A
+A05EB4F4BE723C5CE8BA4B6F38E94044CE7FA15C3EE183AA8FFB71208C22F8C5
+73C8A443C44317EBF7C9242D063FF3C9031A33748261DC5D14D84E8D01087EB0
+43FE975B8DAAFCFA4B7CF1274085B9B42F6CEEC85D86EFBF2721F6661E4B1CF6
+C7BBFD874CD84B4592CB5AE4D26C5179D5667E42CC5ADB857F21D62DFB669CFE
+7C2209C449732236B760F9B3B1635FCF47D03EF76628E7A6851FD8F4745D6A98
+B57DB5844C5CF4CDB14539451EE8B3F2B9AB328EE2F0B848DB1FA9245EF3845F
+65137378C9B794AC8DD3389CC601F7E5BE78B97DF765C403B556E2F21C367C41
+3A9F97112AA5A5C711AFA2DAD65B9B86BA5F4AFB1AEC9F1B77B0D9EC1CBDBCFA
+883FE975993A8AD7994FEEF7D5C48804D10FA2340647C3D2425C9328C325E394
+D88AA4C8174FF8CFFF7B5AAC2052F5D6C484235FE3E2D82F3655A92EEF3E2393
+C49F7966F34126A12E0CD0FB8A525603F3239B4992F0F9D307CAE5FC33EF467A
+5350163F0EBDAA3E519679B57057117A485F1B41FE5BDB83E5ACED0B5CB29F48
+BDA164C1DAF1EBAEE24309A241473DEA179A6E80D6BB18536593ACE3DBAC9FD3
+11B1FDC76C06FDD9C03BAD521A961469F5DE3B7F42DEE865356494D718091E4B
+661CB74A2C3E35227A1657B37BD17A373221886A1AD25E6CC1AA210C8B839196
+AA6FED63375D72F268F9D92A0C0693C43E54C1260CC1D27DAAAC92829650921F
+5387C380196D3E58979202A651ECDFEB36415C61B60AF74608219A2B11E25126
+6FAEFA27CC356A1A753A8A158287CC627F5DDBD349F4F9A1DEB07B919C63D012
+CA290783510D7ACC9DEAB8B5A7FAFEF5A53CBBCA0295FFB7CA66CDF3FCD977A2
+EE24D15AB3697D6BC040D0A779454A490031953B85AC398D27CC26A261D68055
+1AE8B556B3C40CE1817523E99B0BB0C390AC569D6EC02DC9D3926E7A51673FD0
+AB53BE45B34E87149FC99107CC7CB58CDBE7E2BB4BCDA689464C0758E512D38D
+C66D57C6BD02BC83321818324FCDACB5BA1701DF424F45E0A1CFC6C951E73E71
+390CB2F6E15DD83E0C8B207A9CB0429B5667EE2CB45AFE9704E960E9569BACDD
+4B05AF6F10B907A76C504EDEABDBB40436E4701725301854767DDFC9EBCBB12D
+579AEED0D20E003B3897BE36BCE1C79C229E980E598063DBFD4CC219B2A86993
+460D1211CD6EF37BDFC59486C6D29A9D332517E62809D666958A0C9A435AB84D
+8203D0C79071BD7E30AEEAD8CC5661FFFF666A8DD552A5D805B82797BF0F5F05
+C93E3F96EDAB59971A5F5C54976D2D3D701A8F9AE81C9356C0B877563B8C68DE
+62302E62F7E2F49508E5597661169DD53F1285DF058352A32211D96708416A85
+C86BD388F85B81393DC3F1437D11DAB4B1D2B7C262E53DA36F6F13DDE097FD5D
+E76BDCEBCF035FEBAA30BE68F94B325620EE9FAF6E14776DE628C3F76DD04549
+9235BD8D231914EAA96818A390DCA0175707C097EBA4C2F6C40D00B2D4BE2CFD
+034DC2B046DA73797DC946E0ED122E78C892F4ADAEB185FA67DD54AB0D726B48
+79FD1B32A1C28367265E31B738C49C12B801E4204FF390125037FA111F64D2D2
+6B5B005E1534C9886FAF82A4653665AFD71D1351871B65E16C105127AE6FCF5C
+1E43678AA44570936B3E77B27A11EACD5559849948D279B76DEF6D33E1910993
+B4DD2E40B18A5F27F79CF0DF6BD0206D179BBB1DBFF6D0ABC888D99B3E9A0D97
+160745D94ED749EA86E0DC89A9EDB63CF235D9F8B6BEC7E1AECB20C1B9EEFAD7
+70E210339DFC7D595F9E70D030F2A1A39A4827C42D97A8BCE1BD0F63EEEE9A49
+B172000195C937958D4CF837F1D85D86F6B28798C1EF5CC3C79C4611AFE79BE3
+F983BF637FCBF40B4C40815EE7E519767934BB4DAB9A0B0D9DF91319B2FC8267
+E005981D5B8A0E1BF252FDE3ABF3ED24232248905869E5A81BD80021D9033FA3
+F6EE4D32469A51356BED9429B280E5B3D87CE8A27194D1EC0000AF45E22BA088
+E504209D3097238BA21AD8EBBF7648304A924139AF0037914DA1C1BCA53B488A
+8C96381FE0878B320C9A97E8F1AB66FED18BE0D974B014E1FC09C4B96151F614
+C6D3A37044BEA1E3111A34FD7C3614FEF2E80E2306D6144D2DA9E4D58ED4406C
+BB50BB35E201D5760A67F6B13148028E333682F0101276E6686BEB09CC56D231
+427E9D75605B8FBC4121126AB4F196D22C7E17589FA0E85BB89362E096C5D563
+7927B84129CB96B1F0D132ED2A1D8D04733D079FDC78811B0FA5BB768AA3B899
+74FADAF242C76F172BF05EBC0F72389D4CD4B51F7CC9C8C134BE95976037B0D9
+87B963A2CFE99CADF8ECF9258AC5526A13CD315A413101A418429810E6EF51A1
+CD6349DF32D8C0FBB11AB677BA9F3DB1C83869A4ADC714293CBCD27183E06648
+CF5FDB2BE9A09250B6031FEB2BE88CFAAEFC340EEBB4025A7D41E69385A937FA
+8AF05601B1E94C950FCF843DE094FDA8ED480C6DD693A661965F76F7BBA3D13D
+BA0983CC7EAA03210CA2047400FB6F90DA2C32A4C60A54D84FEA5E5A4D489180
+58AE7E8C9E5BB330574700CCC43A7A02920874D560CDC1FF5ED7C9D9D8B32905
+8EBE1D5CD48AB169D188B53633FA7D6883100B0D3214720C5EEAFD3ABD3D11EB
+B7CF506372F042039BA0DF7E3886B23F1F46FE99E7BA9CC10E6EFFE7B73374B0
+C1C92D8F0CC383C12BBEF8DEF01DA770AE1EAAC4EDB60A7C5BCC6DEC81A64412
+3FBA9A52E24F2AF2CF218271A1093B676BFB63323F0FB46898A3C65BC0246704
+211F6F006FB349377613E08588AA4DC847B5A546178CE63642044890A857D86A
+CD4D66A6140A407339021F012ECCB21CB8F585574DA9A748F6F0960B307A6A41
+6254F54A3E0369780547DB524295C078536DA6F0F4771CE9EEEB770F0C49FFF6
+7EE6AE8998457C4AA331C73BE96257FBC1868FF987F60840BC2C30D046B43C4B
+4E8C18DDE87F99F69A6B1A6EBDD9A10868285C8DF369FC5421D154E31F5DFF7B
+C771418C55EB2888BE96E80FFD2B212B3D0B74A2D5538D9C1D2783C5E5756249
+2E38309EDFCC6AB901506A165949E660C7081984BD5C1587B48E0B051A232319
+98CD460903634207C0599D62255C27E01D3CF2EA4F566442EB466E958E2C0D6C
+3EACDE49F5FE802865F87BC29CAD97240023612848A79FDC3FD6D885155D50AD
+1A47495DE4C69477894EA66E111B6DC93CEF9417CB7A173868D425233EB19650
+5C0F27B5C2BCA70F762B17BC8C6945E687C9E08F69FB48C4A2F6D3B94E201290
+A2F9391814353276CA71DE1510673372F2DA9602F4B90A8C850B2629CF79052E
+6FAA9CFA3DCF615C6D280567CC00A3C5F4B122954A4744F076941AB2845D957D
+56B30209C2A5AA287D93E9C3F85B92F9708BF6E947E85F5D5827B5766C3CA618
+79115CD207E6E9307F5F12767A579E49E69CFA37C6C9A53E462749998931FA8C
+E6CC38D67F507568EB01DF1EF09AD41F786A0B7F0D28F48F9C8D8C7D6E058406
+EF8614FB990F74A409932B362CF2057751E3BBB9BC0AC7A03AB1654E84748A31
+30119D7F0D405F15E4248F6E11247694CA182325A252F0C0E516920A3138DEC8
+28130E484A3EB074BB646B81EA50C75BF9519C078DDAAB6FEECB1DD3D87CECF6
+0735F4F990B13E4AF4F19AA0E3A07835FD7D53F7644F42AFE3190ED788891A20
+903E93A28D030550C6BFA18C1A2085841CCF3D049D5D6085935F0E7A863FAF2F
+4D9ADCB9CCD20CE0E541A0B849DBD339F3A8392BF7B8CDFC788133F23A82FD26
+797F5487374AACB6B9AFD798BAF3FC3DA26950C871B32B5468047D12752037F3
+D8AB4DEB8F3F3314C458E1E45DDC82A22B18803CFB8C67E3038217FE420E6819
+3AD914B8166A7C511A043B4A72C1E4513D40FCB55EC7B35B7FA51F51C258F7B5
+08B6F30C915776F4DDE9A7BDA4EA7E86DC067912B5D3C47E32611DF742186E3E
+70F87DAE8F3825A6EAC0EE445C2DDFE088661ABE3EC0725C64D60AFECFE33FDC
+1B8C929B2C6F277A1906177B5C6021D65F9B89A2AE42DF386016898F376F4949
+758285BAAD84848C6FE960BC7A324A711261D00CF789CB38BC6068AD246EBE50
+8C8B1E0645D03C9CF4A13CBF36EF9A2CC7B1F83FF5623AB775543C63D7FAFE82
+B89A4E0F7537E271DF8B6CDE9734D5792A7EA3F9AC01956A4423549EEC052B86
+D55546326A8D4E819B9D8B9DD35B405BA209B14A582C0FD30C2DE04E492CEFEA
+ACEEEF25D5FC076EA1362EFE4535E342A1D0706EE00324691720F865E1C8CFFB
+E40C82D32E8861CD8D14CBEBD2747FD21A2F39580D90072F67E6544C83BC1411
+AD2D9FCB7F60C7DDDD5FE437DA77312D8411B36C17290E7E8C7D510EB2EABB36
+1A7A30D1C5CD8D93EBE72B8FF07822AB00E42930978FC88E678B9A334E591777
+06BD6331C27C3763CF47B04278F3D19DFBDF608B9D1501B4C206D01593C57A13
+5517779D7F6C7CE4EE8AEF6123C8A0BEAF8A33E449579E32792D9F1590820F5B
+A88E1568A4D93746227D6F9557C28D643B986C4922045CD3C05F980B22EF6ED3
+302E98E028504CDE790F26C82BB9067D98A82009661B7C9AF6464891CE787B55
+4A6427357E0C3E387BC34688E3DF39FB0BE8108F7C247DD1777CD37DC6F46CB4
+C66900AEE6BE537F53119CE46949097ADAA2A04FFF7EDF46F1A7C018DF504660
+7C35D866A829C690DF52754AE981C83E22643E7F2BB0084D1ABFAF7A9EDC143E
+674528FDD471A47889F7900469C5DEECA99FF824047169677C251A659A9B3FC1
+08C6E522E097B6EBEB7FE56BAAC797D8FA002EA86274336FA35556D1A3965300
+B78C5029045699D6B80C0F5CE7A52C07332ADF17F9215EA233D3B34FDF158CC6
+905E60DB4FDE9FEFF75E9B0839B2B8309F34C838AC844402BBE5942FDD3ECB95
+B59AABED12012046B0AB2FE3785408CFB3955741C266CBA6BEA82EB8D5A119EE
+48BA7922D273196A39B9BB0D9002964F66F44C48BAE04B28DFC60B5E1E096440
+172407EB30F8842A04602185FB73F16BD16BD66B515D67367067F22EE1F08A8D
+665D67420D7076F5C59C5FF52DE87A38CA8E5F62D6371E22A29B5B54AD23C93C
+E8635CFD439B08FAF7B8D72638DA1A0C99F61D6257E52B4956E75A34D2C168A5
+A3BB5EAC545908DAC7691EEA7F0577FBC8A600C1E821E9B73215FE20739E9099
+8ACF17ED23CC445D7BD4D2D9820FC9379C790E0FE6C5A3E21F914989A4F042A8
+9B4712722C1F5FDA319C9B9A2DC05371DB3F77D8AAF47D8DC716D9F4F5CE724A
+C0962C55D16F1E1859C256F70D4F7950B808962C26E766234C3517092FA9CA77
+56431D2EEE84D887DBE22E3B7CFC844708D48476F522C8EE2E5589EDB9F65190
+FAEB43C04BF3ECA7A95DEF7A6DBC5B28FF289FCD2692904E7A37D97BFC3F2236
+0F7D9751CC837EFE6DBB6B4B6F735EE8F61D636F98BBF322C1D42FBA3737F68B
+96E7B6BBF44D8F93A759D49858CA11CE8659C0B1FF0B0D28D4BCB8610543D44D
+3F096A85EE4C57036FAE0CC40F100D750748005C7A84FB1F022A75795221FCB2
+74B8ACCE3421352732F1865D70DB14B178073BDFBC8AF2BF79DB48B078C1FFA6
+A52AC316F8BA68E8AE37BBB3E480FE8FDD6832597F6048B6474CE8C522943A74
+9DDBDB17A8EDB7C6594E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR12
+%!PS-AdobeFont-1.1: CMR12 1.0
+%%CreationDate: 1991 Aug 20 16:38:05
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-34 -251 988 750}readonly def
+/UniqueID 5000794 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
+59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
+51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
+DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
+AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
+45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
+821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
+96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
+9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
+26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
+140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
+1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
+1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
+377D3061A20B1EB98796B8607EECBC699445EAA866C38E02DF59F5EDD378303A
+0733B90E7835C0AAF32BA04F1566D8161EA89CD4D14DDB953F8B910BFC8A7F03
+5020F55EF8FC2640ADADA156F6CF8F2EB6610F7EE8874A26CBE7CD154469B9F4
+ED76886B3FB679FFDEB59BB6C55AF7087BA48B75EE2FB374B19BCC421A963E15
+FE05ECAAF9EECDF4B2715010A320102E6F8CCAA342FA11532671CD8D247017F4
+80F3953FA6A64C2753F39AC37ECA3704B5915361ED1A124CDA39E5F743A992D1
+5B0EA869DD4815C2ECBA3B4DECED6B05BAE9FF7C63463A3CBC2506B82FA8C9AA
+F86F320B0CFE0A9AF55CA46FF15F95E9D9E81C1FA0857C0224EE0E2A5721FCEF
+30D43AAC8304E4156E6AE717543A79ADCB8F3A44F84EEBF8AF97DAA325EFA234
+CC099A2C065D3E10261977F5E90DE0955C72EE1B65AF720FEFBF52B5606895A5
+96158609A4C49A16C351ACFBAB56997B501CC226248A8B4D24B7ECD1B9E874E4
+B23DD10CEE8ABB8E87594A4ECA7ACEB6D4526F1DA1210D8A4EE7636B41E16F79
+6F0CCD5D304F07BF955CAD2ABEBE7DC0E40DC68FC9FE60A33DF9EAE3F467434D
+88C723770BCBAA7034DA0C0FD25B568E5F97A492AE95A7B893CB2BFCE42765D5
+BFA77F284C508BC609275E75BA1DCC92609B08D9A6CD3D152F8E14FD29C0E0F4
+CA87655BD992EA44629DEE5843B60B5280429221F218B9EDD385A34DECC6EE36
+FB99C0C4541544507F345188E8A8DA0B2E96CC53CDA170334423B4DA12FE02B2
+2278BDA8775265E624BC22ED3018A15756D6EEB6FF3DF46924088A076CCB36A7
+1CDA080EE7633AF2EBBF3619B1A24063C200F4F660DBB7E027D84E0D872EB188
+F2856FA40DFAADC2B33589A09A616E10C8CF9033A16B30BDA1DD07B2AC9FE513
+DDA6FEF9F0E410D12FEA970B82AA0B1636C5E56464719946326FD757D6C8666C
+9EC2165FA58ACF326DADC611D93F3D1D64E1ADCD426F51B11DF6D3073E679DFA
+D18E1E5934BC17E5F4E3F1F22EE4DD01ADE982624B890D5C10DBBCCF2536E085
+347A6280ABF6D8F7FDE0F1A0CAD86A08148A2ACE13A5A9F8FF3B31660C69122B
+B87282408FC5F9C056913962A6FE7E3114148872CC9EBB1CC95AB910E33C38C7
+000E7A45F9C775F83CAF5ADEF88E4EE67E225271E4D5D754594E228D0F17F839
+19846309A4E64438203C1408F9E0AC24A443D41E126C2234BEF4910303E8D9EB
+0772A85C146013EA88D83847594D91060D040FD6C042EACA55AA3DF639A2724C
+23ED23222B4A3D61AF253F45D5A80C220F63BEF811FAD4AED3A6998DDB34DC64
+42A027E8BAD1988C441BC291637354A16DCB593E985FD7ACD563A2EA42B75083
+C4B767E15603E7B200E6E11CE61892CCD3D7615DC9A335E5701A5D6A36306D80
+0EA31AE0ADFC4F25536590DA27A620035BBA61AB2CF6A521BA6143AD83771ABD
+4D8208B4C2C594E35A9801A5C513E1CBE55B5F274CB686C284AB22C086220C89
+16E1188DAE33D5163B50FDF52AB8EB3F4AFF1FDC0B2039FBBD42627B54954A15
+C2C70B5636711F8DC8C169AE0227C25AD970CACF54DFA5204F5E9E783D6560CB
+1A526688725CD790FD0960FDCCAE63ED38C7F79BDD64FB05449BCBE2B1F3CD3F
+6312E1A2DBB69A699116DA25FAA096D00BB0B5EE423106E84CE36D5712F00ADA
+B54BD70668D37100695736587D562C585D5A3616E91909D1CB9FFBF635DCF010
+5970DFA168CB77899D0F13C04963ADA29F40B3BAD5891B80B183E0406C9A83C2
+B729166909888C20ABFE8F1F18AE280034404499BE09126F309AF8CE8D44D747
+50602DCA970A989EBDB15FFB131EB83F11325A90417335722B9EF30EF914B305
+977FD68160BC7D776507FB91AA612497F19E2A8C2E0AE4D5ACD187930B6AE576
+C87E28E2DF7B783E5B011268486F2FD4E78981E0A37B4EBB06D6D9541CB82447
+A1EA2AECD944951EA8C7367281C764EE621A2BBC55BC94EFAB2A120DC0D225DF
+6ACADAF7FE71CF4E9E60C5E3C12C66445DC6230521BC8279DA3DF28EE19F08CB
+6D7B9B4379057FB70A98AABC8F8B31BECA41CBCE0F969E6392DDFF5EF592E9E6
+B6D04970D381B1F654890447CAE06D76E08861E589F1CE4E2FBB7377DA4C0936
+8B1B143A008F948C54415C00E3D3088C143E7AA33B1BBC0192B1930419CBF128
+643946F579B492BABEB5FF5344178C6228E248C30A432EF963C89C934DD7F941
+8B5F18C639B5AFB2304A230C398E47D59EC0D5BC6F7A263D62E190132251A709
+B05C4DC9C25B96632CE8EC9698425224E57DDF235BE00C08FFC4ECBEF043D7D0
+913B6F8F71E745BDF4AD65015FF0A16BA26E747C0EFAD81C9E223C0327D1FD15
+C4FC3DE6D4D8E99D504BD5D966C62CCA25ACDFE4D8A400093696CAB3932DF964
+6CB53329B317CEF79FBBEE270841C77E730EF1C1D60CB5DB80D82190B8FC25CB
+79C19156126766C00E01C1866FC770A2427751B79D9CE9CD1A5C5A4DD0C0A9F0
+51029696BA84E57E92D29477C7AFCC6DD1DC5BF8CED0667C22677F9D7765768B
+FE05D9847DFC7A8B1A9B3A7A2F8DE11D1BB946BEE4250834BD3E77087C38F973
+8D5B6076EED6EFE579B3A40C6CD0AC1F55FF2F5FB7D26AA7DD5BA781352DAB59
+C0899D93D6A200B46363C18DBF0E022CA522EC8B58D2B9C5E2D07619F5C4EDF3
+A799A694BB017069A1B25B10170520B7C94BB213DDB44A5B46648D24398A1393
+1E08DD8A0107D05EFB3E58A4EDCE5BB13EBFA821B16A3950A0B32F4A2320D69B
+3311D2D5C8419E4AE8D74CDB03D1531840C5515C882E76AC8C1393B2B1142F5C
+CB1881323C9A88246BC295EA05AAD126B6A6F399786AC3BCEA819A798C399930
+65824C283DE98D6AC32C21CC1E4FCD07CD80CAD93CBCC77B6500D449111111DD
+40A38F73F1C63FD25B9245620AF3EED4BBEB5EE268AD6362DDC9ACE2884A9D64
+68EFB4EFA3659F4F113C89B4D7004A851F226E610120FD5044F1709A646B7EB1
+301BE718D5D98C5F5A039A5A08E68AAB9B2935E601E7822CE739C89085E02B50
+582C18527D3D2E1CDEB423DAF7B4890FE4974E8766D1916D98EA6D985C8EACBA
+97E947C96DDC0949F7D139DCCB4EF8D59CBC6F54441EBEF39222C96EBD29C04B
+5AF641E8B2DB79B7080F7AD81F479084D1E89C54E901B48D19268FD0EE1AB25A
+2D9AFA5413E6B173ED6F54C4D1734A40DD61CD2E874E59FEA0E4D63591FE3A0D
+2916CF64A54E5F86506AB0B66CEAEF59A63BF2170CE68B9294ABBA57E9735675
+76303E0878DE1834F3B2C90EA21464823600C03648C6F4617BEB25BAC9F04EC5
+F677EB0BDA2746FEA5D93101CAE0ECBEC2B036B330978B82FF1C77CC2C140504
+A9E17B25012681BCB24AD5426BDCFD117F329AAFE0351F7AE5347EC69E5185CE
+1338F4290B9DAECCEF19227FB696F52851620FFD267FA544FDFC335CFC675A35
+243AB4020C47F4394EA51A6ED0002D0E635E4E3C68281C6D23F59F70E14BE60A
+EF2DE2EBDE4C409F56DCE40CBE71D221A43F1DEFFE0EF9E723FAA2D173A206E8
+82E35FFB0C8EFC74C77B6524DBF907F3BF87DB7454A107950F2B2521480531F1
+359C8C024E4D652BF2B6A619CD2CFB29AEDE09ED9FB79C2AD97351553426C481
+87E353CD26CEB4A17BA46329E79694947A92077942495B9760E78C29255623ED
+100A749C943777F03D5FE21FABFFDFBCBF741ACCEF325C371276266C390F9A16
+A8272E096511A56A887E637E15EE84EB4730BB3D18F9461C79DAB4948D4E13C8
+7341C5FC3480329A0BE56251D2B25C84ED6069059B354631C314A03A11B6A299
+9C052BD3AF064BA64F0D7CA8D1583EA5BACA97A53AEBCF3D3E6453FC27C3FCBD
+FC4C6E6B327B0DC61ACE71250B7BF344F0B4AC77C8FDF6A747F4056284C33343
+71D206F346790E75480C3F663806CF6517168942BDC9DA7C8E8ADA8951B3FBA2
+1BBDB6AA8389D3CA5FA9CB5EB104BAC7845BCCC3C152FCC20CB93CE4F3408489
+CEA23C04898CA14B3178D3403F70C23BE754B2AB0D2186C87F503DCA589BB66E
+BF0ED582D4DB0DF842CE4164B7C925DF4E50D3B21AF6F8921F265AD65730443F
+A7407F55C0727DFE5B033CB478D92577E599639E4F0551A4660470FF70D87E1D
+8FC1DB689A2465148D3DEC9D7712FA16293E3FDAFD508B1CBA825FAFAC161FF8
+42AED83B9AA5C990180D455375D028816329AA52AB725E4958EDD852E2C84095
+1829DA85D95DDC8231A49FADFBF223CF9452BC8E92319563DA451E88F4D65C4C
+9CB61C3B1F92BF25F6A9EC49E650D190EE8B16180D651AB24466AFB43401ACF7
+A8E743FE1EA58CEA36A40B5908E2EE34E6123679061A5F10F7C46C861E5F7CBA
+084D35860E4160983FAC95BEEAC8A12142D5598A32DA4C3EE03C889D8E4C353C
+C1CE185B406F0EC94B369895DE94F9F890FAA67AB834BD9CC5FACD21CB1460B3
+5461231BD38D3F50BBE49D7D9847F6151D5BC0A6F3CD177FAA48879265ECDBCE
+1CE0424903A6B2C71FD760B5519CF4508D103F2540845AD971E7FE6EFA9275D7
+C8CE848C06D70FCCEBA0C27DBB064D06687434911FA5906C01B78D4E19EDDF7A
+CF2F32FE7135E5E42E32A7CF782327EDA6C07E9F46785E6E031E06D6454EF5AD
+AA6B538BD359B9CC4AA7F67D11204112405C6BEA820156C0BEF02EC578D2CD23
+6B2AAF7752D87D3F1B64D9F86E2FEECA2103F81151E2766FA36957720E8D9D27
+D49A55C8BE2462FA4E6AB39E14F39818D2AD0D462A77426CF54ABCA3A1BF75D9
+00D8BD7BCBEEB1B564F8A99F43C575174A1F0F7EDC2054FBEB3336BBABB58728
+629F2099DAE4D464DD09798109A6744B2D229820C1D89F5854F0DDF6926564B1
+7F006BCBEC2ADF20E5BB5A87B7E9DCA62F2E7B7A48533B0CC7B93D781567E37D
+6E52202828DDAD86CAC5F1AE44C48497526ECBDA2F9F802BCFEEE7E71CAF660A
+96894A1CB87B345C0C9A949D25D633CB1CCD16363171936ADC31617A9AE9C44C
+28D8E5BD9868B0A133B1322C55D2FDF91073882BDC0600B2FE550F2CAAA3C190
+F2A30BBCC6E316C7F33B1D71734F1FE7BA762E31EF42B210698E6537AD98FD9C
+7A10B7C9314105A65869D0C8517B2CBA758912296E4616C5748519B63072C48F
+FC638F8C21AD17131313587DC0537ACE3F37005D45CD48EF3D3834252F6A30BC
+22A6E02A14A189C2F9323D7FCEBCE097B28AFB9B054483DD6B5B9CFA691679A0
+443962D22F3277AFFDFEB646FD76254CE3293F64BEADC57F5757E1B74F7CFE00
+3E18DF9E0FD11353E19709BE04595A3614482075CEDDBB50D581D9D64E92EDF0
+6B01B65C0F12D1822431AD8117B91244D06D570B3CD47A7B85237A3A382E977A
+7667BC7873A29A2E5C83902E49F3CD52807A5D9CC6100EAF23FED2533617E888
+9FF279204684A57572A56B024E7CB1F26B7138D276F12F892C93DFEF2D55FC05
+7ABA861B1CDFF7F0D8006A244F02D540FBB479C4A4A79CC3300BA33B07EE7D9E
+D43367FBDEF27AA395F3EA0EA520B1E5B95648AFFAC97C80DF18A05B9798154F
+5B9E31D1574DFF3A3B2C8F68CC902DFE425D832318D727B4F4227FEA537F471C
+438465BC641984D47CC8871B35D54B200F31B7EEA6E41816012C0B569CB0D2A1
+08188A36FA40689628EF7B0D8B131135CB9FA8DE9D
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR17
+%!PS-AdobeFont-1.1: CMR17 1.0
+%%CreationDate: 1991 Aug 20 16:38:24
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR17) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR17 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-33 -250 945 749}readonly def
+/UniqueID 5000795 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F075EA0A10A15B0ED05D5039DA41B32B16E95
+A3CE9725A429B35BAD796912FC328E3A28F96FCADA20A598E247755E7E7FF801
+BDB00E9B9B086BDBE6EDCF841A3EAFC6F5284FED3C634085BA4EE0FC6A026E96
+96D55575481B007BF93CA452EE3F71D83FAAB3D9DEDD2A8F96C5840EAE5BE5DC
+9322E81DFF5E250DEB386E12A49FC9FBF9B4C25C3283F3CEA74B8278A1B09DA7
+E9AE4FBAAF23EDF5A3E07D39385D521547C3AAAB8EB70549756EBA8EF445AF4A
+497CA924ACCC3DD5456F8E2C7E36946A5BF14E2E959895F7C94F49137256BE46
+4A238684D52792234869EAE1A6D8ADF4E138B79472D2A90A6CA99E2394CC20CD
+3841733046175B20CEBE372327BF13428EED6A3E2FDF84C2DBA4B0AD584EE9DF
+B51828D3B8F385846158C29C9AC3496CB9692DD10219697B2ED4D425C3957FD8
+C4600D76E045C561216EF05D38177243C314877A69A1C22E3BEC611A2EE5A216
+9B7C264CF6D1839DBBD78A40610F2C0D7C2FE09FFA9822FF55035AD52546970F
+83EED2D30EABB1F303091EBC11A5379B12BB3F405E371519A53EA9D66174ED25
+A2E55463EC71A97BE4C04B39E68112956117C8252DB6FB14AB64534B4BCD568B
+246DB833982B38CDE7268BBF74B6B0C18091E1B1F87D32D66F4DD023D1F10D2A
+7736A960F72AC01F733A11023832CD68FB6288A5977743F781214D8FA9C0C3F7
+80001321D4397771F728FD9EE57CFE7D9192B887EC883EB1505068261DC40089
+7B7D2820F06515CD74513521F6397FEAB3AD3572D9A8269430E407E357422461
+1785FC2782047F4C0339D79B16862D939F3A37F78E4E2174E4FBF132539CB760
+207999FF86F6A3EBE48EB0A1CA635450FDEEF79EB16D853F3BF4B7A887B6794E
+6C09C4B9C00804F4A8EF339D38CCB41B1883CF72D167D76BED1E9E1D3DFC787D
+E2B5C3CCBB79DB105A4A03AB60F4AC27F74DC9C0FE5985E1D8D133183E4A622C
+C62A0C38B5F56120755C1E54325794C28E7633B088EFAE6D7CF46855B18C8EB7
+01FCC24C8FD6681D09A43236F9012AF1EEFC863AC1F4500795147C932BA52C47
+B12956C00306A22CFE19C97A69ECC174E7197AD0E6F9F78804E592C9CDF97BBD
+F332FE3F1294D636BD3205C9B7EB7DAD5613F0510BB914969B5CD7F695A7E9BC
+C178E60127D70486D86A61676933EDC19388D61AB459C4113ACACE3ADF2D2B07
+2D7FFD17C06BE1CF7BB9355DF476E06CCFA2A43016CCC8F5924953286E66A974
+400E1E4BA50E3E13389064626F7085B1A1F0EA4962DA90863419798217B2F5CF
+5E85B5DA76F4ACC0E1464F4121980CCA282CF164D0B78C8BFF9657C05C6B5C07
+3A8032FD835FC433BCAC796AE88CED8C4CD8B043DECC191F4365108797E323C7
+67E1F937C84EA80BEF6098D36C46A20FF47F19DE8F83D9A40C281AB23133D14C
+B9AFA9CCDEEEF8FFEF6EA8B2DC291855C4DE36A2ABE0599117589227DF6C7BEE
+91A835EEA5EFDAD8E34C485350290AB532E777329B03D524CEE744BEB773789D
+EC3B9CA92F82FDA01B3978B98F2F8A44E1590E6E28F6728BBE78D21F3E1E565B
+A97F367B307A9C1B5ED184CD5C5997DA972DE2AFD7F5F64B0870BFE707A5CA61
+8ED10E3D53FA3B02241935CB4B15A6A1A012A4487F87913643917609CD6E4878
+BB3E88698026A7A4FBF7FE4B5834CB63502A0C96CB8790DEF38971EDAFD3B1D0
+5CEF889ECA3CB099427D1EEAA2DD0AB3FCEF164225244350D61545BB7983E351
+5336E29D0BAA9574CF43D3A48A47AD24C0CC7DB1E45590EDE3C7E283363D0891
+9CEE703F7B55960B7F95D68E8C891F72842A64F537DFA432AD001DA24388996B
+7E53C94B2267BAA5462F47EBB95A53281F7FEBC30CDA011546330D6F859F1072
+AE34BC27AA545B962AE6D01895D2BED9294EB17EDC758D54EAA78A0D816A05A0
+AA137F5CBF1707887FC48D2AD1F9B864B06732253C650B764024BC2FAE350306
+89A797E5648A99D719E00F67D981C2C38E45F317B849874A13F29E8F6B3F9742
+2CE8ACAB4D81B3D93322F63CCD0E3500B5116C7992E3B1D74859EECE6D67B347
+95CB0EE06A618E65162483B5C0DD5A78A4D049295571B536F023CF0D970C241E
+508E3A73B29D98CC2008ED4A58D908EAF63F9DACFB7A1F5EC420E84BB0E2477C
+6625E076BF6A6C5FFE2630C4F8C7783C59A2A26BA716624F96B5B1E36AC44513
+820DAAB27E34ADFC18E9AFF6896A86710153BA9F54517BE3B0A967799CC59475
+98029BF1F0C081016CEF4C7C5524BD8331652CD582B31C9851A48578C859E254
+D96521FE93F3B7C262459AECCF56D5CDE3B28E7E78059ABDB673892EA8156568
+5CC04A336D8ABBFA90C8D1AFDC09E4F15B3ACEBB910285628CB6591C32CCACA5
+CB6CCF06ED3EBA032DD54B867E5CA5DC9F3D38026E41E68E76792C79147FBCDA
+497EE62D48B4E548F173F59A75FC0C0D930A16E7E691733B0FDA7626D3C8ED96
+2A2CD48E85152DFC0B3B81A07408FF23AA11DADA6092209E76D872A116DEC22A
+2CACE366C837EB7DB69339CFAF2016FF9742E3B6D67A677087F0730DF90A9730
+CDB4B3A7A66FBD1977838998C056A333A8985E99DE24DF499D193ED48489D54F
+1923791588FC04AF548B05178D43F4106BD8B7F11695B254C427DFCAF95DA99F
+58577C50CE6805208A2B94CA654A62DAC4369E1B9062A869B4FAE9DDBC649EAC
+F3FFCC63C84EFF948D8668043E72C81EAA54D572500AA8859A3E3F2294375542
+836FA5E43A5F057A10F36E709B92D6068C871F7796B3252A7D58643297CB4010
+225B3295670A95A65DDD6F802BD2DD2FAAC7F8054C32D1E41A14933D1C38B383
+39229E6B76127BC46F966E53FC51E1BDF3BCB6BE426DEFFB4A27405E79FAAB4D
+C6BB575A0EB581551A162342F3828EB6F083EAD7D4C605DB213169D08C17CC2C
+199CE268CD37D6645773353890D751DE0640F73FD16466443443E4AB82DF7A42
+33812BDED7165FD04AC44349B82F48411421A83D65A01434E995C944EDCA458B
+A42BAE838661F3D6AFA96AAC9B40128D5E63C7FB68813047646C6641C8000AD5
+9D6646D60F16ACB29F50ABBB6DAF0B2B5867BFB7F9892C84AA4B38C6ECF0350E
+5A03C74F54C86B5ED002CCD2C62E11204BBC388A8FEC14122925C146E56A81B0
+9DBD49B512F0F870C63EF931B16D5328238A46A90AF5FAB245ED8D9CB3FAC8F4
+C23F873126BB3E01EF4D462B9536F287EF5E341F2A5EF42BA45CF58D6F1A753B
+C0385B7ED5AB05BFAF68CF54F1A36B161E1054732E30FA5B78E82AA8759446FA
+09DA646A140A317757A9DBEEE84AD778F0F93F67449464D94A0DBDE401207BCE
+B2E461883B21C85A19ED5847EAB32C069171FCB8D29EB32DEDDEAA415FE9012A
+BF6F222CAE996419C427C36EC3DFC8C44787415677C4866238FA1C8A46509E50
+FE48A7BD79A59BABF4F9445B14D0546764DE0192D7BF8E5006223FAB0D0E520D
+952BC104C24FF69841ADEE5CBC7E2C2AB2829CAED56769A6FBB49705168E5F6D
+C5FEC43A25F10764AE14EA5CA32C4C48BB4C68BE7D562CC5F17E337F89C0E19E
+8880415D285BE5DF7FD9D49EC3DCAD00BCC7947D38E679A7408DDF38C8475EE8
+0F36BDBA830190AD01BB4FE4173EA2D9CA30AAC643FA0F2C0610236324AB806A
+91468DEEDF522624252E5F919627461CBE9505420CDEB12E7404946A89C38510
+6018AAFDE6E5F88C1D5C4631F5B62510308F92954CF6E0F2A3A45C224F070AC3
+8608E777682ED57C19658BC59E2F9BAE7D8B57C1C932B855A6E6F30436CD169E
+6EE32E7D1DCF3C204F82B6933632C707A4DF21C364CB6EF935D5D90B7F21B12B
+DA3904153564564F70566EB05B34EB806151F7AA31EFE80557D7455741B1D387
+620BC75D667321C6AF5CFB63FE1C2A0208A6E9D1CE2232787C40FF8DF4185171
+1F8A8DA34633B80F4A0778235445B6B78C86CE7F418924A4A6443AE4D2383CCB
+EA2A5D6427A5C9B71EA3DB5E8F0986CA0211185335FB2F12B89090EAD3794975
+395017EE2048D296B18BA11B541ABEB1534063642F2580201F268C9D2681E417
+A70525980915AA3F0ECCF8F19630F84DFBD60131F1C038DABD78CE110C18DE93
+DD59A810AA6B35765F5630568C71216926182F2A97A92592BC56BD164577291E
+8291E149087D102CC1F5AD876FE3D8D39C13EC632C538E8122532A327D5D4E4B
+F373812B8C7C4C8D96789EA68563C9A914159F838C5C9D2295CDB89A2C01A4CC
+6263FE4FAFDD1312A937381CAF85FDCAD36D4A036466453FE6CA2D160BCAE1A4
+0EA2A8F383FE35B0FCF83B184D57BF107AE8B3940D4067A144D3B4163FC23379
+66CF44C5727C5572F569038658F3E9463A179C308894650853517433FA79995B
+AB26DE53B7EDD37573BEB7D5A3A48DD80FAB953960C071E6B636187ED79FFA63
+95EB6D428DC4F53146FEFB6CB2BA2708C1F31AE43C474CC719456C4BCBB6EBD6
+1B940A1F7C8A274CEB6842E361FF085C6C95B8392D97A29797335388B5A5AFEA
+288571FD735061A9CEE603636A2794C412BAE389F18773831A85EE75928148F5
+4734F98218537554C1069389CB2114A10BAAEEFCFD513C2FCF3D318690F3FE96
+7CA81FAB9F6324A8EDAE3895E4064CED5DE5E48C66840288B3008D88C92856C0
+54607F2FD8B4E1F8AFB658E8C57FA366A551FA13A13E23D7654D508095151AA9
+2272B34094568E32578E68A2E8970E1FD89D8042B4405FCB7727DEFCA01C1787
+60AA5FE3FC2617D26B8AA9AED931D06E94350555D561975AF9EF72F2525A4765
+7F06E6CCC3517CE95C66F5CC887E8A5BAE6370903869D3526C0BC9979372B3BD
+DEE70F75614F3B617688DFBD9B04E4A04B00B7400268B7DE5C99AFA4D5D3BAA0
+9EF954EF4DE8E18B3D641A7D872096315510BD21C00C5CD061832CC5705D6DE3
+FBFF4B1A8C1A7D3BCC41A3ACE3984E08838EE3F2D27B5F98F3F0720367684044
+1034177735E07DE40A22E02F5671FC12831FA86A85B8DE157405603BB01E5FE0
+EA5C96C82B1BF2A7FB93B4A505FCE75E6AA8E22A4A36627A4E0E3A18C604C115
+B3D62A94127C9EC329B6F696637A085AD8DF328771141CFAD67F088F944109A7
+C701C7437B01FCC95888DBE70EA60C63EB0F2F1FB6EE56C15EC3D1CA8E088881
+C0D9836D7B6BBE59CB77724371B7A02742041B4BBEB6D455084B39D67A687743
+42B2EE00BCF43C698B0290E533CDC7F34429402301D92F2282F11908B8735013
+00675964D24F74F08F5B00328EC2569F7B2731B36AFFF1EDBF85B8E21F27515A
+C79E4BBCC9D6372191D25FC7A8D3E2AA191538FA8D28E1AD
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+TeXDict begin 39158280 55380996 1000 600 600 (first-steps.dvi)
+@start /Fa 193[71 1[71 60[{ TeXaae443f0Encoding ReEncodeFont }2
+90.9091 /CMMI10 rf /Fb 133[50 59 2[59 62 44 44 46 1[62
+56 62 93 31 59 1[31 62 56 1[51 1[50 62 54 9[116 2[78
+1[84 1[77 7[88 1[70 1[86 81 8[31 2[56 56 56 56 56 56
+56 2[31 37 32[62 12[{ TeXf7b6d320Encoding ReEncodeFont }39
+99.6264 /CMBX12 rf /Fc 134[44 4[30 37 38 3[51 74 5[42
+1[42 3[46 6[56 34[46 3[46 46 1[46 48[{
+ TeX74afc74cEncoding ReEncodeFont }14 90.9091 /CMTI10
+rf /Fd 166[68 1[93 1[68 66 51 67 1[62 71 68 83 57 71
+1[33 68 71 59 62 69 66 64 68 10[45 45 1[45 45 50[{
+ TeXf7b6d320Encoding ReEncodeFont }25 90.9091 /CMSL10
+rf /Fe 133[48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 1[48 48 48 48 48 48 48 48 48 7[48 48 48 48 48 48
+48 48 48 48 48 48 48 48 2[48 48 48 48 48 48 48 48 48
+48 2[48 2[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+2[48 48 5[48 34[{ TeX09fbbfacEncoding ReEncodeFont }68
+90.9091 /CMTT10 rf /Ff 129[45 3[40 48 48 66 48 51 35
+36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51
+45 7[68 1[93 1[68 66 51 67 1[62 71 68 83 57 2[33 68 71
+59 62 69 66 64 68 3[71 3[45 45 45 45 45 45 45 45 45 45
+45 25 30 25 71 1[35 35 25 3[76 20[76 51 51 53 11[{
+ TeXf7b6d320Encoding ReEncodeFont }71 90.9091 /CMR10
+rf /Fg 134[71 1[97 1[75 52 53 55 1[75 67 75 112 37 71
+1[37 75 67 1[61 75 60 75 65 20[81 2[50 4[103 97 12[67
+67 67 67 67 67 36[75 12[{ TeXf7b6d320Encoding ReEncodeFont }31
+119.552 /CMBX12 rf /Fh 139[38 1[38 1[54 1[54 1[27 51
+1[27 54 2[43 1[43 1[49 11[73 1[54 13[66 75 9[27 1[49
+2[49 49 49 49 49 49 49 2[27 44[{ TeXf7b6d320Encoding ReEncodeFont }25
+99.6264 /CMR12 rf /Fi 136[96 70 73 51 52 51 1[73 66 73
+4[36 73 66 1[58 73 58 1[66 29[96 1[99 25[36 39[{
+ TeXf7b6d320Encoding ReEncodeFont }19 143.462 /CMR17
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%PaperSize: A4
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 433 763 a Fi(A)44 b(user's)e(p)t(ersp)t(ectiv)l
+(e)i(on)f(getting)g(started)f(with)h(Carp)t(et)1234 1016
+y Fh(Ulric)m(h)34 b(Sp)s(erhak)m(e,)g(Erik)f(Sc)m(hnetter)1326
+1219 y(Date:)43 b(2004/08/05)30 b(14:43:52)-94 1605 y
+Fg(1)134 b(In)l(tro)t(duction)-94 1808 y Ff(These)32
+b(notes)h(pro)m(vide)g(information)g(on)g(ho)m(w)g(to)g(install)h(and)e
+(use)g(the)h(pac)m(k)-5 b(age)35 b(Carp)s(et)d(as)h(seen)g(from)g(a)g
+(user's)-94 1921 y(p)s(oin)m(t)22 b(of)h(view.)38 b(Carp)s(et)22
+b(is)h(a)g(set)g(of)g(Thorns)e(that)i(pro)m(vide)g(\014xed)f(and)g(to)h
+(some)g(exten)m(t)i(adapted)d(mesh)g(re\014nemen)m(t)-94
+2034 y(in)33 b(the)h(Cactus)g(en)m(vironmen)m(t.)51 b(As)34
+b(Cactus)g(is)f(a)h(necessary)h(requiremen)m(t)f(for)f(using)g(Carp)s
+(et,)h(these)h(notes)f(will)-94 2147 y(inevitably)d(con)m(tain)g(some)g
+(information)g(ab)s(out)f(Cactus)h(as)f(w)m(ell.)47 2260
+y(The)i(reader)g(should)g(regard)g(these)h(notes)g(as)g(a)g(\014rst)f
+(draft)g(and)g(the)g(information)h(represen)m(ts)g(the)f(author's)-94
+2373 y(p)s(ersonal)25 b(exp)s(eriences)g(rather)h(than)f(an)h
+(exhaustiv)m(e)g(recip)s(e)g(on)f(getting)j(Carp)s(et)d(to)h(w)m(ork)g
+(on)f(an)h(arbitrary)f(giv)m(en)-94 2486 y(platform.)69
+b(In)39 b(this)h(sense)f(I)h(am)g(hop)s(eful)f(that)h(users)f(as)h(w)m
+(ell)h(as)f(dev)m(elop)s(ers)h(will)f(con)m(tin)m(ue)h(to)f(add)g(to)g
+(this)-94 2599 y(do)s(cumen)m(t)30 b(to)h(mak)m(e)g(it)g(more)g(useful)
+e(in)h(the)h(future.)47 2712 y(Useful)h(starting)h(p)s(oin)m(ts)g(for)f
+(retrieving)h(more)g(detailed)g(information)g(on)f(v)-5
+b(arious)33 b(issues)f(are)h(the)g(pro)5 b(ject's)-94
+2825 y(w)m(eb)30 b(pages)283 3050 y Fe(http://www.cactuscode.or)o(g)283
+3276 y(http://www.carpetcode.or)o(g)-94 3676 y Fg(2)134
+b(Do)l(wnloading)47 b(the)e(necessary)g(pac)l(k)-7 b(ages)-94
+3878 y Ff(One)27 b(\014rst)h(needs)g(to)h(do)m(wnload)g(the)g(Cactus)f
+(v)m(ersion)h(4.0.13)i(\(or)e(alternativ)m(ely)i(for)d(the)h(more)f
+(daring)g(the)h(dev)m(el-)-94 3991 y(opmen)m(t)e(v)m(ersion\).)41
+b(A)28 b(more)g(detailed)g(description)g(ab)s(out)f(ho)m(w)h(this)f(is)
+h(done)f(can)h(b)s(e)f(found)f(on)i(the)f(Cactus)h(w)m(eb)-94
+4104 y(page)1317 4292 y Fe(http://www.cactuscode.or)o(g)-94
+4480 y Ff(Here)46 b(w)m(e)h(will)g(summarize)f(the)h(required)e(steps)i
+(for)f(do)m(wnloading)g(the)h(complete)h(Cactus-4.0.13)h(pac)m(k)-5
+b(age.)-94 4592 y(Change)30 b(to)h(a)g(suitable)g(directory)f(on)h(y)m
+(our)f(system)h(and)e(log)j(on)m(to)f(the)g(Cactus)f(cvs)h(serv)m(er)g
+(via)283 4818 y Fe(cvs)47 b(-d)g(:pserver:cvs)p 1199
+4818 29 4 v 31 w(anon@cvs.cactuscode.org:)o(/cac)o(tus)41
+b(login)47 5044 y Ff(whic)m(h)33 b(will)g(prompt)f(y)m(ou)i(for)f(a)g
+(passw)m(ord)g(whic)m(h)g(is)g Fe(anon)p Ff(.)48 b(F)-8
+b(or)34 b(the)f(dev)m(elopmen)m(t)i(v)m(ersion)e(y)m(ou)h(will)f(need)
+-94 5157 y(to)f(c)m(ho)s(ose)i(the)e(directory)h Fe(/cactusdevcvs)28
+b Ff(instead.)47 b(Next)33 b(c)m(hec)m(k)h(out)e(the)h(Cactus)f
+(\015esh)g(whic)m(h)f(will)i(create)h(a)-94 5270 y(directory)c
+Fe(Cactus)f Ff(under)g(y)m(our)h(curren)m(t)g(lo)s(cation)1891
+5753 y(1)p eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop -94 100 a Fd(2)91 b(DO)m(WNLO)m(ADING)32
+b(THE)e(NECESSAR)-8 b(Y)30 b(P)-8 b(A)m(CKA)m(GES)1754
+b Ff(2)283 399 y Fe(cvs)47 b(-d)g(:pserver:cvs)p 1199
+399 29 4 v 31 w(anon@cvs.cactuscode.org:)o(/cac)o(tus)41
+b(checkout)46 b(Cactus)47 624 y Ff(The)32 b(rest)h(of)g(the)g(cactus)h
+(c)m(hec)m(k)m(out)h(is)e(b)s(est)g(done)g(with)f(the)h(scripts)g(that)
+h(are)f(shipp)s(ed)e(as)i(part)g(of)g(Cactus.)-94 737
+y(Change)d(to)h(that)g(directory)283 963 y Fe(cd)47 b(Cactus)47
+1189 y Ff(and)29 b(en)m(ter)i(the)g(command)283 1415
+y Fe(make)47 b(checkout)47 1641 y Ff(That)39 b(will)h(giv)m(e)i(y)m(ou)
+e(v)-5 b(arious)40 b(options)g(to)g(c)m(ho)s(ose)h(those)f(parts)g(of)g
+(cactus)g(y)m(ou)g(w)m(an)m(t)h(to)f(c)m(k)m(ec)m(k)m(out.)73
+b(The)-94 1753 y(default)28 b(option)g Fc(arr)-5 b(angements)31
+b Ff(is)d(quite)h(satisfactory)h(for)e(this)g(purp)s(ose,)f(so)h(just)g
+(hit)g(return.)39 b(Y)-8 b(ou)28 b(will)h(then)f(b)s(e)-94
+1866 y(giv)m(en)35 b(a)f(list)h(of)f(\(at)h(the)g(time)g(of)f
+(writing\))g(13)h(Cactus)g(arrangemen)m(ts.)53 b(Getting)35
+b(them)f(all)h(is)g(a)f(go)s(o)s(d)g(idea,)i(so)-94 1979
+y(c)m(ho)s(ose)d(once)f(more)g(the)h(default)f(option)g(b)m(y)g
+(pressing)g(return.)44 b(Dep)s(ending)31 b(on)h(y)m(our)g(in)m(ternet)h
+(connection)g(this)-94 2092 y(ma)m(y)d(tak)m(e)h(a)f(while.)40
+b(Once)30 b(all)g(is)g(do)m(wnloaded)f(y)m(ou)h(w)m(an)m(t)h(to)f(quit)
+g(the)f(script.)41 b(This)29 b(is)g(not)h(the)g(default)f(option,)-94
+2205 y(so)h(t)m(yp)s(e)h Fe(q)f Ff(and)f(hit)i(return.)47
+2431 y(In)g(order)g(to)i(run)d(the)i(W)-8 b(a)m(v)m(eT)g(o)m(y)35
+b(example)e(that)f(comes)h(with)e(Carp)s(etExtra)h(\(see)g(b)s(elo)m
+(w\))h(y)m(ou)f(will)g(need)f(to)-94 2544 y(c)m(hec)m(k)g(out)g(Erik)f
+(Sc)m(hnetter's)h(pac)m(k)-5 b(age)32 b(T)-8 b(A)g(T.)31
+b(First)g(switc)m(h)g(the)f(directory)h(to)283 2770 y
+Fe(cd)47 b(arrangements)47 2995 y Ff(then)30 b(c)m(hec)m(k)m(out)283
+3221 y Fe(cvs)47 b(-d)g(:pserver:cvs)p 1199 3221 V 31
+w(anon@cvs.cactuscode.org:)o(/arr)o(ange)o(men)o(ts)42
+b(checkout)j(TAT)47 3447 y Ff(Again)34 b(this)f(ma)m(y)h(tak)m(e)h(a)f
+(little)i(time.)50 b(Finally)35 b(y)m(ou)f(will)f(ha)m(v)m(e)i(to)f(c)m
+(hec)m(k)h(out)f(the)g Fe(Carpet)e Ff(pac)m(k)-5 b(age.)52
+b(As)33 b(of)-94 3560 y(mid)d(April)h(2004)i(Carp)s(et)d(consists)i(of)
+f(4)g(arrangemen)m(ts.)44 b Fe(Carpet)29 b Ff(con)m(tains)j(all)g(the)g
+(necessary)f(thorns)f(y)m(ou)i(will)-94 3673 y(need)27
+b(to)i(run)e(Carp)s(et)h(in)g(the)g(\014rst)g(place.)41
+b(The)27 b(latest)j(cutting)f(edge)g(thorns)e(curren)m(tly)i(under)d
+(dev)m(elopmen)m(t)k(are)-94 3786 y(lo)s(cated)i(in)f
+Fe(CarpetDev)p Ff(.)40 b(Do)32 b(not)f(b)s(e)f(to)s(o)i(surprised,)d
+(though,)j(if)f(y)m(ou)g(\014nd)e(some)j(the)f(to)s(ols)h(in)f(there)g
+(not)g(to)h(b)s(e)-94 3899 y(fully)d(functional.)41 b(P)m(ac)m(k)-5
+b(ages)32 b(not)d(required)g(to)h(run)e Fe(Carpet)p Ff(,)h(but)f
+(probably)h(useful)g(for)g(v)-5 b(arious)29 b(purp)s(oses,)g(suc)m(h)
+-94 4012 y(as)f(scalar)h(w)m(a)m(v)m(e)h(examples,)f(are)f(lo)s(cated)i
+(in)d Fe(CarpetExtra)p Ff(.)37 b(Remain)28 b(in)g(the)g
+Fe(arrangements)d Ff(directory)k(for)e(this)-94 4125
+y(purp)s(ose)h(and)i(log)h(in)m(to)h(the)e(carp)s(et)h(cvs-serv)m(er)
+283 4350 y Fe(cvs)47 b(-d)g(:pserver:cvs)p 1199 4350
+V 31 w(anon@cvs.carpetcode.org:)o(/hom)o(e/cv)o(s/c)o(arpe)o(t)42
+b(login)47 4576 y Ff(the)30 b(passw)m(ord)g(b)s(eing)g(once)h(more)f
+Fe(anon)p Ff(.)40 b(Next)31 b(c)m(hec)m(k)m(out)i(Carp)s(et)d(b)m(y)g
+(t)m(yping)283 4802 y Fe(cvs)47 b(-d)g(:pserver:cvs)p
+1199 4802 V 31 w(anon@cvs.carpetcode.org:)o(/hom)o(e/cv)o(s/c)o(arpe)o
+(t)42 b(checkout)j(Carpet)283 4915 y(cvs)i(-d)g(:pserver:cvs)p
+1199 4915 V 31 w(anon@cvs.carpetcode.org:)o(/hom)o(e/cv)o(s/c)o(arpe)o
+(t)42 b(checkout)j(CarpetExtra)283 5028 y(cvs)i(-d)g(:pserver:cvs)p
+1199 5028 V 31 w(anon@cvs.carpetcode.org:)o(/hom)o(e/cv)o(s/c)o(arpe)o
+(t)42 b(checkout)j(CarpetDev)p eop end
+%%Page: 3 3
+TeXDict begin 3 2 bop -94 100 a Fd(3)91 b(DOCUMENT)-8
+b(A)g(TION)2991 b Ff(3)-94 399 y Fg(3)134 b(Do)t(cumen)l(tation)-94
+601 y Ff(Do)s(cumen)m(tation)36 b(ab)s(out)e(Cactus,)i(Carp)s(et)e(and)
+g(their)g(separate)i(thorns)e(comes)h(in)f(di\013eren)m(t)h(forms.)53
+b(Most)35 b(im-)-94 714 y(p)s(ortan)m(tly)k(y)m(ou)g(generate)i(the)e
+(UsersGuide)f(and)h(ReferenceMan)m(ual)h(for)f(Cactus)g(b)m(y)g(going)h
+(in)m(to)g(the)f Fe(Cactus)-94 827 y Ff(directory)30
+b(and)g(t)m(yping)283 940 y Fe(make)47 b(UsersGuide)283
+1166 y(make)g(ReferenceManual)283 1392 y(make)g(ArrangementDoc)283
+1618 y(make)g(ThornDoc)47 1843 y Ff(\(four)30 b(separate)h(commands\).)
+41 b(They)30 b(will)g(b)s(e)g(created)h(in)g(p)s(ostscript)e(format)i
+(under)e(the)i(directory)283 2069 y Fe(doc)47 2295 y
+Ff(relativ)m(e)k(to)g(y)m(our)e(curren)m(t)g(p)s(osition,)i(i.e.)16
+b(the)34 b(Cactus)g(directory)-8 b(.)51 b(In)33 b(addition)g(eac)m(h)i
+(thorn)e(ma)m(y)h(con)m(tain)h(a)-94 2408 y(sub)s(directory)h
+Fe(doc)g Ff(where)h(the)h(author)f(\(or)h(users\))f(ma)m(y)h(store)g
+(additional)g(do)s(cumen)m(tation,)j(t)m(ypically)e(in)e(the)-94
+2521 y(form)29 b(of)i(a)g(\014le)f Fe(documentation.tex)p
+Ff(.)-94 2807 y Fg(4)134 b(Compilers)-94 3010 y Ff(Before)34
+b(w)m(e)g(indulge)f(in)g(using)g(Cactus/Carp)s(et,)i(w)m(e)f(ha)m(v)m
+(e)g(to)g(address)f(issues)g(concerning)h(the)f(system)h(y)m(ou)g(are)
+-94 3123 y(w)m(orking)c(on.)40 b(W)-8 b(e)32 b(b)s(egin)d(with)h(the)g
+(compilers)h(although)f(w)m(e)h(will)f(not)g(b)s(e)g(able)g(to)h(deal)g
+(with)e(the)i(sub)5 b(ject)30 b(in)f(an)-94 3236 y(exhaustiv)m(e)g
+(fashion.)40 b(Basically)32 b(these)d(notes)g(list)h(our)e(exp)s
+(eriences)h(with)g(lo)s(cal)h(mac)m(hines)f(\(i.e.)42
+b(at)29 b(P)m(enn)g(State\))-94 3349 y(and)f(ma)m(y)i(or)g(ma)m(y)g
+(not)f(b)s(e)g(v)-5 b(alid)30 b(for)f(y)m(our)g(en)m(vironmen)m(t.)41
+b(Users)30 b(are)f(encouraged)h(to)h(add)d(their)i(exp)s(eriences)f(to)
+-94 3462 y(this)h(list.)47 3575 y(A)m(t)i(P)m(enn)f(State)i(w)m(e)f
+(largely)h(w)m(ork)e(with)h(the)f(In)m(tel)i(compilers)f(and)e(the)i
+(success)g(of)g(compilations)h(has)e(b)s(een)-94 3688
+y(found)25 b(to)i(dep)s(end)d(sensitiv)m(ely)k(on)e(whic)m(h)h(v)m
+(ersion)f(of)h(the)g(In)m(tel)g(compilers)f(w)m(e)h(are)g(using.)39
+b(W)-8 b(e)28 b(will)e(discuss)g(some)-94 3801 y(error)j(messages)j
+(encoun)m(tered)f(in)f(the)g(pro)s(cess)g(of)h(compiler)g(testing)g(b)s
+(elo)m(w.)47 3914 y(F)-8 b(ree)35 b(do)m(wnload)g(\(at)g(least)h(for)e
+(Lin)m(ux\))g(of)g(the)h(In)m(tel)g(compiler)g(\(F)-8
+b(ortran)35 b(and)f(C++\))g(for)g(non-commercial)-94
+4026 y(priv)-5 b(ate)30 b(or)h(academic)h(use)e(is)g(a)m(v)-5
+b(ailable)33 b(from)d(the)g(w)m(eb)h(page)488 4214 y
+Fe(http://downloadfinder.int)o(el.c)o(om/s)o(cri)o(pts-)o(df/s)o(upp)o
+(ort)p 2886 4214 29 4 v 28 w(intel.asp)-94 4402 y Ff(\(clic)m(k)d(on)d
+(Soft)m(w)m(are)j(Dev)m(elopmen)m(t,)h(c)m(hec)m(k)f(for)d(the)i
+(compilers)f(on)g(y)m(our)g(system)g(and)f(follo)m(w)j(their)e
+(instructions\).)47 4515 y(In)e(case)j(y)m(ou)f(ha)m(v)m(en't)g(got)h
+(ro)s(ot)f(access,)i(y)m(ou)e(ma)m(y)g(need)f(to)h(install)g(the)g
+(compiler)g(lo)s(cally)h(or)e(y)m(ou)h(will)g(ha)m(v)m(e)g(to)-94
+4628 y(ask)c(y)m(our)h(sys-admin.)38 b(Additional)23
+b(di\016culties)g(ma)m(y)h(arise)f(in)f(case)i(y)m(ou)f(ha)m(v)m(e)h
+(no)f(ro)s(ot)g(access,)i(i.e.)39 b(install)24 b(lo)s(cally)-8
+b(,)-94 4740 y(while)29 b(y)m(our)g(sys-admin)g(k)m(eeps)h(some)g
+(older)f(v)m(ersion)h(installed.)41 b(In)29 b(order)f(to)j(mak)m(e)f
+(sure)f(that)g(no)h(con\015ict)g(arises)-94 4853 y(thereof)d(\(e.g.)41
+b(b)m(y)27 b(linking)g(against)i(old)e(v)m(ersions)g(of)h(the)f
+(library\))g(the)g(en)m(vironmen)m(t)h(v)-5 b(ariable)28
+b Fe(LD)p 3334 4853 V 34 w(LIBRARY)p 3704 4853 V 32 w(PATH)-94
+4966 y Ff(m)m(ust)h(p)s(oin)m(t)g(to)i(y)m(our)e(lo)s(cal)i(new)e(v)m
+(ersion)h(and)f(not)g(to)i(the)e(old)h(v)m(ersion)g(in)f
+Fe(/usr/local)e Ff(or)i(wherev)m(er.)41 b(Y)-8 b(ou)30
+b(will)-94 5079 y(probably)f(end)g(up)f(with)i(error)f(messages)i(suc)m
+(h)f(as)g Fe(undefined)45 b(symbols)h(...)39 b Ff(otherwise.)i(W)-8
+b(e)31 b(decided)f(to)g(use)-94 5192 y(the)e(In)m(tel)h(compiler)g(for)
+f(b)s(oth)g(F)-8 b(ortran)29 b(and)f(C++)f(co)s(de.)40
+b(This)28 b(w)m(as)h(mainly)f(a)h(result)f(of)h(the)f(curren)m(t)g(v)m
+(ersion)h(of)-94 5305 y(g++)h(not)g(ha)m(ving)h(the)g(complete)h(stl)e
+(libraries)h(that)g(are)g(made)f(use)g(of)h(extensiv)m(ely)h(in)e(Carp)
+s(et.)-94 5418 y(An)i(imp)s(ortan)m(t)h(asp)s(ect)g(of)g(the)g(In)m
+(tel)g(compilers)h(is)e(that)i(they)f(come)g(in)g(v)-5
+b(arious)33 b(di\013eren)m(t)g(v)m(ersions.)48 b(Ev)m(en)33
+b(the)p eop end
+%%Page: 4 4
+TeXDict begin 4 3 bop -94 100 a Fd(5)91 b(LIBRARIES)3332
+b Ff(4)-94 399 y(same)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(\(sa)m(y)j
+(7.1\))f(comes)h(in)e(man)m(y)g(di\013eren)m(t)h(releases.)42
+b(Y)-8 b(ou)31 b(can)f(c)m(hec)m(k)i(this)f(b)m(y)f(t)m(yping)283
+624 y Fe(ifc)47 b(-V)47 850 y Ff(and)35 b(lik)m(ewise)i(for)e
+Fe(icc)p Ff(.)55 b(Note)37 b(in)e(particular)h(the)g(date)g(of)f(build)
+g(giv)m(en)h(in)f(the)h(form)f(of)h Fc(20030307Z)p Ff(.)j(This)-94
+963 y(corresp)s(onds)32 b(to)j(the)g(Marc)m(h)g(2003)h(build)d(of)h(v)m
+(ersion)h(7.1)g(and)f(caused)g(di\016culties)h(for)f(me.)53
+b(I)34 b(encoun)m(tered)g(an)-94 1076 y(error)29 b(message)j(lik)m(e)
+283 1302 y Fe(/home/terminator/sperhak)o(e/s)o(rc/2)o(004)p
+1917 1302 29 4 v 28 w(02)p 2042 1302 V 34 w(16)p 2172
+1302 V 34 w(cactus-FMR/configs/test)o(01/)o(buil)o(d/Ca)o(rpe)o(tLib)o
+(/)283 1415 y(data.cc\(173\):)92 b(error:)i(no)47 b(instance)e(of)i
+(overloaded)e(function)h("dist::datatype")283 1528 y(matches)g(the)h
+(argument)e(list)47 1753 y Ff(This)28 b(can)h(b)s(e)g(recti\014ed)g(b)m
+(y)g(switc)m(hing)g(to)h(a)g(new)m(er)e(release,)j(at)f(least)g(the)g
+(Septem)m(b)s(er)e(2003)j(build)d(of)h(v)m(ersion)-94
+1866 y(7.1)i(\(I'd)f(recommend)g(doing)h(that)g(for)f(b)s(oth)g(the)g
+(F)-8 b(ortran)31 b(and)f(the)h(C++)e(compiler\).)47
+1979 y(Some)d(Cactus-Carp)s(et)g(users)f(ha)m(v)m(e)i(rep)s(orted)e
+(problems,)h(suc)m(h)g(as)g(segmen)m(tation)i(faults,)f(b)m(y)f(using)g
+(the)g(most)-94 2092 y(recen)m(t)39 b(v)m(ersions)f(of)h(the)f(In)m
+(tel)h(compilers,)i(namely)d(the)h(Marc)m(h)g(2004)h(release)f(of)g(v)m
+(ersion)f(7.1)i(and)d(the)i(latest)-94 2205 y(v)m(ersion)32
+b(8.0.)48 b(So)32 b(far)g(w)m(e)h(ha)m(v)m(e)g(b)s(een)f(using)g(the)g
+(former)g(of)h(these)f(without)h(encoun)m(tering)g(an)m(y)f
+(di\016culties,)i(but)-94 2318 y(y)m(ou)c(should)g(probably)f(stic)m(k)
+j(to)f(the)f(Decem)m(b)s(er)i(or)e(Septem)m(b)s(er)g(2003)i(v)m(ersion)
+f(of)f(7.1)i(if)e(y)m(ou)h(can.)47 2431 y(On)h(m)m(y)i(Gen)m(to)s(o)g
+(Lin)m(ux)f(laptop,)i(on)e(the)h(other)f(hand,)h(I)f(exp)s(erienced)g
+(trouble)g(with)g(the)h(Septem)m(b)s(er)e(2003)-94 2544
+y(v)m(ersion)e(of)h(7.1.)42 b(I)30 b(receiv)m(ed)i(error)e(messages)h
+(lik)m(e)283 2770 y Fe(struct)46 b(stat)h(stat)p 1054
+2770 V 33 w(bbox)f(...)283 2883 y(Incomplete)f(components)g(in)i
+(structure)e(not)i(allowed)47 3108 y Ff(at)35 b(compilation)i(\(I)e(ha)
+m(v)m(e)h(forgotten)h(the)e(exact)i(w)m(ording,)f(but)e(y)m(ou'll)i
+(recognize)h(it\).)56 b(I)35 b(managed)g(to)h(w)m(ork)-94
+3221 y(around)g(this)h(b)m(y)g(using)g(the)g(In)m(tel)h(F)-8
+b(ortran)38 b(and)f(C++)f(compilers)i(v)m(ersion)g(8.0)g(\(build)f
+(Octob)s(er)g(2003\).)63 b(As)37 b(I)-94 3334 y(ha)m(v)m(e)g(not)g
+(done)g(extensiv)m(e)h(co)s(de)f(dev)m(elopmen)m(t)h(on)f(this)f
+(laptop,)j(though,)f(I)f(cannot)g(really)h(commen)m(t)f(on)g(the)-94
+3447 y(p)s(oten)m(tial)31 b(issues)f(concerning)h(the)g(8.0)g(v)m
+(ersion)g(men)m(tioned)g(ab)s(o)m(v)m(e.)47 3673 y(T)-8
+b(rouble)35 b(ma)m(y)h(also)h(arise)f(from)f(prepro)s(cessing)g(in)h
+(case)g(y)m(ou)g(are)g(using)g(RedHat)g(7.3)h(\(p)s(ossibly)e(also)h
+(with)-94 3786 y(other)26 b(v)m(ersions\).)40 b(This)26
+b(is)h(essen)m(tially)h(related)g(to)f(the)f(treatmen)m(t)j(of)d(white)
+h(space)g(in)f(F)-8 b(ortran)27 b(\014les.)40 b(Should)25
+b(y)m(ou)-94 3899 y(encoun)m(ter)32 b(rather)g(stupid)f(error)g
+(messages)i(whic)m(h)f(clearly)h(indicate)g(that)f(prop)s(er)f(lines)h
+(of)g(F)-8 b(ortran)33 b(ha)m(v)m(e)g(b)s(een)-94 4012
+y(corrupted)f(b)m(y)g(in)m(tro)s(ducing)h(white)g(space)g(\(e.g.)49
+b(line)33 b(breaks\))g(at)h(prepro)s(cessing,)f(y)m(ou)g(should)f(c)m
+(hec)m(k)i(y)m(our)f(cpp)-94 4125 y(and)c(p)s(ossibly)h(do)m(wnload)g
+(another)h(\(probably)f(older\))h(v)m(ersion.)41 b(Details)32
+b(ab)s(out)e(this)h(can)f(b)s(e)g(found)f(on)386 4289
+y Fe(http://www.cactuscode.org)o(/Do)o(cume)o(ntat)o(ion)o(/Arc)o(hite)
+o(ctu)o(res/)o(Linu)o(x.h)o(tml)-94 4454 y Ff(whic)m(h)34
+b(also)h(giv)m(es)h(a)f(link)f(to)h(the)g(prepro)s(cessor)f(of)g(the)h
+(older)g(RedHat)g(6.2)g(distribution.)53 b(I)34 b(do)m(wnloaded)h(that)
+-94 4567 y(older)30 b(v)m(ersion)h(and)f(it)h(solv)m(ed)g(the)f(prepro)
+s(cessing)g(problems)g(I)g(encoun)m(tered)h(prior)e(to)i(that.)-94
+4962 y Fg(5)134 b(Libraries)-94 5165 y Ff(As)33 b(m)m(uc)m(h)g(as)h
+(the)g(compiler)g(issue)f(is)g(strongly)h(dep)s(enden)m(t)e(on)i(y)m
+(our)f(platform,)h(the)g(exten)m(t)h(to)f(whic)m(h)f(y)m(ou)h(will)-94
+5278 y(ha)m(v)m(e)28 b(to)h(install)g(new)e(libraries)h(will)g(dep)s
+(end)e(on)h(what)h(y)m(our)g(system)g(administrator)g(has)f(already)i
+(done)e(for)h(y)m(ou.)-94 5391 y(Again)35 b(these)g(notes)h(cannot)f(b)
+s(e)f(exhaustiv)m(e)i(and)e(rather)h(fo)s(cus)f(on)h(our)f(exp)s
+(erience.)54 b(F)-8 b(eel)37 b(free,)f(as)f(b)s(efore,)g(to)-94
+5504 y(add)29 b(to)i(our)f(list.)p eop end
+%%Page: 5 5
+TeXDict begin 5 4 bop -94 100 a Fd(5)91 b(LIBRARIES)3332
+b Ff(5)-94 399 y Fb(5.1)112 b(HDF)37 b(library)-94 570
+y Ff(The)31 b(HDF5)j(library)e(is)h(required)f(for)g(handling)g
+(in/output)g(in)g(a)h(particular)g(binary)e(data)j(format.)47
+b(The)32 b(use)g(of)-94 683 y(these)38 b(libraries)g(in)g(Cactus/Carp)s
+(et)g(is)g(en)m(tirely)h(optional,)i(but)c(in)h(the)g(end)f(I)h(found)e
+(it)j(easier)g(to)f(install)h(the)-94 796 y(libraries)34
+b(than)f(to)i(con)m(vince)g(m)m(y)f(system)g(that)h(I)f(do)g(not)g(w)m
+(an)m(t)h(to)f(use)g(them.)51 b(They)34 b(should)f(b)s(e)g(useful)g(in)
+h(the)-94 909 y(long)c(run)f(an)m(yw)m(a)m(y)-8 b(,)33
+b(so)d(I)h(recommend)f(their)g(installation)i(unless)e(they)h(are)f
+(already)h(part)g(of)f(y)m(our)g(system.)47 1022 y(Let)h(us)e(start)i
+(with)f(the)h(hdf5)e(libraries.)41 b(The)30 b(binary)g(v)m(ersion)g
+(can)h(b)s(e)f(obtained)h(from)792 1209 y Fe(ftp://ftp.ncsa.uiuc.edu/)o
+(HDF)o(/HDF)o(5/hd)o(f5-)o(1.6.)o(1/bi)o(n)-94 1397 y
+Ff(As)f(b)s(efore)g(I)g(prefer)g(compiling)h(the)f(source)h(whic)m(h)f
+(y)m(ou)h(can)f(get)i(from)792 1585 y Fe(ftp://ftp.ncsa.uiuc.edu/)o
+(HDF)o(/HDF)o(5/hd)o(f5-)o(1.6.)o(1/sr)o(c)-94 1772 y
+Ff(Again)25 b(the)f(instructions)g(in)g(the)h Fe(INSTALL)d
+Ff(\014le)i(are)h(straigh)m(tforw)m(ard.)40 b(I)24 b(included)f(the)i
+(C++)e(in)m(terface)j(b)m(y)e(setting)-94 1885 y(the)30
+b(options)283 2111 y Fe(./configure)45 b(--enable-cxx)47
+2337 y Ff(and)37 b(used)f(the)i(v)-5 b(ariables)38 b
+Fe(CPPFLAGS)d Ff(and)i Fe(LDFLAGS)f Ff(to)i(ensure)e(that)i(the)g(szip)
+g(libraries)f(w)m(ere)h(found)e(\(see)-94 2450 y Fe(INSTALL)27
+b Ff(\014le\).)41 b(The)30 b(F)-8 b(ortran)30 b(in)m(terface)h(did)e
+(not)h(w)m(ork)g(for)g(me,)g(so)g(I)g(did)f(not)h(enable)g(that.)41
+b(In)29 b(future)g(v)m(ersions)-94 2563 y(of)38 b(this)g(do)s(cumen)m
+(t)g(this)g(issued)g(ma)m(y)h(b)s(e)f(readdressed.)63
+b(Finally)39 b(y)m(ou)g(ma)m(y)g(need)f(to)h(p)s(oin)m(t)f(the)h(en)m
+(vironmen)m(t)-94 2676 y(v)-5 b(ariable)31 b Fe(LD)p
+349 2676 29 4 v 33 w(LIBRARY)p 718 2676 V 33 w(PATH)e
+Ff(in)h(y)m(our)h Fe(.bashrc)d Ff(or)i Fe(.cshrc)f Ff(to)i(the)g
+(directory)g(con)m(taining)g(the)g(hdf5)f(library)-8
+b(.)-94 3032 y Fb(5.2)112 b(P)m(arallelization)-94 3204
+y Ff(This)35 b(subsection)h(is)g(relev)-5 b(an)m(t)37
+b(only)f(if)g(y)m(ou)h(plan)e(to)i(do)f(m)m(ulti)h(pro)s(cessor)e(runs)
+g(\(whic)m(h)h(y)m(ou)g(are)h(rather)f(lik)m(ely)-94
+3316 y(to)31 b(do,)h(though,)f(since)g(it)h(is)f(a)h(k)m(ey)g(feature)f
+(of)g(Cactus/Carp)s(et\).)44 b(There)30 b(are)i(v)-5
+b(arious)31 b(pac)m(k)-5 b(ages)33 b(that)f(tak)m(e)g(care)-94
+3429 y(of)i(parallelization,)k(suc)m(h)c(as)h Fe(MPICH)e
+Ff(or)h Fe(lam)f Ff(and)h(y)m(our)g(mac)m(hine)h(will)g(probably)e
+(come)j(equipp)s(ed)c(with)i(one)h(of)-94 3542 y(these.)47
+3655 y(I)d(ha)m(v)m(e)h(only)f(had)g(the)g(need)g(to)h(install)g(a)g
+(message)g(passing)f(in)m(terface)i Fe(\(MPI\))d Ff(on)h(m)m(y)g
+(laptop.)47 b(It's)32 b(a)h(single)-94 3768 y(pro)s(cessor)f(laptop)h
+(but)f(y)m(ou)h(can)g(em)m(ulate)h(m)m(ulti-pro)s(cessor)f(runs)e(none)
+h(the)h(less.)48 b(F)-8 b(urthermore)32 b(it)i(app)s(ears)d(to)-94
+3881 y(me)j(that)h(Carp)s(et)f(exp)s(ects)h Fe(MPI)f
+Ff(at)h(least)h(in)e(the)h(form)f(of)h(a)g(header)f(\014le)h
+Fe(mpi.h)p Ff(,)f(so)h(y)m(ou'd)g(b)s(etter)f(install)i(it.)53
+b(I)-94 3994 y(c)m(hose)31 b(the)f Fe(lam)g Ff(pac)m(k)-5
+b(age)32 b(for)e(this)h(purp)s(ose,)e(so)h(that)h(is)g(the)f(only)h
+(exp)s(erience)f(I)h(ha)m(v)m(e)g(to)g(rep)s(ort.)47
+4107 y(Installation)g(of)g(this)f(pac)m(k)-5 b(age)33
+b(w)m(as)d(straigh)m(tforw)m(ard)i(on)e(m)m(y)g(Gen)m(to)s(o)i(Lin)m
+(ux)e(laptop)h(b)m(y)f(t)m(yping)283 4333 y Fe(emerge)46
+b(lam-mpi)47 4558 y Ff(Dep)s(ending)31 b(on)h(y)m(our)g(Lin)m(ux)g
+(\015a)m(v)m(or)h(installation)h(ma)m(y)e(b)s(e)g(done)g(di\013eren)m
+(tly)-8 b(,)34 b(for)e(example)g(using)g Fe(rpm)p Ff(.)45
+b Fe(lam)-94 4671 y Ff(is)30 b(started)h(b)m(y)f(t)m(yping)283
+4897 y Fe(lamboot)47 5123 y Ff(and)f(then)h(executables)i(can)f(b)s(e)f
+(started)h(via)283 5349 y Fe(mpirun)46 b(-np)29 b Fa(<)p
+Ff(n)p Fa(>)h(<)p Ff(executable)p Fa(>)p eop end
+%%Page: 6 6
+TeXDict begin 6 5 bop -94 100 a Fd(6)91 b(CREA)-8 b(TING)30
+b(A)h(CONFIGURA)-8 b(TION)2411 b Ff(6)47 399 y(where)38
+b Fa(<)p Ff(n)p Fa(>)g Ff(is)h(the)g(n)m(um)m(b)s(er)f(of)h(pro)s
+(cessors)f(and)h Fa(<)p Ff(executable)p Fa(>)h Ff(the)f(binary)f
+(\014le)h(\(with)g(full)g(path\))g(y)m(ou)-94 511 y(w)m(an)m(t)31
+b(to)g(run.)-94 798 y Fg(6)134 b(Creating)47 b(a)e(con\014guration)-94
+1004 y Fb(6.1)112 b(The)38 b(con\014guration)g(\014le)-94
+1176 y Ff(Ev)m(en)m(tually)29 b(w)m(e)g(can)g(start)g(writing)f(a)h
+(con\014guration)g(\014le)f(for)g(a)h(Cactus-Carp)s(et)f(pro)5
+b(ject.)41 b(In)28 b(this)g(con\014guration)-94 1289
+y(\014le)37 b(the)g(paths)g(to)h(v)-5 b(arious)38 b(\014les,)h(suc)m(h)
+e(as)g(libraries)h(and)e(compilers)i(need)f(to)h(b)s(e)f(sp)s
+(eci\014ed.)60 b(Naturally)39 b(these)-94 1402 y(paths)29
+b(will)i(di\013er)f(from)g(mac)m(hine)h(to)g(mac)m(hine.)42
+b(In)29 b(this)i(subsection)f(I)g(will)h(assume)f(the)h(installation)h
+(path)283 1514 y Fe(/usr/local/)p Fa(<)p Ff(name)p Fa(>)47
+1740 y Ff(for)e(most)h(libraries,)h(where)e Fa(<)p Ff(name)p
+Fa(>)g Ff(is)h(the)g(name)g(of)f(the)h(library)-8 b(,)32
+b(e.g.)42 b Fe(hdf4)30 b Ff(or)h Fe(szip)p Ff(.)40 b(I)31
+b(further)e(assume)-94 1853 y(that)e(eac)m(h)h(of)g(these)f
+(directories)h(con)m(tains)g(sub)s(directories)f Fe(lib)f
+Ff(and)g Fe(include)f Ff(whic)m(h)i(con)m(tain)h(the)g(libraries)f(and)
+-94 1966 y(header)j(\014les.)40 b(Similarly)31 b(I)f(presume)f(that)i
+(all)h(compilers/prepro)s(cessors)e(are)h(installed)g(in)f(the)h
+(directory)283 2192 y Fe(/usr/local/for)p 961 2192 29
+4 v 30 w(carpet/bin)47 2418 y Ff(This)f(is,)h(of)h(course,)f(not)g
+(where)g(they)g(reside)g(on)g(y)m(our)g(mac)m(hine)h(\(nor)e(on)h
+(mine\),)h(but)e(it'll)j(b)s(e)d(su\016cien)m(t)h(for)-94
+2531 y(this)h(do)s(cumen)m(t)h(and)g(y)m(ou)g(will)h(merely)f(ha)m(v)m
+(e)h(to)g(replace)g(eac)m(h)g(of)g(these)f(paths)g(with)f(the)i
+(correct)g(one)f(on)g(y)m(our)-94 2644 y(system.)47 2756
+y(W)-8 b(e)28 b(are)g(no)m(w)g(in)f(the)h(p)s(osition)f(to)i(create)g
+(the)e(con\014guration)h(\014le,)h(sa)m(y)f Fe(mycode)p
+2829 2756 V 33 w(carpet.cfg)d Ff(\(y)m(ou)j(can)g(store)-94
+2869 y(that)g(\014le)f(wherev)m(er)g(y)m(ou)h(think)f(con)m(v)m(enien)m
+(t\).)42 b(W)-8 b(e)29 b(will)f(fo)s(cus)f(on)g(the)h(most)g(imp)s
+(ortan)m(t)f(en)m(tries)h(in)g(this)f(\014le)g(only)-8
+b(.)-94 2982 y(Please)26 b(refer)e(to)i(the)f(Cactus)g(do)s(cumen)m
+(tation)h(for)f(a)g(more)g(detailed)i(description.)38
+b(First)26 b(w)m(e)f(sp)s(ecify)g(information)-94 3095
+y(ab)s(out)30 b(the)g(compilers)283 3321 y Fe(F90)331
+b(/usr/local/for)p 1436 3321 V 30 w(carpet/bin/ifc)283
+3434 y(F77)g(/usr/local/for)p 1436 3434 V 30 w(carpet/bin/ifc)283
+3547 y(CC)378 b(/usr/local/for)p 1435 3547 V 31 w(carpet/bin/icc)283
+3660 y(CXX)331 b(/usr/local/for)p 1436 3660 V 30 w(carpet/bin/icc)283
+3773 y(CPP)g(/usr/local/for)p 1436 3773 V 30 w(carpet/bin/cpp)283
+3886 y(FPP)g(/usr/local/for)p 1436 3886 V 30 w(carpet/bin/cpp)47
+4111 y Ff(\(the)36 b(exact)h(amoun)m(t)f(of)f(white)h(space)g(b)s(et)m
+(w)m(een)g(the)g(v)-5 b(ariables)36 b Fe(F90,)47 b(F77,...)53
+b Ff(and)35 b(their)h(en)m(tries)g(should)-94 4224 y(not)28
+b(matter)i(and)e(y)m(ou)h(ma)m(y)g(ev)m(en)h(put)e(in)g(an)h(=)f
+(sign\).)41 b(Note)30 b(that)f(y)m(ou)g(do)f(not)h(need)g(to)g(sp)s
+(ecify)g(the)f(full)h(path)f(if)-94 4337 y(y)m(our)h(en)m(vironmen)m(t)
+g(v)-5 b(ariable)30 b Fe(PATH)e Ff(p)s(oin)m(ts)h(to)h(the)f(correct)i
+(v)m(ersions)e(of)h(the)f(compilers/prepro)s(cessors)g(already)-8
+b(.)-94 4450 y(Next)34 b(w)m(e)g(need)f(to)h(sp)s(ecify)f(information)h
+(ab)s(out)f(the)h(message)g(passing)g(in)m(terface.)51
+b(In)33 b(m)m(y)g(case)i(that)f(w)m(as)g Fe(lam)p Ff(,)-94
+4563 y(so)c(the)h(next)f(en)m(tries)h(in)f(m)m(y)h(\014le)f
+Fe(mycode)p 1367 4563 V 33 w(carpet.cfg)e Ff(are)283
+4789 y Fe(MPI)685 b(LAM)283 4902 y(LAM)p 433 4902 V 33
+w(INC)p 610 4902 V 34 w(DIR)331 b(/usr/include)283 5015
+y(LAM)p 433 5015 V 33 w(LIB)p 610 5015 V 34 w(DIR)g(/usr/lib)47
+5240 y Ff(In)34 b(case)i(y)m(ou)g(are)f(using)g(a)g(di\013eren)m(t)h
+Fe(MPI)e Ff(pac)m(k)-5 b(age)37 b(refer)e(to)h(the)f(Cactus)h(users)e
+(guide)h(to)h(\014nd)e(the)h(correct)-94 5353 y(en)m(try)j(for)g
+Fe(MPI)p Ff(.)f(Mak)m(e)j(sure)d(that)i(y)m(ou)f(sp)s(ecify)g(the)g
+(correct)h(paths)f(for)g(the)g(corresp)s(onding)f(header)h(\014les)g
+(and)-94 5466 y(libraries)30 b(\(ask)h(y)m(our)f(sys-admin)g(if)g
+(necessary\).)p eop end
+%%Page: 7 7
+TeXDict begin 7 6 bop -94 100 a Fd(6)91 b(CREA)-8 b(TING)30
+b(A)h(CONFIGURA)-8 b(TION)2411 b Ff(7)-94 399 y(Next)32
+b(w)m(e)g(sp)s(ecify)f(the)h(libraries)f(to)h(b)s(e)f(included)g(in)g
+(the)h(compilation.)45 b(F)-8 b(or)33 b(the)e(7.1)i(v)m(ersion)f(of)f
+(the)h(In)m(tel)g(com-)-94 511 y(pilers)e(in)g(com)m(bination)h(with)g
+Fe(lam)e Ff(w)m(e)i(found)e(the)h(follo)m(wing)i(to)f(w)m(ork)g(\014ne)
+283 737 y Fe(LIBS)567 b(crypt)46 b(lapack)g(blas)h(g2c)g(z)g(BINDF90)f
+(CEPCF90)g(F90)h(IEPCF90)e(PEPCF90)1039 850 y(POSF90)h(cprts)g(cxa)h
+(guide)f(imf)h(intrins)f(irc)h(ircmt)f(ompstub)g(svml)1039
+963 y(unwind)g(X11)h(ieeeio)f(df)h(m)g(mpi)g(lam)g(pmpi)47
+1189 y Ff(\(all)30 b(in)f(one)g(line\).)41 b(It)29 b(go)s(es)h(without)
+f(sa)m(ying)h(that)g(all)g(these)g(libraries)f(m)m(ust)g(b)s(e)f
+(installed)i(on)f(y)m(our)g(mac)m(hine.)-94 1302 y(Most)d(of)g(them)f
+(probably)g(are)h(and)f(the)h(installation)h(of)f(some)g(that)g(ma)m(y)
+g(not)g(is)g(describ)s(ed)e(in)i(more)f(detail)i(ab)s(o)m(v)m(e)-94
+1415 y(in)j(Sec.)15 b(5.)-94 1528 y(The)32 b(paths)h(to)g(some)h(of)f
+(these)h(libraries)f(ma)m(y)g(not)h(b)s(e)e(kno)m(wn)h(automatically)i
+(b)m(y)e(the)h(link)m(er)f(and)f(needs)h(to)h(b)s(e)-94
+1641 y(sp)s(eci\014ed)29 b(separately)-8 b(.)43 b(This)29
+b(is)i(done)f(with)g(the)g(v)-5 b(ariable)31 b Fe(LIBDIRS)e
+Ff(whic)m(h)h(I)g(had)g(to)h(set)g(to)283 1866 y Fe(LIBDIRS)424
+b(/usr/local/intel/compiler)o(70/)o(ia32)o(/lib)1039
+1979 y(/usr/X11R6/lib)44 b(/usr/local/IEEEIO/lib)e(/usr/local/hdf4/lib)
+1039 2092 y(/usr/lib/gcc-lib/i386-r)o(edha)o(t-li)o(nux)o(/egc)o(s-2.)o
+(91.)o(66)47 2318 y Ff(\(again)31 b(on)g(all)g(in)f(one)h(line\).)41
+b(As)30 b(b)s(efore)g(y)m(ou)h(will)g(ha)m(v)m(e)g(to)h(adjust)d(this)i
+(line)f(to)h(y)m(our)g(demands.)-94 2431 y(Finally)g(I)f(set)283
+2544 y Fe(PTHREADS)377 b(yes)47 2770 y Ff(though)30 b(I)g(am)g(not)h
+(sure)f(what)g(this)g(is)h(exactly)h(doing.)-94 3013
+y Fb(6.2)112 b(mak)m(e-con\014g)-94 3185 y Ff(In)29 b(order)h(to)h
+(create)h(a)f(con\014guration)g(c)m(hange)g(in)m(to)g(the)g
+Fe(Cactus)e Ff(directory)i(and)e(t)m(yp)s(e)283 3410
+y Fe(make)g Fa(<)p Ff(name)p Fa(>)p Fe(-config)45 b(options=)p
+Fa(<)p Ff(con\014g-\014le)p Fa(>)47 3636 y Ff(where)37
+b(y)m(ou)g(can)h(c)m(ho)s(ose)h(an)e(arbitrary)g Fa(<)p
+Ff(name)p Fa(>)g Ff(for)g(y)m(our)h(con\014guration)g(and)e
+Fa(<)p Ff(con\014g-\014le)p Fa(>)i Ff(is)f(the)h(\014le)-94
+3749 y(\(with)30 b(full)g(path\))h(created)g(in)f(the)h(previous)e
+(subsection.)-94 3993 y Fb(6.3)112 b(Creating)38 b(a)f(thornlist)-94
+4164 y Ff(Next)c(y)m(ou)f(will)h(need)f(to)h(generate)h(a)e(thornlist,)
+h(i.e.)16 b(a)33 b(list)g(of)f(all)i(those)e(thorns)g(y)m(ou)g(w)m(an)m
+(t)h(to)g(compile.)48 b(This)31 b(is)-94 4277 y(done)f(in)g(the)g
+Fe(Cactus)f Ff(directory)i(b)m(y)f(t)m(yping)283 4503
+y Fe(make)f Fa(<)p Ff(name)p Fa(>)p Fe(-thornlist)47
+4729 y Ff(where)k Fa(<)p Ff(name)p Fa(>)h Ff(m)m(ust)g(b)s(e)g(the)g
+(same)h(as)f(in)g(setting)h(up)f(the)g(con\014guration.)53
+b(This)33 b(command)h(will)h(searc)m(h)-94 4842 y(all)f(arrangemen)m
+(ts)h(for)f(all)g(thorns)f(and)h(ev)m(en)m(tually)h(prompt)e(y)m(ou)i
+(whether)e(y)m(ou)h(w)m(an)m(t)h(to)f(mo)s(dify)f(the)h(list.)52
+b(As)-94 4955 y(all)33 b(thorns)e(are)i(activ)-5 b(ated)34
+b(b)m(y)f(default)f(y)m(ou)h(do)f(w)m(an)m(t)h(to)g(mo)s(dify)f(the)h
+(list)g(and)e(t)m(yp)s(e)i Fc(yes)f Ff(and)g(hit)g(return.)46
+b(This)-94 5068 y(will)33 b(op)s(en)f(an)h(editor)h(session)f(where)g
+(y)m(ou)h(can)f(unselect)h(thorns)e(b)m(y)h(putting)g(a)h(hash)e('#')h
+(at)h(the)g(b)s(eginning)e(of)-94 5180 y(the)e(line.)41
+b(Unselect)32 b(all)f(thorns)f(in)g(this)g(w)m(a)m(y)h(except)h(for)e
+(the)g(follo)m(wing)283 5406 y Fe(CactusBase/Boundary)p
+eop end
+%%Page: 8 8
+TeXDict begin 8 7 bop -94 100 a Fd(6)91 b(CREA)-8 b(TING)30
+b(A)h(CONFIGURA)-8 b(TION)2411 b Ff(8)283 399 y Fe
+(CactusBase/CartGrid3D)283 511 y(CactusBase/CoordBase)283
+624 y(CactusBase/IOBasic)283 737 y(CactusBase/IOUtil)283
+850 y(CactusBase/LocalInterp)283 963 y(CactusBase/SymBase)283
+1076 y(CactusBase/Time)283 1189 y(Carpet/Carpet)283 1302
+y(Carpet/CarpetIOASCII)283 1415 y(Carpet/CarpetIOHDF5)283
+1528 y(Carpet/CarpetInterp)283 1641 y(Carpet/CarpetLib)283
+1753 y(Carpet/CarpetReduce)283 1866 y(Carpet/CarpetRegrid)283
+1979 y(Carpet/CarpetSlab)283 2092 y(CarpetExtra/IDScalarWave)283
+2205 y(CarpetExtra/WaveToyF77)47 2431 y Ff(Before)31
+b(y)m(ou)g(compile,)g(y)m(ou)g(need)f(to)h(apply)f(one)h(mo)s
+(di\014cation)g(to)g(the)f(\014le)47 2657 y Fe(arrangements/CarpetExtr)
+o(a/Wa)o(veT)o(oyF7)o(7/co)o(nfi)o(gura)o(tion)o(.cc)o(l)47
+2883 y Ff(namely)e(remo)m(v)m(e)h(the)e(en)m(try)h Fe(Cart3d)e
+Ff(from)h(the)h(list)g(of)g Fe(REQUIRED)d Ff(thorns.)39
+b(This)27 b(thorn)g(is)h(actually)h(required)-94 2995
+y(but,)37 b(for)g(some)g(reason)g(unkno)m(wn)e(to)i(me,)i(m)m(ust)d
+(not)h(b)s(e)f(men)m(tioned)i(here.)59 b(It)37 b(ga)m(v)m(e)i(an)d
+(error)h(message)g(com-)-94 3108 y(plaining)31 b(that)i(there)f(is)g
+(no)g(thorn)f Fe(Cart3d)p Ff(.)43 b(Ha)m(ving)33 b(applied)f(this)g(mo)
+s(di\014cation)g(y)m(ou)g(can)g(start)h(compiling)f(b)m(y)-94
+3221 y(t)m(yping)283 3447 y Fe(make)d Fa(<)p Ff(name)p
+Fa(>)47 3560 y Ff(There)c(is)h(no)g(guaran)m(tee,)j(but)c(at)i(least)g
+(y)m(ou)g(ha)m(v)m(e)g(a)f(c)m(hance)h(of)f(compiling)h(through)f
+(without)g(error)f(messages)-94 3673 y(\(do)h(not)h(b)s(e)e(in)m
+(timidated)j(b)m(y)e(the)g(o)s(dd)g(w)m(arning,)h(though\).)39
+b(In)26 b(case)h(y)m(ou)g(still)g(cannot)g(compile,)h(please)g(add)d(y)
+m(our)-94 3786 y(wisdom)k(to)i(this)g(do)s(cumen)m(t)f(to)h(help)f
+(future)f(users.)-94 4029 y Fb(6.4)112 b(Running)38 b(the)f(\014rst)h
+(application:)51 b(W)-9 b(a)m(v)m(eT)g(o)m(yF77)-94 4201
+y Ff(If)24 b(y)m(ou'v)m(e)i(gotten)g(this)e(far,)i(y)m(ou)f(should)e(b)
+s(e)h(able)h(to)g(run)f(y)m(our)g(\014rst)g(sim)m(ulation)h(with)g
+(mesh)f(re\014nemen)m(t.)38 b(Change)-94 4314 y(to)24
+b(some)g(con)m(v)m(enien)m(t)i(directory)e(for)f(this)h(purp)s(ose)e
+(and)h(cop)m(y)h(o)m(v)m(er)h(from)e(relativ)m(e)j(to)e(the)g(main)g
+Fe(Cactus)e Ff(directory)-94 4427 y(the)30 b(parameter)h(\014le)283
+4653 y Fe(arrangements/CarpetExtra)o(/Wa)o(veTo)o(yF77)o(/pa)o(r/wa)o
+(veto)o(yf7)o(7)p 2681 4653 29 4 v 29 w(rad)p 2854 4653
+V 33 w(full)p 3079 4653 V 33 w(rl2.par)47 4878 y Ff(Y)-8
+b(ou)27 b(will)g(need)g(to)h(adjust)e(this)h(parameter)g(\014le)g(a)g
+(little)i(to)f(get)g(it)f(running)e(\(I)i(am)g(not)h(a)m(w)m(are)g(of)f
+(a)g(W)-8 b(a)m(v)m(eT)g(o)m(y-)-94 4991 y(parameter)36
+b(\014le)g(that)g(do)s(es)f(not)h(require)g(suc)m(h)f(minor)h(mo)s
+(di\014cation\).)57 b(First)36 b(add)f(to)i(the)f(\014rst)f(line)h(b)s
+(eginning)-94 5104 y(with)i Fe(ActiveThorns)e Ff(the)k(thorns)e
+Fe(Slab)47 b(CoordBase)e(SymBase)37 b Ff(\(that)j(is)g(within)e(the)i
+(quotes\).)68 b(Finally)40 b(y)m(ou)-94 5217 y(should)29
+b(b)s(e)h(able)h(to)g(run)e(this)h(example)h(b)m(y)f(t)m(yping)h
+(something)g(lik)m(e)p eop end
+%%Page: 9 9
+TeXDict begin 9 8 bop -94 100 a Fd(6)91 b(CREA)-8 b(TING)30
+b(A)h(CONFIGURA)-8 b(TION)2411 b Ff(9)283 399 y Fe(mpirun)46
+b(-np)h(1)22 b Ff(~)-7 b Fe(/Cactus/exe/cactus-)p Fa(<)p
+Ff(name)p Fa(>)25 b Fe(wavetoyf77)p 2693 399 29 4 v 31
+w(rad)p 2868 399 V 34 w(full)p 3094 399 V 33 w(rl2.par)47
+624 y Ff(where)30 b Fa(<)p Ff(name)p Fa(>)h Ff(is)g(again)h(the)f(name)
+g(of)g(the)g(con\014guration)h(ab)s(o)m(v)m(e.)43 b(In)31
+b(case)h(y)m(ou)f(do)g(not)g(ha)m(v)m(e)h(y)m(our)f(main)-94
+737 y Fe(Cactus)d Ff(directory)j(under)e(y)m(our)h(home)h(directory)f
+(y)m(ou)h(will)g(need)f(to)h(adjust)f(that)h(part)f(in)g(the)h
+(command.)-94 850 y(By)25 b(running)f(this)i(command)f(y)m(ou)h(should)
+e(obtain)i(a)g(directory)g Fe(wavetoyf77)p 2626 850 V
+32 w(rad)p 2802 850 V 33 w(full)p 3027 850 V 34 w(rl2)e
+Ff(with)h(the)h(resulting)-94 963 y(data)31 b(in)f(ascii)h(format.)41
+b(Y)-8 b(ou)31 b(can)g(c)m(hec)m(k)h(for)e(example)h(the)f(\014le)283
+1189 y Fe(wavetoyf77)p 769 1189 V 32 w(rad)p 945 1189
+V 33 w(full)p 1170 1189 V 33 w(rl2/phi.x.asc)47 1415
+y Ff(\(relativ)m(e)i(to)f(the)f(directory)g(where)g(y)m(ou)g(ran)f(the)
+h(co)s(de\))h(whic)m(h)e(lists)i(the)f(data)h(on)e(the)h(separate)h
+(re\014nemen)m(t)-94 1528 y(lev)m(els.)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Carpet/CarpetWeb/doc/internals.ps b/Carpet/CarpetWeb/doc/internals.ps
new file mode 100644
index 000000000..b04971d46
--- /dev/null
+++ b/Carpet/CarpetWeb/doc/internals.ps
@@ -0,0 +1,2859 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
+%%Title: internals.dvi
+%%Pages: 13
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: Palatino-Roman CMMI12 Palatino-Bold CMTT10
+%%+ Palatino-Italic EURM10 CMR10 CMSY10
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips internals.dvi -o internals.ps
+%DVIPSParameters: dpi=600, compressed
+%DVIPSSource: TeX output 2003.05.03:1529
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc
+% File 8r.enc as of 2002-03-12 for PSNFSS 9
+%
+% This is the encoding vector for Type1 and TrueType fonts to be used
+% with TeX. This file is part of the PSNFSS bundle, version 9
+%
+% Authors: S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, W. Schmidt
+%
+% Idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard Encoding + ISO Latin 1 + extra characters from Lucida + Euro.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+%
+% (4) Remaining positions left undefined are for use in (hopefully)
+% upward-compatible revisions, if someday more characters are generally
+% available.
+%
+% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+% (6) /Euro is assigned to 128, as in Windows ANSI
+%
+/TeXBase1Encoding [
+% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef
+ /breve /minus /.notdef
+% These are the only two remaining unencoded characters, so may as
+% well include them.
+ /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi
+% (unusual TeX characters available in, e.g., Lucida Bright)
+ /dotlessj /ff /ffi /ffl
+ /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef
+ % very contentious; it's so painful not having quoteleft and quoteright
+ % at 96 and 145 that we move the things normally found there down to here.
+ /grave /quotesingle
+% 0x20 (ASCII begins)
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde
+ /.notdef % rubout; ASCII ends
+% 0x80
+ /Euro /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+% 0xA0
+ /.notdef % nobreakspace
+ /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot
+ /hyphen % Y&Y (also at 45); Windows' softhyphen
+ /registered
+ /macron
+% 0xD0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+%%EndProcSet
+%%BeginProcSet: aae443f0.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10
+%
+/TeXaae443f0Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa
+/lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi
+/omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf
+/arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft
+/arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle
+/twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle
+/sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash
+/greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow
+/slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p
+/q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector
+/tie /psi /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta
+/theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon
+/phi /chi /psi /tie /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: 09fbbfac.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9
+/TeX09fbbfacEncoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
+/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown
+/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla
+/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam
+/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
+/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
+/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
+/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
+/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
+/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
+/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
+/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: f7b6d320.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
+% cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
+% cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10
+% cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10
+%
+/TeXf7b6d320Encoding [
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
+/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
+/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
+/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand
+/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
+/period /slash /zero /one /two /three /four /five /six /seven /eight
+/nine /colon /semicolon /exclamdown /equal /questiondown /question /at
+/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X
+/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
+/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
+/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
+/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
+/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
+/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
+/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: bbad153f.enc
+% Thomas Esser, Dec 2002. public domain
+%
+% Encoding for:
+% cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9
+%
+/TeXbbad153fEncoding [
+/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
+/plusminus /minusplus /circleplus /circleminus /circlemultiply
+/circledivide /circledot /circlecopyrt /openbullet /bullet
+/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal
+/greaterequal /precedesequal /followsequal /similar /approxequal
+/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows
+/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast
+/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup
+/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional
+/prime /infinity /element /owner /triangle /triangleinv /negationslash
+/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur
+/latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection
+/unionmulti /logicaland /logicalor /turnstileleft /turnstileright
+/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright
+/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv
+/backslash /wreathproduct /radical /coproduct /nabla /integral
+/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section
+/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
+/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef
+/circlemultiply /circledivide /circledot /circlecopyrt /openbullet
+/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset
+/lessequal /greaterequal /precedesequal /followsequal /similar
+/approxequal /propersubset /propersuperset /lessmuch /greatermuch
+/precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ /DvipsToPDF { 72.27 mul Resolution div } def /PDFToDvips { 72.27 div
+Resolution mul } def /HyperBorder { 1 PDFToDvips } def /H.V {pdf@hoff
+pdf@voff null} def /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def
+/H.S { currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF
+/pdf@hoff exch def HyperBorder sub /pdf@llx exch def } def /H.L { 2
+sub dup /HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint
+HyperBaseDvips sub /pdf@ury exch def /pdf@urx exch def } def /H.A {
+H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt
+sub sub /pdf@voff exch def } def /H.R { currentpoint HyperBorder sub
+/pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch
+pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def } def systemdict
+/pdfmark known not {userdict /pdfmark systemdict /cleartomark get put}
+if
+
+@fedspecial end
+%%BeginFont: CMSY10
+%!PS-AdobeFont-1.1: CMSY10 1.0
+%%CreationDate: 1991 Aug 15 07:20:57
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.0) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMSY10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.035 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMSY10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-29 -960 1116 775}readonly def
+/UniqueID 5000820 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD
+5F3D999EFA3E40D4C38BED0D7A872251C333BA38795F6783D83611E7CE9E146E
+537483C41D947F2E50AEC949349321A32EFDBAFCA64A0F39824B350F095D4707
+604DA3982669C5EDC911D14FB536BADF6D92EE1FEAEA37FA0314FDF47F478F8B
+82ADE6BB0572B4D59EF1AAE6E422AC4BB5BC4E76480FFFCFD83C24EA5433F2FB
+480085EAF4F909107F2664F8945891393AE01C4E028C48BFE1E057610AA6E687
+1189C983219E05511E24053C8449DEC88BBB16B1DE62526B82A14C2826A92DBC
+92D6F49F965B648EC0A8326E44E86E75E6B22927D200EB2939A8FF1976D83EEA
+05DE5D5C775C3CF2C2851A73DB55850AB9C2664385BDE14390D00580E8C3F927
+766A8BE1042F5E6DBC3647F5B59C4CA091E9E90CD7CBDF4F51E1A35028EE4568
+6D0F6C27727A885B5F4335D4905717AE12C20B066DFB37C2D7EC40878FD9676E
+595A457A1944E84F4D067ADABF3CE385C120C6F4692E482E473041355F9B038E
+0D713B41D9AE558425071A19
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.1: CMR10 1.00B
+%%CreationDate: 1992 Feb 19 19:54:52
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMR10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-251 -250 1009 969}readonly def
+/UniqueID 5000793 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E
+4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099
+E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634
+5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721
+639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428966C96B6988B
+2C9127404E8C64B122D405610B1207E61D6CB678BF414E64299C22D6B8DA233B
+8E0E897EEAF81E43E962BD1DE1D8F24C8350761B0E688E433D01BCC9ADD5857E
+BE9564F01D501D5F99C4272CA490100395D23DEC1BE59A6DE8D20B90C61434C9
+062B6856C5C61184BD58F20E01B447F6140CB149BD370D59069F121FCA8AC937
+4A86AF9E00E141BE1F2B0DEF30A4AC17817E4B58B1A8921B990F237E64A938AD
+284A1DAB4F3BF58231B22F57219F9BF0E38585D631CF24EB1DDCBB1EA6E3DB31
+88D7C3F8D9EAF27F7239557A2D2EA7AC5AED0DC02CDB0A2C9E4D64C24C3616F3
+AA98D473C46596DC975C149FD66CE806C4529D92B0173BBCDA0D18B2956E0F51
+179D7861557A915D2AA59CE21800265DAF737E83C7B4E9C41F80195E51A95158
+F9CEAFA5ABDEBCDF332BC7107FEA70FDE84269ACCD15BB35D961846217D54B02
+88995D6A3304BF88EEA7ACB9C548195606C4E601789F3562E89A69C40BEA9167
+D3F49BF39DB2D57630674554F297DA605A079220182EA752B31072D46E091410
+D021BFC8B8A1E4D6E2AC110AE143BE32F407F6AAD2FEE259839BF6AEE1B7FAC4
+7597F8E3347EFB48F3DDE6E9198354D1D408AD5657D41F5D11FE6B805FBFA2E2
+F92F6332DDAD4AE77D30758E37B67866D6CEA29B6027812977B8D68A570904DF
+47550EA6773ED0DFE830F8B80BBECAA80EC33DC5ACDD4E683E5B688F5D1F14FA
+A5778EE610C3FCF3429021E2A014F8B0B97BEAFFA7F3868E61B35678D54173BC
+93A7BF29949C2814BB364594DA9ABAA2F2AEC654B0FB8C022B5775582D8CBA0D
+D1AD19333BD74415F40C24E839E48B674B003359EAB05AC8A0ABD358DA7E999D
+1AFE8359E410DE798A76FBF289C701E5DC730913F6FC2FD9693C34013B47C8CF
+84670F3925D2FB69CA3C2C61029C9FD1066AD2C1D640A556E226D7056118CBBB
+CB4C859D64B04B08751F3EFBDEF6F1F352DCBD682F73C89910D7A937D07ED50E
+5DCA560DBAD3A96F708B639F62730A566E7D4D3C6C89BF3868707B721ED3ECD8
+F185314C9D5B4E8456BC0B096F99F1A9AD67E40E0EBF19B06BFE1DE82BA32980
+AA
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMTT10
+%!PS-AdobeFont-1.1: CMTT10 1.00B
+%%CreationDate: 1992 Apr 26 10:42:42
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.00B) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMTT10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+end readonly def
+/FontName /CMTT10 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-4 -235 731 800}readonly def
+/UniqueID 5000832 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
+38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
+D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
+EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
+A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
+F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
+4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
+6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
+A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
+E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
+1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
+452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
+8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
+5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
+DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
+BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
+741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
+E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
+E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
+D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
+C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
+FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B
+984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876DF448467B625
+2BA3AEEEC60550844F5300D7FDCBE636D5951411C6F46CF31F03D3517A96309E
+02D0DDC6D8C0C89D2FB8E4412BEC66D17F41F8080421508CCDAAD3FF7A56D365
+2E26AC2815B518D59BE84245FD6631EE73EAF3BE24749C77B73FFBF6CB06BC58
+1C92ABA181B7CF0FF955A8DA29F117536ED7582730146D03BB3BD8F78EE53D23
+FB86AD14321792A02D3AC0B5F092893B8E794A8EBEF6C27AC845341C42B5A3A7
+5F4E0503B689549956E1E8BDB956F8A0DB4097D3F3C3DB7E790548EA563A9064
+13412F7046CE91024D85A7904266ABB0916984F7CC897996403009A0CF038F60
+9691D46D36C9E44B1FCCB664F3C4CE59ECDFEAC5B1328DCE8150A80D8D3EA38F
+D8F7AA322C87DE4B63A466F2DBE6CF06444AF8B04DB5CFFAADC3B41087F68326
+C64397D3FE523A8C633407C74D939BA8D3A59811B2C3BAB68598FE1A396EC727
+BB76DBEEFB43AD7CAF4F67DE5CAF94525A13219303CBBDBFFF5226B37A12A825
+14DB9B144641A5B5FDEA9E0E3729A0C1642F9E92478DA82596ADB0F4D7D3DBB1
+0F7F46B73AE32DBD40DE106093A3E5B1FAE73E36B3DD2B06FDFF75A74D09CC77
+6FE24D7B8570384920F97BB3B61440D03C443B9AB845D74581506FBF42389210
+5CFC9CD11E0B290F32D4FCE38EFF176A3F94B0EE343F97926EB77A87F7C3174A
+EAA273A07D15057253BB7B201D64A88705115E827DAC9484667169699465AD6E
+DC4EBB4807163FEA3BE751DD38532E01152036AF77CAA574919A47D207439C42
+602B573665ED644B3B345FC1E0CEAB244A45B281739E49700D090B27868AE86C
+BD1B709BC93BE9A8A9A6B136D83CEA8D9691E64833B16F5BD0CCBEC9251E35FD
+A90C35BA35FB21D4D69970BD7E1CFBBDD10555C784C633425E9EE81724A19ABB
+7CF38AE2E3CF740BE6BD4E3568281F8095697C65AD47D495CBA676EF40F0B1FD
+936B691C913F9AB2D94C49731AE196BC1E5BDC14475DD84F191537868B71C322
+102F98DD2B2112ED405240A6FD2D978D59C962F462855104EF091F9681798132
+9071596DC768A9A5F97AD6B8E03DA12FCD816FDF771F8841C42568D0865454CE
+5F51B3FF32DD31C08185D082D30084D7A01E6D10225EEF66710E240624D826BB
+1B67FC08FD883CB4F7BF141146E4AAC60518B6A48A442379C909149D9CD3A9DD
+FEB0922413406CB2EFAA92C305CDBAE3999908DAEC0224D3E4058E13234E4D0B
+130B526B32E584A8BD187B402B79B6073AA41E82B2A90CA92B5203FAEB01FB28
+FFC3C40C01964FA951E9355FAB886880B7AC22E4A97E393DE7D944566AEAAD25
+D09B6607A1D36AACCD897AD6326A7CA0CD8E353FCCD311288CEAA0D6B1C07051
+8181E63C7F43591077F094E614FC4B69BBFE316352EC009A548D164DD0644BC1
+855C9B9AA37A4CDA9ED95C25CD349CA2D1CE8702B6225FE4296BDDC3688CD388
+506DA287D773851052881FB94E740E775D8FAF07FBDCF305ABB2A052229FBE92
+92F40FDADEB1F6607D2D97C66C9653CE8BDDCDE8AF24330CB7FC4F25B0AFA2F9
+75CA09BE8722864055FAF1DAFFA43B810E68E68579A50E105B8F14C29C8349A7
+4F0392CAE19BA887801A1F0F6AF05A45311735A1ECDDCD3B82AFBC3FED70A08C
+D0A0DEF6D595576F4F8C5F047EA48200A510327726B7996078820057EA17CB5D
+8272C7C38D6893D0DCB9B56C4969AC413CC888A082CEF94DD0DB518D011F1118
+26FF66E107E88B9187F0F236CA0218CBEF4B532A106ACB6A74FDC8675EF30837
+F6BD9AAFBE6DDB238227BB28D60DBDA3001CB2336BE3C4C263362CAC9023E01C
+E05A32BB68217CE6C1A8CADFCB97DC65C7697790CDD284E2DC8F3CDE3A29548F
+F4A0771F20E5D38CA73585D7C6D20FA7D8D3090D10DC67A131C22D60598426A9
+C98A451F7F2D5BA9E58049B9402510B59AC71928E07B4B101C99DD5113A11059
+A116FD045810A9A3149CF558818E4B3F03C43016C6D3314A68A891B8F5C3A6C9
+E44A12EEB1B8F2C4D317E1E6A23C44B2F838D18B86B0A3378AFD9CD56FFDC5C6
+55FF9BF06EA28AB8DCC1754D59D15478575A70315F97B0045526D664DF74C0AB
+98EDB5BD133C3B102CBB7116C09184603915B00D9236FE8B33C9EBB860A4EF24
+1F1FE86BAB362602865110C9D0FC3657E8365252AA58B663D129994644FA993F
+F5B8085F898315F92F526E704D7991D852C960495A21FB57B431405290016ED8
+155C2FD45EF9FE215F81C3C1968F22E2913A4ABE76AD00DF98B8B866DFEAD42C
+58B62316D39364D53B1B8804B3B86ACDB09D397C30575927539E4D83AC1B11D7
+0BFEB0FAEB5D8134E80AA656F41B75445F01DBC4D991EBCDB3DEF2046A2471A7
+626D356F80672FC100CFB182DC7A71FF2B6F79D09B1753C79A4064C893E2840A
+BE467AEFB649B15BB0414765C2386AD380B490345B3A0A46C3FD6DC04A7B4E99
+52C17712D3A72105993CA807FE2F02E3081DE5F8C0905A7F59B91A29DA17097E
+72D5A3F898EDE207389D5DB7177879A27C09B6088575794FA0E0999A5213C94E
+C1F7D086FE0900F4AD37A73D487E39B3A0F50999AE449300144A8468DEBC88E1
+FC3AA0F37F59741E012787B4B0BDC6FDB9FF67A27546F45ED7772FF4C4FE81A5
+9851ECF941EFA4EA0C6E43BF52229CC80F82C0C39A1546D8F43C420B6517C807
+3A1D3E2F13DE14554ABD965931067FCEB11E000539E3CC0BADC93AD0F4FA5AA3
+CB7AE61C7124AB3C31694CC77C2FCEFB6D4A6C9637BF6D72CD4EF22E699931EC
+F04E82C19F9A758FBE5D99BB035CA5952BBD036288649E4D86E55E9A7362F4D2
+DAB9C9025F7B21C3C4B17A2FC0872DECA91F2A07673184B437423502DD67829C
+466B72C0C5347E396C0447B69FA337DE4C93D2C100BC5ABB8A9C7F770A3406B9
+615991B1CB7D1276C920A556DF22E0B9B4DAACFCABB460F0BA9F7D349F6A5E35
+32932F2A817544DCA54A1CD612656B4A58D07B277AAE7B6CF766A84BA37600F2
+E538AF00CF3F44A6FAF4FE4C16C280367172A1208F6C4E4293C5F9B86948C2DE
+ADC31D00E216F701A0BCF7C05AEC7B869BF309A2723C1114D2258CFE9F23E477
+C3A9163BD7ECA67FA05989BD03DFD449F10B31A5E2ED47FE8A5C728D2D0BE932
+C6D22A6E5AEEF1E36FE833C748ABFD4CD7B47C43C8D5F04931D530041A66413B
+B226D4EA2A4E6DEFB5BB405E6FA9B55E1F38F44AE4B1787404D7B29D53110C96
+6D3B3988863114E8D3DBDCCD340F071F6D0878E052548F071CA5F5E95874A76D
+25F0D549216C3EDA673E7B48179E724B614013FD285C8DF5892D261A3E42F662
+778D6377450226655DA88BDD4DDDC1CE3268A567ABD16D23DCE8DC5EFC65C277
+315D2F52E7D731B3E736DA127083DB6614408B5D3B465629E742AF5617E46614
+E9058174D8FDCDBEA858F8E684256290983F1B6878BE93ADDA0E6F01E1AE9675
+944796E58043AB149240F3A0D67C5722927C9AA8A21F069DFBC9A00DBD7E7D3C
+CCDE58B4B6F7BCA5249F905B4100241E8AA7A8830DFC48AB187993A8EA9C53A2
+A46E553FAB76FD3CF9CEC9AC70768B909599638CC99AB6067AC7F027603C5946
+1111B5F55368FDEE83C9960E02798E5059E9D48E1E7DFAA2F2D34B7E6DCB6CAE
+F8758BD829030798C9E8E535EA232E7E7B9960864A7D5F28B60758016199D1F8
+77BF3113A66B5E93F2ED2B04D74B4223ABD399B84EB964638290930D30396428
+544110D132786A99CFB2C1490297EB89D668968442FED549B7E88ACF226D84BD
+3268C8B71482745D1A8E9AF87A5F05C95AE201D8E7EBCEE7D217DCF6D5BBC1AF
+493800FF3479B6A0C2C1E02E37BC3CAD926BCA7B0E67CD0EB4C55D776B9D6A12
+E26180401CA20E24A54DF615D9075B082C3C63BA818F9B065D373251DFC2A5B0
+8A986ED4DBD70327363A6B630C4D41C5C9E4623467BBA9781572704CA1CB113C
+6F0CC36EC191D7D70A067E6B27D70EE96D514500F15702A4716411E86539936F
+F700CA5916A0171004B2E0658F31280194F8D398899740653FC51109F805D619
+9BF642C34D3FD15C491C05BAEBA41888CACEE664B8DF67FC9ADF74161EBEF2C5
+180C93495F57BEC8578927F431A3EA5B21E59B711D85F22334D9C243033FB80B
+175CE9EFC3655992555766733C9DD39CC0894D1766154240171D324551927215
+65BAA3B03165A680A027513C061383BFC3A4B8441A54725B53E6E95CF20447B5
+1536FC43B32DDC9D621A5E30505DB3B1D6C6E02FB8B746C4AE0FB4F06D0F1E85
+FC386D95D23A8364AAE58AF6D0CD13D5E97B3A4C390D9657B969865C38FEF7E8
+E4B6BA80A368C4BC1A9B97CFFB31B0A85ABA929835919EF2634C60ECEA5B9916
+DC1B4E19AD654D7701A300862770350919CBA6018731C1820943FBC404E7D442
+F52A81C85E8EB59BC393C5A54AC5EACC37B2204E92B6A4EFEE16FC77B19EE1AE
+DC1C08035F3F8ECF7BA0351B36A7C364C01CC7F339267DDF29F87261F8620A49
+DFE9628BC7CF7ACEE45367C88ED142749BEC78F7777118ABC1C95A33BFB3DB24
+3F0FC24FFDA37C5D5CA5CB9A3ACF99318D8FD2CE01E86C1E80D4BB82A3AAAA53
+8783BF1CB9D10C9BE9FBF3DA8F2AF1E8CFEA6668FA79E1E41A89533A3A62FBD2
+1DBB4D5BC2B8EDB3583098E0AB443A6F25631C2D35F215D73C0CCE89B64F430E
+65CCF64B2541D947872BB431495BE97D703E259328A3EF50FFD2FEF59CFDD9E0
+B696D4503EAE2CD38F4C8EB5C8CBB03B89017C0A54DB2F970909554531AD0F67
+58233CC193D8787ADDFB98E0E9A9E26802A784C152AC759ABA8E4D98E7FE40CC
+55605D2FE8C92948D5BBE1AECA3C40952A982A377BCBEA3624002D9648BB154C
+B5C20699C8820358F35FB6133E431E2326DB213F907E59E7C894FDC4B49B72BA
+1896DF74B90D8AA05EDA7631C38C79C813C7ECCC7F5FA5B14B1F41A738C26CF2
+54DC9E38FD8D84EAA2A84F0F70525A33BA8D9923243FE8B83465D202A3BF1C44
+04875959C3EB79F030F539EF0A0D2D0D21EC276E7784AD5451B8190F83BD1915
+7E2F395C3CC8FBE8E7F3EEB3F3B69E19E5CB8EC0E9CF1A5C984DE83570FF2B4C
+C6D63A61B7CEC4ED7476356F9B21D17B0F993EBCCF4BD8996C30C8CA82F25D66
+D405C82ED7CE0B56CEE983E10A6F4D0CE9B4FEC99E730E164A057E5939164AD7
+8AFDDBF963BCA391CD308C56E97E92CD2D8CD6854C10E052A7870C847D389946
+B9933B915C3EB9DDA4F4CEE97293B3584CA896BC32888E066CF965F4BBDC5D53
+E8A1A4638CF9E55EE5F73D8B66ACB3FDD3E172CD3BE30078A61D464B92949ACF
+455B1C18604DE624A0715142A6A4DC415E059184662BCE925E6B4422F509F8D1
+A8C84874089EEB3557E2FC0D9E094138DEF05E5B69D49AAC2AA04AFE06BD442C
+569EFFF978A925DAA3F65B8A06C1FE326EEAA24DF6CF8AEF639B1409A6654BC7
+8B0CE14EA70DF71D051EB0DE8A7843362CA80B80633B7E8CA2261A4441595796
+FF827952F5C69505667EAF6E798C7954559C5EA848CA9D85BF1566E3B6AC7343
+0D5EB2011B74811F8D1E374C0FFFCA027C82082E80EDD7BCE926280236447D74
+D1AF9233DF081D6F4D254553492CAB104D0A1E6DB53D0790B4583C88D3384950
+382795B1DDD1A7F39CC96BCDEDF590F195B96A4E98C85DE8BBA2232080AEF81E
+6696FF64E77CB6B1D111644EDBF33468ED268AC21FC4BA5C45565C2935C92BCC
+A847D435BDB86E63DE92B2AFCF371E6BD25717651FCBDCA81FDBAC9EB15449F0
+7DDAA0F8744C07BA2CADB9175E107BE62258F91BC5C8839563A9B3D2A444A061
+61D20950A6612E7E7CE30050AB22D60B7DF17D8339804BC0C20997262649C2BD
+C3AF4FC2F5D1BA794630D7E9F90DF2E42069468D0DB626679D1170EC00B3B71B
+9EDAAF95632CC143B0537823CC1911CF5016DFBA9B9674EA51C0B8D2F1448DDB
+EFCAC1098D13E900739F0A90CF03BB7381AF4F396EA749E3D560472934FBF960
+C4D0B4E9978A5E3647BB09CE1A626F4ED17E78DF8D214C1CEB514E4C4BAEFC5F
+745A91CE75104303127549C460A0B286F9AECA4DB6D5ACC84FC97D794E08454A
+0510C235C17994D2DE568BCE2E941F6D158CB067388DFCB2915EAEF2FC01ED2D
+3817FD18D9CF55D689CC34D40CEBC318CF89F135BF85F154C5624E495467EBA9
+5CCAF115D50B2B554F49416B2A55E6586BF541619EB20A6D1A39E40F6A5E5909
+A1BB769BB4485A68D97892247B82830E83329A59E4F7AE9CA548312BD2135AF7
+6C07141838A731EDB0405E0524C124BAEFECA98A80A87F76414253BDE99F0701
+0006EE3B407CC5977D6936DA7456DD6DBCA53C63C8BDC59BC746CE9BF7F1EB57
+CD5A192CD1F6BA819EC6E6EE6B98E06049E52F30467C8F9D4AA37B27F9FAAD44
+4C326754751EB155AAC21E6E2D69A4EB8E23FCFE8916B5C66A21A68D071C0BB3
+08E87AC148DC1F9F5769DDE418B68D10C83C1BA0D2E185B3141DB2AC53125B07
+18C6EFA8925A004F760306298207E78A66FA3A365845EA12CD3FC331499933B7
+56B5371BD50CE5E219D91568FAAE4DDDA7060F4809DB3784066803B01A5AFB85
+1E6616B0B7BA0EF7BA4C82E1130A55EEADEA4FE2E84F858A8969153D5B630755
+C5EBBEC208E741940B71DD4BBDE45A5AA65761CFCF3FBC1F3290B5B457313AC0
+9D32C2917140584D93EAC138719027B2D2B1E20F0A1212B2420CC763D54B853B
+E088460ADE436997A1DAD8C2C7154EA35D013A20EF7661F4B213F45A144F6E34
+AC57EE12E732847A1544A1BC43C95EF7A1D50D2EAA078ED86F6B673C5E93DDC1
+B97C67788149520A6809E34F38E06D5E1A0331AA615B189C6C073BA934B4433F
+0C7990584567DC2476F1AFDF42EC19ACCF0558371E340924582B1C237BAF15F2
+89D2A03FA3FF9C41D3084987C7C89A18755896D4BBEF7201125850187DA01715
+7031B2961E047E098BB491E5A51AF3AE1548AAD4B2AAB1B640C3D52F9A82A14F
+3204C6C1A58594CCC5D80E39F49190BDFBF98A844D6067EC97B6D38821818643
+8FA65F2A0A5133DEC9444C71FB20C397C6A8072B92C749EE8F5C3C4BC4D84C95
+7607987589C1955475F8B0B72A7FD4ED5E182C01AC6A3121D8B40C8582AD0905
+72189E1D8EADF6DDEAE5DADED920610D544C52C0F573CF51B43A4C521365DAE1
+C276360A853BA82EF944827942E97178861A2B2E7D58303762AF8456E7B64C93
+28D4394F0D2372E576DC721EF76990C535551FB0D914CAC9893CB8F3BB2DF98F
+6D2FC0A849689939A596B46399E029394793AEAC4B73CE3813E7DFB70188CDBD
+63FB697638B1209DD6376DDA713D630E40DDE68B556E42356F5FED08449A55FB
+1739EDF3B845DCFAC9F6FBFD179E5E96307BC6F3444F05324345D916F5F600CE
+3F20C79B3E3C33A341DAEA005BC51042C62062D781257C8BEBE1CEEBB1FFC37B
+074B5B4755C3D15452385BB2C212886BF386CCE309BE8170DF8E848B56B67131
+8462880F6458A7DE0EB6AFB7EC8090BE3EEB6D10545B8798640D7BE4A97FC77D
+C02CC5F6FB17C1954D25139A8F01FAC3CDC215E5E36A79F9A8149E84154569DB
+AFC3BB344EF9575D887853F7F2B2FC7E81E5C0C2AC593F6A12F34D973C2E4BA7
+027284DFE22FD551592764318381B97DEAC2E810EF0650780F077D955E50B4A2
+67110C6BFDFA2C00DFD3C69CB26FD28EC4A1EBBAA32A45CAFF03443FBEF2EF5F
+0869CA38145B749DE73DAD740FECE007D6144E3BC2DC7A2193C46B7A8EDA8EA5
+B2710D9A4FD7BFCC1B9D47225F1AB38CF7711ED557413064F3FE3A495839EAC3
+528ACAD9B9DF8D11540AA07FE837F2475A9219E173BEED4473CDEB7FFDEC235D
+74BBBFD8EE08402EB0ED2C570BB07CDD5C14FA595CD26AA8EB39149266A157D3
+922220A20C47C0861645728286238E4CCA332D21A956F41F99871D1CE0B990A5
+3A6EE9283E7E8FFA26843D69F47AF6FA6AF504B1722483C3512674009D5633C2
+D2CA89D9BC0F31BF58C37BA760A8F2DA6D3283C61B43BA8DBEE7911065F6D5BF
+C207CE7BE6DF47E92441DF5524201F90149DC055B791F9CBE50CCBA598CA9BAD
+4ED184F75474919F23A9F8DC1447CB8580CA4EED3EB6F7886986C5F13ACD21F2
+26053E43FA67AD442D1917B28B379D77AC0640377815D64E852DFC07E461FD92
+8B8AACC1B6228F5AAF1DAE0ABBF59087DB1AB04C451E7B1D60E68AA1D3CA5FBE
+FAE9EF3780C6569D5CFF64B54B55B15FBE4B40FC34D4FC7B7CE746DAE459B705
+960455D87C0D76AC0A333ACC147638DEB4A43E76E5248D621B0D8D3578A8E5A4
+68F9409554BB4A3C806ABF2C97499F7A22B2665EB995DCC8AECC1BD62CC803D9
+ED18E303EF2535C8A3F85F246F3EFF01898A6F40CBC0EE0A05079556FBBD73B3
+3987255695869DA8BF9856F90E55DBACFB3B5F6C6620FEA578A1B50C09551F8B
+F7D5E3FD74E2A2DD970D9362D4700AFF1F43BF426BE87DF8A93A5837758C1B4E
+D81147F3330B090F9AD54AA393D4D50FDC6399DA5C149050ACD7D7D29108AAC3
+984FA420FFAE2A6CB91E796E94C99648417B0B8215FCF525A517C672924DDCF7
+873C4671DC0BD349F95A7D108FC1771100BE946469DFDB3F32D52991C6855827
+ECBF77DBF62C17F15FE8DCBE71A7E917C04737DDC1E291878F78E4E2F722E6C6
+89DE33A20A2CAE59F5B5D5928E9F2B23A7712E2EBE55415E35BA00587DE8902A
+0CD996541FBAA2E76EEB087354CC53A21D98D8900355271EB825CA853245411D
+A62694CBBBBB1444E6BE25059A98D15B6DE839E1849C2674AB3E55808899F39B
+2BECF86A226967850DEDA652DC2ACA857400F762512CA0DA477C46DBFD12B7C5
+CB80DE66D79B7EB83509108B0F350309C2AA60A2BCC5C93B2546C2B801419F81
+C46FF0E3DE49B873621A048F8E6B4F857184B1B6548B6B33634CA9AE246B79A0
+258D71F2A240973F76C56F8740C4160B2725CA92EFF435BFF652B52864DD04A0
+616831A3F5D7387BF0764A78C4A4F77D400827D73EF74AF40641731A178B35A2
+A891BAA0A6F1561179E368C6D1D854C781458EFE7CF5F7ADD0237E1881B47A28
+320C1A3144CAD6B4E980E1D943460117588E6E32A614CD404E072C489D18938A
+BAF5C33D23684AE07D8FC6B0C71811BDCC6B78C5A772EB4CF405811CA68A8FF2
+19767CA08EE54823ABBB73C7FD60DF82022B73EB3848F13E5B2F7BEF01ED3F8D
+C56A28B9BAF4DAC4AE29170297D6CA1B20128BFEEC98C72B7877B6BA5BFF5381
+61BEB444AE20909C199F425268C4B736FFAD530C0B782F2E661F43836B575DD9
+2D10EDFD8ECBC506AB722B724C91B00BDDE0E68AA46314B4A16650ECE237C136
+5C2108BD40EDFBA1906D33DE973CE4ECFF88B51B405DFD3D002ABE219DCBE5F4
+D75FC766D196ACC672DC6E0BEE6A214031F837889EEE88F666DA270C77A23CBF
+E8DD2CBA9035ACB2B4D65E9F805983751B67524389E7751D525481E1D113EB34
+65C8BBE73C8301CA2326D9B663F25CF977990520EB6DBB54015C5FB5B8416910
+ACFE023BFE08A6947E8DA306485B3158AE8CB01189944E16ED00BDAD5A987C57
+4A63F88A149C3602008C5B20619CE94F0D714907AF91A92F1F5778F3C2285AEB
+9E5FD5FC84DDBBF8154C133CA5B234282E3E3B534B95661E7C1F96014ECFF46F
+511E6310640EFF13047EF3A7274AC01E71420936BAB536733FCEBF27542F1F63
+22870A8D139BE80472AE6A03C7A79483F8823198697066EB5BCB6DA3319D6188
+2CB5617A6F2B665D1BDD9080B5BD8DE3D2FA854A3A8918CABBE5A3F9E1516733
+CBA92C988F6F9958D1E3CDB26B0985727C9708510D2E6AA28DEBD1C132101D7C
+404B62964C802A771897E8E6F272E8D43E96415494F33E48DBB4C6BAB6F27073
+DDFF054F591837F3F176215904185B9BB69632D87EE5E08B497AF5FA1D0FDFF7
+37F94589147A9A45FDC3437CDE7E7E03E87B6F92B5541914DBD0D4CC075AC5B2
+B5174D1541EC0BBE03A436809E1AA0D900A1628DEBB1F2CD7D26A47A58F579BA
+03CDAF4334377C1C2804D01C6F38A661A889A476AE500E79440B2ABCC453F001
+10AED42C4DD7ABB850ECDB821A739CE4FB129A0710580B456791825B2991AA89
+6BF1A6FB8300C2F0EFCEE08CAC6AA7DBB0F0BAE8CB9E71E9967E1D964113B93A
+3B1CE1D373E9191209B1506C5690E6E605E537C2A861B1E8FE203498C6186A9F
+BDBB0AAA95337C493D377B611D3BDDB5B53FE4AB3DE42E348E633C0A5146A75D
+209FC46B0C6F56A14D30FCBE3D1C3D070C7CA0A9BB89F7721CD868D0E5794D02
+F0913D7269B8ECC6497495BB1905EA6305B50C2CD31B772200D141BE816CAE32
+69426AB01DB5E90004EFA596ADA987D509C00ED0B3E8DA50A26AE9D17C80F57F
+4E15B16755085CF7FCE3BF73B954BF85A106018A4E6CD84F18F2624C51F61A23
+C3720757473CFBD2F6013002B622BAAFD178145A178DCA86644E09ED39138BD7
+74FF313F52506B63221AE97BA0070FD0BCC7CF0972A0974C2EAA2F0E2DF27FE7
+E68D499131A2CED3A877795C04E5CE6F79477E4432680B832A81BD73DA305B13
+BF98ADE18C0A8931992778AF8F78F35A054EE81958F494522BB6ACCBC49DDB57
+D24F444ADCE0E423F373A9CCA6924325B52872BBCB4BD4EA5126218CF7A03412
+24A74D50BA9690ED6659230214FD0147C1053E706040952F471E6BC5357A10A1
+8F4B3A35CF3162F225F43A9D8CFB89C078AF751EFBDFAC99C999B72989B18B1F
+4267DA3CB2B891E52147EED2CD8CAD963B093AE9DCD7BDB69922E350EEBB9FA4
+F410DB3EA5429B5A1D2CE1830560B4269AA1141F0E5C90482FE9989021A54AE8
+1ED079FDA5307BA5B0E675D444116F61592DBEC8EF080047AFA55FD37BB10693
+936EC592C5F071EC9D54D3AACF0F3C81B5A8D58139633BC9C7E4E7309B0FAFC6
+A638FD392FF2B777C29390FFA9AD70C1EBFF76E8531A814F6613383AC746E41B
+FD5F47F31AA6F550105F8E2223CD286ACCA40AB62EB6908C0A2448103A6883EC
+E0F9BE0A0AE44A2E5C630E0D83520755C00A1C1102E525EBEF2B4FE3C32273E9
+48BB27F555780BEA1CA81F43595A8A38B386ACD26752B45557205B21B2BDF915
+9B780D070ECA3F6407F581FED7294673DE50563EA3A14E92719E262B5E4E758D
+BB5346408F536E12B15BE38C82AE468224358C57D13EECF17DDC4F7D91C5E7C2
+5B3365C15AF14D577FCBAC6408C14F4134B227885DB8B29474EE7F6B734784FD
+E4FC30545A02CB0B662B04362D16A5FC9CF1B8A327079AA9678EC476740D1788
+550B368AEA021A8FEF0D94EFB1D1776844FBF207CA838D7167C1CBFD1DE4EB53
+85772AB793335C289366555094AE44E3C7FF4AB55613B1522ADFCC9A6E256EE9
+A10930F2F446D266A0AF65BEA12458E3B8E4FFDAFE01B9A8310C364B8AFB1319
+571B81BFB2E666F2C02CC6254E933AD682A465EBD75107074ACBB6792257A5B5
+51BE834759BCA006B863EFAC26A21934E475AAEE037A74775B451192870C7FCB
+DD05DE0389B085A97C88C28F401A6EC1C0F5C96EB3AFDFBF2302925BAF3D4E58
+E9C7C61854DDE0F1AE7D17AC021BBE710552710AFA5218CF9E451FD4B4429DE7
+F558C48556969DD0F5C47D2922A63D2845BDED57B945550C9E0FFA710A9DEB01
+C4BE9B136FD0CB1B63CCA91A17578C15826F3B68938B06A82B36100D13E0005D
+C9AA74AC937C22DAE4C112C16DB83789F578AEB9A7DF5AC4ADE62874AAD48313
+355514D42659FEB39FB17A4F826188944B4218874F376E192DE01FF15C0A6A03
+5180DB62365DCAE97F8D2F6F24C69FAE8021C390785AD47DDF8323B5312A8C2F
+399D777162053F61A0FCE02DC2B5DAB388265FBF7FFB4AAD979E74FDFA5636A0
+1EDA101D8A1ABFC665D7612F3DE4D6B8B7EF4BDB3F05ABE3EE9C8C195EDA3437
+D1183612B07B085D779251C0D4EFF73ED2E370D98A999DA3F1BA20E37B5A6BF3
+9667625F0C03049CD0892A25B2C32659BCA374C63C9566C6B4D4792C5EFE7062
+2E795413192684A6C7A54EA24A5E0338B9A59D6BABC78D664562375FD852FCAA
+5E5E97938ED62F574C347423835A2EC75C016C890296BF36FF1FE82FF83213FF
+394E6E771433547950C38F4AEA43BF939E307168056B2A90DB8ADEFBE1716720
+9B146069323861342B1B9BFDF47E22E6E709A9B19051E49587CCD48CA87701F9
+EFE769BD5CF736B858070FB1F0489C28132AA71F5A62860AD029297E97E8E700
+D95114CFAC26C1D5DB35EA9E3133682779C9A79AB20AFCDBEDA882B88A4514A4
+B75B77F4C8A09D6E2F34E16D65E569A01A43D682F74825E7EECC8508D731121F
+74D82118DA46CB22C3BF0FE22906BB5FDBA561F29EC31A3D4A0C3BBD7475090C
+C58884AC36C8FCB07FDD1EF023D6FA8DE5E9FAFB2945DACD50FC15923106C682
+8F38FC83E5652128ED01EBEAB3236F4FA87B4882D922BDC974601C05D46019CB
+72D459EB3BB41B9D72BE072074ABCF15654803F2030D7D7F0F4C7C20AE6897A5
+152F896389B74F939A8123A7A2494F301D07706B01600ACD60D84236E6D2CDB1
+E5D02AC300216DB172A026C49AD933
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+%%BeginFont: CMMI12
+%!PS-AdobeFont-1.1: CMMI12 1.100
+%%CreationDate: 1996 Jul 27 08:57:55
+% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+11 dict begin
+/FontInfo 7 dict dup begin
+/version (1.100) readonly def
+/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+/FullName (CMMI12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+end readonly def
+/FontName /CMMI12 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/FontBBox{-30 -250 1026 750}readonly def
+/UniqueID 5087386 def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
+3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
+EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
+4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
+2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
+323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
+2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
+D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
+5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
+0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
+A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
+2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
+00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
+CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
+99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
+C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
+5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
+55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
+A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
+3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
+F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
+F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
+EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
+67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
+923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
+A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
+FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
+1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
+D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndFont
+TeXDict begin 40258437 52099151 1000 600 600 (internals.dvi)
+@start /Fa 134[37 1[55 1[40 22 28 26 1[40 36 39 59 19
+2[19 39 37 22 32 41 29 37 33 12[41 1[44 2[52 55 12[52
+13[33 4[17 22 45[{ TeXBase1Encoding ReEncodeFont }28
+66.4176 /Palatino-Roman rf /Fb 206[25 49[{
+ TeXBase1Encoding ReEncodeFont }1 49.8132 /Palatino-Roman
+rf /Fc 206[32 49[{ TeXBase1Encoding ReEncodeFont }1 63.0968
+/Palatino-Roman rf /Fd 134[55 50 2[61 33 44 39 1[61 55
+61 89 33 2[33 61 55 39 50 61 44 1[50 12[66 61 5[100 3[39
+1[83 55 2[72 11[50 50 50 50 50 50 50 2[25 46[{
+ TeXBase1Encoding ReEncodeFont }34 99.6264 /Palatino-Bold
+rf /Ff 253[67 24 1[{ TeXbbad153fEncoding ReEncodeFont }2
+86.5083 /CMSY10 rf /Fg 162[24 1[24 29[67 17[67 1[34 34
+40[{ TeXf7b6d320Encoding ReEncodeFont }6 86.5083 /CMR10
+rf /Fi 133[37 42 42 60 42 46 28 32 32 1[42 37 46 65 23
+2[23 42 42 1[32 42 34 38 37 51[28 42[44 2[{
+ TeXBase1Encoding ReEncodeFont }24 83.022 /Palatino-Italic
+rf /Fj 134[44 44 44 44 44 44 44 44 1[44 44 44 44 44 44
+44 44 44 44 44 44 44 44 44 44 1[44 10[44 44 44 1[44 44
+44 1[44 44 1[44 44 44 44 44 44 44 44 44 2[44 44 44 1[44
+1[44 44 3[44 44 44 1[44 44 1[44 1[44 44 44 40[{
+ TeX09fbbfacEncoding ReEncodeFont }57 83.022 /CMTT10
+rf /Fk 104[83 2[42 42 24[42 46 43 69 47 50 27 35 33 46
+50 45 48 73 24 46 19 24 48 46 28 40 51 37 46 42 7[55
+1[83 60 65 51 44 55 1[50 65 69 79 51 60 1[28 69 63 46
+51 64 59 51 65 5[21 21 42 42 42 42 42 42 42 42 42 42
+50 21 28 21 50 1[28 28 23 35[50 50 2[{ TeXBase1Encoding ReEncodeFont }
+73 83.022 /Palatino-Roman rf /Fl 134[46 1[69 46 51 28
+37 32 2[46 51 74 28 51 1[28 51 46 32 42 51 37 51 42 12[55
+1[60 1[51 69 2[51 2[32 1[69 1[51 12[42 1[42 42 42 42
+42 42 2[21 1[21 44[{ TeXBase1Encoding ReEncodeFont }38
+83.022 /Palatino-Bold rf /Fm 134[66 1[100 66 1[40 53
+47 2[66 73 106 40 73 1[40 73 66 1[60 73 1[73 60 12[80
+1[86 2[100 11[86 12[60 60 60 60 60 60 4[30 44[{
+ TeXBase1Encoding ReEncodeFont }29 119.552 /Palatino-Bold
+rf /Fn 135[39 62 42 45 24 32 30 1[45 41 43 66 22 42 17
+22 43 42 25 36 46 33 41 37 12[46 10[25 5[53 20[19 25
+19 44[{ TeXBase1Encoding ReEncodeFont }29 74.7198 /Palatino-Roman
+rf /Fo 139[25 33 29 14[33 46 37 31[58 65[{
+ TeXBase1Encoding ReEncodeFont }7 74.7198 /Palatino-Bold
+rf /Fp 193[76 1[76 60[{ TeXaae443f0Encoding ReEncodeFont }2
+99.6264 /CMMI12 rf /Fq 138[60 32 42 39 3[58 2[55 1[29
+58 55 1[48 61 44 55 50 13[52 13[61 77 3[74 5[25 50 3[50
+1[50 50 50 50 60 25 33 45[{ TeXBase1Encoding ReEncodeFont }28
+99.6264 /Palatino-Roman rf /Fr 138[87 47 1[57 1[86 78
+83 5[83 2[69 88 2[72 29[102 67[{ TeXBase1Encoding ReEncodeFont }11
+143.462 /Palatino-Roman rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 0 0 a
+SDict begin [ /Title () /Subject () /Creator (LaTeX with hyperref package)
+/Author () /Producer (dvips + Distiller) /Keywords () /DOCINFO pdfmark
+end
+ 0 0 a 515 232
+a
+SDict begin H.S end
+ 515 232 a 515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.1) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515
+440 a
+SDict begin [ /Count -0 /Dest (section.1) cvn /Title (Overview) /OUT
+pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (section.2) cvn /Title (Terminology)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -7 /Dest (section.3) cvn /Title (The driver) /OUT
+pdfmark end
+ 515 440
+a 515 440 a
+SDict begin [ /Count -0 /Dest (subsection.3.1) cvn /Title (Specifying the grid extent)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -2 /Dest (subsection.3.2) cvn /Title (The timeline)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsubsection.3.2.1) cvn /Title (Initialisation)
+/OUT pdfmark end
+ 515
+440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsubsection.3.2.2) cvn /Title (Evolution)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsection.3.3) cvn /Title (Calling scheduled routines)
+/OUT pdfmark end
+ 515 440 a 515 440
+a
+SDict begin [ /Count -0 /Dest (subsection.3.4) cvn /Title (Grid arrays and grid scalars)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsection.3.5) cvn /Title (Flesh interfaces)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsection.3.6) cvn /Title (Interfaces to other thorns)
+/OUT pdfmark end
+ 515 440 a 515
+440 a
+SDict begin [ /Count -0 /Dest (subsection.3.7) cvn /Title (Missing parts)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -3 /Dest (section.4) cvn /Title (The workhorse)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsection.4.1) cvn /Title (The helpers)
+/OUT pdfmark end
+ 515 440
+a 515 440 a
+SDict begin [ /Count -0 /Dest (subsection.4.2) cvn /Title (The grid hierarchy)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -2 /Dest (subsection.4.3) cvn /Title (The interpolators)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsubsection.4.3.1) cvn /Title (Restriction)
+/OUT pdfmark end
+ 515
+440 a 515 440 a
+SDict begin [ /Count -0 /Dest (subsubsection.4.3.2) cvn /Title (Prolongation)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Count -0 /Dest (section.5) cvn /Title (Regridding, how and where and when)
+/OUT pdfmark end
+ 515 440 a 515 440
+a
+SDict begin [ /Count -0 /Dest (section.6) cvn /Title (Random ramblings)
+/OUT pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ /Page 1 /View [ /Fit ] /PageMode /UseOutlines /DOCVIEW
+pdfmark end
+ 515 440 a 515 440 a
+SDict begin [ {Catalog} << /ViewerPreferences << >> >> /PUT pdfmark
+end
+ 515 440 a 515
+440 a
+SDict begin H.S end
+ 515 440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (Doc-Start) cvn H.B /DEST pdfmark
+end
+ 515 440
+a 1222 872 a Fr(Carpet)35 b(under)g(the)h(hood)931 1168
+y Fq(Erik)25 b(Schnetter)h Fp(<)p Fq(schnetter@uni-tuebingen.de)p
+Fp(>)1357 1367 y Fq(Date:)k(2003/05/03)25 b(13:29:23)1804
+1666 y Fo(Abstract)834 1803 y Fn(This)e(document)g(describes)e(the)j
+(internal)f(workings)f(of)h(the)g(Carpet)g(arrange-)722
+1894 y(ment.)35 b(Its)23 b(intended)g(r)o(eadership)d(ar)o(e)i(people)g
+(who)h(extend)f(Carpet,)h(or)f(who)h(use)722 1985 y(Carpet)18
+b(mor)o(e)f(thant)j(the)f(average)f(user)-6 b(.)22 b(This)c(document)g
+(is)f(supposed)g(to)h(be)g(r)o(ead)722 2077 y(in)h(conjuction)h(with)g
+(and)f(guiding)f(thr)o(ough)g(the)i(sour)o(ce)d(code.)515
+2362 y Fm(Contents)515 2454 y
+SDict begin H.S end
+ 515 2454 a 515 2454 a
+SDict begin 12 H.A end
+ 515
+2454 a 515 2454 a
+SDict begin [ /View [/XYZ H.V] /Dest (section*.1) cvn H.B /DEST pdfmark
+end
+ 515 2454 a 515 2551 a
+SDict begin H.S end
+ 515 2551 a Fl(1)82
+b(Overview)1013 2551 y
+SDict begin 12 H.L end
+ 1013 2551 a 1013 2551 a
+SDict begin [ /Subtype /Link /Dest (section.1) cvn /H /I /Border [0
+0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1013 2551
+a 2324 w Fl(2)515 2734 y
+SDict begin H.S end
+ 515 2734 a Fl(2)g(T)-9 b(erminology)1124
+2734 y
+SDict begin 12 H.L end
+ 1124 2734 a 1124 2734 a
+SDict begin [ /Subtype /Link /Dest (section.2) cvn /H /I /Border [0
+0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1124 2734 a 2213 w Fl(2)515
+2917 y
+SDict begin H.S end
+ 515 2917 a Fl(3)82 b(The)21 b(driver)1039 2917
+y
+SDict begin 12 H.L end
+ 1039 2917 a 1039 2917 a
+SDict begin [ /Subtype /Link /Dest (section.3) cvn /H /I /Border [0
+0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1039 2917 a 2298 w Fl(3)639
+3016 y
+SDict begin H.S end
+ 639 3016 a Fk(3.1)86 b(Specifying)21 b(the)g(grid)f(extent)1773
+3016 y
+SDict begin 12 H.L end
+ 1773 3016 a 1773 3016 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.1) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1773 3016 a 70 w Fk(.)41
+b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f
+(.)g(.)g(.)h(.)165 b(3)639 3116 y
+SDict begin H.S end
+ 639 3116 a Fk(3.2)86
+b(The)21 b(timeline)1290 3116 y
+SDict begin 12 H.L end
+ 1290 3116 a 1290 3116
+a
+SDict begin [ /Subtype /Link /Dest (subsection.3.2) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1290 3116 a 55 w Fk(.)41 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
+g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h
+(.)165 b(4)830 3216 y
+SDict begin H.S end
+ 830 3216 a Fk(3.2.1)98 b(Initialisation)1558
+3216 y
+SDict begin 12 H.L end
+ 1558 3216 a 1558 3216 a
+SDict begin [ /Subtype /Link /Dest (subsubsection.3.2.1) cvn /H /I
+/Border [0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1558 3216 a 36 w Fk(.)41
+b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)165 b(5)830 3315 y
+SDict begin H.S end
+ 830
+3315 a Fk(3.2.2)98 b(Evolution)1457 3315 y
+SDict begin 12 H.L end
+ 1457 3315
+a 1457 3315 a
+SDict begin [ /Subtype /Link /Dest (subsubsection.3.2.2) cvn /H /I
+/Border [0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1457 3315 a 75 w Fk(.)41 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
+g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h
+(.)165 b(6)639 3415 y
+SDict begin H.S end
+ 639 3415 a Fk(3.3)86 b(Calling)21
+b(scheduled)g(r)o(outines)1816 3415 y
+SDict begin 12 H.L end
+ 1816 3415 a 1816
+3415 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.3) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1816 3415 a 27 w Fk(.)41 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)165 b(6)639
+3514 y
+SDict begin H.S end
+ 639 3514 a Fk(3.4)86 b(Grid)21 b(arrays)f(and)g(grid)h(scalars)
+1857 3514 y
+SDict begin 12 H.L end
+ 1857 3514 a 1857 3514 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.4) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1857 3514 a 48 w
+Fk(.)42 b(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)g(.)h(.)165 b(7)639 3614 y
+SDict begin H.S end
+ 639 3614 a Fk(3.5)86
+b(Flesh)22 b(interfaces)1399 3614 y
+SDict begin 12 H.L end
+ 1399 3614 a 1399
+3614 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.5) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1399 3614 a 70 w Fk(.)42 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)
+165 b(8)639 3714 y
+SDict begin H.S end
+ 639 3714 a Fk(3.6)86 b(Interfaces)20
+b(to)h(other)g(thorns)1751 3714 y
+SDict begin 12 H.L end
+ 1751 3714 a 1751 3714
+a
+SDict begin [ /Subtype /Link /Dest (subsection.3.6) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1751 3714 a 30 w Fk(.)41 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)
+f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)165 b(8)639
+3813 y
+SDict begin H.S end
+ 639 3813 a Fk(3.7)86 b(Missing)22 b(parts)1330
+3813 y
+SDict begin 12 H.L end
+ 1330 3813 a 1330 3813 a
+SDict begin [ /Subtype /Link /Dest (subsection.3.7) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1330 3813 a 77 w Fk(.)41
+b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f
+(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)165 b(8)515
+3996 y
+SDict begin H.S end
+ 515 3996 a Fl(4)82 b(The)21 b(workhorse)1214 3996
+y
+SDict begin 12 H.L end
+ 1214 3996 a 1214 3996 a
+SDict begin [ /Subtype /Link /Dest (section.4) cvn /H /I /Border [0
+0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1214 3996 a 2123 w Fl(8)639
+4096 y
+SDict begin H.S end
+ 639 4096 a Fk(4.1)86 b(The)21 b(helpers)1260 4096
+y
+SDict begin 12 H.L end
+ 1260 4096 a 1260 4096 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.1) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1260 4096 a 23 w Fk(.)41 b(.)g(.)g(.)h(.)f(.)
+g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)165 b(9)639 4195 y
+SDict begin H.S end
+ 639
+4195 a Fk(4.2)86 b(The)21 b(grid)g(hierar)o(chy)1515
+4195 y
+SDict begin 12 H.L end
+ 1515 4195 a 1515 4195 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.2) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1515 4195 a 79 w Fk(.)41
+b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)165 b(9)639 4295 y
+SDict begin H.S end
+ 639
+4295 a Fk(4.3)86 b(The)21 b(interpolators)1463 4295 y
+SDict begin 12 H.L end
+
+1463 4295 a 1463 4295 a
+SDict begin [ /Subtype /Link /Dest (subsection.4.3) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1463 4295 a 69 w Fk(.)41 b(.)g(.)h(.)f(.)g(.)g
+(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
+g(.)g(.)h(.)124 b(10)830 4394 y
+SDict begin H.S end
+ 830 4394 a Fk(4.3.1)98
+b(Restriction)1491 4394 y
+SDict begin 12 H.L end
+ 1491 4394 a 1491 4394 a
+SDict begin [ /Subtype /Link /Dest (subsubsection.4.3.1) cvn /H /I
+/Border [0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1491
+4394 a 41 w Fk(.)41 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)124
+b(10)830 4494 y
+SDict begin H.S end
+ 830 4494 a Fk(4.3.2)98 b(Pr)o(olongation)1572
+4494 y
+SDict begin 12 H.L end
+ 1572 4494 a 1572 4494 a
+SDict begin [ /Subtype /Link /Dest (subsubsection.4.3.2) cvn /H /I
+/Border [0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1572 4494 a 22 w Fk(.)41
+b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)124 b(11)515 4677 y
+SDict begin H.S end
+ 515
+4677 a Fl(5)82 b(Regridding,)19 b(how)i(and)f(where)g(and)g(when)2098
+4677 y
+SDict begin 12 H.L end
+ 2098 4677 a 2098 4677 a
+SDict begin [ /Subtype /Link /Dest (section.5) cvn /H /I /Border [0
+0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 2098 4677 a 1198 w Fl(12)515
+4859 y
+SDict begin H.S end
+ 515 4859 a Fl(6)82 b(Random)20 b(ramblings)1372
+4859 y
+SDict begin 12 H.L end
+ 1372 4859 a 1372 4859 a
+SDict begin [ /Subtype /Link /Dest (section.6) cvn /H /I /Border [0
+0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 1372 4859 a 1924 w Fl(13)1926
+5255 y Fk(1)p eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.2) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515 440 a
+SDict begin H.S end
+ 515
+440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.1) cvn H.B /DEST pdfmark
+end
+ 515 440 a 84 x Fm(1)119
+b(Overview)515 713 y Fk(The)22 b(Carpet)f(driver)-6 b(,)21
+b(which)i(lives)f(in)h(the)f(Carpet)f(arrangement,)h(is)g(divided)f
+(into)i(sev-)515 813 y(eral)i(parts.)41 b(The)26 b(thorn)h
+Fj(Carpet)c Fk(is)k(the)f(main)g(driver)f(piece;)j(it)e(pr)o(ovides)g
+(all)f(the)i(r)o(ou-)515 912 y(tines)i(and)f(str)o(uctur)o(es)g(that)g
+(Cactus)h(expects)e(fr)o(om)h(it.)49 b(The)29 b(thorn)g
+Fj(CarpetLib)c Fk(is)k(the)515 1012 y(workhorse)24 b(that)e(does)h(all)
+g(the)g(bookkeeping)h(and)e(data)g(shuf)o(\003ing.)33
+b(Those)23 b(two)h(alone)515 1111 y(form)34 b(a)f(valid)h(Cactus)f
+(driver;)40 b(the)34 b(other)g(thorns)h(pr)o(ovide)e(additional)h
+(functional-)515 1211 y(ity)-9 b(.)66 b(The)34 b(thorns)h
+Fj(CarpetInterp)p Fk(,)d Fj(CarpetReduce)p Fk(,)h(and)h
+Fj(CarpetSlab)c Fk(pr)o(ovide)j(the)515 1311 y(corr)o(esponding)f
+(interpolation,)j(r)o(eduction,)f(and)d(slabbing)h(interfaces.)58
+b(The)32 b(thorns)515 1410 y Fj(CarpetIOASCII)g Fk(and)37
+b Fj(CarpetIOFlexIO)32 b Fk(pr)o(ovide)37 b(I/O)h(methods.)77
+b(Finally)-9 b(,)42 b(thorn)515 1510 y Fj(CarpetRegrid)11
+b Fk(pr)o(ovides)k(a)h(user)g(interface)f(to)h(select)g(wher)o(e)g(and)
+f(what)i(to)f(r)o(e\002ne.)23 b(\(The)515 1610 y(actual)d(r)o
+(e\002nement)g(is)h(handled)g(in)g Fj(CarpetLib)p Fk(.\))515
+1764 y
+SDict begin H.S end
+ 515 1764 a 515 1764 a
+SDict begin 12 H.A end
+ 515 1764 a 515 1764 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.2) cvn H.B /DEST pdfmark
+end
+ 515
+1764 a 131 x Fm(2)119 b(T)-13 b(erminology)515 2084 y
+Fk(Carpet)16 b(is)i(called)f(\223Carpet\224)e(because)i(a)g(carpet)f
+(consists)j(of)e(many)h(individual)g(patches.)639 2184
+y(Carpet)28 b(is)h(a)f(mesh)i(r)o(e\002nement)f(driver)-6
+b(.)48 b(It)29 b(knows)h(about)f(a)f(hierar)o(chy)g(of)h
+Fi(r)o(e\002ne-)515 2284 y(ment)f(levels)p Fk(,)j(wher)o(e)d(each)g
+(level)g(is)h(decomposed)f(into)i(a)e(set)g(of)h(cuboid)f
+Fi(grid)g(patches)p Fk(.)515 2383 y(For)h(historic)h(r)o(easons)f(it)g
+(also)g(has)g(a)g(notion)h(of)f Fi(multigrid)f(levels)p
+Fk(,)k(but)d(those)h(ar)o(e)d(cur)o(-)515 2483 y(r)o(ently)18
+b(unused.)25 b(They)19 b(might)h(conceivably)f(be)f(r)o(eactivated)f
+(to)i(form)g(multigrid)g(stacks)515 2583 y(to)29 b(solve)g(elliptic)g
+(equations.)50 b(The)29 b(grid)f(patch)h(is)g(the)f(smallest)i(unit)f
+(of)f(grid)h(points)515 2682 y(that)22 b(Carpet)f(deals)g(with.)30
+b(Carpet)21 b(parallelises)g(by)h(assigning)h(sets)f(of)g(grid)g
+(patches)g(to)515 2782 y(pr)o(ocessors.)639 2881 y(A)29
+b(multi-patch)g(r)o(un)g(is)g(a)f(r)o(un)i(wher)o(e)e(mor)o(e)g(than)h
+(one)h(grid)e(patch)h(\(of)f(the)h(same)515 2981 y(r)o(e\002nement)24
+b(level\))g(is)h(assigned)g(to)g(a)f(single)h(pr)o(ocessor)-6
+b(.)37 b(This)25 b(is)g(a)f(situation)i(that)e(can)515
+3081 y(occur)f(even)g(without)h(r)o(e\002nement.)32 b(This)24
+b(is)g(also)f(a)g(situation)h(that)f(cannot)g(occur)g(with)515
+3180 y(PUGH,)j(so)g(that)h(most)g(thorns)g(cannot)f(handle)g(this)h
+(situation.)43 b(In)26 b(multi-patch)g(r)o(uns)515 3280
+y(one)19 b(has)g(to)g(distinguish)h(between)f Fi(local)f(mode)p
+Fk(,)g(wher)o(e)g(one)h(has)g(access)f(to)h(a)g(single)g(grid)515
+3380 y(patch,)28 b(and)f Fi(global)h(mode)p Fk(,)g(wher)o(e)f(one)h
+(cannot)g(access)f(individual)g(grid)g(patches,)i(but)515
+3479 y(can)f(instead)h(perfom)g(global)g(operations)g(such)g(as)g
+(synchr)o(onisation,)j(interpolation,)515 3579 y(or)19
+b(r)o(eduction.)24 b(This)19 b(part)f(of)h(Cactus)f(is)h(curr)o(ently)g
+(\(2003-04-30\))13 b(under)o(going)19 b(changes.)639
+3679 y(Carpet)j(uses)h(vertex-center)o(ed)d(r)o(e\002nement.)31
+b(That)23 b(is,)g(each)f(coarse)g(grid)h(point)g(co-)515
+3778 y(incides)17 b(with)g(a)g(\002ne)g(grid)g(point.)25
+b(T)-8 b(o)17 b Fi(r)o(egrid)f Fk(means)h(to)h(select)e(a)h(new)g(set)g
+(of)g(grid)f(patches)515 3878 y(for)22 b(each)f(r)o(e\002nement)h
+(level.)30 b(T)-8 b(o)23 b Fi(r)o(ecompose)e Fk(the)h(grid)g(hierar)o
+(chy)g(means)g(to)h(move)f(data)515 3977 y(ar)o(ound.)47
+b(Regridding)29 b(is)f(only)i(about)e(bookkeeping,)j(while)e(r)o
+(ecomposing)f(is)h(about)515 4077 y(data)19 b(munging.)639
+4177 y(Each)25 b(grid)f(patch)h(can)g(be)f(divided)g(in)i(up)f(to)g
+(four)g(zones:)34 b(the)25 b(interior)-6 b(,)26 b(the)f(outer)515
+4276 y(boundary)-9 b(,)30 b(and)e(the)h(ghost)g(zone,)i(and)d(the)h(r)o
+(e\002nement)f(boundary)-9 b(.)49 b(The)29 b(interior)g(is)515
+4376 y(wher)o(e)23 b(the)i(actual)e(compuations)i(go)g(on.)37
+b(The)24 b(outer)g(boundary)g(is)h(wher)o(e)f(the)g(users')515
+4476 y(outer)17 b(boundary)g(condition)h(is)g(applied;)f(fr)o(om)f
+(Carpet's)h(point)g(of)h(view)-8 b(,)18 b(these)f(two)g(ar)o(e)515
+4575 y(the)22 b(same.)30 b(\(The)21 b(only)i(dif)o(fer)o(ence)d(is)j
+(that)f(Carpet)f(sets)h Fj(cctk)p 2514 4575 27 4 v 30
+w(bbox)e Fk(corr)o(espondingly)-9 b(.\))515 4675 y(The)24
+b(ghost)h(zones)g(ar)o(e)e(boundaries)h(to)h(other)f(grid)h(patches)f
+(on)h(the)f(same)g(r)o(e\002nement)515 4774 y(level)30
+b(\(that)g(might)h(live)f(on)h(a)f(dif)o(fer)o(ent)e(pr)o(ocessor\).)53
+b(The)30 b(r)o(e\002nement)h(boundary)f(is)515 4874 y(the)d(boundary)h
+(of)f(the)h(r)o(e\002ned)e(r)o(egion)i(in)g(a)f(level,)h(and)g(it)f(is)
+h(\002lled)g(by)f(pr)o(olongation)1926 5255 y(2)p eop
+end
+%%Page: 3 3
+TeXDict begin 3 2 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.3) cvn H.B /DEST pdfmark
+end
+ 515 232 a 291 x Fk(\(interpolation\))25
+b(fr)o(om)f(the)h(next)g(coarser)f(level.)38 b(Both)25
+b(the)g(ghost)h(zones)f(and)g(the)g(pr)o(o-)515 623 y(longation)d
+(boundary)e(ar)o(e)g(\002lled)h(by)f Fi(synchr)o(onising)p
+Fk(.)639 722 y(Grid)31 b(patches)f(that)h(ar)o(e)e(on)j(the)f(same)f(r)
+o(e\002nement)h(level)f(never)h(overlap)f(except)515
+822 y(with)e(their)g(ghost)h(zones.)46 b(Conversly)-9
+b(,)30 b(all)e(ghost)g(zones)g(must)h(overlap)e(with)h(a)f(non-)515
+922 y(ghost)c(zone)f(of)h(another)f(grid)g(patch)g(of)g(the)h(same)f
+(level.)30 b(All)22 b(r)o(e\002nement)g(boundaries)515
+1021 y(must)27 b(overlap)g(with)g(a)g(grid)g(patch)f(on)i(the)f(next)g
+(coarser)f(level.)44 b(\(This)27 b(is)h(also)f(called)515
+1121 y Fi(pr)o(oper)20 b(nesting)p Fk(.\))639 1220 y(Except)27
+b(for)h(exceptions,)h(Carpet)e(numbers)h(grid)f(point)i(indices)f(and)f
+(time)h(levels)515 1320 y(with)22 b(integers.)27 b(It)21
+b(counts)i(always)e(in)g(terms)h(of)f(the)g(\002nest)h(grid,)f(so)h
+(that)f(coarser)g(grids)515 1420 y(have)26 b Fi(strides)i
+Fk(that)f(ar)o(e)f(powers)h(of)g(the)h(r)o(e\002nement)f(factor)-6
+b(.)43 b(This)28 b(has)f(the)h(advantage)515 1519 y(that)20
+b(dif)o(fer)o(ent)f(r)o(e\002nement)i(levels)f(can)h(use)g(the)g(same)f
+(global)h(numbering)h(scheme.)639 1619 y(The)74 b(grid)g(patches)g(ar)o
+(e)f(described)g(by)h(a)g Fi(bounding)g(box)g Fk(\(abbr)o(eviated)515
+1719 y(bbox,)g(see)63 b Fj(CarpetLib/src/b)o(box)o(.*)o
+Fk(.\).)147 b(This)64 b(is)g(a)f(triplet)g(of)h Fi(vectors)f
+Fk(\(see)515 1818 y Fj(CarpetLib/src/ve)o(ct)o(.*)o Fk(\),)16
+b(wher)o(e)21 b(each)h(triplet)f(speci\002es)h Fi(lower)g(bound)p
+Fk(,)g Fi(upper)g(bound)p Fk(,)515 1918 y(and)j Fi(stride)p
+Fk(,)h(much)g(as)f(is)g(conventional)i(in)e(Fortran.)39
+b(T)-7 b(riplets)25 b(ar)o(e)f(enclosed)h(in)h(r)o(ound)515
+2017 y(par)o(entheses)f Fg(\()r Ff(\001)32 b Fk(:)g Ff(\001)h
+Fk(:)g Ff(\001)r Fg(\))q Fk(,)25 b(and)f(vectors)h(ar)o(e)e(enclosed)j
+(in)f(squar)o(e)f(brackets)h Fg([)r Ff(\001)r Fk(,)16
+b Ff(\001)r Fk(,)g Ff(\001)g(\001)g(\001)q Fg(])q Fk(.)37
+b(A)515 2117 y(typical)25 b(grid)g(patch)g(might)h(have)e(a)h(bounding)
+h(box)f(which)h(is)g(denoted)f(by)h Fg(\()r([)r Fk(0)r(,)16
+b(0)r(,)g(0)r Fg(])30 b Fk(:)516 2217 y Fg([)r Fk(2)r(0)r(,)16
+b(2)r(0)r(,)g(2)r(0)r Fg(])31 b Fk(:)k Fg([)r Fk(2)r(,)16
+b(2)r(,)g(2)r Fg(])r(\))q Fk(.)39 b(This)26 b(is)h(to)f(be)g(r)o(ead)f
+(as)i Fg(\()q Fk(lower)34 b(:)g(upper)f(:)h(stride)q
+Fg(\))q Fk(,)26 b(meaning)515 2316 y(that)f(the)h(grid)g(patch)f(has)h
+(one)g(corner)f(grid)h(point)g(at)g Fg([)r Fk(0)r(,)16
+b(0)r(,)g(0)r Fg(])q Fk(,)24 b(the)i(diagonally)g(oppo-)515
+2416 y(site)h(corner)g(grid)f(point)i(at)f Fg([)r Fk(2)r(0)r(,)16
+b(2)r(0)r(,)g(2)r(0)r Fg(])q Fk(,)24 b(and)j(the)g(grid)g(points)g(ar)o
+(e)f(spaced)g(two)h(\223\002ne)515 2516 y(grid)19 b(spacings\224)g
+(apart.)24 b(This)c(grid)f(patch)g(contains)i(1)r(1)16
+b Ff(\002)h Fk(1)r(1)e Ff(\002)i Fk(1)r(1)j(grid)f(points.)26
+b(Empty)515 2615 y(bboxes)d(have)h(an)f(upper)h(bound)g(that)g(is)g
+(strictly)g(lower)g(than)g(the)g(lower)g(bound.)35 b(The)515
+2715 y(\002les)24 b Fj(CarpetLib/src/ve)o(ct)o(.*)17
+b Fk(contains)25 b(many)f(useful)f(r)o(outines)h(to)g(deal)f(with)h
+(short)515 2814 y(vectors,)38 b(and)c(the)h(\002les)g
+Fj(CarpetLib/src/b)o(bo)o(x.*)28 b Fk(contain)35 b(r)o(outines)g(deal)f
+(with)h(an)515 2914 y(algebra)26 b(of)h(bboxes.)45 b(The)27
+b(\002les)h Fj(CarpetLib/src/bb)o(oxs)o(et)o(.*)21 b
+Fk(contain)28 b(r)o(outines)f(that)515 3014 y(handle)20
+b(sets)h(of)g(bboxes.)515 3151 y
+SDict begin H.S end
+ 515 3151 a 515 3151
+a
+SDict begin 12 H.A end
+ 515 3151 a 515 3151 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.3) cvn H.B /DEST pdfmark
+end
+ 515 3151 a 148 x Fm(3)119 b(The)30
+b(driver)515 3489 y Fk(The)g(driver)g(consists)i(of)f(the)g(two)g
+(thorns)h Fj(Carpet)c Fk(and)i Fj(CarpetLib)p Fk(.)52
+b Fj(Carpet)28 b Fk(is)j(the)515 3588 y(fr)o(ont)24 b(end)h(to)h
+(Cactus,)f(while)h Fj(CarpetLib)21 b Fk(is)k(the)g(back)g(end)g(to)g
+(the)g(machine.)38 b Fj(Carpet)515 3688 y Fk(speci\002es)27
+b(the)g(grid)g(shape,)i(decides)d(when)i(to)g(allocate)e(and)h
+(deallocate)f(storage,)i(cy-)515 3787 y(cles)22 b(thr)o(ough)i(thes)f
+(schedule)f(bins,)i(and)e(passes)g(all)h(internal)g(information)g(in)g
+(the)g Fj(cGH)515 3887 y Fk(str)o(uctur)o(e)d(to)h(the)g(thorns.)515
+4015 y
+SDict begin H.S end
+ 515 4015 a 515 4015 a
+SDict begin 12 H.A end
+ 515 4015 a 515 4015 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.1) cvn H.B /DEST
+pdfmark end
+ 515
+4015 a 115 x Fd(3.1)99 b(Specifying)25 b(the)g(grid)g(extent)515
+4288 y Fj(Carpet)15 b Fk(de\002nes)k(the)f(usual)g(parameters)f
+(necessary)h(to)h(specify)e(the)i(extent)f(of)g(the)g(grid.)515
+4388 y(Everything)30 b(that)f(has)h(to)g(do)f(with)i(coor)o(dinates)e
+(and)g(symmetries)h(is)g(handled)f(else-)515 4487 y(wher)o(e,)20
+b(and)g(the)h(driver)f(does)h(not)g(know)h(about)e(that.)639
+4587 y(The)g Fj(global)p 1067 4587 27 4 v 29 w(*)g Fk(parameters)e
+(specify)i(the)g(global)h(extent)f(of)g(the)g(coarsest)g(grid.)25
+b(Not)515 4686 y(all)h(of)g(this)h(grid)g(needs)f(to)h(be)f(cover)o(ed)
+f(by)h(grid)h(patches.)42 b(It)26 b(is)h(conceivable)f(to)g(have)515
+4786 y(an)20 b(L-shaped)g(simulation)i(domain)g(without)g(any)f(r)o
+(e\002nement.)k(This)d(situation)g(can)e(be)515 4886
+y(described)h(to)j(Carpet)d(by)i(specifying)g(a)g(global)g(shape)f
+(that)h(is)g(the)g(convex)g(hull)g(of)g(the)515 4985
+y(domain,)e(and)f(then)h(using)h(two)f(cuboid)g(grid)g(patchs)f(to)h
+(\002ll)h(in)f(the)g(shape)f(of)h(the)g(L.)1926 5255
+y(3)p eop end
+%%Page: 4 4
+TeXDict begin 4 3 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.4) cvn H.B /DEST pdfmark
+end
+ 515 232 a 639 523 a Fk(The)19
+b Fj(ghost)p 1022 523 27 4 v 29 w(*)f Fk(parameters)f(specify)i(the)f
+(number)h(of)g(ghost)g(zones.)25 b(The)19 b Fj(periodic*)515
+623 y Fk(parameters)j(ar)o(e)f(unused;)k(they)e(ar)o(e)f(only)i(ther)o
+(e)f(because)f(some)i(thorns)g(look)g(at)f(these)515
+722 y(parameters.)32 b(Carpet)22 b(itself)i(does)f(not)h(supply)g
+(periodic)f(boundary)h(conditions;)i(they)515 822 y(have)19
+b(to)h(be)g(handled)f(by)h(another)g(thorn.)26 b(The)20
+b(size)f(of)h(the)g(pr)o(olongation)h(boundary)f(is)515
+922 y(the)h(same)f(as)h(the)g(number)f(of)h(ghost)h(zones.)639
+1021 y(The)i(parameter)d Fj(max)p 1340 1021 V 31 w(refinement)p
+1811 1021 V 27 w(levels)g Fk(speci\002es)i(the)h(maximum)f(number)h(of)
+515 1121 y(levels)k(that)f(can)h(be)g(pr)o(esent)f(in)h(a)g(r)o(un,)i
+(including)e(the)h(base)e(level.)46 b(This)29 b(parameter)-6
+b(,)515 1220 y(together)30 b(with)h Fj(refinement)p 1495
+1220 V 28 w(factor)p Fk(,)e(de\002ne)h(the)h(grid)f(point)h(numbering)g
+(scheme,)515 1320 y(which)26 b(\(see)f(above\))g(depends)g(on)h(the)g
+(\002nest)g(possible)g(grid.)40 b(However)-6 b(,)26 b(none)g(of)g(the)
+515 1420 y(\002ner)i(levels)g(will)h(be)f(activated)f(automatically)-9
+b(.)47 b(The)28 b Fj(multigrid)p 2730 1420 V 28 w(*)g
+Fk(parameters)e(ar)o(e)515 1519 y(unused.)639 1619 y(The)h(parameter)f
+Fj(base)p 1392 1619 V 30 w(extents)e Fk(speci\002es)j(the)g(shapes)g
+(of)g(the)g(grid)g(patches)g(that)515 1719 y(ar)o(e)e(pr)o(esent)h(on)i
+(the)f(coarsest)g(grid.)44 b(This)27 b(can)g(be)f(used)h(to)g(set)g(up)
+g(e.g.)f(an)h(L-shaped)515 1818 y(domain.)e(The)19 b(parameter)e
+Fj(base)p 1580 1818 V 30 w(outerbounds)d Fk(speci\002es)19
+b(which)h(of)f(the)g(grid)f(patches')515 1918 y(boundaries)42
+b(ar)o(e)e(to)j(be)e(tr)o(eated)f(as)i(outer)g(boundaries,)47
+b(i.e.)42 b(for)f(which)i(of)f(those)515 2017 y Fj(cctk)p
+696 2017 V 29 w(bbox)20 b Fk(should)h(be)g(set)f(to)h(1.)639
+2117 y(Carpet)i(curr)o(ently)h(ignor)o(es)g Fj(enable)p
+1837 2117 V 29 w(all)p 1998 2117 V 31 w(storage)d Fk(and)j(always)g
+(enables)f(all)h(stor)o(-)515 2217 y(age.)57 b(This)32
+b(is)g(because)f(it)g(is)h(not)g(yet)g(clear)f(how)h(individual)f(grid)
+h(function)g(can)f(be)515 2316 y(allocated)f(and)i(deallocated)e(while)
+i(still)g(keeping)g(enough)h(data)d(for)h(the)h(boundary)515
+2416 y(pr)o(olongation.)639 2516 y(Checksumming)21 b(and)d(poisoning)i
+(ar)o(e)e(means)h(to)g(\002nd)g(thorns)h(that)e(alter)g(grid)h(vari-)
+515 2615 y(ables)27 b(that)i(should)g(not)f(be)g(alter)o(ed,)g(or)h
+(that)f(fail)f(to)i(\002ll)g(in)f(grid)g(variables)g(that)g(they)515
+2715 y(should)21 b(\002ll)h(in.)639 2814 y(None)h(of)g(the)g(above)f
+(speci\002es)h(anything)g(about)g(r)o(e\002ned)f(grids.)31
+b(Re\002ned)23 b(grid)f(ar)o(e)515 2914 y(cr)o(eated)16
+b(and)j(destr)o(oyed)f(at)g(r)o(un)h(time,)g(possibly)h(guided)f(by)f
+(the)h(thorn)h Fj(CarpetRegrid)515 3014 y Fk(which)h(pr)o(ovides)f(a)h
+(nice)g(user)f(interface.)515 3164 y
+SDict begin H.S end
+ 515 3164 a 515 3164
+a
+SDict begin 12 H.A end
+ 515 3164 a 515 3164 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.2) cvn H.B /DEST
+pdfmark end
+ 515 3164 a 92 x Fd(3.2)99 b(The)25
+b(timeline)515 3415 y Fk(It)c(is)h Fj(Carpet)p Fk('s)d(task)i(to)h
+(walk)g(thr)o(ough)g(the)f(schedule)h(bins)g(and)e(call)i(all)f(user)g
+(r)o(outines.)515 3514 y(Only)g(some)g(fairly)f(fundamental)g
+(initialisation)i(happens)e(in)h(the)g(\003esh)g(befor)o(e)e(Carpet)515
+3614 y(takes)h(contr)o(ol.)26 b(The)21 b(overall)f(pictur)o(e)g(of)h
+(what)g(happens)f(when)i(is:)515 3670 y
+SDict begin H.S end
+ 515 3670 a 515
+3670 a
+SDict begin 12 H.A end
+ 515 3670 a 515 3670 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.1) cvn H.B /DEST pdfmark
+end
+ 515 3670 a 619 3780 a Fk(1.)40
+b(Startup)20 b(\(see)f(\002le)i Fj(Carpet/src/Carp)o(etS)o(ta)o(rt)o
+(up.)o(cc)o Fk(\).)e(This)i(is)g(the)f(only)h(sched-)722
+3879 y(uled)32 b(r)o(outine;)37 b(everything)32 b(else)g(happens)g(by)g
+(overloading)g(and)f(r)o(egistering.)722 3979 y(This)22
+b(r)o(outine)e(does)h(nothing)i(but)d(r)o(egistering)h(and)f
+(overloading.)515 4036 y
+SDict begin H.S end
+ 515 4036 a 515 4036 a
+SDict begin 12 H.A end
+ 515 4036
+a 515 4036 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.2) cvn H.B /DEST pdfmark
+end
+ 515 4036 a 619 4145 a Fk(2.)40 b(SetupGH)25
+b(\(see)g(\002le)h Fj(Carpet/src/Setu)o(pGH)o(.c)o(c)p
+Fk(\).)33 b(This)26 b(r)o(outine)f(does)g(the)h(bulk)722
+4245 y(of)h(initialising)i(Carpet.)43 b(It)27 b(sets)g(up)g(the)g
+(internal)g(str)o(uctur)o(es)g(for)f(all)h(grid)g(vari-)722
+4344 y(ables.)515 4379 y
+SDict begin H.S end
+ 515 4379 a 515 4379 a
+SDict begin 12 H.A end
+ 515 4379
+a 515 4379 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.3) cvn H.B /DEST pdfmark
+end
+ 515 4379 a 619 4510 a Fk(3.)40 b(Initialise)31
+b(\(see)e(\002le)h Fj(Carpet/src/Initia)o(li)o(se.)o(cc)o
+Fk(\).)47 b(This)31 b(r)o(outine)f(walks)g(the)722 4610
+y(initialisation)22 b(part)e(of)h(the)g(scheduling)g(bins.)515
+4667 y
+SDict begin H.S end
+ 515 4667 a 515 4667 a
+SDict begin 12 H.A end
+ 515 4667 a 515 4667 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.4) cvn H.B /DEST pdfmark
+end
+ 515
+4667 a 619 4776 a Fk(4.)40 b(Evolve)27 b(\(see)g(\002le)g
+Fj(Carpet/src/Evolve)o(.cc)o Fk(\).)39 b(This)28 b(r)o(outine)f(walks)h
+(the)f(evolu-)722 4876 y(tion)21 b(part)f(of)g(the)g(scheduling)h
+(bins.)26 b(It)20 b(also)h(contains)f(the)h(main)f(evolution)i(loop.)
+1926 5255 y(4)p eop end
+%%Page: 5 5
+TeXDict begin 5 4 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.5) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515 440 a
+SDict begin H.S end
+ 515
+440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.5) cvn H.B /DEST pdfmark
+end
+ 515 440 a 619 523
+a Fk(5.)40 b(Shutdown)33 b(\(see)f(\002le)g Fj(Carpet/src/Shutdo)o(wn.)
+o(cc)o Fk(\).)54 b(This)33 b(r)o(outine)f(walks)h(the)722
+623 y(shutdown)k(part)d(of)h(the)g(scheduling)h(bins.)69
+b(Normally)-9 b(,)39 b(nothing)e(inter)o(esting)722 722
+y(happens)21 b(her)o(e.)515 888 y(These)f(stages)h(ar)o(e)e(explained)h
+(in)i(the)e(following)j(sections.)515 1038 y
+SDict begin H.S end
+ 515 1038
+a 515 1038 a
+SDict begin 12 H.A end
+ 515 1038 a 515 1038 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsubsection.3.2.1) cvn H.B
+/DEST pdfmark end
+ 515 1038 a 77 x Fl(3.2.1)81
+b(Initialisation)515 1273 y Fk(\(See)23 b(\002le)h Fj
+(Carpet/src/Initia)o(li)o(se.)o(cc)o Fk(.\))30 b(In)25
+b(this)g(stage)f(Carpet)f(initialises)i(the)g(sim-)515
+1372 y(ulation.)56 b(This)31 b(includes)g(setting)g(up)g(the)g(grids,)i
+(calling)e(r)o(outines)g(to)g(r)o(egister)f(sym-)515
+1472 y(metries)24 b(and)f(boundary)h(conditions,)h(as)f(well)g(as)f
+(calculating)h(the)g(actual)f(initial)h(data)515 1571
+y(on)h(several)e(r)o(e\002nement)i(levels.)36 b(It)25
+b(traverses)e(the)i(scheduling)g(bins)g(in)g(the)f(following)515
+1671 y(or)o(der:)515 1706 y
+SDict begin H.S end
+ 515 1706 a 515 1706 a
+SDict begin 12 H.A end
+ 515
+1706 a 515 1706 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.6) cvn H.B /DEST pdfmark
+end
+ 515 1706 a 619 1837 a Fk(1.)40 b(Set)20
+b Fj(cctk)p 1034 1837 27 4 v 30 w(iteration)d Fk(to)k(zer)o(o)515
+1838 y
+SDict begin H.S end
+ 515 1838 a 515 1838 a
+SDict begin 12 H.A end
+ 515 1838 a 515 1838 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.7) cvn H.B /DEST pdfmark
+end
+ 515
+1838 a 619 1970 a Fk(2.)40 b(Set)20 b Fj(cctk)p 1034
+1970 27 4 v 30 w(time)f Fk(to)i(the)g(initial)h(time)515
+1971 y
+SDict begin H.S end
+ 515 1971 a 515 1971 a
+SDict begin 12 H.A end
+ 515 1971 a 515 1971 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.8) cvn H.B /DEST pdfmark
+end
+ 515
+1971 a 619 2103 a Fk(3.)40 b(P)-8 b(ARAMCHECK)515 2104
+y
+SDict begin H.S end
+ 515 2104 a 515 2104 a
+SDict begin 12 H.A end
+ 515 2104 a 515 2104 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.9) cvn H.B /DEST pdfmark
+end
+ 515 2104
+a 619 2236 a Fk(4.)40 b(Loop)21 b(over)g(r)o(e\002nement)f(levels,)h
+(starting)g(fr)o(om)f(coarsest:)515 2259 y
+SDict begin H.S end
+ 515 2259 a
+515 2259 a
+SDict begin 12 H.A end
+ 515 2259 a 515 2259 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.10) cvn H.B /DEST pdfmark
+end
+ 515 2259 a 619 2368
+a Fk(5.)123 b(BASEGRID)515 2369 y
+SDict begin H.S end
+ 515 2369 a 515 2369
+a
+SDict begin 12 H.A end
+ 515 2369 a 515 2369 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.11) cvn H.B /DEST pdfmark
+end
+ 515 2369 a 619 2501 a Fk(6.)g(INITIAL)515
+2502 y
+SDict begin H.S end
+ 515 2502 a 515 2502 a
+SDict begin 12 H.A end
+ 515 2502 a 515 2502 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.12) cvn H.B /DEST pdfmark
+end
+ 515
+2502 a 619 2634 a Fk(7.)g(POSTINITIAL)515 2635 y
+SDict begin H.S end
+ 515
+2635 a 515 2635 a
+SDict begin 12 H.A end
+ 515 2635 a 515 2635 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.13) cvn H.B /DEST pdfmark
+end
+ 515 2635 a 619
+2767 a Fk(8.)g(POSTSTEP)515 2768 y
+SDict begin H.S end
+ 515 2768 a 515 2768
+a
+SDict begin 12 H.A end
+ 515 2768 a 515 2768 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.14) cvn H.B /DEST pdfmark
+end
+ 515 2768 a 619 2900 a Fk(9.)g(Regrid)21
+b(\(possibly)h(cr)o(eating)d(new)j(levels\))515 2923
+y
+SDict begin H.S end
+ 515 2923 a 515 2923 a
+SDict begin 12 H.A end
+ 515 2923 a 515 2923 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.15) cvn H.B /DEST pdfmark
+end
+ 515 2923
+a 577 3033 a Fk(10.)40 b(End)21 b(loop)g(over)g(r)o(e\002nement)f
+(levels)515 3056 y
+SDict begin H.S end
+ 515 3056 a 515 3056 a
+SDict begin 12 H.A end
+ 515 3056 a 515
+3056 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.16) cvn H.B /DEST pdfmark
+end
+ 515 3056 a 577 3165 a Fk(11.)40 b(Restrict)21
+b(fr)o(om)g(\002ner)g(to)g(coarser)f(grids)515 3189 y
+SDict begin H.S end
+
+515 3189 a 515 3189 a
+SDict begin 12 H.A end
+ 515 3189 a 515 3189 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.17) cvn H.B /DEST pdfmark
+end
+ 515 3189
+a 577 3298 a Fk(12.)40 b(If)56 b(desir)o(ed,)63 b(perform)55
+b(Scott)g(Hawley's)h(initialisation)h(scheme)f(for)g(thr)o(ee)722
+3398 y(timelevels)515 3399 y
+SDict begin H.S end
+ 515 3399 a 515 3399 a
+SDict begin 12 H.A end
+ 515
+3399 a 515 3399 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.18) cvn H.B /DEST pdfmark
+end
+ 515 3399 a 577 3531 a Fk(13.)40 b(Loop)21
+b(over)g(r)o(e\002nement)f(levels,)h(starting)g(fr)o(om)f(coarsest:)515
+3554 y
+SDict begin H.S end
+ 515 3554 a 515 3554 a
+SDict begin 12 H.A end
+ 515 3554 a 515 3554 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.19) cvn H.B /DEST pdfmark
+end
+ 515
+3554 a 577 3664 a Fk(14.)123 b(RECOVER)p 1206 3664 25
+4 v 31 w(V)-9 b(ARIABLES)515 3665 y
+SDict begin H.S end
+ 515 3665 a 515 3665
+a
+SDict begin 12 H.A end
+ 515 3665 a 515 3665 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.20) cvn H.B /DEST pdfmark
+end
+ 515 3665 a 577 3796 a Fk(15.)123
+b(CPINITIAL)515 3797 y
+SDict begin H.S end
+ 515 3797 a 515 3797 a
+SDict begin 12 H.A end
+ 515 3797
+a 515 3797 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.21) cvn H.B /DEST pdfmark
+end
+ 515 3797 a 577 3929 a Fk(16.)g(ANAL)-8 b(YSIS)515
+3930 y
+SDict begin H.S end
+ 515 3930 a 515 3930 a
+SDict begin 12 H.A end
+ 515 3930 a 515 3930 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.22) cvn H.B /DEST pdfmark
+end
+ 515
+3930 a 577 4062 a Fk(17.)123 b(OutputGH)515 4085 y
+SDict begin H.S end
+ 515
+4085 a 515 4085 a
+SDict begin 12 H.A end
+ 515 4085 a 515 4085 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.23) cvn H.B /DEST pdfmark
+end
+ 515 4085 a 577
+4195 a Fk(18.)40 b(End)21 b(loop)g(over)g(r)o(e\002nement)f(levels)639
+4361 y(In)k(the)g(beginning,)i(only)e(the)g(coarsest)f(level)h(exists.)
+34 b(The)24 b(\002rst)g(loop)g(starts)g(by)g(ini-)515
+4461 y(tialising)i(this)h(level.)40 b(At)26 b(the)f(end)h(of)g(this)g
+(loop,)i(mor)o(e)d(levels)h(ar)o(e)e(cr)o(eated)g(if)i(desir)o(ed.)515
+4560 y(This)j(makes)f(it)g(possible)h(to)g(make)f(this)h(decision)g
+(depend)f(on)h(an)f(automatic)g(r)o(e\002ne-)515 4660
+y(ment)21 b(criterion.)1926 5255 y(5)p eop end
+%%Page: 6 6
+TeXDict begin 6 5 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.6) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515 440 a
+SDict begin H.S end
+ 515
+440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsubsection.3.2.2) cvn H.B
+/DEST pdfmark end
+ 515 440 a 83 x Fl(3.2.2)81
+b(Evolution)515 681 y Fk(\(See)20 b(\002le)i Fj(Carpet/src/Evolve)o(.c)
+o(c)p Fk(.\))g(In)g(this)h(stage)e(Carpet)g(performs)h(the)g(main)g
+(time)515 781 y(evolution)30 b(loop.)53 b(This)31 b(is)f(further)f
+(complicated)g(by)h(the)g(fact)e(that)i(\002ner)g(grids)f(need)515
+880 y(to)d(take)e(mor)o(e)i(and)f(smaller)g(time)h(steps)f(than)h
+(coarser)e(grids.)40 b(In)26 b(Carpet's)e(time)i(step)515
+980 y(counting)d(scheme,)g(which)h(is)e(based)g(on)h(the)g(\002nest)g
+(grid)f(time)h(steps,)f(this)i(means)e(that)515 1080
+y(the)f(coarser)g(grids)h(ar)o(e)e(skipped)h(in)h(the)f(r)o(emaining)h
+(time)g(steps.)28 b(Thus)21 b(the)h(elegant)f(r)o(e-)515
+1179 y(cursive)16 b(scheme)i(is)f(\003attened)g(out.)24
+b(The)17 b(scheduling)h(bins)g(in)f(the)g(main)h(time)f(evolution)515
+1279 y(loop)k(ar)o(e)f(traversed)f(in)i(the)g(following)h(or)o(der:)515
+1332 y
+SDict begin H.S end
+ 515 1332 a 515 1332 a
+SDict begin 12 H.A end
+ 515 1332 a 515 1332 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.24) cvn H.B /DEST pdfmark
+end
+ 515
+1332 a 619 1440 a Fk(1.)40 b(Advance)20 b Fj(cctk)p 1253
+1440 27 4 v 29 w(iteration)515 1441 y
+SDict begin H.S end
+ 515 1441 a 515
+1441 a
+SDict begin 12 H.A end
+ 515 1441 a 515 1441 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.25) cvn H.B /DEST pdfmark
+end
+ 515 1441 a 619 1572 a Fk(2.)40
+b(Loop)21 b(over)g(r)o(e\002nement)f(levels,)h(starting)g(fr)o(om)f
+(coarsest:)515 1596 y
+SDict begin H.S end
+ 515 1596 a 515 1596 a
+SDict begin 12 H.A end
+ 515 1596
+a 515 1596 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.26) cvn H.B /DEST pdfmark
+end
+ 515 1596 a 619 1704 a Fk(3.)123 b(If)21
+b(the)g(curr)o(ent)f(level)g(needs)h(to)g(be)f(tr)o(eated)f(at)h(this)i
+(iteration:)515 1705 y
+SDict begin H.S end
+ 515 1705 a 515 1705 a
+SDict begin 12 H.A end
+ 515 1705
+a 515 1705 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.27) cvn H.B /DEST pdfmark
+end
+ 515 1705 a 619 1836 a Fk(4.)206 b(Calculate)20
+b(curr)o(ent)g Fj(cctk)p 1721 1836 27 4 v 30 w(time)515
+1837 y
+SDict begin H.S end
+ 515 1837 a 515 1837 a
+SDict begin 12 H.A end
+ 515 1837 a 515 1837 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.28) cvn H.B /DEST pdfmark
+end
+ 515
+1837 a 619 1967 a Fk(5.)206 b(Cycle)21 b(time)g(levels)515
+1991 y
+SDict begin H.S end
+ 515 1991 a 515 1991 a
+SDict begin 12 H.A end
+ 515 1991 a 515 1991 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.29) cvn H.B /DEST pdfmark
+end
+ 515
+1991 a 619 2099 a Fk(6.)206 b(PRESTEP)515 2100 y
+SDict begin H.S end
+ 515
+2100 a 515 2100 a
+SDict begin 12 H.A end
+ 515 2100 a 515 2100 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.30) cvn H.B /DEST pdfmark
+end
+ 515 2100 a 619
+2231 a Fk(7.)g(EVOL)515 2232 y
+SDict begin H.S end
+ 515 2232 a 515 2232 a
+SDict begin 12 H.A end
+
+515 2232 a 515 2232 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.31) cvn H.B /DEST pdfmark
+end
+ 515 2232 a 619 2363 a Fk(8.)g(POSTSTEP)515
+2364 y
+SDict begin H.S end
+ 515 2364 a 515 2364 a
+SDict begin 12 H.A end
+ 515 2364 a 515 2364 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.32) cvn H.B /DEST pdfmark
+end
+ 515
+2364 a 619 2494 a Fk(9.)g(Regrid)515 2518 y
+SDict begin H.S end
+ 515 2518
+a 515 2518 a
+SDict begin 12 H.A end
+ 515 2518 a 515 2518 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.33) cvn H.B /DEST pdfmark
+end
+ 515 2518 a 577 2626
+a Fk(10.)40 b(End)21 b(loop)g(over)g(r)o(e\002nement)f(levels)515
+2649 y
+SDict begin H.S end
+ 515 2649 a 515 2649 a
+SDict begin 12 H.A end
+ 515 2649 a 515 2649 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.34) cvn H.B /DEST pdfmark
+end
+ 515
+2649 a 577 2758 a Fk(11.)40 b(Restrict)21 b(fr)o(om)g(\002ner)g(to)g
+(coarser)f(grids)515 2781 y
+SDict begin H.S end
+ 515 2781 a 515 2781 a
+SDict begin 12 H.A end
+ 515
+2781 a 515 2781 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.35) cvn H.B /DEST pdfmark
+end
+ 515 2781 a 577 2890 a Fk(12.)40 b(Loop)21
+b(over)g(r)o(e\002nement)f(levels,)h(starting)g(fr)o(om)f(coarsest:)515
+2913 y
+SDict begin H.S end
+ 515 2913 a 515 2913 a
+SDict begin 12 H.A end
+ 515 2913 a 515 2913 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.36) cvn H.B /DEST pdfmark
+end
+ 515
+2913 a 577 3021 a Fk(13.)123 b(If)21 b(the)g(curr)o(ent)f(level)g
+(needs)h(to)g(be)f(tr)o(eated)f(at)h(this)i(iteration:)515
+3022 y
+SDict begin H.S end
+ 515 3022 a 515 3022 a
+SDict begin 12 H.A end
+ 515 3022 a 515 3022 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.37) cvn H.B /DEST pdfmark
+end
+ 515
+3022 a 577 3153 a Fk(14.)206 b(CHECKPOINT)515 3154 y
+SDict begin H.S end
+
+515 3154 a 515 3154 a
+SDict begin 12 H.A end
+ 515 3154 a 515 3154 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.38) cvn H.B /DEST pdfmark
+end
+ 515 3154
+a 577 3285 a Fk(15.)g(ANAL)-8 b(YSIS)515 3286 y
+SDict begin H.S end
+ 515 3286
+a 515 3286 a
+SDict begin 12 H.A end
+ 515 3286 a 515 3286 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.39) cvn H.B /DEST pdfmark
+end
+ 515 3286 a 577 3416
+a Fk(16.)206 b(OutputGH)515 3440 y
+SDict begin H.S end
+ 515 3440 a 515 3440
+a
+SDict begin 12 H.A end
+ 515 3440 a 515 3440 a
+SDict begin [ /View [/XYZ H.V] /Dest (Item.40) cvn H.B /DEST pdfmark
+end
+ 515 3440 a 577 3548 a Fk(17.)40
+b(End)21 b(loop)g(over)g(r)o(e\002nement)f(levels)639
+3710 y(The)h(condition)i(whether)e(a)f(r)o(e\002nement)h(level)g(needs)
+g(to)g(be)g(tr)o(eated)e(at)i(the)g(curr)o(ent)515 3809
+y(iteration)k(is)g(dif)o(fer)o(ent)d(for)j(the)g(two)g(loops.)38
+b(In)25 b(the)g(\002rst)g(loop,)i(the)d(coarse)h(grids)f(need)515
+3909 y(to)j(be)f(advanced)e(befor)o(e)i(the)g(\002ner)h(grids,)h(so)e
+(the)h(condition)h(is)f Fi(i)s(t)r(e)q(r)16 b Fk(m)r(o)r(d)g
+Fi(s)r(t)q(r)q(i)s(d)r(e)36 b Fg(=)g Fk(1)q(.)515 4009
+y(Her)o(e)20 b Fi(i)s(t)r(e)q(r)i Fk(is)f(the)g(curr)o(ent)g
+(iteration,)f(and)i Fi(s)r(t)q(r)q(i)s(d)r(e)g Fk(the)f(stride)g(of)g
+(the)g(curr)o(ent)f(r)o(e\002nement)515 4108 y(level,)e(i.e.)g(the)h
+(factor)f(by)h(which)g(the)g(\002nest)g(grid)g(is)g(\002ner)g(than)g
+(the)f(curr)o(ent)g(grid.)25 b(In)19 b(the)515 4208 y(second)k(loop)h
+(above,)g(the)f(coarse)g(grids)g(need)g(to)h(be)f(tr)o(eated)f(after)g
+(the)h(\002ner)h(grids,)f(so)515 4308 y(that)d(the)h(condition)h(r)o
+(eads)e Fi(i)s(t)r(e)q(r)c Fk(m)r(o)r(d)g Fi(s)r(t)q(r)q(i)s(d)r(e)25
+b Fg(=)h Fi(s)r(t)q(r)q(i)s(d)r(e)q Fk(.)515 4434 y
+SDict begin H.S end
+ 515
+4434 a 515 4434 a
+SDict begin 12 H.A end
+ 515 4434 a 515 4434 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.3) cvn H.B /DEST
+pdfmark end
+ 515 4434 a 115
+x Fd(3.3)99 b(Calling)25 b(scheduled)g(routines)515 4707
+y Fk(\(See)19 b(\002le)h Fj(Carpet/src/CallFu)o(nc)o(ti)o(on.)o(cc)o
+Fk(.\))f(The)i(pr)o(ocess)e(by)i(which)g(the)f(scheduling)515
+4807 y(bins)e(ar)o(e)f(traversed)f(is)i(dif)o(fer)o(ent)e(fr)o(om)h
+(the)h(pr)o(ocess)g(which)h(actually)e(calls)h(the)g(r)o(outines)515
+4907 y(within)23 b(the)f(scheduling)h(bins.)30 b(The)22
+b(former)g(has)g(to)h(do)f(with)h(mesh)f(r)o(e\002nement,)g(mak-)515
+5006 y(ing)f(sur)o(e)f(that)g(the)h(coarse)f(and)g(\002ne)h(grids)f(ar)
+o(e)f(evolved)h(in)h(the)g(right)g(or)o(der)-6 b(.)24
+b(The)d(latter)1926 5255 y(6)p eop end
+%%Page: 7 7
+TeXDict begin 7 6 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.7) cvn H.B /DEST pdfmark
+end
+ 515 232 a 291 x Fk(has)21
+b(to)g(do)g(with)h(tr)o(eating)e(multiple)i(patches,)e(i.e.)g(with)i
+(local)f(mode)g(and)g(global)g(mode)515 623 y(operations,)g(as)f
+(mentioned)i(above.)639 722 y(In)37 b(the)f(function)h
+Fj(CallFunction)p Fk(,)e(all)h(the)h(ar)o(guments)f(that)g(ar)o(e)f
+(passed)g(to)i(the)515 822 y(scheduled)29 b(r)o(outines)g(have)g(to)g
+(be)g(set)g(up.)51 b(Additionally)-9 b(,)31 b(the)f Fj(cGH)e
+Fk(str)o(uctur)o(e)g(has)i(to)515 922 y(be)c(\002lled)h(in.)45
+b(Some)26 b(\002elds)h(in)h(the)f Fj(cGH)e Fk(str)o(uctur)o(e)i(ar)o(e)
+e(always)i(kept)g(up-to-date)e(dur)o(-)515 1021 y(ing)d(the)g(r)o
+(e\002nement)g(level)f(loops,)i(such)f(as)g(the)g(time)g(step)g(size)f
+(and)h(the)f(grid)h(spacing.)515 1121 y(The)f(\002le)h
+Fj(Carpet/src/helpe)o(r.)o(cc)15 b Fk(contains)22 b(helper)f(r)o
+(outines)h(that)g(allow)g(easy)f(loop-)515 1220 y(ing)h(over)f(r)o
+(e\002nement)g(levels)g(and)g(over)g(grid)g(patches.)27
+b(\(Grid)21 b(patches)f(ar)o(e)g(also)i(called)515 1320
+y Fi(compoments)27 b Fk(in)j(Carpet.)50 b(The)29 b(expr)o(ession)f
+(component)j(seems)e(to)h(be)e(confusing,)k(so)515 1420
+y(that)27 b(I)g(switched)h(to)f(using)i Fi(patch)c Fk(instead.)45
+b(Some)27 b(sour)o(ce)g(code)g(still)h(r)o(e\003ects)e(the)i(old)515
+1519 y(conventsion.\))639 1619 y(The)d(function)h Fj(CallFunction)20
+b Fk(\002rst)25 b(distinguishes)h(between)f(global)g(mode)g(func-)515
+1719 y(tions)d(and)e(local)h(mode)g(functions.)515 1873
+y Fl(Global)e(mode)h(functions)40 b Fk(ar)o(e)24 b(called)f(once)i
+(\(on)g(each)f(pr)o(ocessor\).)36 b(They)25 b(ar)o(e)e(passed)722
+1972 y(all)32 b(the)f(global)h(data,)h(such)f(as)f Fj(cctk)p
+1956 1972 27 4 v 30 w(gsh)f Fk(and)h Fj(cctk)p 2496 1972
+V 30 w(delta)p 2746 1972 V 29 w(space)p Fk(,)h(but)f(none)722
+2072 y(of)25 b(the)f(local)g(data,)g(such)h(as)f Fj(cctk)p
+1839 2072 V 30 w(lsh)f Fk(or)h Fj(cctk)p 2302 2072 V
+30 w(bbox)p Fk(.)35 b(Grid)24 b(functions)h(ar)o(e)e(not)722
+2171 y(accessible,)29 b(and)f(they)g(ar)o(e)f(passed)h(as)f(null)i
+(pointers.)48 b(However)-6 b(,)30 b(grid)e(scalars)722
+2271 y(and)e(grid)f(arrays)g(ar)o(e)f(accessible.)40
+b(Ther)o(e)25 b(is)h(an)g(untested)f(gateway)h(to)g(dir)o(ectly)722
+2371 y(call)21 b(local)g(mode)f(functions)i(fr)o(om)e(global)h(mode)g
+(functions.)515 2531 y Fl(Local)e(mode)h(functions)41
+b Fk(might)21 b(be)g(called)f(several)g(times)h(\(on)g(each)g(pr)o
+(ocessor\),)f(once)722 2630 y(for)29 b(each)g(grid)g(patch)f(that)h(is)
+h(assigned)f(to)g(this)h(pr)o(ocessor)-6 b(.)50 b(They)29
+b(r)o(eceive)f(the)722 2730 y(global)23 b(data)e(as)h(well)g(as)g(data)
+f(for)h(a)g(single)h(grid)f(patch.)30 b(It)22 b(is)h(illegal)f(to)g
+(perform)722 2830 y(global)c(operations,)g(such)g(as)f(synchr)o
+(onisation,)j(interpolation,)e(or)g(r)o(eduction,)g(in)722
+2929 y(local)j(mode.)639 3083 y(The)g(distinction)h(between)e(global)h
+(and)f(local)g(mode)h(is)g(only)g(important)g(for)g(multi-)515
+3183 y(patch)f(r)o(uns.)26 b(For)21 b(single-patch)g(r)o(uns,)g(the)g
+(distinction)h(does)f(not)h(exist.)639 3282 y(Multi-patch)e(r)o(uns)h
+(ar)o(e)e(only)i(necessary)f(when)h(ther)o(e)f(ar)o(e)f(mor)o(e)h(grid)
+g(patches)g(on)h(a)515 3382 y(r)o(e\002nement)29 b(level)g(than)g(ther)
+o(e)f(ar)o(e)g(pr)o(ocessors.)51 b(This)29 b(is)h(normally)g(not)f(the)
+h(case)e(for)515 3482 y(\002xed)34 b(mesh)h(r)o(e\002nement.)66
+b(Things)36 b(ar)o(e)d(dif)o(fer)o(ent)f(for)i(adaptive)f(mesh)i(r)o
+(e\002nement,)515 3581 y(which)21 b(can)g(cr)o(eate)e(many)i(r)o
+(e\002ned)f(r)o(egions.)515 3729 y
+SDict begin H.S end
+ 515 3729 a 515 3729
+a
+SDict begin 12 H.A end
+ 515 3729 a 515 3729 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.4) cvn H.B /DEST
+pdfmark end
+ 515 3729 a 92 x Fd(3.4)99 b(Grid)25
+b(arrays)f(and)h(grid)g(scalars)515 3979 y Fk(Grid)71
+b(scalars)g(ar)o(e)g(implemented)g(as)h(zer)o(o-dimensional)f(grid)h
+(arrays)e(with)515 4079 y Fj(DISTRIB=CONSTANT)o Fk(.)639
+4179 y(Grid)16 b(arrays)f(ar)o(e)f(implemented)j(as)e(grid)h
+(functions,)h(wher)o(e)f(each)f(grid)h(array)e(gr)o(oup)515
+4278 y(has)27 b(their)g(own)i(r)o(e\002nement)e(hierar)o(chy)f(that)i
+(consists)g(of)g(a)e(single)i(level)f(only)i(and)e(is)515
+4378 y(never)k(changed)g(at)g(r)o(un)i(time.)58 b(Grid)32
+b(arrays)e(with)j(less)f(than)f(3)h(dimension)h(ar)o(e)d(ex-)515
+4477 y(tended)e(to)h(have)f(an)g(extent)g(of)h(1)f(\(and)g(no)h(ghost)g
+(zones\))g(in)g(the)g(r)o(emaining)f(dimen-)515 4577
+y(sions,)e(so)f(that)g(all)f(quantities)h(in)g(Carpet)f(have)g(3)g
+(dimensions)2587 4577 y
+SDict begin H.S end
+ 2587 4577 a -30 x Fc(1)2624 4577
+y
+SDict begin 12 H.L end
+ 2624 4577 a 2624 4577 a
+SDict begin [ /Subtype /Link /Dest (Hfootnote.1) cvn /H /I /Border
+[0 0 12] /Color [1 0 0] H.B /ANN pdfmark end
+ 2624 4577 a Fk(.)37 b Fj(DISTRIB=CONSTAN)o(T)
+515 4677 y Fk(grid)22 b(arrays)e(ar)o(e)h(implemented)h(by)g
+(internally)g(enlar)o(ging)g(the)g(grid)g(array)f(in)h(the)i
+Fi(z)f Fk(di-)515 4776 y(r)o(ection,)d(and)g(then)i(distributing)f
+(this)h(array)d(onto)j(the)f(pr)o(ocessors.)p 515 4847
+1146 4 v 605 4903 a Fb(1)634 4848 y
+SDict begin H.S end
+ 634 4848 a 634 4848
+a
+SDict begin H.R end
+ 634 4848 a 634 4848 a
+SDict begin [ /View [/XYZ H.V] /Dest (Hfootnote.1) cvn H.B /DEST pdfmark
+end
+ 634 4848 a 79 x Fa(This)g(is)g(set)g(by)f(a)h
+(compile-time)h(constant)e(and)h(could)g(be)g(changed)f(to)h(allow)h
+(for)f(grid)g(functions)h(and)515 5006 y(arrays)17 b(with)g(mor)o(e)f
+(than)g(3)h(dimensions.)1926 5255 y Fk(7)p eop end
+%%Page: 8 8
+TeXDict begin 8 7 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.8) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515 440 a
+SDict begin H.S end
+ 515
+440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.5) cvn H.B /DEST
+pdfmark end
+ 515 440 a 83 x Fd(3.5)99
+b(Flesh)25 b(interfaces)515 681 y Fk(The)i(\003esh)g(has)g(many)g
+(interfaces)f(that)h(need)f(to)i(be)e(\002lled)h(in)g(by)g(a)g(driver)
+-6 b(.)43 b(These)26 b(ar)o(e)515 781 y(in)e(particular)e(all)h(the)h
+(r)o(outines)f(that)g(ar)o(e)f(overloaded)h(in)h(the)f(SetupGH)g
+(stage.)33 b(Those)515 880 y(overloaded)27 b(r)o(outines)h(as)g(well)g
+(as)g(other)h(helper)e(function)i(ar)o(e)e(implemented)h(in)h(the)515
+980 y(following)22 b(\002les:)515 1146 y Fj(Carpet/src/Check)o(su)o(m.)
+o(cc)35 b Fk(catching)21 b(illegal)g(changes)g(to)g(grid)g(variables)
+515 1279 y Fj(Carpet/src/Comm.)o(cc)35 b Fk(synchr)o(onisation,)22
+b(pr)o(olongation)515 1412 y Fj(Carpet/src/Cycle)o(.c)o(c)35
+b Fk(time)21 b(level)g(handling)515 1544 y Fj(Carpet/src/Poiso)o(n.)o
+(cc)35 b Fk(catching)21 b(uninitialised)g(grid)g(variables)515
+1677 y Fj(Carpet/src/Restr)o(ic)o(t.)o(cc)35 b Fk(r)o(estriction)21
+b(fr)o(om)f(\002ner)h(to)g(coarser)f(grids)515 1810 y
+Fj(Carpet/src/Stora)o(ge)o(.c)o(c)36 b Fk(enabling)21
+b(and)f(disabling)h(storage)515 1943 y Fj(Carpet/src/helpe)o(rs)o(.c)o
+(c)36 b Fk(small)21 b(low-level)g(helper)f(r)o(outines)515
+2076 y Fj(Carpet/src/varia)o(bl)o(es)o(.cc)35 b Fk(the)42
+b(global)g(variables)f(that)h(keep)g(Carpet's)f(curr)o(ent)722
+2175 y(state)e(\(this)h(is)g(used)f(instead)g(of)g(a)g(GH)g(extension)h
+(\227)g(should)g(pr)o(obably)e(be)722 2275 y(changed)21
+b(some)g(time\))639 2441 y(Most)30 b(of)g(these)g(\002les)g(ar)o(e)e
+(fairly)i(self-contained,)h(and)e(they)h(mostly)h(marshal)f(the)515
+2541 y(actual)20 b(work)h(to)g Fj(CarpetLib)p Fk(.)515
+2686 y
+SDict begin H.S end
+ 515 2686 a 515 2686 a
+SDict begin 12 H.A end
+ 515 2686 a 515 2686 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.6) cvn H.B /DEST
+pdfmark end
+ 515
+2686 a 98 x Fd(3.6)99 b(Interfaces)24 b(to)h(other)g(thorns)515
+2942 y Fk(Some)42 b(other)g(thorns,)48 b(mostly)43 b(fr)o(om)f(the)g
+(Carpet)f(arrangement,)46 b(do)c(need)g(to)g(ac-)515
+3041 y(cess)35 b(internal)f(data)g(of)h(Carpet.)66 b(Carpet)34
+b(keeps)g(its)i(internal)e(state)h(in)g(global)g(vari-)515
+3141 y(ables)h(which)i(ar)o(e)d(declar)o(ed)f(in)k Fj(Carpet/src/carp)o
+(et)p 2364 3141 27 4 v 25 w(public.hh)33 b Fk(and)j(de\002ned)h(in)515
+3240 y Fj(Carpet/src/varia)o(bl)o(es)o(.cc)o Fk(.)30
+b(Entities)24 b(that)g(can)g(be)g(accessed)f(fr)o(om)h(C)g(ar)o(e)e
+(declar)o(ed)515 3340 y(in)i Fj(Carpet/src/carpe)o(t)p
+1363 3340 V 25 w(public.h)p Fk(;)e(some)j(of)f(these)g(would)g(be)g
+(quite)g(useful)g(if)g(they)515 3440 y(wer)o(e)c(pr)o(ovided)f(by)i
+(the)g(\003esh.)515 3590 y
+SDict begin H.S end
+ 515 3590 a 515 3590 a
+SDict begin 12 H.A end
+ 515
+3590 a 515 3590 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.3.7) cvn H.B /DEST
+pdfmark end
+ 515 3590 a 92 x Fd(3.7)99 b(Missing)26
+b(parts)515 3841 y Fj(Carpet)15 b Fk(does)j(not)g(handle)f(stagger)o
+(ed)g(grids.)24 b Fj(Carpet)15 b Fk(does)j(not)g(pr)o(ovide)f
+(cell-center)o(ed)515 3940 y(r)o(e\002nement.)27 b Fj(Carpet)19
+b Fk(always)i(enables)g(all)h(storage.)27 b Fj(Carpet)19
+b Fk(does)i(not)h(r)o(un)g(ef)o(\002ciently)515 4040
+y(in)f(parallel.)515 4199 y
+SDict begin H.S end
+ 515 4199 a 515 4199 a
+SDict begin 12 H.A end
+ 515
+4199 a 515 4199 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.4) cvn H.B /DEST pdfmark
+end
+ 515 4199 a 126 x Fm(4)119 b(The)30
+b(workhorse)515 4515 y Fk(While)24 b Fj(Carpet)d Fk(pr)o(ovides)h(the)i
+(necessary)f(interfaces)g(to)h(the)f(\003esh,)i(the)e(gr)o(unt)i(work)f
+(is)515 4614 y(actually)c(done)i(by)f Fj(CarpetLib)p
+Fk(.)j(This)d(thorn)h(gr)o(ew)f(fr)o(om)g(an)g(earlier)f(mesh)i(r)o
+(e\002nement)515 4714 y(of)j(mine)g(\(Erik)g(Schnetter\))f(library)g
+(that)h(was)g(independent)g(of)g(Cactus.)37 b(It)25 b(has)g(in)h(the)
+515 4814 y(mean)d(time)g(been)f(thor)o(oughly)i(changed,)f(and)g(it)g
+(does)g(not)g(make)g(sense)g(any)g(mor)o(e)g(to)515 4913
+y(use)k(it)g(independent)h(of)f(Cactus.)44 b Fj(CarpetLib)24
+b Fk(contains)k(of)f(thr)o(ee)g(major)g(parts:)38 b(a)27
+b(set)1926 5255 y(8)p eop end
+%%Page: 9 9
+TeXDict begin 9 8 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232 a
+515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.9) cvn H.B /DEST pdfmark
+end
+ 515 232 a 291 x Fk(of)27
+b(generic)f(useful)h(helpers,)h(the)f(grid)g(hierar)o(chy)f(and)g(data)
+g(handling,)j(and)d(interpo-)515 623 y(lation)e(operators.)34
+b(Especially)23 b(the)h(latter)f(could)h(pr)o(obably)f(be)h(separated)e
+(out.)35 b(While)515 722 y Fj(CarpetLib)17 b Fk(is)k(written)g(in)g
+(C++,)g(the)g(interpolators)g(ar)o(e)f(written)h(in)i(F)t
+Fa(O)t(R)r(T)t(R)t(A)t(N)t Fk(7)t(7)r(.)515 872 y
+SDict begin H.S end
+ 515
+872 a 515 872 a
+SDict begin 12 H.A end
+ 515 872 a 515 872 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.1) cvn H.B /DEST
+pdfmark end
+ 515 872 a 93 x Fd(4.1)99
+b(The)25 b(helpers)515 1123 y Fk(The)32 b(helpers)f(corr)o(espond)h
+(closely)g(to)g(Carpet's)f(terminology)-9 b(.)61 b(A)31
+b(class)h Fj(vect<T,D>)515 1223 y Fk(pr)o(ovides)22 b(small)g
+Fj(D)p Fk(-dimensional)h(vectors)f(of)h(the)f(type)h
+Fj(T)p Fk(,)f(with)h(all)f(the)h(operators)f(that)515
+1322 y(one)i(has)g(learned)e(to)j(enjoy)f(fr)o(om)g(Haskell)f(and)h
+(Fortran)f(90.)34 b(A)23 b Fj(vect)f Fk(corr)o(esponds)i(to)515
+1422 y(a)h(grid)h(point)g(location.)42 b(The)26 b(class)g
+Fj(bbox<T,D>)c Fk(pr)o(ovides)j Fj(D)p Fk(-dimensional)h(bounding)515
+1522 y(boxes)d(using)h(type)e Fj(T)h Fk(as)g(indices.)32
+b(A)23 b Fj(bbox)e Fk(de\002nes)i(the)g(location)h(and)e(shape)h(of)g
+(a)f(grid)515 1621 y(patch.)42 b(Finally)-9 b(,)28 b
+Fj(bboxset<T,D>)21 b Fk(is)27 b(a)f(collection)i(of)e
+Fj(bbox)p Fk(es.)41 b Fj(bboxsets)23 b Fk(ar)o(e)i(a)h(useful)515
+1721 y(extension)18 b(of)g(the)f(algebra)g(of)g(bboxes,)h(as)f(it)h
+(closes)g(the)g Fj(bbox)e Fk(algebra)g(under)h(the)h(union)515
+1820 y(operation.)639 1920 y(The)29 b(\002les)g Fj(CarpetLib/src/d)o
+(efs)o(.*)22 b Fk(de\002nes)28 b(useful)h(small)f(helpers)h(and)f
+(instan-)515 2020 y(tiates)41 b(the)i(STL)e(templates.)88
+b Fj(CarpetLib/src/dis)o(t.*)35 b Fk(pr)o(ovides)41 b(some)i(r)o
+(outines)515 2119 y(ar)o(ound)20 b(MPI.)g(Carpet)g(is)h(closely)g
+(coupled)g(to)g(MPI)f(and)g(does)h(not)h(work)f(without)h(it.)639
+2219 y(\(Instead)i(of)h(inserting)g(switches)g(into)h(Carpet)d(to)i
+(make)f(it)h(work)g(without)h(MPI,)e(it)515 2319 y(would)g(make)f(mor)o
+(e)g(sense)h(to)g(use)g(a)f(dummy)h(version)g(of)f(MPI.)g(PETSc)g(does)
+g(contain)515 2418 y(such)e(a)f(dummy)i(version.)k(It)21
+b(is)g(also)g(easily)g(possible)g(to)g(use)g(a)f(fr)o(ee)g(MPI)g
+(version)i(such)515 2518 y(as)c(MPICH)h(and)f(use)h(that)f(to)h(r)o(un)
+h(on)f(a)f(single)i(pr)o(ocessor)-6 b(.)24 b(However)-6
+b(,)19 b(I)f(cannot)i(see)e(any)515 2617 y(r)o(eal)h(need)i(for)f
+(making)h(Carpet)f(work)h(without)h(MPI.\))515 2767 y
+SDict begin H.S end
+
+515 2767 a 515 2767 a
+SDict begin 12 H.A end
+ 515 2767 a 515 2767 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.2) cvn H.B /DEST
+pdfmark end
+ 515 2767
+a 93 x Fd(4.2)99 b(The)25 b(grid)g(hierarchy)515 3018
+y Fk(The)f(grid)h(hierar)o(chy)f(is)h(described)f(by)g(a)h(set)f(of)h
+(classes.)37 b(Except)24 b(for)h(the)g(actual)e(data,)515
+3118 y(all)d(str)o(uctur)o(es)h(and)f(all)h(information)g(is)g(r)o
+(eplicated)e(on)j(all)e(pr)o(ocessors.)515 3284 y Fj(gh)40
+b Fk(is)29 b(a)e(grid)h(hierar)o(chy)-9 b(.)46 b(It)28
+b(describes,)g(for)g(each)f(r)o(e\002nement)h(level,)h(the)f(location)h
+(of)722 3384 y(the)e(grid)g(patches.)43 b(This)28 b Fj(gh)e
+Fk(does)g(not)i(contain)f(ghost)h(zones)f(or)g(pr)o(olongation)722
+3483 y(boundaries.)f(Ther)o(e)19 b(exists)i(only)h(one)f(common)h
+Fj(gh)e Fk(for)h(all)f(grid)h(functions.)515 3649 y Fj(dh)40
+b Fk(is)21 b(a)e(data)f(hierar)o(chy)-9 b(.)25 b(It)19
+b(extends)h(the)g(notion)h(of)f(a)f Fj(gh)g Fk(by)h(ghost)h(zones)f
+(and)f(pr)o(olon-)722 3749 y(gation)i(boundaries.)26
+b(The)20 b Fj(dh)g Fk(does)h(most)g(of)g(the)g(bookkeeping)g(work,)g
+(deciding)722 3849 y(which)30 b(grid)e(patches)g(interact)g(with)i
+(what)e(other)h(grid)f(patches)h(thr)o(ough)g(syn-)722
+3948 y(chr)o(onisation,)c(pr)o(olongation,)f(r)o(estriction,)f(and)g
+(boundary)g(pr)o(olongation.)33 b(Un-)722 4048 y(expected)23
+b(situations)i(ar)o(e)d(often)i(caught)g(in)g(one)g(of)g
+Fj(dh)p Fk('s)g(many)g(self)f(checks.)35 b(As)722 4147
+y(all)21 b(grid)h(functions)g(have)f(the)g(same)g(number)h(of)f(ghost)h
+(zones,)g(ther)o(e)e(exists)i(also)722 4247 y(only)g(one)f
+Fj(dh)f Fk(for)h(all)f(grid)h(functions.)515 4413 y Fj(th)40
+b Fk(is)29 b(a)f(time)g(hierar)o(chy)-9 b(.)47 b(It)29
+b(extends)f(the)g(notion)i(of)e(a)g Fj(gh)f Fk(by)i(multiple)g(time)f
+(levels.)722 4513 y(Ther)o(e)i(exists)g(one)h Fj(th)f
+Fk(per)g(grid)g(function)h(gr)o(oup.)54 b(This)31 b(is)g(a)f(small)h
+(class)f(that)722 4612 y(keeps)25 b(track)e(of)i(the)g(curr)o(ent)e
+(time)i(on)g(the)g(dif)o(fer)o(ent)d(r)o(e\002nement)j(levels.)36
+b(\(Note)722 4712 y(that)21 b(dif)o(fer)o(ent)e(r)o(e\002nement)h
+(levels)h(usually)g(live)g(at)f(dif)o(fer)o(ent)f(times.\))515
+4878 y Fj(gf)40 b Fk(is)24 b(a)f(grid)g(function)h(of)f(a)g(certain)f
+(variable)g(type.)33 b(Ther)o(e)22 b(is)i(one)f(instance)h(of)f
+Fj(gf)f Fk(for)722 4978 y(every)i(grid)f(function,)i(whether)g(it)f
+(has)g(storage)f(or)h(not.)36 b(Each)23 b Fj(gf)g Fk(is)i(associated)
+1926 5255 y(9)p eop end
+%%Page: 10 10
+TeXDict begin 10 9 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232
+a 515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.10) cvn H.B /DEST pdfmark
+end
+ 515 232 a 722 523 a Fk(with)30
+b(a)e Fj(dh)f Fk(and)h(a)g Fj(th)g Fk(and)g(holds)h(the)g(storage)f
+(for)g(all)h(levels)f(and)g(all)h(patches.)722 623 y(It)c(pr)o(ovides)g
+(interfaces)f(to)i(access)e(and)h(modify)g(these)h(data,)f(either)g
+(dir)o(ectly)f(or)722 722 y(thr)o(ough)18 b(interpolation)g(operators.)
+24 b Fj(gf)16 b Fk(also)h(handles)g(the)h(data)d(movement)j(dur)o(-)722
+822 y(ing)k(a)e(r)o(egridding)g(operation.)515 988 y
+Fj(ggf)40 b Fk(is)25 b(an)f(abstract)g(super)o(class)f(of)i
+Fj(gf)e Fk(which)j(is)f(independent)f(of)g(the)h(variable)e(type.)722
+1088 y(This)31 b(is)f(necessary)g(in)g(C++)h(to)f(pr)o(event)f(egr)o
+(egious)h(code)g(duplication)g(due)g(to)722 1187 y(class)c(templates.)
+41 b(Most)26 b(of)g(the)g(r)o(outines)h(in)f Fj(gf)f
+Fk(ar)o(e)g(actually)g(declar)o(ed)f(in)i Fj(ggf)p Fk(,)722
+1287 y(and)19 b(they)g(either)f(ar)o(e)g(virtual)g(functions)i
+(themselves,)f(or)g(they)h(call)e(virtual)g(func-)722
+1386 y(tions)k(that)f(ar)o(e)e(declar)o(ed)g(in)i Fj(gf)p
+Fk(.)515 1553 y Fj(data)40 b Fk(is)18 b(a)g(container)g(for)g(a)g(grid)
+g(patch)g(of)g(a)g(certain)g(variable)f(type.)24 b(This)19
+b(is)g(a)f(glori\002ed)722 1652 y(multi-dimensional)31
+b(array)d(that)h(knows)i(how)f(to)g(move)f(between)g(pr)o(ocessors.)722
+1752 y Fj(data)e Fk(is)i(not)g(only)h(used)e(to)h(stor)o(e)g(the)f
+(grid)h(patches)f(that)g(make)h(up)f(a)g Fj(gf)p Fk(,)i(it)f(is)722
+1851 y(also)i(used)f(to)g(move)h(parts)e(of)h(patches)g(ar)o(ound,)i
+(e.g.)d(for)h(synchr)o(onisation)i(or)722 1951 y(pr)o(olongation.)515
+2117 y Fj(gdata)39 b Fk(is)24 b(an)g(abstract)f(super)o(class)g(of)h
+Fj(data)e Fk(for)i(much)h(the)f(same)g(r)o(easons)f(as)h(for)f
+Fj(ggf)p Fk(.)722 2217 y(All)e(information)h(that)e(is)h(independent)g
+(of)g(the)g(variable)e(type)i(is)g(kept)g(in)g Fj(gdata)p
+Fk(.)515 2367 y
+SDict begin H.S end
+ 515 2367 a 515 2367 a
+SDict begin 12 H.A end
+ 515 2367 a 515
+2367 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsection.4.3) cvn H.B /DEST
+pdfmark end
+ 515 2367 a 92 x Fd(4.3)99 b(The)25 b(interpolators)515
+2617 y Fk(Ther)o(e)e(ar)o(e)h(thr)o(ee)g(kinds)h(of)f
+(\223interpolators\224:)33 b(for)25 b(pr)o(olongation,)h(for)e(r)o
+(estricting,)h(and)515 2717 y(for)18 b(copying.)26 b(The)19
+b(latter)f(is)h(only)h(a)f(glori\002ed)g(hyperslabber)f(that)h(moves)g
+(parts)f(of)h(grid)515 2817 y(patches)h(between)h(grid)f(patches.)639
+2916 y(The)28 b(interpolators)g(used)g(for)g(r)o(estriction)g(and)f(pr)
+o(olongation)i(ar)o(e)e(dif)o(fer)o(ent)e(fr)o(om)515
+3016 y(those)36 b(used)f(for)h(the)f(generic)h(interpolation)g
+(interface)f(in)h(Cactus.)69 b(The)36 b(r)o(eason)f(is)515
+3116 y(that)21 b(interpolation)i(is)f(expensive,)g(and)f(hence)h(the)g
+(interpolation)g(operators)g(used)f(for)515 3215 y(r)o(estriction)31
+b(and)g(pr)o(olongation)i(have)d(to)i(be)f(str)o(eamlined)g(and)g
+(optimised.)58 b(As)32 b(one)515 3315 y(knows)22 b(the)g(location)f(of)
+h(the)f(sampling)h(points)g(for)f(the)g(interpolation,)h(one)g(can)f
+(calcu-)515 3415 y(late)16 b(the)g(coef)o(\002cients)g(in)h(advance,)f
+(saving)g(much)h(time)g(compar)o(ed)e(to)i(calling)f(a)g(generic)515
+3514 y(interpolation)21 b(interface.)515 3664 y
+SDict begin H.S end
+ 515 3664
+a 515 3664 a
+SDict begin 12 H.A end
+ 515 3664 a 515 3664 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsubsection.4.3.1) cvn H.B
+/DEST pdfmark end
+ 515 3664 a 76 x Fl(4.3.1)81
+b(Restriction)515 3898 y Fk(Restriction)22 b(operators)f(move)h(data)e
+(fr)o(om)g(\002ner)i(to)f(coarser)g(grids.)27 b(They)21
+b(ar)o(e)f(typically)515 3998 y(called)j(after)f(both)j(the)f(coarse)f
+(and)g(the)h(\002ne)g(grid)g(have)f(been)h(advanced)e(to)i(the)g(same)
+515 4098 y(time,)18 b(and)e(they)h(overwrite)g(parts)g(of)g(the)g
+(coarse)f(grid)h(with)h(information)g(fr)o(om)f(the)g(\002ne)515
+4197 y(grid,)i(coupling)h(the)f(coarse)f(grid)h(evolution)h(to)g(the)f
+(\002ne)g(grid)g(evolution.)26 b(In)19 b(principle,)515
+4297 y(ther)o(e)d(could)h(be)g(r)o(estriction)g(operators)g(with)h(dif)
+o(fer)o(ent)d(or)o(ders)i(of)g(accuracy)-9 b(.)23 b(Curr)o(ently)515
+4396 y(only)e(a)g(single)g(r)o(estriction)g(operator)f(is)h
+(implemented)g(that)g(uses)g(sampling.)639 4496 y(The)165
+b(interface)e(of)i(the)f(r)o(estriction)h(operator)f(\(see)g(\002le)515
+4596 y Fj(CarpetLib/src/re)o(st)o(ri)o(ct)p 1485 4596
+27 4 v 25 w(3d)p 1598 4596 V 31 w(real8.F77)p Fk(\))16
+b(is)515 4762 y Fj(subroutine)39 b(restrict_3d_real8)776
+4861 y(\(src,)j(srciext,)e(srcjext,)g(srckext,)820 4961
+y(dst,)i(dstiext,)e(dstjext,)g(dstkext,)1905 5255 y Fk(10)p
+eop end
+%%Page: 11 11
+TeXDict begin 11 10 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232
+a 515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.11) cvn H.B /DEST pdfmark
+end
+ 515 232 a 820 523 a Fj(srcbbox,)40
+b(dstbbox,)g(regbbox\))645 722 y(integer)172 b(srciext,)40
+b(srcjext,)g(srckext)645 822 y(CCTK_REAL8)g(src\(srciext,srcj)o(ex)o
+(t,s)o(rc)o(kex)o(t\))645 922 y(integer)172 b(dstiext,)40
+b(dstjext,)g(dstkext)645 1021 y(CCTK_REAL8)g(dst\(dstiext,dstj)o(ex)o
+(t,d)o(st)o(kex)o(t\))645 1121 y(integer)172 b(srcbbox\(3,3\),)38
+b(dstbbox\(3,3\),)g(regbbox\(3,3\))515 1256 y Fk(This)33
+b(interpolator)g(assumes)f(that)h(space)f(has)g(thr)o(ee)g(dimensions.)
+62 b(The)33 b(arrays)e Fj(src)515 1355 y Fk(and)22 b
+Fj(dst)g Fk(contain)h(the)g(sour)o(ce)g(\(\002ne\))f(and)h(destination)
+g(\(coarse\))f(grid)h(patches,)g(stor)o(ed)515 1455 y(in)35
+b(Fortran)g(or)o(der)-6 b(,)37 b(as)d(is)h(customary)g(in)g(Cactus.)68
+b(The)34 b(arrays)g Fj(src)g Fk(and)g Fj(dst)f Fk(have)515
+1555 y(the)40 b(shapes)f Fj(\(srciext,srcjext)o(,sr)o(ck)o(ext)o(\))33
+b Fk(and)40 b Fj(\(dstiext,dstjex)o(t,d)o(st)o(ke)o(xt\))o
+Fk(,)515 1654 y(r)o(espectively)19 b(\227)i(this)h(corr)o(esponds)e(to)
+h(the)g Fj(cctk)p 2117 1654 27 4 v 30 w(lsh)f Fk(\002eld)g(in)h(the)g
+Fj(cGH)f Fk(str)o(uctur)o(e.)639 1754 y(The)25 b(thr)o(ee)e(bboxes)i
+(describe)e(the)i(location)g(and)f(shape)g(of)h(the)f(two)i(arrays)d
+(and)h(of)515 1853 y(the)k(r)o(egion)g(that)f(should)i(be)f(pr)o
+(olongated)f(in)h(the)g(global)h(grid)e(point)i(index)f(system.)515
+1953 y(That)22 b(is,)h(while)g(the)f(two)h(arrays)f Fj(src)f
+Fk(and)h Fj(dst)f Fk(ar)o(e)g(stor)o(ed)g(as)i(dense)f(arrays,)f(they)i
+(cor)o(-)515 2053 y(r)o(espond)k(to)h(grid)f(patches)h(which)g(in)g
+(general)f(have)h(non-unit)g(strides)g(in)g(the)g(global)515
+2152 y(index)18 b(system.)25 b(As)18 b(pr)o(olongation)g(is)h(an)f
+(operation)g(that)g(is)g(performed)f(between)h(over)o(-)515
+2252 y(lapping)23 b(grids,)h(the)g(pr)o(olongation)g(r)o(egion)f(is)h
+(the)f(same)g(for)h(both)g(the)f(coarse)g(and)g(the)515
+2352 y(\002ne)e(grids.)639 2451 y(A)32 b(few)f(constraints)i(must)f
+(hold)g(for)g(these)g(data.)57 b(For)32 b(example,)h(the)f(shapes)g(of)
+515 2551 y(the)22 b(arrays)f(must)i(be)f(the)g(same)g(as)g(the)g
+(shapes)g(de\002ned)g(by)g(the)g(bounding)h(boxes;)g(the)515
+2650 y(strides)e(in)h(the)f(bounding)i(boxes)e(must)h(dif)o(fer)e(by)h
+(the)h(r)o(e\002nement)f(factor;)f(the)i(bound-)515 2750
+y(ing)j(boxes)h(must)f(overlap,)h(and)e(the)h(r)o(egion's)h(bounding)g
+(box)f(must)h(be)e(contained)i(in)515 2850 y(the)j(arrays)g(bounding)h
+(boxes,)i(etc.)51 b(Checking)30 b(these)g(constraints)g(makes)g(up)f
+(about)515 2949 y(thr)o(ee)20 b(quarters)g(of)h(the)g(r)o(estriction)g
+(r)o(outine.)639 3049 y(The)f(bboxes)g(themselves)g(ar)o(e)f(her)o(e)g
+(r)o(epr)o(esented)e(as)j(Fortran)g(arrays.)k(Their)19
+b(mean-)515 3149 y(ing)i(is)515 3283 y Fj(bbox\(:,1\))38
+b Fk(lower)21 b(boundary)f(\(inclusive\))515 3408 y Fj(bbox\(:,2\))38
+b Fk(upper)20 b(boundary)g(\(inclusive\))515 3533 y Fj(bbox\(:,3\))38
+b Fk(stride)515 3664 y
+SDict begin H.S end
+ 515 3664 a 515 3664 a
+SDict begin 12 H.A end
+ 515 3664
+a 515 3664 a
+SDict begin [ /View [/XYZ H.V] /Dest (subsubsection.4.3.2) cvn H.B
+/DEST pdfmark end
+ 515 3664 a 88 x Fl(4.3.2)81 b(Prolongation)515
+3910 y Fk(Ther)o(e)20 b(ar)o(e)g(many)i(pr)o(olongation)g(operators)f
+(implemented.)28 b(They)22 b(dif)o(fer)e(in)h(the)h(or)o(der)515
+4010 y(of)c(their)h(interpolation)g(in)g(space)e(\(\002rst)i(and)f
+(thir)o(d,)g(or)g(linear)g(and)g(cubic)g(interpolation\))515
+4110 y(and)i(in)i(time)f(\(\002rst)g(and)g(second,)g(or)g(linear)g(and)
+g(quadratic\).)k(The)c(higher)h(the)f(or)o(der)f(of)515
+4209 y(interpolation,)h(the)g(lar)o(ger)e(is)i(the)f(stencil,)h(i.e.)f
+(the)h(mor)o(e)f(ghost)i(zones)e(and)g(time)h(levels)515
+4309 y(ar)o(e)e(necessary)-9 b(,)20 b(and)g(the)h(mor)o(e)g(expensive)f
+(the)h(operation)g(becomes.)639 4408 y(The)217 b(pr)o(olongation)h
+(operators)f(live)g(in)g(the)h(\002les)515 4508 y Fj(CarpetLib/src/pr)o
+(ol)o(on)o(gat)o(e)p 1572 4508 27 4 v 25 w(3d)p 1685
+4508 V 31 w(real8*.F77)p Fk(,)65 b(and)60 b(the)h(\002le)f(names)g
+(indicate)515 4608 y(their)41 b(or)o(ders:)65 b Fi(n)q
+Fj(tl)40 b Fk(stands)h(for)g Fi(n)h Fk(time)f(levels,)46
+b(and)40 b Fj(o)q Fi(n)h Fk(stands)g(for)g(an)f(or)o(der)h
+Fi(n)515 4707 y Fk(interpolation)21 b(in)h(space)e(\(which)h(uses)g(a)f
+(stencil)h(that)g(is)h Fi(n)d Fg(+)f Fk(1)j(grid)g(points)g(wide\).)639
+4807 y(Apart)30 b(fr)o(om)h(taking)g(mor)o(e)g(than)h(one)f
+Fj(src)f Fk(array)g(ar)o(gument)h(when)g(using)h(mor)o(e)515
+4907 y(than)23 b(one)g(time)g(level,)g(the)g(interface)e(to)j(the)f(pr)
+o(olongation)g(operator)f(is)i(equivalent)f(to)515 5006
+y(that)d(of)h(the)g(r)o(estriction)g(operator)f(described)g(above.)1905
+5255 y(11)p eop end
+%%Page: 12 12
+TeXDict begin 12 11 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232
+a 515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.12) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515 440 a
+SDict begin H.S end
+ 515
+440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.5) cvn H.B /DEST pdfmark
+end
+ 515 440 a 86 x Fm(5)119
+b(Regridding,)30 b(how)g(and)g(where)e(and)i(when)515
+715 y Fk(The)25 b(thorn)h Fj(Carpet)d Fk(pr)o(ovides)h(a)h(r)o(outine)g
+Fj(RegisterRegridRou)o(tin)o(e)19 b Fk(wher)o(e)25 b(one)g(can)515
+815 y(r)o(egister)20 b(a)h(r)o(egridding)g(r)o(outine.)27
+b(Such)21 b(a)f(r)o(egridding)h(r)o(outine)g(does)g(not)h(have)f(to)h
+(actu-)515 914 y(ally)k(r)o(egrid)g(anything,)i(it)f(only)g(has)g(to)g
+(r)o(eturn)e(the)i(new)g(desir)o(ed)e(grid)h(hierar)o(chy)-9
+b(,)27 b(i.e.)515 1014 y(basically)20 b(a)g(description)h(of)g(a)f
+Fj(gh)p Fk(.)639 1114 y(Thorn)g Fj(CarpetRegrid)15 b
+Fk(pr)o(ovides)k(a)g(user)g(interface)f(to)i(the)g(r)o(egridding)f(r)o
+(outines)h(in)515 1213 y(Carpet.)j(All)18 b(it)g(does)g(is)h(take)e(a)h
+(r)o(egridding)f(speci\002cation)h(fr)o(om)g(the)g(user)g(and)g
+(translate)515 1313 y(that)24 b(into)i(a)e Fj(gh)p Fk(.)36
+b(As)25 b(usual,)g(the)g(parts)f(wher)o(e)g(the)h(computer)g(has)f(to)h
+(listen)h(to)f(what)f(a)515 1412 y(human)d(being)g(intends)g(ar)o(e)f
+(the)h(most)g(complicated.)639 1512 y(As)26 b(humans)h(ar)o(e)e
+(usually)i(mor)o(e)e(adept)h(at)f(getting)i(used)f(to)h(computers)f
+(than)h(the)515 1612 y(other)e(way)g(ar)o(ound,)g(it)g(is)h(useful)f
+(and)f(pr)o(obably)h(necessary)f(to)i(get)f(acquainted)f(with)515
+1711 y(how)d(Carpet)f(thinks)i(in)f(or)o(der)f(to)h(make)g(it)g(do)f
+(what)h(is)g(intended.)639 1811 y(Carpet)27 b(does)h(not)h(deal)e(with)
+i(r)o(eal-valued)c(coor)o(dinates.)47 b(Carpet)27 b(deals)g(with)i(in-)
+515 1911 y(teger)23 b(grid)h(point)h(locations)g(only)-9
+b(,)26 b(and)e(it)g(counts)h(grid)f(points)h(in)g(terms)f(of)g(the)g
+(\002nest)515 2010 y(possible)e(grid)g(\(not)g(the)g(\002nest)g(curr)o
+(ently)f(existing)i(grid\).)28 b(The)21 b(\002nest)i(possible)f(grid)g
+(is)515 2110 y(de\002ned)j(by)h(the)g(maximum)h(number)f(of)g(r)o
+(e\002nement)f(levels)h(set)g(in)h Fj(Carpet)p Fk(.)38
+b(Chang-)515 2209 y(ing)19 b(this)h(parameter)e(will)i(change)f(the)g
+(meaning)h(of)f(many)g(other)g(values)g(in)h(parameter)515
+2309 y(\002les,)33 b(such)e(as)f(e.g.)h(iteration)f(numbers)h
+(\(termination,)j(output\).)55 b(The)31 b(only)g(param-)515
+2409 y(eter)g(that)h(is)h(speci\002ed)f(in)g(terms)g(of)h(the)f
+(coarsest)g(grid)g(is)g(the)g(shape)g(of)g(the)h(coars-)515
+2508 y(est)38 b(grid)h(in)g(the)f Fj(global)p 1381 2508
+27 4 v 29 w(*)g Fk(parameters)g(of)g Fj(Carpet)p Fk(.)77
+b(I)38 b(ther)o(efor)o(e)f(suggest)i(to)g(set)515 2608
+y Fj(max)p 652 2608 V 30 w(refinement)p 1122 2608 V 27
+w(levels)25 b Fk(to)j(some)f(lar)o(ge)g(number)g(\(e.g.)f(10\),)i(and)e
+(then)i(not)g(chang-)515 2708 y(ing)21 b(it)g(while)h(experimenting)f
+(with)g(other)g(parameter)e(settings.)639 2807 y(Carpet)d(also)i(does)f
+(not)h(know)g(about)g(symmetries.)25 b(When)17 b(specifying)h(the)f
+(location)515 2907 y(of)k(a)g(\002ne)g(grid)h(in)f(terms)h(of)f(grid)g
+(points,)h(it)g(is)g(the)f(r)o(esponsibility)h(of)g(the)f(user)g(to)h
+(place)515 3007 y(the)32 b(\002ne)g(grid)g(corr)o(ectly)-9
+b(.)59 b(For)32 b(that)g(one)h(has)f(to)h(take)e(ghost)i(zones)g(and)e
+(symmetry)515 3106 y(zones)21 b(into)g(account.)639 3206
+y(It)c(is)g(also)f(possible)i(to)e(specify)h(the)f(\002ne)h(grid)g
+(locations)g(in)g(terms)g(of)f(r)o(eal-valued)e(co-)515
+3305 y(or)o(dinates.)32 b(In)23 b(this)h(case,)f Fj(CarpetRegrid)18
+b Fk(translates)23 b(these)g(into)h(integer)f(grid)g(points.)515
+3405 y(A)i(good)g(translation)h(is)g(quite)g(complicated,)f(because)g
+(it)g(has)h(to)f(take)g(many)h(user)f(ex-)515 3505 y(pectations)g(into)
+g(account,)g(such)h(as)e(the)h(location)g(of)g(the)g(origin,)h
+(staggering)f(with)g(r)o(e-)515 3604 y(spect)19 b(to)h(the)g(origin,)g
+(symmetry)g(boundary)g(conditions,)h(the)e(number)h(of)f(ghost)i(zones)
+515 3704 y(etc.)40 b(The)26 b(curr)o(ent)f(translation)h(is)h(naive)e
+(and)g(leads)h(to)g(unexpected)f(r)o(esults)g(in)i(many)515
+3804 y(cases.)32 b(A)23 b(r)o(outine)g(that)h(does)f(most)h(of)f(the)h
+(time)f(what)h(the)f(user)g(expects)g(while)h(being)515
+3903 y(easy)g(to)i(understand)f(is)g(pr)o(obably)f(important)i(for)f
+(the)g(ease)f(of)i(use)f(of)g(Carpet,)g(but)g(it)515
+4003 y(might)d(be)e(some)h(time)g(until)h(it)f(is)g(written.)639
+4102 y Fj(CarpetRegrid)e Fk(contains)25 b(also)f(a)f(r)o(outine)h(that)
+g(measur)o(es)f(the)g(err)o(or)-6 b(,)24 b(as)f(pr)o(ovided)515
+4202 y(in)d(a)g(grid)g(function,)g(and)g(the)g(automatically)g(decides)
+f(wher)o(e)h(to)g(r)o(e\002ne.)25 b(This)20 b(is)h(called)515
+4302 y(AMR)f(\(adaptive)f(mesh)i(r)o(e\002nement\))g(if)f(it)h(works)h
+(ef)o(\002ciently)-9 b(.)639 4401 y(Much)30 b(of)g Fj(CarpetRegrid)24
+b Fk(is)31 b(just)f(slabbed)f(together)h(in)g(an)g(attempt)f(to)h
+(\002nd)h(out)515 4501 y(what)f(people)h(need)f(and)g(expect.)54
+b(The)31 b(thorn)g(is)g(a)g(mess,)i(and)d(a)g(complete)h(r)o(ewrite)515
+4601 y(might)20 b(be)f(a)g(good)h(idea,)e(once)i(one)f(knows)i(what)e
+(exactly)g(the)g(r)o(ewritten)g(thorn)h(should)515 4700
+y(do.)1905 5255 y(12)p eop end
+%%Page: 13 13
+TeXDict begin 13 12 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a 515 232 a
+SDict begin H.S end
+ 515 232
+a 515 232 a
+SDict begin H.R end
+ 515 232 a 515 232 a
+SDict begin [ /View [/XYZ H.V] /Dest (page.13) cvn H.B /DEST pdfmark
+end
+ 515 232 a 515 440 a
+SDict begin H.S end
+ 515
+440 a 515 440 a
+SDict begin 12 H.A end
+ 515 440 a 515 440 a
+SDict begin [ /View [/XYZ H.V] /Dest (section.6) cvn H.B /DEST pdfmark
+end
+ 515 440 a 86 x Fm(6)119
+b(Random)31 b(ramblings)515 715 y Fk(Carpet)c(uses)i(the)g(STL,)f
+(because)g(the)g(STL)g(pr)o(ovides)g(very)h(useful)f(container)h
+(classes)515 815 y(such)e(as)g(vectors,)i(sets,)f(and)f(lists.)46
+b(W)-6 b(riting)27 b(these)h(abstract)e(datatypes)g(oneself)h(does)515
+914 y(not)21 b(make)f(sense)g(in)h(these)f(times.)26
+b(It)21 b(makes)f(much)h(mor)o(e)f(sense)g(to)h(politick)g(computer)515
+1014 y(administrators)g(to)g(upgrade)e(their)i(softwar)o(e.)639
+1114 y(The)h(STL)f(and)h Fj(CarpetLib)p Fk('s)c(classes)k(need)f(to)h
+(be)g(instantiated)g(explicitly)-9 b(.)29 b(Several)515
+1213 y(compilers)i(have)g(several)f(\223automatic\224)g(schemes)h(that)
+g(handle)g(all)g(template)f(issues)515 1313 y(\223just)g(\002ne\224.)53
+b(Except)29 b(they)h(don't.)54 b(One)30 b(wants)g(to)h(select)f(the)g
+(following:)45 b(No)30 b(auto-)515 1412 y(matic)e(inclusion)h(of)f
+Fj(.cc)f Fk(\002les,)j(no)e(automatic)g(template)g(instantiation)h(at)e
+(link)i(time.)515 1512 y(Instead,)20 b(most)h(templates)f(ar)o(e)f
+(instantiated)h(explicitly)h(by)f Fj(CarpetLib)p Fk(.)i(It)e(is)h(also)
+f(nec-)515 1612 y(essary)27 b(to)g(specify)g(to)g(instantiate)h(used)f
+(templates)f(automatically)-9 b(.)45 b(The)27 b(explicit)g(in-)515
+1711 y(stantiations)32 b(of)f Fj(CarpetLib)p Fk('s)d(classes)j(live)g
+(in)h(the)f Fj(.cc)f Fk(\002les)i(corr)o(esponding)f(to)h(the)515
+1811 y Fj(.hh)18 b Fk(\002le)i(that)g(de\002ne)f(the)h(templates.)25
+b(The)20 b(STL)f(templates)g(ar)o(e)f(instantiated)i(in)g(the)g(\002le)
+515 1911 y Fj(CarpetLib/src/de)o(fs)o(.c)o(c)p Fk(.)639
+2010 y(Carpet)e(makes)h(extensive)f(use)h(of)g(the)g
+Fj(assert\(\))d Fk(macr)o(o)i(in)h(C.)g(This)g(is)g(a)g(quick)g(and)515
+2110 y(easy)j(way)h(to)g(ensur)o(e)f(that)g(a)g(certain)h(condition)g
+(holds.)32 b(Assert)23 b(statements)g(abort)f(the)515
+2209 y(code)c(if)f(the)i(condition)g(does)f(not)h(hold.)25
+b(Although)19 b(I)f(try)g(to)h(pr)o(ovide)e(useful)h(err)o(or)f(mes-)
+515 2309 y(sages)25 b(to)h(the)f(user)-6 b(,)26 b(many)f(unexpected)g
+(cases)g(ar)o(e)f(only)i(caught)f(deep)f(inside)i(Carpet)515
+2409 y(and)g(manifest)g(themselves)h(as)g(assertion)g(failur)o(es.)41
+b(If)27 b(you)g(r)o(eport)f(an)g(assertion)h(fail-)515
+2508 y(ur)o(e,)i(it)f(is)h(vitally)f(important)h(to)f(r)o(emember)g
+(theaccompanying)g(\002le)h(name)f(and)g(line)515 2608
+y(number)-6 b(.)35 b(It)24 b(would)h(also)f(be)g(useful)g(to)h(extract)
+e(fr)o(om)g(the)h(cor)o(e)g(\002le)g(a)g(stack)g(backtrace)515
+2708 y(and)c(the)h(values)f(of)h(the)g(local)g(variables)e(of)i(the)g
+(curr)o(ent)f(stack)h(frame.)639 2807 y(Using)37 b(symmetry)f(boundary)
+g(conditions)h(such)g(as)e(octant)h(mode)g(is)h(curr)o(ently)515
+2907 y(still)e(awkwar)o(d)e(in)h(Carpet.)65 b(Ther)o(e)34
+b(ar)o(e)e(several)i(r)o(easons)g(for)g(this:)53 b Fj(CarpetRegrid)515
+3007 y Fk(does)28 b(not)g(know)h(about)f(symmetries,)i(and)e(hence)g
+(doesn't)g(take)g(them)g(into)h(account)515 3106 y(when)21
+b(choosing)h(r)o(e\002nement)e(r)o(egions.)25 b(The)c(symmetry)g
+(conditions)g(on)g(the)g(\002ner)f(grid)515 3206 y(might)i(be)f(dif)o
+(fer)o(ent)e(fr)o(om)i(the)g(conditions)i(on)e(the)h(coarser)e(grids,)h
+(and)g(the)g(symmetry)515 3305 y(thorns)31 b(cannot)f(cope)f(with)i
+(this,)h(so)f(this)f(situation)h(must)f(be)g(avoided:)42
+b(one)31 b(cannot)515 3405 y(use)24 b Fj(avoid)p 889
+3405 27 4 v 29 w(origin=yes)p Fk(,)d(because)j(the)g(\002ner)h(grids)f
+(all)h(have)e Fj(avoid)p 2797 3405 V 30 w(origin=no)d
+Fk(due)515 3505 y(to)h(the)g(vertex-centr)o(ed)d(r)o(e\002nement.)1905
+5255 y(13)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Carpet/CarpetWeb/favicon.ico b/Carpet/CarpetWeb/favicon.ico
new file mode 100644
index 000000000..f8974cd29
--- /dev/null
+++ b/Carpet/CarpetWeb/favicon.ico
Binary files differ
diff --git a/Carpet/CarpetWeb/feature-requests.html b/Carpet/CarpetWeb/feature-requests.html
new file mode 100644
index 000000000..f753bb2dd
--- /dev/null
+++ b/Carpet/CarpetWeb/feature-requests.html
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
+ <title>Carpet Feature Requests</title>
+ </head>
+
+ <body>
+ <h1>Carpet Feature Requests</h1>
+
+ <p>As Carpet is being looked at (and used?) by more and more
+ people, they express more and more wishes about things they miss
+ in Carpet. Some of these can be quickly fulfilled, others will
+ take months to implement. Here is a collection of these, so that
+ people know we don't ignore them.</p>
+
+ <hr />
+
+ <h2>Small Stuff</h2>
+
+ <ul>
+ <li>Find a nice Carpet logo</li>
+ <li>Add Doxygen tags</li>
+ <li>Compile and run on a few strange supercomputer architectures</li>
+ <li>Adapt CarpetSlab to new hyperslabbing interface</li>
+ <li>Slowly create many test cases for Carpet</li>
+ </ul>
+
+ <h2>Heavier Stuff</h2>
+
+ <ul>
+ <li>Compile Carpet and PUGH together</li>
+ <li>Don't restrict all grid functions</li>
+ <li>Make CarpetInterp interpolate in time as well</li>
+ <li>Design and write a nicer interface to specify fine grid
+ locations</li>
+ <li>Introduce the "convergence level" parameter</li>
+ <li>Do not enable all storage all the time</li>
+ </ul>
+
+ <h2>Good Stuff</h2>
+
+ <ul>
+ <li>Checkpointing and Restart</li>
+ <li>Parallel performance</li>
+ <li>Elliptic solvers</li>
+ </ul>
+
+ <h2>Stuff that would be nice, but won't be needed in the near
+ future</h2>
+
+ <ul>
+ <li>Cell centring</li>
+ <li>Improve the A of the AMR algorithm</li>
+ </lu>
+
+ <hr />
+
+ <p>
+ <a href="http://www.xemacs.org/About/created.html"><img
+ src="cbxSmall.jpg" alt="Created with XEmacs!" height="36"
+ width="100" /></a>
+
+ <a href="http://www.anybrowser.org/campaign/"><img
+ src="logoab8.png" alt="Best Viewed With Any Browser" height="31"
+ width="88" /></a>
+
+ <a href="http://validator.w3.org/check/referer"><img
+ src="valid-xhtml10.png" alt="Valid XHTML 1.0!" height="31"
+ width="88" /></a>
+ </p>
+
+ <address><a href="mailto:schnetter@uni-tuebingen.de">Erik Schnetter</a></address>
+<p>
+<!-- Created: Thu Aug 14 20:16:15 CEST 2003 -->
+<!-- hhmts start -->
+Last modified: Tue Aug 19 13:56:50 CEST 2003
+<!-- hhmts end -->
+</p>
+ </body>
+</html>
diff --git a/Carpet/CarpetWeb/index.html b/Carpet/CarpetWeb/index.html
new file mode 100644
index 000000000..c69a5ceda
--- /dev/null
+++ b/Carpet/CarpetWeb/index.html
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<!-- $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetWeb/index.html,v 1.9 2004/08/07 10:38:07 schnetter Exp $ -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
+ <title>CarpetCode</title>
+ </head>
+
+ <body>
+
+ <h1 align="center">CarpetCode</h1>
+
+<table>
+<tr>
+<td valign="top" bgcolor="#ffcc77" width="1%">
+
+<p><b>CarpetCode</b><br />
+<a href="http://www.carpetcode.org/">home page</a></p>
+
+<p><b>Documentation</b><br />
+<a href="doc/documentation.ps">Introduction</a> (ps,&nbsp;300&nbsp;kB)<br />
+<a href="doc/first-steps.ps">First Steps</a> (ps,&nbsp;160&nbsp;kB)<br />
+<a href="doc/internals.ps">Internals</a> (ps,&nbsp;130&nbsp;kB)</p>
+
+<p><b>Mailing lists</b><br />
+<a href="http://lists.carpetcode.org/listinfo/developers/">Subscribe</a><br />
+<a href="http://lists.carpetcode.org/archives/developers/">Archive</a></p>
+
+<p><b>Development</b><br />
+<a href="http://bugs.carpetcode.org/">Bugzilla</a><br />
+<a href="feature-requests.html">Missing&nbsp;features</a><br />
+<a href="bugs.html">Known bugs</a></p>
+
+<p><b>Related</b><br />
+<a href="http://www.cactuscode.org/">Cactus</a></p>
+<!-- <a href="http://testweb.aei.mpg.de/NumRelWeb/">numrel@aei</a></p> -->
+
+<p><b>Feedback</b><br />
+<a href="mailto:schnetter@aei.mpg.de">Send email</a></p>
+
+</td>
+<td valign="top">
+
+ <p>Carpet is a mesh refinement driver for <a
+ href="http://www.cactuscode.org/">Cactus</a>. Cactus is a
+ framework for solving time-dependent partial differential
+ equations on uniform grids, and Carpet is an extension of Cactus
+ that make mesh refinement possible. Carpet was originally written
+ in 2001 by <a
+ href="http://www.tat.physik.uni-tuebingen.de/~schnette/">Erik
+ Schnetter</a> at the <a
+ href="http://www.tat.physik.uni-tuebingen.de/">TAT</a>
+ (Theoretische Astrophysik Tübingen) and is currently maintained at
+ the <a href="http://www.aei.mpg.de/">AEI</a> (Max-Planck-Institut
+ für Gravitationsphysik, Albert-Einstein-Institut). These pages
+ describe Carpet and its current development.</p>
+
+ <hr />
+
+ <h2>News</h2>
+
+ <p><b>July 31, 2004:</b> Carpet seems to have reached a point
+ where it is stable enough to be useful for at least some projects.
+ Consequently, people expressed the wish to have a version of
+ Carpet which is stable and sees no disrupting development. The
+ idea is to have two "branches" of Carpet: a stable version for
+ production use, and a development version which might not be as
+ stable. We plan to make the split in about three weeks. The
+ discussion about this is held on the mailing list; your input is
+ welcome.</p>
+
+ <p><b>April 7, 2004:</b> Up to now, all Carpet thorns have been
+ living in a single arrangement for Cactus. This caused problems,
+ because stable thorns, development thorns, and outdated thorns
+ were sitting next to each other, confusing newcomers. We have <a
+ href="#getting-the-code">moved the Carpet arrangement</a> to a new
+ repository and split it into four. Access to the old Carpet
+ arrangement has been disabled.</p>
+
+ <p><b>March 3, 2004:</b> We have recently had trouble with I/O
+ throuth the <a
+ href="http://zeus.ncsa.uiuc.edu/~jshalf/FlexIO/">FlexIO</a>
+ library. We suspect that it might have a bug that causes HDF5
+ output to fail under certain, random conditions. We have written
+ a new thorn CarpetIOHDF5 which uses the <a
+ href="http://hdf.ncsa.uiuc.edu/HDF5/">HDF5</a> library directly,
+ while remaining compatible to the FlexIO file format. Please test
+ this thorn, and report any problems or incompatibilities you
+ find.</p>
+
+ <p>In <b>January 2004</b>, <a
+ href="http://www.tat.physik.uni-tuebingen.de/~kobras/">Daniel
+ Kobras</a> set up <a href="http://bugs.carpetcode.org/">Bugzilla
+ for Carpet</a>. <a href="http://www.bugzilla.org/">Bugzilla</a>
+ is a bug-tracking system that will, so we hope, help us remember
+ what is missing or broken in Carpet.</p>
+
+ <p>In <b>October 2003</b>, Erik Schnetter, Scott H. Hawley, and
+ Ian Hawke published the preprint "Evolutions in 3D numerical
+ relativity using fixed mesh refinement" as <a
+ href="http://arXiv.org/abs/gr-qc/0310042">gr-qc/0310042</a>. Its
+ main point is to present tests of Carpet with the BSSN code (AEI's
+ spacetime evolution code), and to show that mesh refinement does
+ not introduce instabilities.</p>
+
+ <p>In <b>August 2003</b>, <a
+ href="http://www.carpetcode.org/">these web pages</a> were
+ created.</p>
+
+ <p><b>May 2003</b> has informally been termed <a
+ href="CarpetMonth/index.html">"Carpet month"</a>. In a flurry of
+ activity, bugs were fixed and some features added. The BSSN code
+ of the numerical relativity group at the <a
+ href="http://www.aei.mpg.de/">AEI</a> now works together with
+ Carpet.</p>
+
+ <hr />
+
+ <h2>Documentation</h2>
+
+ <p>We have accumulated a few pieces of documentation:</p>
+ <ul>
+ <li>An <a href="doc/documentation.ps">introduction</a>
+ (ps,&nbsp;300&nbsp;kB) to Carpet, as well as a guide to the
+ first steps for using it. Everybody should have read this.
+ (This is the same as the Arrangement Guide from the Carpet
+ sources.)</li>
+
+ <li><a
+ href=http://www.astro.psu.edu/nr/people/sperhake_ulrich.html">Ulrich
+ Sperhake</a> wrote a tutorial outlining the <a
+ href="doc/first-steps.ps">first steps</a> (ps,&nbsp;160&nbsp;kB)
+ that one has to take to install Carpet and run an example
+ application.</li>
+
+ <li>An explanation of the <a href="doc/internals.ps">internal
+ workings</a> (ps,&nbsp;130&nbsp;kB) of Carpet. You should read
+ this if you want to modify Carpet.</li>
+
+ <li>The individual Thorn Guides of Carpet. They are available
+ with the source code. They give details about the thorns' APIs
+ and user interfaces.</li>
+
+ <li>Thanks to <a
+ href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a>, we now
+ have an <a href="doxygen/html/index.html">overview</a> over all
+ the routines and data structures in Carpet. Most individual
+ Doxygen tags are still missing, but the extracted documentation
+ is already very useful. (The online documentation might not
+ always be up to date; in case of doubt, extract the
+ documentation yourself.)</li>
+ </ul>
+
+ <hr />
+
+ <h2>Interacting with the developers</h2>
+
+ <p>Most discussions about Carpet, i.e. user questions, feature
+ requests, and bug reports, are held on the Carpet developers'
+ mailing list <a
+ href="mailto:developers@lists.carpetcode.org">developers@lists.carpetcode.org</a>.
+ You can subscribe and unsubscribe from our <a
+ href="http://lists.carpetcode.org/">list management web page</a>.
+ You will also find the mailing list archive there. We thank <a
+ href="http://www.tat.physik.uni-tuebingen.de/~kobras/">Daniel
+ Kobras</a> for managing the mailing list server.</p>
+
+ <p>We have started to use <a
+ href="http://www.bugzilla.org/">Bugzilla</a> to keep track of
+ requested features or reported bugs in Carpet. You can submit or
+ comment on issues from our <a
+ href="http://bugs.carpetcode.org/">Bugzilla pages</a> once you
+ have created an account there. The old <a
+ href="feature-requests.html">list of missing features</a> and <a
+ href="bugs.html">list of known bugs</a> have not yet been moved
+ over to Bugzilla.</p>
+
+ <hr />
+
+ <h2 id="getting-the-code">Getting the code</h2>
+
+ <p>Carpet is distributed under the <a
+ href="http://www.gnu.org/licenses/licenses.html">GNU General
+ Public License (GPL)</a>. It might be released under the GNU
+ Lesser General Public License (LGPL) in the future, to match the
+ distribution terms of Cactus.</p>
+
+ <p>Carpet is a driver for Cactus. It works as a part of Cactus,
+ and you will need to have the developers' version of Cactus
+ installed before you can use Carpet. Please look at the <a
+ href="http://www.cactuscode.org/">Cactus web pages</a> for an
+ introduction to Cactus and for installation instructions.</p>
+
+ <p>Carpet is available via anonymous <a
+ href="http://www.cvshome.org/">CVS</a>. The CVSROOT is
+ <code>:pserver:cvs_anon@cvs.carpetcode.org:/home/cvs/carpet</code>,
+ and there are several arrangements, each living in a directory.
+ The arrangement <code>Carpet</code> contains the basic driver part
+ that everybody needs. The arrangement <code>CarpetExtra</code>
+ contains useful add-ons and some example code. Development of new
+ thorns happens in the <code>CarpetDev</code> arrangement, which
+ means that the code in there is not to be trusted. And finally,
+ there is a graveyard arrangement <code>CarpetAttic</code> of
+ things that only used to be useful and are now in a state of
+ decay.</p>
+
+ <p>The password for anonymous CVS access is <code>anon</code>. We
+ thank the <a
+ href="http://www.tat.physik.uni-tuebingen.de/">Institut für
+ Astronomie und Astrophysik</a> of the Universität Tübingen for
+ hosting the CVS server.</p>
+
+ <hr />
+
+ <h2>Pretty pictures</h2>
+
+ <p>We are currently collecting pretty pictures and movies of
+ simulations that were performed with Carpet. Sorry; there is
+ nothing to see so far.</p>
+
+ <hr />
+
+ <h2>Making sense of results</h2>
+
+ <p>Three-dimensional time-dependent simulation results are
+ difficult enough to interpret when the grid is uniform. With mesh
+ refinement, the sheer amount of available data makes it necessary
+ to use professional tools to examine the data. This is not only
+ the case for "big physics runs", where one (should) know in
+ advance what to expect, but especially during development, where
+ things do not always go as planned. <a
+ href="http://www.aei.mpg.de/~tradke/">Thomas Radke</a> was kind
+ enough to write an <a
+ href="http://www.cactuscode.org/VizTools/OpenDX.html">import
+ module</a> for the visualisation tool <a
+ href="http://www.research.ibm.com/dx/">OpenDX</a>. He has also
+ produced an <a href="pictures/carpetwavetoy.jpeg">example
+ picture</a> (JPEG, 300&nbsp;KB) from a test run with the scalar
+ wave equation.</p>
+
+ <hr />
+
+ <h2>Related projects</h2>
+
+ <ul>
+ <li>Physicsc: <a href="http://www.cactuscode.org/">Cactus</a>, <a
+ href="http://numrel.aei.mpg.de/">numrel@aei</a></li>
+
+ <li>I/O: <a href="http://hdf.ncsa.uiuc.edu/HDF5/">HDF5</a>, <a
+ href="http://www.zib.de/benger/F5/doc/">F5</a></li>
+
+ <li>Visualisation: <a href="http://www.amiravis.com/">Amira</a>,
+ <a href="http://www.opendx.org/">OpenDX</a></li>
+ </ul>
+
+ <hr />
+
+ <p>
+ <a href="http://www.xemacs.org/About/created.html"><img
+ src="cbxSmall.jpg" alt="Created with XEmacs!" height="36"
+ width="100" /></a>
+
+ <a href="http://www.anybrowser.org/campaign/"><img
+ src="logoab8.png" alt="Best Viewed With Any Browser" height="31"
+ width="88" /></a>
+
+ <a href="http://validator.w3.org/check/referer"><img
+ src="valid-xhtml10.png" alt="Valid XHTML 1.0!" height="31"
+ width="88" /></a>
+ </p>
+
+ <address><a href="mailto:schnetter@uni-tuebingen.de">Erik Schnetter</a></address>
+<p>
+<!-- Created: Tue Aug 12 12:12:08 CEST 2003 -->
+<!-- hhmts start -->
+Last modified: Sat Aug 7 12:37:09 CEST 2004
+<!-- hhmts end -->
+</p>
+
+</td>
+</tr>
+</table>
+ </body>
+</html>
diff --git a/Carpet/CarpetWeb/logoab8.png b/Carpet/CarpetWeb/logoab8.png
new file mode 100644
index 000000000..d7dedf419
--- /dev/null
+++ b/Carpet/CarpetWeb/logoab8.png
Binary files differ
diff --git a/Carpet/CarpetWeb/pictures/carpetwavetoy.jpeg b/Carpet/CarpetWeb/pictures/carpetwavetoy.jpeg
new file mode 100644
index 000000000..2fdaf4a8e
--- /dev/null
+++ b/Carpet/CarpetWeb/pictures/carpetwavetoy.jpeg
Binary files differ
diff --git a/Carpet/CarpetWeb/robots.txt b/Carpet/CarpetWeb/robots.txt
new file mode 100644
index 000000000..8f9f069fc
--- /dev/null
+++ b/Carpet/CarpetWeb/robots.txt
@@ -0,0 +1,3 @@
+# allow everything
+User-agent: *
+Disallow:
diff --git a/Carpet/CarpetWeb/valid-xhtml10.png b/Carpet/CarpetWeb/valid-xhtml10.png
new file mode 100644
index 000000000..2275ee6ea
--- /dev/null
+++ b/Carpet/CarpetWeb/valid-xhtml10.png
Binary files differ
diff --git a/Carpet/README b/Carpet/README
new file mode 100644
index 000000000..a6cd536f6
--- /dev/null
+++ b/Carpet/README
@@ -0,0 +1,11 @@
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/README,v 1.9 2003/12/19 11:43:52 schnetter Exp $
+
+Cactus Code Arrangement Carpet
+Arrangement Author(s) : Erik Schnetter <schnetter@aei.mpg.de>
+Arrangement Maintainer(s) : Erik Schnetter <schnetter@aei.mpg.de>
+--------------------------------------------------------------------------
+
+Purpose of the arrangement:
+
+This arrangement provides a parallel AMR (adaptive mesh refinement)
+driver with MPI. See http://www.carpetcode.org/ for more information.
diff --git a/Carpet/doc/Grid1.eps b/Carpet/doc/Grid1.eps
new file mode 100644
index 000000000..257a57dfd
--- /dev/null
+++ b/Carpet/doc/Grid1.eps
@@ -0,0 +1,188 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: Grid1.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Fri May 2 11:09:16 2003
+%%For: hawke@xeon06.aei-potsdam.mpg.de (Ian Hawke)
+%%BoundingBox: 0 0 612 461
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 461 moveto 0 0 lineto 612 0 lineto 612 461 lineto closepath clip newpath
+-49.5 526.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% Polyline
+7.500 slw
+n 1200 1200 m 10800 1200 l 10800 8400 l 1200 8400 l
+ cp gs col0 s gr
+% Polyline
+n 3600 1200 m
+ 3600 8400 l gs col0 s gr
+% Polyline
+n 6000 1200 m
+ 6000 8400 l gs col0 s gr
+% Polyline
+n 8400 1200 m
+ 8400 8400 l gs col0 s gr
+% Polyline
+n 1200 3600 m
+ 10800 3600 l gs col0 s gr
+% Polyline
+n 1200 6000 m
+ 10800 6000 l gs col0 s gr
+% Polyline
+15.000 slw
+ [60] 0 sd
+n 3600 3600 m 8400 3600 l 8400 6000 l 3600 6000 l
+ cp gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 4800 3600 m
+ 4800 6000 l gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 7200 3600 m
+ 7200 6000 l gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 6000 3600 m
+ 6000 6000 l gs col1 s gr [] 0 sd
+% Polyline
+ [90] 0 sd
+n 3600 4800 m
+ 8400 4800 l gs col1 s gr [] 0 sd
+% Polyline
+30.000 slw
+ [15 90] 90 sd
+n 6000 4800 m 7200 4800 l 7200 6000 l 6000 6000 l
+ cp gs col2 s gr [] 0 sd
+% Polyline
+ [15 90] 90 sd
+n 6600 4800 m
+ 6600 6000 l gs col2 s gr [] 0 sd
+% Polyline
+ [15 90] 90 sd
+n 6000 5400 m
+ 7200 5400 l gs col2 s gr [] 0 sd
+/Times-Roman ff 360.00 scf sf
+3525 8775 m
+gs 1 -1 sc (4) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8250 8775 m
+gs 1 -1 sc (12) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+10650 8775 m
+gs 1 -1 sc (16) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4725 6375 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6525 6375 m
+gs 1 -1 sc (9) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+1125 8775 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7125 6375 m
+gs 1 -1 sc (10) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 8550 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 6150 m
+gs 1 -1 sc (4) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 3750 m
+gs 1 -1 sc (8) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+825 1350 m
+gs 1 -1 sc (12) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+3300 4950 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5700 5550 m
+gs 1 -1 sc (5) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5925 8775 m
+gs 1 -1 sc (8) col0 sh gr
+$F2psEnd
+rs
diff --git a/Carpet/doc/Grid1.fig b/Carpet/doc/Grid1.fig
new file mode 100644
index 000000000..42763db47
--- /dev/null
+++ b/Carpet/doc/Grid1.fig
@@ -0,0 +1,51 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 1200 1200 10800 1200 10800 8400 1200 8400 1200 1200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 3600 1200 3600 8400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 6000 1200 6000 8400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 8400 1200 8400 8400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 1200 3600 10800 3600
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 1200 6000 10800 6000
+2 2 1 2 1 7 50 0 -1 4.000 0 0 -1 0 0 5
+ 3600 3600 8400 3600 8400 6000 3600 6000 3600 3600
+2 1 1 2 1 7 50 0 -1 6.000 0 0 -1 0 0 2
+ 4800 3600 4800 6000
+2 1 1 2 1 7 50 0 -1 6.000 0 0 -1 0 0 2
+ 7200 3600 7200 6000
+2 1 1 2 1 7 50 0 -1 6.000 0 0 -1 0 0 2
+ 6000 3600 6000 6000
+2 1 1 2 1 7 50 0 -1 6.000 0 0 -1 0 0 2
+ 3600 4800 8400 4800
+2 2 2 3 2 7 50 0 -1 6.000 0 0 -1 0 0 5
+ 6000 4800 7200 4800 7200 6000 6000 6000 6000 4800
+2 1 2 3 2 7 50 0 -1 6.000 0 0 -1 0 0 2
+ 6600 4800 6600 6000
+2 1 2 3 2 7 50 0 -1 6.000 0 0 -1 0 0 2
+ 6000 5400 7200 5400
+4 0 0 50 0 0 24 0.0000 4 255 180 3525 8775 4\001
+4 0 0 50 0 0 24 0.0000 4 255 360 8250 8775 12\001
+4 0 0 50 0 0 24 0.0000 4 255 360 10650 8775 16\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4725 6375 6\001
+4 0 0 50 0 0 24 0.0000 4 255 180 6525 6375 9\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1125 8775 0\001
+4 0 0 50 0 0 24 0.0000 4 255 360 7125 6375 10\001
+4 0 0 50 0 0 24 0.0000 4 255 180 825 8550 0\001
+4 0 0 50 0 0 24 0.0000 4 255 180 825 6150 4\001
+4 0 0 50 0 0 24 0.0000 4 255 180 825 3750 8\001
+4 0 0 50 0 0 24 0.0000 4 255 360 825 1350 12\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3300 4950 6\001
+4 0 0 50 0 0 24 0.0000 4 255 180 5700 5550 5\001
+4 0 0 50 0 0 24 0.0000 4 255 180 5925 8775 8\001
diff --git a/Carpet/doc/Makefile b/Carpet/doc/Makefile
new file mode 100644
index 000000000..8c402b013
--- /dev/null
+++ b/Carpet/doc/Makefile
@@ -0,0 +1,29 @@
+# $Header: /home/eschnett/C/carpet/Carpet/Carpet/doc/Makefile,v 1.2 2002/11/29 16:48:35 schnetter Exp $
+
+NAME=documentation
+
+all: ${NAME}.dvi ${NAME}.ps ${NAME}.ps.gz ${NAME}.pdf
+
+${NAME}.dvi: carpet.bib
+
+%.dvi: %.tex
+ latex $*
+ bibtex $*
+ latex $*
+ latex $*
+
+%.ps: %.dvi
+ dvips $*
+
+%.pdf: %.dvi
+ pdflatex $*
+ thumbpdf $*
+ pdflatex $*
+
+%.gz: %
+ gzip --best -c $* > $*.gz
+
+clean:
+ $(RM) ${NAME}.aux ${NAME}.bbl ${NAME}.blg ${NAME}.dvi ${NAME}.log ${NAME}.out ${NAME}.pdf ${NAME}.ps ${NAME}.ps.gz ${NAME}.tpt
+
+.PSEUDO: all clean
diff --git a/Carpet/doc/Periodic1.eps b/Carpet/doc/Periodic1.eps
new file mode 100644
index 000000000..ed463e2c5
--- /dev/null
+++ b/Carpet/doc/Periodic1.eps
@@ -0,0 +1,201 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: Periodic1.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Wed Jul 16 14:12:03 2003
+%%For: admin@nbdell08.aei-potsdam.mpg.de ()
+%%BoundingBox: 0 0 239 132
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 132 moveto 0 0 lineto 239 0 lineto 239 132 lineto closepath clip newpath
+-174.8 292.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% Arc
+7.500 slw
+gs clippath
+5377 3399 m 5433 3378 l 5380 3237 l 5394 3360 l 5324 3257 l cp
+3566 3378 m 3622 3399 l 3675 3257 l 3606 3360 l 3619 3237 l cp
+eoclip
+n 4500.0 3637.5 937.5 -163.7 -16.3 arc
+gs col0 s gr
+ gr
+
+% arrowhead
+n 5324 3257 m 5394 3360 l 5380 3237 l 5324 3257 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 3619 3237 m 3606 3360 l 3675 3257 l 3619 3237 l cp gs 0.00 setgray ef gr col0 s
+% Arc
+gs clippath
+4777 3399 m 4833 3378 l 4780 3237 l 4794 3360 l 4724 3257 l cp
+2966 3378 m 3022 3399 l 3075 3257 l 3006 3360 l 3019 3237 l cp
+eoclip
+n 3900.0 3637.5 937.5 -163.7 -16.3 arc
+gs col0 s gr
+ gr
+
+% arrowhead
+n 4724 3257 m 4794 3360 l 4780 3237 l 4724 3257 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 3019 3237 m 3006 3360 l 3075 3257 l 3019 3237 l cp gs 0.00 setgray ef gr col0 s
+% Arc
+gs clippath
+6033 3821 m 5977 3800 l 5924 3942 l 5994 3840 l 5980 3962 l cp
+4222 3800 m 4166 3821 l 4219 3962 l 4206 3840 l 4275 3942 l cp
+eoclip
+n 5100.0 3562.5 937.5 163.7 16.3 arcn
+gs col0 s gr
+ gr
+
+% arrowhead
+n 5980 3962 m 5994 3840 l 5924 3942 l 5980 3962 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 4275 3942 m 4206 3840 l 4219 3962 l 4275 3942 l cp gs 0.00 setgray ef gr col0 s
+% Arc
+gs clippath
+6633 3821 m 6577 3800 l 6524 3942 l 6594 3840 l 6580 3962 l cp
+4822 3800 m 4766 3821 l 4819 3962 l 4806 3840 l 4875 3942 l cp
+eoclip
+n 5700.0 3562.5 937.5 163.7 16.3 arcn
+gs col0 s gr
+ gr
+
+% arrowhead
+n 6580 3962 m 6594 3840 l 6524 3942 l 6580 3962 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 4875 3942 m 4806 3840 l 4819 3962 l 4875 3942 l cp gs 0.00 setgray ef gr col0 s
+% Ellipse
+n 4200 3600 75 75 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 4800 3600 75 75 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 5400 3600 75 75 0 360 DrawEllipse gs col0 s gr
+
+% Polyline
+n 2925 3525 m 3075 3525 l 3075 3675 l 2925 3675 l
+ cp gs col0 s gr
+% Polyline
+n 3525 3525 m 3675 3525 l 3675 3675 l 3525 3675 l
+ cp gs col0 s gr
+% Polyline
+n 5925 3525 m 6075 3525 l 6075 3675 l 5925 3675 l
+ cp gs col0 s gr
+% Polyline
+n 6525 3525 m 6675 3525 l 6675 3675 l 6525 3675 l
+ cp gs col0 s gr
+/Times-Roman ff 360.00 scf sf
+2925 4875 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+3450 4875 m
+gs 1 -1 sc (2) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4125 4875 m
+gs 1 -1 sc (4) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4725 4875 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5325 4875 m
+gs 1 -1 sc (8) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5925 4875 m
+gs 1 -1 sc (10) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6525 4875 m
+gs 1 -1 sc (12) col0 sh gr
+$F2psEnd
+rs
diff --git a/Carpet/doc/Periodic1.fig b/Carpet/doc/Periodic1.fig
new file mode 100644
index 000000000..b99903fab
--- /dev/null
+++ b/Carpet/doc/Periodic1.fig
@@ -0,0 +1,39 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 0 -1 0.000 0 0 1 1 4500.000 3637.500 3600 3375 4500 2700 5400 3375
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+5 1 0 1 0 7 50 0 -1 0.000 0 0 1 1 3900.000 3637.500 3000 3375 3900 2700 4800 3375
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+5 1 0 1 0 7 50 0 -1 0.000 0 1 1 1 5100.000 3562.500 4200 3825 5100 4500 6000 3825
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+5 1 0 1 0 7 50 0 -1 0.000 0 1 1 1 5700.000 3562.500 4800 3825 5700 4500 6600 3825
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 4200 3600 75 75 4200 3600 4125 3600
+1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 4800 3600 75 75 4800 3600 4725 3600
+1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 3600 75 75 5400 3600 5325 3600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 2925 3525 3075 3525 3075 3675 2925 3675 2925 3525
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 3525 3525 3675 3525 3675 3675 3525 3675 3525 3525
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 5925 3525 6075 3525 6075 3675 5925 3675 5925 3525
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 6525 3525 6675 3525 6675 3675 6525 3675 6525 3525
+4 0 0 50 0 0 24 0.0000 4 255 180 2925 4875 0\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3450 4875 2\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4125 4875 4\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4725 4875 6\001
+4 0 0 50 0 0 24 0.0000 4 255 180 5325 4875 8\001
+4 0 0 50 0 0 24 0.0000 4 255 360 5925 4875 10\001
+4 0 0 50 0 0 24 0.0000 4 255 360 6525 4875 12\001
diff --git a/Carpet/doc/Periodic2.eps b/Carpet/doc/Periodic2.eps
new file mode 100644
index 000000000..067fdcbcf
--- /dev/null
+++ b/Carpet/doc/Periodic2.eps
@@ -0,0 +1,262 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: Periodic2.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Wed Jul 16 14:10:26 2003
+%%For: admin@nbdell08.aei-potsdam.mpg.de ()
+%%BoundingBox: 0 0 239 132
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 132 moveto 0 0 lineto 239 0 lineto 239 132 lineto closepath clip newpath
+-174.8 292.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% Polyline
+30.000 slw
+n 4125 3525 m
+ 4275 3675 l gs col1 s gr
+% Polyline
+n 4125 3675 m
+ 4275 3525 l gs col1 s gr
+% Polyline
+n 4425 3525 m
+ 4575 3675 l gs col1 s gr
+% Polyline
+n 4425 3675 m
+ 4575 3525 l gs col1 s gr
+% Polyline
+n 4725 3525 m
+ 4875 3675 l gs col1 s gr
+% Polyline
+n 4725 3675 m
+ 4875 3525 l gs col1 s gr
+% Polyline
+n 5025 3525 m
+ 5175 3675 l gs col1 s gr
+% Polyline
+n 5025 3675 m
+ 5175 3525 l gs col1 s gr
+% Polyline
+n 5325 3525 m
+ 5475 3675 l gs col1 s gr
+% Polyline
+n 5325 3675 m
+ 5475 3525 l gs col1 s gr
+% Polyline
+n 5625 3525 m
+ 5775 3675 l gs col1 s gr
+% Polyline
+n 5625 3675 m
+ 5775 3525 l gs col1 s gr
+% Polyline
+n 3900 3525 m
+ 3900 3675 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 3825 3600 m
+ 3975 3600 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 3600 3525 m
+ 3600 3675 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 3525 3600 m
+ 3675 3600 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 6000 3525 m
+ 6000 3675 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 5925 3600 m
+ 6075 3600 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 6300 3525 m
+ 6300 3675 l gs col1 0.00 shd ef gr gs col1 s gr
+% Polyline
+n 6225 3600 m
+ 6375 3600 l gs col1 0.00 shd ef gr gs col1 s gr
+% Arc
+7.500 slw
+gs clippath
+5377 3399 m 5433 3378 l 5380 3237 l 5394 3360 l 5324 3257 l cp
+3566 3378 m 3622 3399 l 3675 3257 l 3606 3360 l 3619 3237 l cp
+eoclip
+n 4500.0 3637.5 937.5 -163.7 -16.3 arc
+gs col0 s gr
+ gr
+
+% arrowhead
+n 5324 3257 m 5394 3360 l 5380 3237 l 5324 3257 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 3619 3237 m 3606 3360 l 3675 3257 l 3619 3237 l cp gs 0.00 setgray ef gr col0 s
+% Arc
+gs clippath
+5677 3399 m 5733 3378 l 5680 3237 l 5694 3360 l 5624 3257 l cp
+3866 3378 m 3922 3399 l 3975 3257 l 3906 3360 l 3919 3237 l cp
+eoclip
+n 4800.0 3637.5 937.5 -163.7 -16.3 arc
+gs col0 s gr
+ gr
+
+% arrowhead
+n 5624 3257 m 5694 3360 l 5680 3237 l 5624 3257 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 3919 3237 m 3906 3360 l 3975 3257 l 3919 3237 l cp gs 0.00 setgray ef gr col0 s
+% Arc
+gs clippath
+6033 3821 m 5977 3800 l 5924 3942 l 5994 3840 l 5980 3962 l cp
+4222 3800 m 4166 3821 l 4219 3962 l 4206 3840 l 4275 3942 l cp
+eoclip
+n 5100.0 3562.5 937.5 163.7 16.3 arcn
+gs col0 s gr
+ gr
+
+% arrowhead
+n 5980 3962 m 5994 3840 l 5924 3942 l 5980 3962 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 4275 3942 m 4206 3840 l 4219 3962 l 4275 3942 l cp gs 0.00 setgray ef gr col0 s
+% Arc
+gs clippath
+6333 3821 m 6277 3800 l 6224 3942 l 6294 3840 l 6280 3962 l cp
+4522 3800 m 4466 3821 l 4519 3962 l 4506 3840 l 4575 3942 l cp
+eoclip
+n 5400.0 3562.5 937.5 163.7 16.3 arcn
+gs col0 s gr
+ gr
+
+% arrowhead
+n 6280 3962 m 6294 3840 l 6224 3942 l 6280 3962 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 4575 3942 m 4506 3840 l 4519 3962 l 4575 3942 l cp gs 0.00 setgray ef gr col0 s
+% Ellipse
+n 4200 3600 75 75 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 4800 3600 75 75 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 5400 3600 75 75 0 360 DrawEllipse gs col0 s gr
+
+% Polyline
+n 2925 3525 m 3075 3525 l 3075 3675 l 2925 3675 l
+ cp gs col0 s gr
+% Polyline
+n 3525 3525 m 3675 3525 l 3675 3675 l 3525 3675 l
+ cp gs col0 s gr
+% Polyline
+n 5925 3525 m 6075 3525 l 6075 3675 l 5925 3675 l
+ cp gs col0 s gr
+% Polyline
+n 6525 3525 m 6675 3525 l 6675 3675 l 6525 3675 l
+ cp gs col0 s gr
+/Times-Roman ff 360.00 scf sf
+2925 4875 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+3450 4875 m
+gs 1 -1 sc (2) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4125 4875 m
+gs 1 -1 sc (4) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4725 4875 m
+gs 1 -1 sc (6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5325 4875 m
+gs 1 -1 sc (8) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5925 4875 m
+gs 1 -1 sc (10) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6525 4875 m
+gs 1 -1 sc (12) col0 sh gr
+$F2psEnd
+rs
diff --git a/Carpet/doc/Periodic2.fig b/Carpet/doc/Periodic2.fig
new file mode 100644
index 000000000..f8fc9e532
--- /dev/null
+++ b/Carpet/doc/Periodic2.fig
@@ -0,0 +1,99 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 0 -1 0.000 0 0 1 1 4500.000 3637.500 3600 3375 4500 2700 5400 3375
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+5 1 0 1 0 7 50 0 -1 0.000 0 0 1 1 4800.000 3637.500 3900 3375 4800 2700 5700 3375
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+5 1 0 1 0 7 50 0 -1 0.000 0 1 1 1 5100.000 3562.500 4200 3825 5100 4500 6000 3825
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+5 1 0 1 0 7 50 0 -1 0.000 0 1 1 1 5400.000 3562.500 4500 3825 5400 4500 6300 3825
+ 1 1 1.00 60.00 120.00
+ 1 1 1.00 60.00 120.00
+6 4050 3450 4350 3750
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 4125 3525 4275 3675
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 4125 3675 4275 3525
+-6
+6 4350 3450 4650 3750
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 4425 3525 4575 3675
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 4425 3675 4575 3525
+-6
+6 4650 3450 4950 3750
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 4725 3525 4875 3675
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 4725 3675 4875 3525
+-6
+6 4950 3450 5250 3750
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 5025 3525 5175 3675
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 5025 3675 5175 3525
+-6
+6 5250 3450 5550 3750
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 5325 3525 5475 3675
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 5325 3675 5475 3525
+-6
+6 5550 3450 5850 3750
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 5625 3525 5775 3675
+2 1 0 3 1 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 5625 3675 5775 3525
+-6
+6 3750 3450 4050 3750
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 3900 3525 3900 3675
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 3825 3600 3975 3600
+-6
+6 3450 3450 3750 3750
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 3600 3525 3600 3675
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 3525 3600 3675 3600
+-6
+6 5850 3450 6150 3750
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 6000 3525 6000 3675
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 5925 3600 6075 3600
+-6
+6 6150 3450 6450 3750
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 6300 3525 6300 3675
+2 1 0 3 1 1 50 0 0 0.000 0 0 -1 0 0 2
+ 6225 3600 6375 3600
+-6
+1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 4200 3600 75 75 4200 3600 4125 3600
+1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 4800 3600 75 75 4800 3600 4725 3600
+1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 3600 75 75 5400 3600 5325 3600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 2925 3525 3075 3525 3075 3675 2925 3675 2925 3525
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 3525 3525 3675 3525 3675 3675 3525 3675 3525 3525
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 5925 3525 6075 3525 6075 3675 5925 3675 5925 3525
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+ 6525 3525 6675 3525 6675 3675 6525 3675 6525 3525
+4 0 0 50 0 0 24 0.0000 4 255 180 2925 4875 0\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3450 4875 2\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4125 4875 4\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4725 4875 6\001
+4 0 0 50 0 0 24 0.0000 4 255 180 5325 4875 8\001
+4 0 0 50 0 0 24 0.0000 4 255 360 5925 4875 10\001
+4 0 0 50 0 0 24 0.0000 4 255 360 6525 4875 12\001
diff --git a/Carpet/doc/carpet.bib b/Carpet/doc/carpet.bib
new file mode 100644
index 000000000..f95b7da84
--- /dev/null
+++ b/Carpet/doc/carpet.bib
@@ -0,0 +1,50 @@
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/doc/carpet.bib,v 1.2 2003/08/15 15:36:05 schnetter Exp $
+
+@Misc{Carpet__erik-schnetter,
+ author = {Erik Schnetter},
+ title = {\href{mailto:schnetter@uni-tuebingen.de} {\textless
+ schnetter@uni-tuebingen.de\textgreater}}
+}
+
+@Misc{Carpet__astro-psu-edu,
+ author = {{Department for} Astronomy and Astrophysics},
+ title = {\href{http://www.astro.psu.edu/}
+ {http://www.astro.psu.edu/}}
+}
+
+@Misc{Carpet__psu-edu,
+ author = {{Penn State University}},
+ title = {\href{http://www.psu.edu/} {http://www.psu.edu/}}
+}
+
+@Misc{Carpet__cactuscode-org,
+ author = {{Cactus web pages}},
+ title = {\href{http://www.cactuscode.org/}
+ {http://www.cactuscode.org/}}
+}
+
+@Misc{Carpet__gnuplot-info,
+ author = {gnuplot},
+ title = {\href{http://www.gnuplot.info/}
+ {http://www.gnuplot.info/}}
+}
+
+@Misc{Carpet__FlexIO,
+ author = {John Shalf},
+ title = {{FlexIO} library:
+ \href{http://zeus.ncsa.uiuc.edu/~jshalf/FlexIO/}
+ {http://zeus.ncsa.uiuc.edu/\textasciitilde
+ jshalf/FlexIO/}}
+}
+
+@Misc{Carpet__HDF,
+ author = {HDF},
+ title = {\href{http://hdf.ncsa.uiuc.edu/}
+ {http://hdf.ncsa.uiuc.edu/}}
+}
+
+@Misc{Carpet__CVS,
+ author = {CVS},
+ title = {\href{http://www.cvshome.org/}
+ {http://www.cvshome.org/}}
+}
diff --git a/Carpet/doc/documentation.tex b/Carpet/doc/documentation.tex
new file mode 100644
index 000000000..546b93d4d
--- /dev/null
+++ b/Carpet/doc/documentation.tex
@@ -0,0 +1,892 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/doc/documentation.tex,v 1.10 2003/07/21 18:48:08 schnetter Exp $
+%
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevent thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % START CACTUS THORNGUIDE",
+% except for filling in the title, author, date etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be sparated with a \\ or a comma
+% - You can define your own macros are OK, but they must appear after
+% the START CACTUS THORNGUIDE line, and do not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphix package.
+% More specifically, with the "includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us (later) to create a PDF version of the ThornGuide
+% via pdflatex. |
+% - References should be included with the latex "bibitem" command.
+% - use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/doc/documentation.tex,v 1.10 2003/07/21 18:48:08 schnetter Exp $
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../doc/latex/cactus}
+\usepackage{hyperref}
+
+\begin{document}
+
+% The author of the documentation
+\author{Erik Schnetter \textless schnetter@uni-tuebingen.de\textgreater}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{Carpet}
+
+% the date your document was last changed, if your document is in CVS,
+% please use:
+\date{$ $Date: 2003/07/21 18:48:08 $ $}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here
+% \def\mydef etc
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+This text describes the Carpet arrangement. Carpet is a mesh
+refinement driver for Cactus that can replace PUGH, the standard
+unigrid driver. Carpet supports multiple refinement levels and
+multiple grid patches. Carpet can run in parallel, but not yet very
+efficiently so. Carpet does not yet support multiple grid
+hierarchies, i.e.\ shadow hierarchies or automatic convergence tests.
+\end{abstract}
+
+
+
+\section{Overview}
+
+\subsection{Fixed Mesh Refinement, aka Box-in-Box}
+
+Fixed Mesh Refinement (FMR), also known as box-in-box, is a way to
+increase the local resolution in unigrid applications, while retaining
+the basic unigrid character of an application. A small number (maybe
+two or three) of grids with varying resolution overlay each other,
+where the coarsest grid has the largest extent. This allows the
+application to benefit from the higher resolution of the smaller grids
+while keeping the outer boundary far out at the same time. The main
+advantage of FMR are that it needs far less resources than globally
+increasing the resolution.
+
+\subsection{Carpet}
+
+Carpet is the name of an FMR driver, i.e.\ the back end that handles
+storage allocation for the grid functions, parallelism, I/O, and the
+various inter-grid operations. Carpet was developed in early summer
+of 2000 by Erik Schnetter \cite{Carpet__erik-schnetter}, then a
+research scholar in the Department for Astronomy and Astrophysics
+\cite{Carpet__astro-psu-edu} of Penn State University
+\cite{Carpet__psu-edu}. In spring 2001, Carpet was coupled to Cactus
+as a drop-in enhancement for the standard unigrid Cactus driver PUGH.
+
+\subsection{Cactus}
+
+From the main Cactus web pages \cite{Carpet__cactuscode-org}:
+\begin{quote}
+Cactus is an open source problem solving environment designed for
+scientests and engineers. Its modular structure easily enables
+parallel computation across different architectures and collaborative
+code development between different groups. Cactus originated in the
+academic research community, where it was developed and used over many
+years by a large international collaboration of physicists and
+computational scientists.
+\end{quote}
+
+
+
+\section{Introduction}
+
+\subsection{Fixed Mesh Refinement}
+
+A standard way of solving partial differential equations are finite
+differences on a regular grid. This is also called \emph{unigrid}.
+Such an application discretises its problem space onto a single,
+rectangular grid which has everywhere the same grid spacing. This
+grid might be broken up into several parts for parallelisation
+purposes, but parallelisation should be transparent to the physics
+part of the application.
+
+Increasing the resolution in a unigrid application is somewhat
+expensive. For example, increasing the resolution by a factor of two
+requires a factor of eight more storage in three dimensions. Given a
+constant Courant factor, the calculation time will even go up by a
+factor of sixteen. This behaviour makes it easy to find problems that
+cannot be solved on contemporary supercomputers, no matter how big and
+fast those computers are.
+
+Apart from physical insight, which often has to be used to decrease
+the problem size until it fits the current hardware, there are also
+numerical and algorithmic methods to decrease the resource
+requirements of the application. Most applications need the high
+resolution only in a part of the simulation domain. Discretisation
+methods that don't require a uniform resolution, such as finite
+elements, can implement non-uniform resolutions very naturally. One
+problem with finite elements is that many physicists today are not
+familiar with finite elements, or shy away from their perceived
+complexity, or are not willing to adapt existing finite difference
+code.
+
+Fixed Mesh Refinement (FMR) is a poor man's way of implementing a
+non-uniform resolution into a unigrid application with minimal changes
+to its structure. Instead of only one grid, there are several grids
+or grid patches with different resolutions. The coarsest grid usually
+encloses the whole simulation domain. Successively finer grids
+overlay the coarse grid at those locations where a higher resolutions
+is needed. The coarser grids provide boundary conditions to the finer
+grid through interpolation.
+
+Instead of updating only one grid, the application has to update all
+grids. The usual approach is to first take a step on the coarsest
+grid, and then recursively take several smaller steps on the finer
+grids. The Courant criterion requires that the step sizes on the
+finer grids be smaller than on the coarse grid. The boundary values
+for the finer grids are found through interpolation in space and time
+from the coarser grid. In the end, the information on the finer grids
+is injected into the coarse grids.
+
+Strictly speaking there is no need for a coarse grid on the regions
+covered by the finer grids. But as stated above, the resources
+required for treating the overlapping region on the coarse grid are
+only minimal compared to treating the finer grids. And because a
+coarse grid with a hole often creates complications, this obvious
+optimisation is often left out.
+
+\subsection{Carpet}
+
+Carpet is a C++ library that provides infrastructure to describe
+regions of varying resolution in a convenient and efficient way.
+Carpet contains routines to manage grid hierarchies, containing the
+relationships between the components of the grid on the different
+refinement and convergence levels. Carpet has a notion of simulation
+time and grid spacing, which are necessary for interpolation, and
+contains efficient interpolators.
+
+Carpet can run on several processors in parallel using MPI for
+communication. Each grid can be broken down into several components,
+and every component has a home processor. Carpet also contains
+operators to move certain regions to a different processor, or to
+synchronise all components of a grid.
+
+Carpet is also an arrangement of thorns for Cactus, implementing a
+driver and associated I/O routines for both ASCII and binary I/O. It
+should be possible to substitute Carpet for the standard Cactus driver
+PUGH without changes to the application thorns and thus use Carpet as
+a unigrid driver. Making use of the FMR capabilities of Carpet
+usually requires some rearranging of the application, comparable in
+general to the changes necessary for a uniprocessor application to run
+on multiple processors.
+
+The driver section of Carpet contains the logic to manage storage for
+the grid functions, to traverse the grid hierarchy for all scheduled
+routines, and to automatically apply the necessary inter-grid
+operators for prolongation (interpolation of the fine grid boundaries)
+and restriction (injecting the fine grid information back into the
+coarse grid).
+
+The ASCII I/O routines use the quasi-standard gnuplot
+\cite{Carpet__gnuplot-info} format. The binary I/O routines use the
+FlexIO library \cite{Carpet__FlexIO} written by John Shalf. It allows
+efficient and platform independent I/O. The FlexIO format is based on
+HDF \cite{Carpet__HDF} and also supported by several visualisation
+packages.
+
+Carpet is copyrighted by Erik Schnetter, and is available under the
+GPL licence from a CVS \cite{Carpet__CVS} repository.
+
+\subsection{WaveToy}
+
+Cactus comes with a sample application called \emph{WaveToy}, which
+solves the scalar wave equation with various initial data and boundary
+conditions. An an example, I have extended WaveToy so that is uses
+Carpet's FMR capabilities. WaveToy serves both as a test case for
+Carpet, and as example of how to convert an application to using FMR.
+
+The equation solved by WaveToy is the well known scalar wave equation,
+discretised using the Leapfrog method with three time levels, yielding
+second order accuracy in space and time. A typical set of initial
+data are a plane wave, and a typical boundary condition is
+periodicity. Those allow long term simulations as well as easy and
+meaningful comparisons to the analytic solution.
+
+
+
+\section{Compiling Cactus With Carpet}
+
+Carpet has been written in C++, using templates and the STL (Standard
+Template Library). Both templates and the STL make writing and
+debugging code a lot easier. Without templates, I would have had to
+put much effort into making Carpet support all of Cactus' data types.
+Without the STL, I would have had to spend quite some time
+implementing basic containers such as lists or sets. I still had to
+implement a custom vector type, because STL's vector type is optimised
+for large vectors only, and I needed threedimensional vectors of
+integers.
+
+The inner loops of Carpet are the inter-grid operators, that is the
+routines that copy, restrict, and prolongate between grids. Due to
+Cactus it was rather easy to write these in \textsc{Fortran 77}, which
+makes them both fast and portable.
+
+Carpet is an arrangement in Cactus. It can theoretically be compiled
+without any external library, if you omit the binary I/O support which
+requires the FlexIO library. FlexIO is already part of Cactus in the
+thorn CactusExternal/FlexIO. I suggest that you enable support for
+the HDF format in the FlexIO library, although this is not necessary.
+For that, you have to install the HDF5 libraries first.
+
+\subsection{Hurdle 1: STL}
+
+Some operating systems do not have a compliant STL (Standard Template
+Library) installed. If not, then you are in trouble. Carpet does
+make use of the STL, and there is no way around that.
+
+\subsection{Hurdle 2: Templates}
+
+Some compilers contain switches to instantiate some or all templates
+automatically. This usually does not work when files are put into
+libraries, which is what Cactus does. The scheme that I found working
+on all machines is to instantiate most templates by hand, and have the
+compiler instantiate the missing templates for every object file.
+This is the default for gcc. On SGIs, you have to pass the options
+\texttt{-no\_auto\_include -ptused} to the C++ compiler.
+
+The C++ standard specifies a limit when using templates as template
+parameters. Carpet's use of the GNU STL exceeds this limit. Gcc
+requires the option \texttt{-ftemplate-depth-30} to enable this.
+
+\subsection{WaveToy}
+
+Unfortunately, PUGH and Carpet cannot yet be both compiled into a
+single application. (This will be fixed soon.) That means that you
+will have separate executables for unigrid and for mesh refinement
+applications.
+
+Configuring Carpet is not quite trivial, because Cactus provides
+currently no way to autodetect the settings for Carpet. Hence you
+will have to set the settings manually. I propose that you start with
+on of the pre-made options files in the directory
+\texttt{Carpet/Carpet/options}. Try e.g.\ \texttt{carpet-harpo-sgi}
+for an SGI, or \texttt{carpet-lilypond} for Linux with gcc, or
+\texttt{carpet-lilypond-ic} for Linux with the Intel compilers. Once
+you have a working options file for your machine, send it to me, so
+that I can include it.
+
+As for the thorn list: Carpet has its own ASCII output thorn, which
+outputs more information than CactusBase/IOASCII. The thorn list that
+I use is
+
+\begin{verbatim}
+CactusBase/Boundary # boundary (grid) [ ] { }
+CactusBase/CartGrid3D # grid ( ) [ ] {driver}
+#CactusBase/IOASCII # IOASCII (IO,Hyperslab) [ ] {IO}
+CactusBase/IOBasic # IOBasic (IO) [ ] {IO}
+CactusBase/IOUtil # IO ( ) [ ] { }
+CactusBase/LocalInterp # LocalInterp ( ) [ ] { }
+CactusBase/Time # time ( ) [ ] { }
+CactusConnect/HTTPD # HTTPD (Socket) [ ] {Cactus}
+CactusConnect/HTTPDExtra # http_utils (httpd,IO) [ ] { }
+CactusConnect/Socket # Socket ( ) [ ] { }
+CactusExternal/FlexIO # FlexIO ( ) [ ] { }
+CactusExternal/jpeg6b # jpeg6b ( ) [ ] { }
+CactusIO/IOJpeg # IOJpeg (IO,Hyperslab,jpeg6b) [ ] {IO}
+CactusUtils/NaNChecker # NaNChecker ( ) [ ] { }
+CactusWave/IDScalarWave # idscalarwave (wavetoy,grid) [ ] {grid}
+CactusWave/IDScalarWaveC # idscalarwave (wavetoy,grid) [ ] {grid}
+CactusWave/IDScalarWaveCXX # idscalarwave (wavetoy,grid) [ ] {grid}
+#CactusWave/IDScalarWaveElliptic # idscalarwaveelliptic (grid,wavetoy,ellbase) [ ] {idscalarwave}
+CactusWave/WaveBinarySource # binarysource (wavetoy,grid,idscalarwave) [ ] { }
+CactusWave/WaveToyC # wavetoy (Grid,Boundary) [ ] { }
+CactusWave/WaveToyCXX # wavetoy (Grid,Boundary) [ ] { }
+CactusWave/WaveToyF77 # wavetoy (Grid,Boundary) [ ] { }
+#CactusWave/WaveToyF90 # wavetoy (Grid,Boundary) [ ] { }
+#CactusWave/WaveToyFreeF90 # wavetoy (Grid,Boundary) [ ] { }
+Carpet/Carpet # driver (CarpetLib) [ ] {Cactus,IO}
+Carpet/CarpetIOASCII # IOASCII (CarpetLib,driver,Hyperslab) [ ] {IO}
+Carpet/CarpetIOFlexIO # IOFlexIO (CarpetLib,driver,Hyperslab,FlexIO) [ ] {IO}
+#Carpet/CarpetIOHDF5 # IOHDF5 (CarpetLib,driver,Hyperslab) [ ] {IO}
+#Carpet/CarpetIOSer # IOSer (CarpetLib,driver,Hyperslab) [ ] {IO}
+Carpet/CarpetLib # CarpetLib ( ) [ ] { }
+Carpet/CarpetReduce # reduce (CarpetLib,driver) [ ] { }
+Carpet/CarpetRegrid # CarpetRegrid (CarpetLib,driver) [ ] { }
+Carpet/CarpetSlab # Hyperslab (CarpetLib,driver) [ ] { }
+\end{verbatim}
+
+The thorns prefixed with \texttt{\#} are disabled. IOASCII conflicts
+with CarpetIOASCII. I disabled IDScalarWaveElliptic because there is
+no elliptic solver for mesh refinement, and I disabled WaveToyF90 and
+WaveToyFreeF90 because gcc does not yet contain a Fortran 90 compiler.
+CarpetIOHDF5 is not yet finished, and CarpetIOSer needs the Ser
+library which is not publically available.
+
+The CactusConnect, CactusIO, and CactusUtils thorns are not necessary,
+but are nice to have around. You can safely omit these.
+
+
+
+\section{Running The Example Applications}
+
+Although Carpet works fine with the standard WaveToy thorns, all the
+example parameter files in the CactusWave arrangement use PUGH, and
+can therefore not be directly used.
+
+The coordinate thorn CactusBase/CartGrid3D does not provide periodic
+boundary conditions. These are normally provided by the driver PUGH.
+However, Carpet does not contain any boundary conditions. If you want
+to apply periodic boundaries, you will therefore have to use the
+AlphaThorns/Cart3d coordinate thorn instead, which does provide
+periodicity. Unfortunately, AlphaThorns/Cart3d is incompatible with
+CactusBase/CartGrid3D. There is a version of WaveToy in the Carpet
+arrangement that has been adapted to AlphaThorns/Cart3d. I suggest
+that you use this version of WaveToy instead of CactusWave to run test
+problems, because periodicity makes for nice testing setups.
+
+You can find quite a few example parameter files in the directory
+\texttt{Carpet/WaveToyF77/par}. I especially recommend the
+\texttt{wavetoyf77\_periodic\_*} set, which comes in two sizes
+(\texttt{coarse} and \texttt{fine}, corresponding to a small and a
+large simulation domain) and three different refinement hierarchies
+(with one, two, and three level altogether, respectively). This set
+thus forms a convergence test, which you can run and test yourself.
+The set \texttt{wavetoyf77\_rad\_full\_*} uses radiative instead of
+periodic boundaries and should also be nice to look at. The file
+\texttt{wavetoyf77\_rad\_automatic.par} is an attempt at adaptive mesh
+refinement, which may or may not work, depending on the current status
+of Carpet.
+
+Second order convergence requires second order interpolation in time,
+which requires that at least three time levels are present.
+
+
+
+\section{Fold Your Own FMR Application}
+
+There are three steps to take from a simple unigrid uniprocessor toy
+application to a full-blown FMR multiprocessor production application.
+Those steps are almost independent, and I would like to explain them
+and their implications in some detail below.
+
+\subsection{Multiple Processors}
+
+The probably best known of these is the step from using one to using
+several processors, also known as parallelisation. Because many
+people are already familiar with this step, I will describe it first.
+
+In a uniprocessor application, it is possible to access every grid
+point in arbitrary manners. In order to allow multiple processors to
+run efficiently in parallel, the grid is broken down into several
+rectangular components, and each processor is assigned one of these
+components.
+
+The components will usually overlap by a few grid points, so as to
+allow the processors to e.g.\ calculate spatial derivatives (which
+require neighbouring grid points) without having to communicate for
+every grid point. From time to time it is then necessary to
+synchronise the overlapping region, which is the only time at which
+communication happens. This allows the application to run almost
+unchanged, i.e.\ without invoking communication itself. The
+synchronisation routine is provided by the driver and not by the
+application.
+
+Of course a serial applicate usually will have to be changed to
+support multiple processors. In order to do so, all the operations
+that the application performs have to be classified into one of two
+categories:
+
+One category contains the so-called \emph{local} operations. These
+are operations that are applied to each and every grid point
+individually, and that do not depend on any other grid point except
+nearby neighbours. Each local operation will thus involve a loop over
+all grid points, and in order to run on multiple processors, after
+each such loop the synchronisation routine has to be called. An
+example of a local operation would be calculating a spatial
+derivative.
+
+The other category contains so-called \emph{global} operations. These
+operations do not depend on individual grid points, and thus do not
+involve loops over grid points. The result of a global operation is
+the same on all processors; therefore global operations don't involve
+communication and don't require synchronisation. An example of a
+global operation would be to check how many time steps have been
+taken, and decide whether the simulation should be terminated.
+
+Typically most operations can be classified or rewritten to be either
+local or global. But often there are operations that fit neither
+category, and these parts of an application are hardest to
+parallelise. Applying the boundary conditions, to give another
+example, might seem at first to be neither local nor global. But in a
+slight (yet completely correct) stretch of the term "applied to all
+grid points", boundary conditions can be classified as local; they are
+a local operation that just does nothing to most grid points.
+
+To give one more example, calculating an error norm does not fit these
+categories. It is neither local nor global. It is not local because
+the results involved all grid points (and not only nearby neighbours),
+and it is not global because it does involve the grid points. All
+operations that do not fit the two category require typically special
+handling, and often require hand-coded communication in the
+application. Luckily calculating various norms is such a common case
+that there are special routines for that already present, called
+\emph{reduction operators}.
+
+\subsection{Multiple Resolution Levels}
+
+There are several reasons why an application might want to incorporate
+more than one grid, overlapping and each with a different resolution.
+
+The most commonly known reason is probably a convergence test, where
+the very same problem is treated in different resolutions.
+Differences in the result are then likely caused by insufficient
+resolution on the coarser (or on all) grids. For a convergence test,
+the grids are completely independent, and it does not matter whether
+the simulation runs on all grids simultaneously or sequentially. In
+order to treat the grid sequentially, the application does not have to
+be changed at all.
+
+The reason of interest here is of course FMR. For FMR, the order in
+which the grids are treated is fixed. As described above, there is
+first a time step on the coarse grid, and then recursively several
+smaller steps on the finer grids. This order does require certain
+changes in the application. The sequence of operations that form a
+single time step have to be identified and isolated. (Which is to say
+that there has to be a routine that calculates a time step, that is, a
+complete time step, and nothing else.) It is then the task of the FMR
+driver to call this routine for the correct grids in the correct
+order.
+
+Other reasons for multiple resolution levels are e.g.\ multigrid
+algorithms for elliptic equations, which I do not want to mention
+here, or shadow hierarchies to determine truncation errors, which I
+also want to skip here. Shadow hierarchies are very similar to the
+convergence levels described above.
+
+Apart from this order in which the operations are performed on the
+grids, there is one more complication for FMR. The boundary values of
+the finer grids have to be calculated from the coarser grids through
+interpolation. An because the time steps on the finer grids are
+smaller, there is not always a corresponding value on the coarser
+grids available. This makes it necessary to interpolate in time
+between time steps on the coarser grids. The alternative would be to
+take smaller steps on the coarser grids, and this would be very
+expensive.
+
+These interpolations in time make it necessary that the driver knows
+which grid function contains values corresponding to what time. The
+usual way to achieve this is to have several time levels per grid
+function; three time levels allow for a second order interpolation in
+time. Only grid functions with enough time levels can be
+interpolated, i.e.\ boundary conditions can be calculated only for
+those.
+
+Fortunately time levels are rather widespread in applications, so they
+are no new concept to introduce. Unfortunately they are often abused,
+so that values corresponding to the wrong time are stored in a time
+level, usually with the excuse of saving storage. This will in
+general not work with FMR, because the driver then cannot interpolate
+in time, leading to incorrect values on the boundaries of the finer
+grids.
+
+\subsection{Multiple Grid Components}
+
+Sometimes it is convenient to have a simulation domain that is not a
+rectangle. It might instead be an L-shaped simulation domain, or a
+domain that consists of two disconnected rectangular regions. This
+issue becomes more important with FMR, because there it is often
+convenient to have several disconnected refined regions. As long as
+there are enough processors available, each processor can be assigned
+a region or a part thereof, and no new concept need be introduced.
+If, however, there are fewer processors than regions, then a new
+problem arises.
+
+A common case for that problem might be a simulation containing just
+two refined regions, and running on a single processor. The refined
+grid the consists of two component. The problem then is that the two
+components cannot be treated sequentially: Imagine the time evolution
+routine working on (say) the first component. It will at some time
+call the synchronisation routine. At that time there are no values
+from the second component available, because the second component has
+not been treated yet. Therefore the synchronisation routine cannot
+complete. That means in turn that the time evolution routine cannot
+complete working on the first component, leading to a deadlock. Work
+on neither component can be completed before work on the other
+component.
+
+The solution is to break up the time evolution routine into several
+smaller routines, each consisting of a single either local or global
+operation. (``Local'' and ``global'' have here the exact same
+meanings that were defined above for parallelisation.) A local
+operation works, by definition, on individual grid points. Hence the
+local routines have to be called once for every grid component. A
+global operation, by definition, does not depend on individual grid
+points. Hence it has to be called only once per processor, and not
+once per component. That means that the driver has to be told the
+category individual routine is in.
+
+\subsection{Example}
+
+Let me finish this section with an detailed example. Suppose you want
+to solve the equation
+\begin{eqnarray}
+ \frac{d}{dt} u & = & f(u) \quad ,
+\end{eqnarray}
+integrating using the midpoint rule, i.e.\ the simplemost second-order
+time integration scheme. Given values at the previous time $u^{n-1}$,
+one first calculates a first order solution using an Euler step,
+leading to the intermediate result
+\begin{eqnarray}
+ v^n & = & u^{n-1} + dt\; f(u^{n-1}) \quad .
+\end{eqnarray}
+The second and final step is then calculated via
+\begin{eqnarray}
+ u^n & = & u^{n-1} + dt\; f(\frac{1}{2} [u^{n-1} + v^n]) \quad .
+\end{eqnarray}
+
+The corresponding pseudo code would look like
+\begin{enumerate}
+\item
+Calculate Euler step, storing the result into $u^n$
+\item
+Apply boundary conditions to $u^n$
+\item
+Synchronise $u^n$
+\item
+Calculate average of $u^{n-1}$ and $u^n$, storing the result into
+$v^n$
+\item
+Calculate second step, storing the result again into $u^n$
+\item
+Apply boundary conditions again to $u^n$
+\item
+Synchronise again $u^n$
+\end{enumerate}
+
+The above algorithm looks a bit different from a naive implementation
+of the midpoint rule. One difference is that both the first and the
+second step store their result into $u^n$. This is necessary because
+it would be inconvenient to apply boundary conditions to the
+intermediate value $v^n$. Remember, in order to apply boundary
+conditions on the finer grids, there have to be several time levels
+present. With the above scheme, only $u$ needs several time levels.
+$v$ is used only as a temporary (and could conceivably be completely
+eliminated).
+
+Note also that the first step goes all the way from time level $n-1$
+to time level $n$. The midpoint rule can be rewritten (in fact, is
+usually written) so that the first step is only a half step, leading
+to the time level $n - \frac{1}{2}$. This is not possible for FMR,
+because interpolating to the time $n - \frac{1}{2}$ is not possible,
+and thus there could be no boundary conditions applied after the first
+step.
+
+The second thing to note is that the application of the boundary
+condition and the synchronisation have been separated rather
+artificially. Normally synchronisation would be considered part of
+the boundary condition. In this case, however, the applying the
+boundary condition is a local operation, whereas synchronisation
+counts as global operation. (It is not obvious that synchronisation
+should be global, but as the synchronisation routine is a part of
+Carpet, it was up to me to decide this.) As explained above, local
+and global operations have to be separated.
+
+Separating the evolution steps and the boundary condition routines is,
+on the other hand, just a notational convenience. There could well be
+a single routine implementing both.
+
+For Cactus, the order in which to call the individual parts of the
+time evolution routines is described in the schedule routines, i.e.\
+in the files called \texttt{schedule.ccl}. By default a routine is
+assumed to be local; global routines have to be tagged with
+\texttt{OPTIONS: GLOBAL}.
+
+The tag \texttt{SYNC: groupname} indicates that the group
+\texttt{groupname} should be synchronised after the scheduled routine
+has been called for all grid components. This obviously makes sense
+only for local routines. Using the \texttt{SYNC:} tag is preferred
+over calling the synchronisation routine \texttt{CCTK\_SyncGroup}
+directly.
+
+The example thorn WaveToy in Carpet's arrangement is a bit simpler
+than what is described here, because it uses the Leapfrog scheme which
+consists of only a single step. I would suggest looking at WaveToy as
+an initial FMR example.
+
+The thorn SpaceToy is implemented very close to the way described
+here. It evolves two variables phi and psi, but it is also coupled to
+the thorn HydroToy. This coupling introduces some additional
+complications. The thorn HydroToy, on the other hand uses a
+predictor-corrector scheme, which is also a two step scheme and thus
+more complex that WaveToy. All the coupling between SpaceToy and
+HydroToy is contained in SpaceToy. I would thus suggest looking at
+HydroToy first.
+
+I assume that converting an application to FMR is straightforward
+after handling the time levels has been straightened out.
+
+
+
+\section{Further documentation}
+
+The individual thorns in the Carpet arrangement might contain further
+documentation, which is also available in the thorn guide.
+Additionally, there is a document \texttt{internals.tex} in the
+arrangement's doc directory, and a document
+\texttt{threelev\_initdata.tex} in thorn \texttt{Carpet}'s doc
+directory.
+
+
+\section{Frequently Asked Questions}
+\label{sec:faq}
+
+Here are a few of the more frequently asked questions with some
+answers.
+\begin{enumerate}
+\item \textbf{If I run without any refined grids, why don't I get the
+ same results as with PUGH?}
+
+ There are two possible reasons. The most common is that the you are
+ not comparing exactly the same output. It used to be the case that
+ norms would disagree (this is no longer the case). If it is the
+ ASCII output that disagress, then you should note that the default
+ output format for CarpetIOASCII gives more digits than
+ CactusBase/IOASCII. If you want to get ``identical'' results for
+ this output, try setting \texttt{IOASCII::out\_format = ".14f"}).
+
+ The second reason is subtle differences are bugs in the
+ implementation. Good luck finding these...
+\item \textbf{I switch on a refined grid. Why do I not see it output?
+ Why is the output strange?}
+
+\begin{figure}[htbp]
+ \begin{center}
+ \includegraphics[scale=0.5]{Grid1.eps}
+ \caption{How the grids are indexed in Carpet. This is an
+ artificial three level example using C-style numbering (0
+ origin). Note that the numbering is with respect to the finest
+ grid.}
+ \label{fig:Grid1}
+ \end{center}
+\end{figure}
+ As soon as you switch on refinement the way the grids are numbered
+ by index changes. The numbering is done with respect to the
+ \textit{finest} grid but covers the entire domain. An example of how
+ the numbering works is given in figure~\ref{fig:Grid1}. It is
+ important to note that this also applies to the numbering in
+ time. So with the grid structure of figure~\ref{fig:Grid1} output
+ for the coarsest grid only occurs on iterations $0,4,8,\dots$, for
+ the medium grid only on iterations $0,2,4,\dots$, and for the finest
+ grid on iterations $0,1,2,\dots$. Note that here the finest grid is
+ not the finest \textit{existing} grid, but the finest
+ \textit{possible} grid. This is controlled by the
+ \texttt{Carpet::max\_refinement\_levels} parameter.
+
+ So, there are plenty of reasons why the output might be strange:
+ \begin{itemize}
+ \item You are requesting output on iterations when not all grids are
+ output. For example, requesting output every $5^{\text{}th}$
+ iteration with the above grid structure would only output the
+ coarse grid every 20 iterations.
+ \item You are requesting output along an index that does not
+ intersect with any grid points. For example, the line defined by
+ $j = 6$ in the example above corresponds to the center of the box,
+ but does not intersect the coarse grid at all!
+ \item Requesting output along a line defined by a coordinate value
+ will give you the index closest to it. This may not agree on the
+ different refinement levels. In the example above the coordinate
+ value $y=5.1$ is closest to $j=5$ on the fine grid, $j=6$ on the
+ medium grid, and $j=4$ on the coarse grid. All the different lines
+ will be output but you should not expect points that appear to
+ overlap in the output to agree as they're actually not at the same
+ point.
+ \item CarpetRegrid (which sets up the refined boxes) knows nothing
+ about symmetries. So if you have a simulation in, for example,
+ octant mode with $x,y,z\in[0,10]$ and you leave all the parameters
+ to be the defaults, the following will happen:
+ \begin{itemize}
+ \item CarpetRegrid creates a refined box at the center of the
+ \textit{index space}. This might cover something like
+ $x,y,z\in[3,7]$.
+ \item When the IO thorn requests the output lines and planes it
+ does know the symmetries, so tries to put the lines and planes
+ as close to the origin $x=y=z=0$ as possible.
+ \item When output occurs the lines and planes don't intersect the
+ fine grid and so you get no output.
+ \end{itemize}
+ \end{itemize}
+
+ Morals: Comparing 1D output on different refinement levels can be
+ very frustrating. 2D output is usually much more informative. Using
+ symmetry conditions with Carpet is tricky.
+
+\item {\bf I want to run with periodic boundaries. Why aren't things
+ working correctly?}
+
+ You thought symmetry boundaries were bad? Periodic boundaries are
+ even worse.
+
+ Firstly, Carpet does not itself implement periodic boundaries. The
+ thorn {\tt TAT/Periodic} is ``more or less'' driver independent and
+ does. This should be used to implement the actual boundary
+ conditions. You should not need to change your code - just activate
+ the thorn with the appropriate parameters.
+
+ Secondly, periodic boundaries do {\bf not} work the same way as
+ symmetry boundaries. This is because you cannot specify a point in
+ coordinate space where the boundary actually lies; it really lies in
+ the index space. The following example will hopefully help.
+
+ Take a 1D slice through the grid. There are 7 points with 2 boundary
+ (ghost) zones (0,2 and 10,12), so only 3 points are actually being
+ evolved (4, 6, 8). Periodic boundaries means that the boundary points
+ are identified with certain evolved points. For example, point 2 is
+ to the left of the first evolved point and so must be identified
+ with the \textit{last} evolved point (8). The identifications are
+ shown in figure~\ref{fig:Periodic1}.
+ \begin{figure}[htbp]
+ \begin{center}
+ \includegraphics[scale=0.5]{Periodic1.eps}
+ \caption{Periodic grids identify boundary points and interior
+ points. The interior points are given by circles and the
+ boundary points by squares. The identifications are shown by the
+ arrows.}
+ \label{fig:Periodic1}
+ \end{center}
+ \end{figure}
+
+ We then want to place a refined region across the entire width of
+ the domain but also have the correct periodic boundaries. The
+ crucial point is to ensure that points that are identified on the
+ coarse grid are identified in the same way on the fine grid. For
+ example, point 2 must still be identified with point 8. Therefore
+ point 2 must remain a boundary point and point 8 an interior
+ point. Point 4 must also be identified with point 10. There are
+ therefore 2 possibilities:
+ \begin{itemize}
+ \item Point 3 is the first interior point on the refined grid and
+ point 8 the last. Therefore the point to the ``left'' of point 3,
+ point 2, is still identified with point 8.
+ \item Point 4 is the first interior point on the refined grid and
+ point 9 the last. This possibility is illustrated in
+ figure~\ref{fig:Periodic2}.
+ \end{itemize}
+ \begin{figure}[htbp]
+ \begin{center}
+ \includegraphics[scale=0.5]{Periodic2.eps}
+ \caption{A periodic refined grid. The boundary zones are blue
+ plus signs, the interior blue crosses. Note that the interior
+ points on the refined grid extend \textit{outside} the
+ interior on the base grid. However, equivalent points on both
+ grids coincide.}
+ \label{fig:Periodic2}
+ \end{center}
+ \end{figure}
+
+ So to specify the particular refined grid shown in
+ figure~\ref{fig:Periodic2} you would specify a lower bound of 2, an
+ upper bound of 11, and that both boundaries are outer boundaries. An
+ example for a $44 \times 7 \times 7$ grid where the ``centre half''
+ of the grid in the $x$ direction is refined and the refined region
+ covers the entirety of the $y$ and $z$ directions, you could use
+\begin{verbatim}
+carpet::max_refinement_levels = 2
+carpetregrid::refinement_levels = 2
+carpetregrid::refined_regions = "manual-gridpoint-list"
+carpetregrid::gridpoints = "[ [ ([22,2,2]:[62,11,11]:[1,1,1]) ] ]"
+carpetregrid::outerbounds = "[ [ [[0,0],[1,1],[1,1]] ] ]"
+\end{verbatim}
+
+\end{enumerate}
+
+%% \bibliographystyle{amsalpha} % initials + year
+%% \bibliography{carpet}
+
+\begin{thebibliography}{{Pen}}
+
+\bibitem[AA]{Carpet__astro-psu-edu}
+{Department for} Astronomy and Astrophysics,
+ \emph{{http://www.astro.psu.edu/}}.
+
+\bibitem[{Cac}]{Carpet__cactuscode-org}
+{Cactus web pages}, \emph{{http://www.cactuscode.org/}}.
+
+\bibitem[CVS]{Carpet__CVS}
+CVS, \emph{{http://www.cvshome.org/}}.
+
+\bibitem[gnu]{Carpet__gnuplot-info}
+gnuplot, \emph{{http://www.gnuplot.info/}}.
+
+\bibitem[HDF]{Carpet__HDF}
+HDF, \emph{{http://hdf.ncsa.uiuc.edu/}}.
+
+\bibitem[{Pen}]{Carpet__psu-edu}
+{Penn State University}, \emph{{http://www.psu.edu/}}.
+
+\bibitem[Sch]{Carpet__erik-schnetter}
+Erik Schnetter, \emph{{\textless
+ schnetter@uni-tuebingen.de\textgreater}}.
+
+\bibitem[Sha]{Carpet__FlexIO}
+John Shalf, \emph{{FlexIO} library:
+ {http://zeus.ncsa.uiuc.edu/\textasciitilde jshalf/FlexIO/}}.
+
+\bibitem[TAT]{Carpet__tat-physik-uni-tuebingen-de}
+Theoretische Astrophysik T\"ubingen,
+ \emph{{http://www.tat.physik.uni-tuebingen.de/}}.
+
+\end{thebibliography}
+
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}
diff --git a/Carpet/doc/first-steps.tex b/Carpet/doc/first-steps.tex
new file mode 100644
index 000000000..cfa0e7577
--- /dev/null
+++ b/Carpet/doc/first-steps.tex
@@ -0,0 +1,583 @@
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/doc/first-steps.tex,v 1.3 2004/08/05 14:43:52 schnetter Exp $
+
+\documentclass[11pt]{article}
+
+\usepackage{epsfig,amsmath,amssymb,amsfonts,mathrsfs}
+\RequirePackage{amssymb}
+\RequirePackage{amsfonts}
+\pagestyle{headings}
+
+%\bibliographystyle{chicagoa}
+%\bibliography{uli.bib}
+
+\setlength{\textwidth}{17cm}
+\setlength{\oddsidemargin}{-0.4cm}
+\setlength{\topmargin}{0.0cm}
+\setlength{\textheight}{22cm}
+%\setlength{\parindent}{0.5cm}
+
+\numberwithin{equation}{section}
+
+\renewcommand{\textfraction}{0}
+\renewcommand{\topfraction}{1}
+%\renewcommand{\bottomfraction}{1}
+\renewcommand{\floatpagefraction}{1}
+
+\begin{document}
+
+
+\title{A user's perspective on getting started with Carpet}
+\author{Ulrich Sperhake, Erik Schnetter}
+\date{$ $Date: 2004/08/05 14:43:52 $ $}
+\maketitle
+
+
+
+%=============================================================================
+\section{Introduction}
+
+These notes provide information on how to install and use the package
+Carpet as seen from a user's point of view. Carpet is a set of Thorns
+that provide fixed and to some extent adapted mesh refinement in
+the Cactus environment. As Cactus is a necessary requirement for
+using Carpet, these notes will inevitably contain some information about
+Cactus as well.
+
+The reader should regard these notes as a first draft and the information
+represents the author's personal experiences rather than an exhaustive
+recipe on getting Carpet to work on an arbitrary given platform. In this sense I
+am hopeful that users as well as developers will continue to add to this
+document to make it more useful in the future.
+
+Useful starting points for retrieving more detailed information on
+various issues are the project's web pages\\
+
+\hspace{1cm}{\tt http://www.cactuscode.org}\\
+
+\hspace{1cm}{\tt http://www.carpetcode.org}\\
+
+
+%=============================================================================
+\section{Downloading the necessary packages}
+
+One first needs to download the Cactus version 4.0.13 (or
+alternatively for the more daring the development version).
+A more detailed description about how this is done can be found on the
+Cactus web page
+%
+\begin{center}
+ {\tt http://www.cactuscode.org}
+\end{center}
+%
+Here we will summarize the required steps for downloading the complete
+Cactus-4.0.13 package. Change to a suitable directory on your system
+and log onto the Cactus cvs server via\\
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.cactuscode.org:/cactus login} \\
+
+which will prompt you for a password which is {\tt anon}.
+For the development version you will need to choose
+the directory {\tt /cactusdevcvs} instead.
+Next check out the Cactus
+flesh which will create a directory {\tt Cactus} under your current location\\
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.cactuscode.org:/cactus checkout Cactus} \\
+
+The rest of the cactus checkout is best done with the scripts that are shipped
+as part of Cactus. Change to that directory\\
+
+\hspace{1cm}{\tt cd Cactus} \\
+
+and enter the command\\
+
+\hspace{1cm}{\tt make checkout} \\
+
+That will give you various options to choose those parts of cactus you
+want to ckeckout. The default option {\em arrangements} is quite
+satisfactory for this purpose, so just hit return. You will then be
+given a list of (at the time of writing) 13 Cactus arrangements. Getting
+them all is a good idea, so choose once more the default option by pressing
+return. Depending on your internet connection this may take a while.
+Once all is downloaded you want to quit the script. This is not the
+default option, so type {\tt q} and hit return. \\
+
+In order to run the WaveToy example that comes with CarpetExtra
+(see below) you will need to check out
+Erik Schnetter's package TAT. First switch the directory to\\
+
+\hspace{1cm}{\tt cd arrangements} \\
+
+then checkout\\
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.cactuscode.org:/arrangements checkout TAT} \\
+
+Again this may take a little time. Finally you will have to check out the
+{\tt Carpet} package. As of mid April 2004 Carpet consists of 4 arrangements.
+{\tt Carpet} contains all the necessary thorns you will need to run Carpet
+in the first place. The latest cutting edge thorns currently under
+development are located in {\tt CarpetDev}. Do not be too surprised, though,
+if you find some the tools in there not to be fully functional.
+Packages not required to run {\tt Carpet}, but probably useful for
+various purposes, such as scalar wave examples,
+are located in {\tt CarpetExtra}.
+% Detailed instructions can be found on the
+% web page
+%
+% \begin{center}
+% {\tt http://www.carpetcode.org}\\
+% \end{center}
+%
+Remain in the {\tt arrangements} directory for this purpose and log
+into the carpet cvs-server\\
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.carpetcode.org:/home/cvs/carpet login}\\
+
+the password being once more {\tt anon}. Next checkout Carpet by typing\\
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.carpetcode.org:/home/cvs/carpet checkout Carpet}
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.carpetcode.org:/home/cvs/carpet checkout CarpetExtra}
+
+\hspace{1cm}{\tt cvs -d :pserver:cvs\_anon@cvs.carpetcode.org:/home/cvs/carpet checkout CarpetDev}\\
+
+
+
+%=============================================================================
+\section{Documentation}
+
+Documentation about Cactus, Carpet and their separate thorns comes
+in different forms. Most importantly you generate the UsersGuide and
+ReferenceManual for Cactus by going into the {\tt Cactus} directory
+and typing
+
+\hspace{1cm}{\tt make UsersGuide}\\
+
+\hspace{1cm}{\tt make ReferenceManual}\\
+
+\hspace{1cm}{\tt make ArrangementDoc}\\
+
+\hspace{1cm}{\tt make ThornDoc}\\
+
+(four separate commands). They will be created in postscript format under
+the directory\\
+
+\hspace{1cm}{\tt doc}\\
+
+relative to your current position, i.e.\,the {\rm Cactus} directory.
+In addition each thorn may contain a subdirectory {\tt doc} where
+the author (or users) may store additional documentation, typically
+in the form of a file {\tt documentation.tex}.
+
+
+%=============================================================================
+\section{Compilers}
+
+Before we indulge in using Cactus/Carpet, we have to address issues
+concerning the system you are working on. We begin with the compilers
+although we will not be able to deal with the subject in an exhaustive
+fashion.
+Basically these notes list our experiences with local machines
+(i.e. at Penn State) and may or may not be valid for your environment.
+Users are encouraged to add their experiences to this list.
+
+At Penn State we largely work with the Intel compilers and the success
+of compilations has been found to depend sensitively on which version of the
+Intel compilers we are using. We will discuss some error messages
+encountered in the process of compiler testing below.
+
+Free download (at least for Linux) of
+the Intel compiler (Fortran and C++) for
+non-commercial private or academic use is available from the web page
+%
+\begin{center}
+ {\tt http://downloadfinder.intel.com/scripts-df/support\_intel.asp}
+\end{center}
+%
+(click on Software Development, check for the compilers on your system
+and follow their instructions).
+
+In case you haven't got root access,
+you may need to install the compiler locally or you will have to ask your
+sys-admin. Additional difficulties may arise in case you have no
+root access, i.e. install locally, while your sys-admin keeps
+some older version installed. In order to make sure that no conflict
+arises thereof (e.g. by linking against old versions of the library)
+the environment variable {\tt LD\_LIBRARY\_PATH} must point to your local
+new version and not to the old version in {\tt /usr/local} or wherever.
+You will probably end up with error messages such as
+{\tt undefined symbols ...} otherwise. We decided to use the Intel compiler
+for both Fortran and C++ code. This was mainly a result of the current
+version of g++ not having the complete stl libraries that are made use of
+extensively in Carpet. \\
+An important aspect of the Intel compilers is that they come in various
+different versions. Even the same version number (say 7.1) comes in many
+different releases. You can check this by typing \\
+
+\hspace{1cm}{\tt ifc -V}\\
+
+and likewise for {\tt icc}. Note in particular the date of build given in the
+form of {\em 20030307Z}. This corresponds to the March 2003 build of
+version 7.1 and caused difficulties for me. I encountered an error message
+like\\
+
+\hspace{1cm}{\tt /home/terminator/sperhake/src/2004\_02\_16\_cactus-FMR/configs/test01/build/CarpetLib/}
+
+\hspace{1cm}{\tt data.cc(173): error: no instance of overloaded function "dist::datatype"}
+
+\hspace{1cm}{\tt matches the argument list}\\
+
+This can be rectified by switching to a newer release, at least the
+September 2003 build of version 7.1 (I'd recommend doing that for both
+the Fortran and the C++ compiler).
+
+Some Cactus-Carpet users have reported problems, such as segmentation faults,
+by using the most recent versions of the Intel compilers, namely the March
+2004 release of version 7.1 and the latest version 8.0. So far we have
+been using the former of these without encountering any difficulties,
+but you should probably stick to the December or September 2003 version
+of 7.1 if you can.
+
+On my Gentoo Linux laptop, on the other hand, I experienced trouble with
+the September 2003 version of 7.1.
+I received error messages like\\
+
+\hspace{1cm}{\tt struct stat stat\_bbox ...}
+
+\hspace{1cm}{\tt Incomplete components in structure not allowed}\\
+
+at compilation (I have forgotten the exact wording, but you'll recognize it).
+I managed to work around this by using the Intel Fortran
+and C++ compilers version 8.0 (build October 2003).
+As I have not done extensive code development on this laptop, though,
+I cannot really comment on the potential issues concerning the 8.0 version
+mentioned above. \\
+%In case you decide to use version 8.0, however, note that it does not
+%accept the {\tt rpath} option as specified in the {\tt LDFLAGS} entry
+%of the configuration file (see below). This option, for
+%what little I know, tells the linker about the paths for shared libraries.
+%The error message obtained with the {\tt rpath} option was something like\\
+
+%\hspace{1cm}{\tt undefined reference to CCTK\_FullVersion, CCTK\_TimeInfo}\\
+
+Trouble may also arise from preprocessing
+in case you are using RedHat 7.3 (possibly also with other versions).
+This is essentially related to the
+treatment of white space in Fortran files.
+Should you encounter rather stupid error messages which clearly indicate
+that proper lines of Fortran have been corrupted by introducing white space
+(e.g. line breaks) at preprocessing, you should check your cpp and possibly
+download another (probably older) version.
+Details about this can be found on
+%
+\begin{center}
+ {\tt http://www.cactuscode.org/Documentation/Architectures/Linux.html}
+\end{center}
+%
+which also gives a link to the preprocessor of the older RedHat 6.2
+distribution. I downloaded that older version and it solved the preprocessing
+problems I encountered prior to that. \\
+
+
+%=============================================================================
+\section{Libraries}
+\label{sec: libraries}
+
+As much as the compiler issue is strongly dependent on your platform,
+the extent to which you will have to install new libraries will depend on
+what your system administrator has already done for you. Again these notes
+cannot be exhaustive and rather focus on our experience. Feel free,
+as before, to add to our list.
+
+%=============================================================================
+\subsection{HDF library}
+
+The HDF5 library is required for handling in/output in
+a particular binary data
+format. The use of these libraries in Cactus/Carpet is entirely optional,
+but in the end I found it easier to install the libraries than to
+convince my system that I do not want to use them. They should be useful
+in the long run anyway, so I recommend their installation unless
+they are already part of your system.
+
+Let us start with the hdf5 libraries. The binary version can be obtained from
+%
+\begin{center}
+ {\tt ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/hdf5-1.6.1/bin}
+\end{center}
+%
+As before I prefer compiling the source which you can get from
+%
+\begin{center}
+ {\tt ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/hdf5-1.6.1/src}
+\end{center}
+%
+Again the instructions in the {\tt INSTALL} file are straightforward. I
+included the C++ interface by setting the options\\
+
+\hspace{1cm}{\tt ./configure --enable-cxx}\\
+
+and used the variables {\tt CPPFLAGS} and {\tt LDFLAGS} to ensure that the
+szip libraries were found (see {\tt INSTALL} file). The Fortran interface
+did not work for me, so I did not enable that. In future versions of
+this document this issued may be readdressed. Finally you may need to point
+the environment variable {\tt LD\_LIBRARY\_PATH} in your {\tt .bashrc}
+or {\tt .cshrc} to the directory containing the hdf5 library.\\
+
+
+%=============================================================================
+\subsection{Parallelization}
+
+This subsection is relevant only if you plan to do multi processor runs
+(which you are rather likely to do, though, since it is a key feature of
+Cactus/Carpet). There are various packages that take care of
+parallelization, such as {\tt MPICH} or {\tt lam} and your machine
+will probably come equipped with one of these.
+
+I have only had the need to install a message passing interface
+{\tt (MPI)} on my laptop. It's a single processor laptop but
+you can emulate multi-processor runs none the less. Furthermore
+it appears to me that Carpet expects {\tt MPI} at least in the
+form of a header file {\tt mpi.h}, so you'd better install it.
+I chose the {\tt lam} package for this
+purpose, so that is the only experience I have to report.
+
+Installation of this package was straightforward on my Gentoo
+Linux laptop by typing\\
+
+\hspace{1cm}{\tt emerge lam-mpi}\\
+
+Depending on your Linux flavor installation may be done differently,
+for example using {\tt rpm}. {\tt lam} is started by typing\\
+
+\hspace{1cm}{\tt lamboot}\\
+
+and then executables can be started via\\
+
+\hspace{1cm}{\tt mpirun -np} $<$n$>$ $<$executable$>$\\
+
+where $<$n$>$ is the number of processors and $<$executable$>$
+the binary file (with full path) you want to run.
+
+
+%=============================================================================
+\section{Creating a configuration}
+
+%=============================================================================
+\subsection{The configuration file}
+
+Eventually we can start writing a configuration file for a Cactus-Carpet
+project. In this configuration file the paths to various files, such as
+libraries and compilers need to be specified. Naturally these paths will
+differ from machine to machine. In this subsection I will assume
+the installation path
+
+\hspace{1cm}{\tt /usr/local/}$<$name$>$\\
+
+for most libraries,
+where $<$name$>$ is the name of the library, e.g. {\tt hdf4} or {\tt szip}.
+I further assume that each of these directories contains subdirectories
+{\tt lib} and {\tt include} which contain the libraries and header files.
+Similarly I presume that all compilers/preprocessors are installed in the
+directory\\
+
+\hspace{1cm}{\tt /usr/local/for\_carpet/bin}\\
+
+This is, of course, not where they reside on your machine
+(nor on mine), but it'll be sufficient for this document and
+you will merely have to replace each of these paths with the correct one
+on your system.
+
+We are now in the position to create the configuration file, say
+{\tt mycode\_carpet.cfg} (you can store that file wherever you think
+convenient). We will focus on the most important entries
+in this file only. Please refer to the Cactus documentation
+for a more detailed description. First we specify information
+about the compilers\\
+
+\hspace{1cm}{\tt F90 \hspace{1cm} /usr/local/for\_carpet/bin/ifc}
+
+\hspace{1cm}{\tt F77 \hspace{1cm} /usr/local/for\_carpet/bin/ifc}
+
+\hspace{1cm}{\tt CC \hspace{1.2cm} /usr/local/for\_carpet/bin/icc}
+
+\hspace{1cm}{\tt CXX \hspace{1cm} /usr/local/for\_carpet/bin/icc}
+
+\hspace{1cm}{\tt CPP \hspace{1cm} /usr/local/for\_carpet/bin/cpp}
+
+\hspace{1cm}{\tt FPP \hspace{1cm} /usr/local/for\_carpet/bin/cpp}\\
+
+
+(the exact amount of white space between the variables {\tt F90, F77,...} and
+their entries should not matter and you may even put in an $=$ sign).
+Note that you do not need to specify the
+full path if your environment variable {\tt PATH} points to the correct
+versions of the compilers/preprocessors already.\\
+Next we need to specify information about the message passing interface.
+In my case that was {\tt lam}, so the next entries in my
+file {\tt mycode\_carpet.cfg} are\\
+
+\hspace{1cm}{\tt MPI \hspace{2.5cm} LAM}
+
+\hspace{1cm}{\tt LAM\_INC\_DIR \hspace{1cm} /usr/include}
+
+\hspace{1cm}{\tt LAM\_LIB\_DIR \hspace{1cm} /usr/lib}\\
+
+In case you are using a different {\tt MPI} package refer to the Cactus
+users guide to find the correct entry for {\tt MPI}. Make sure that you
+specify the correct paths for the corresponding header files
+and libraries (ask your sys-admin if necessary).\\
+Next we specify the libraries to be included in the compilation. For the
+7.1 version of the Intel compilers in combination with {\tt lam}
+we found the following to work fine\\
+
+\hspace{1cm}{\tt LIBS \hspace{2cm} crypt lapack blas g2c z BINDF90 CEPCF90
+F90 IEPCF90 PEPCF90}
+
+\hspace{4.2cm}{\tt POSF90 cprts cxa guide imf intrins irc ircmt ompstub svml}
+
+\hspace{4.2cm}{\tt unwind X11 ieeeio df m mpi lam pmpi}\\
+
+(all in one line). It goes without saying that all these libraries must
+be installed on your machine. Most of them probably are and the
+installation of some that may not is described in more detail above
+in Sec.\,\ref{sec: libraries}. \\
+The paths to some of these libraries may not be known automatically by the
+linker and needs to be specified separately. This is done with the variable
+{\tt LIBDIRS} which I had to set to\\
+
+\hspace{1cm}{\tt LIBDIRS \hspace{1.4cm} /usr/local/intel/compiler70/ia32/lib}
+
+\hspace{4.2cm}{\tt /usr/X11R6/lib /usr/local/IEEEIO/lib /usr/local/hdf4/lib}
+
+\hspace{4.2cm}{\tt /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66}\\
+
+(again on all in one line). As before you will have to adjust this line to
+your demands.\\
+Finally I set
+
+%\hspace{1cm}{\tt LDFLAGS \hspace{1.4cm} -Wl,-rpath,/usr/nrlocal/petsc-2.1.0/lib/libO/linux}\\
+
+\hspace{1cm}{\tt PTHREADS \hspace{1.2cm} yes}\\
+
+though I am not sure what this is exactly doing.
+%As has been mentioned above the first of these lines is valid for
+%version 7.1 of the Intel compiler and should be omitted if you are using
+%version 8.0.
+
+
+
+%=============================================================================
+\subsection{make-config}
+
+In order to create a configuration change into the {\tt Cactus}
+directory and type\\
+
+\hspace{1cm}{\tt make} $<$name$>${\tt-config options=}$<$config-file$>$\\
+
+where you can choose an arbitrary $<$name$>$ for your configuration and
+$<$config-file$>$ is the file (with full path) created in the previous
+subsection.
+
+%=============================================================================
+\subsection{Creating a thornlist}
+
+Next you will need to generate a thornlist, i.e.\,a list of all those
+thorns you want to compile. This is done in the {\tt Cactus} directory
+by typing\\
+
+\hspace{1cm}{\tt make} $<$name$>${\tt-thornlist}\\
+
+where $<$name$>$ must be the same as in setting up the configuration.
+This command
+will search all arrangements for all thorns and eventually prompt you
+whether you want to modify the list. As all thorns are activated by default
+you do want to modify the list and type {\em yes} and hit return. This
+will open an editor session where you can unselect thorns by putting a
+hash '\#' at the beginning of the line. Unselect all thorns in this
+way except for the following\\
+
+\hspace{1cm}{\tt CactusBase/Boundary}
+
+\hspace{1cm}{\tt CactusBase/CartGrid3D}
+
+\hspace{1cm}{\tt CactusBase/CoordBase}
+
+\hspace{1cm}{\tt CactusBase/IOBasic}
+
+\hspace{1cm}{\tt CactusBase/IOUtil}
+
+\hspace{1cm}{\tt CactusBase/LocalInterp}
+
+\hspace{1cm}{\tt CactusBase/SymBase}
+
+\hspace{1cm}{\tt CactusBase/Time}
+
+\hspace{1cm}{\tt Carpet/Carpet}
+
+\hspace{1cm}{\tt Carpet/CarpetIOASCII}
+
+\hspace{1cm}{\tt Carpet/CarpetIOHDF5}
+
+\hspace{1cm}{\tt Carpet/CarpetInterp}
+
+\hspace{1cm}{\tt Carpet/CarpetLib}
+
+\hspace{1cm}{\tt Carpet/CarpetReduce}
+
+\hspace{1cm}{\tt Carpet/CarpetRegrid}
+
+\hspace{1cm}{\tt Carpet/CarpetSlab}
+
+\hspace{1cm}{\tt CarpetExtra/IDScalarWave}
+
+\hspace{1cm}{\tt CarpetExtra/WaveToyF77}\\
+
+Before you compile, you need to apply one modification to the file\\
+
+{\tt arrangements/CarpetExtra/WaveToyF77/configuration.ccl}\\
+
+namely remove the entry {\tt Cart3d} from the list of {\tt REQUIRED}
+thorns. This thorn is actually required but, for some reason unknown
+to me, must not be mentioned here. It gave an error message complaining
+that there is no thorn {\tt Cart3d}. Having applied this modification
+you can start compiling by typing\\
+
+\hspace{1cm}{\tt make} $<$name$>$
+
+There is no guarantee, but at least you have a chance of compiling through
+without error messages (do not be intimidated by the odd warning, though).
+In case you still cannot compile, please add your wisdom to this document to
+help future users.
+
+
+%=============================================================================
+\subsection{Running the first application: WaveToyF77}
+
+If you've gotten this far, you should be able to run your first
+simulation with mesh refinement. Change to some convenient directory
+for this purpose and copy over from relative to the main {\tt Cactus}
+directory the parameter file\\
+
+\hspace{1cm}{\tt arrangements/CarpetExtra/WaveToyF77/par/wavetoyf77\_rad\_full\_rl2.par}\\
+
+You will need to adjust this parameter file a little to get it running (I am
+not aware of a WaveToy-parameter file that does not require such minor
+modification). First add to the first line beginning with {\tt ActiveThorns}
+the thorns {\tt Slab CoordBase SymBase} (that is within the quotes).
+Finally you should be able to run this example by typing something like\\
+
+\hspace{1cm}{\tt mpirun -np 1} $\tilde{\,\,}${\tt /Cactus/exe/cactus-}$<$name$>$ {\tt wavetoyf77\_rad\_full\_rl2.par}\\
+
+where $<$name$>$ is again the name of the configuration above. In case you do
+not have your main {\tt Cactus} directory under your home directory you will
+need to adjust that part in the command.\\
+By running this command you should obtain a directory
+{\tt wavetoyf77\_rad\_full\_rl2} with the resulting data in ascii format.
+You can check for example the file\\
+
+\hspace{1cm}{\tt wavetoyf77\_rad\_full\_rl2/phi.x.asc}\\
+
+(relative to the directory where you ran the code)
+which lists the data on the separate refinement levels.
+
+\end{document}
diff --git a/Carpet/doc/internals.tex b/Carpet/doc/internals.tex
new file mode 100644
index 000000000..3acbaa9b1
--- /dev/null
+++ b/Carpet/doc/internals.tex
@@ -0,0 +1,777 @@
+% $Header: /home/eschnett/C/carpet/Carpet/Carpet/doc/internals.tex,v 1.4 2003/05/03 13:29:23 schnetter Exp $
+
+\documentclass{article}
+
+\usepackage{amsfonts}
+\usepackage{amssymb}
+\usepackage[english] {babel}
+\usepackage{exscale}
+\usepackage[final]{graphicx}
+\usepackage[backref,draft=false]{hyperref}
+%\usepackage{concrete}
+\usepackage{mathpple}
+%\usepackage{pslatex}
+
+\newcommand{\todo}[1]{\rule{1em}{1ex}~{\small [{#1}]}}
+
+\sloppypar
+
+\begin{document}
+
+\title{Carpet under the hood}
+\author{Erik Schnetter \textless schnetter@uni-tuebingen.de\textgreater}
+\date{$ $Date: 2003/05/03 13:29:23 $ $}
+\maketitle
+
+\begin{abstract}
+ This document describes the internal workings of the Carpet
+ arrangement. Its intended readership are people who extend Carpet,
+ or who use Carpet more thant the average user. This document is
+ supposed to be read in conjuction with and guiding through the
+ source code.
+\end{abstract}
+
+\tableofcontents
+
+\section{Overview}
+
+ The Carpet driver, which lives in the Carpet arrangement, is
+ divided into several parts. The thorn \texttt{Carpet} is the main
+ driver piece; it provides all the routines and structures that
+ Cactus expects from it. The thorn \texttt{CarpetLib} is the
+ workhorse that does all the bookkeeping and data shuffling. Those
+ two alone form a valid Cactus driver; the other thorns provide
+ additional functionality. The thorns \texttt{CarpetInterp},
+ \texttt{CarpetReduce}, and \texttt{CarpetSlab} provide the
+ corresponding interpolation, reduction, and slabbing interfaces.
+ The thorns \texttt{CarpetIOASCII} and \texttt{CarpetIOFlexIO}
+ provide I/O methods. Finally, thorn \texttt{CarpetRegrid} provides
+ a user interface to select where and what to refine. (The actual
+ refinement is handled in \texttt{CarpetLib}.)
+
+
+
+\section{Terminology}
+
+ Carpet is called ``Carpet'' because a carpet consists of many
+ individual patches.
+
+ Carpet is a mesh refinement driver. It knows about a hierarchy of
+ \emph{refinement levels}, where each level is decomposed into a set
+ of cuboid \emph{grid patches}. For historic reasons it also has a
+ notion of \emph{multigrid levels}, but those are currently unused.
+ They might conceivably be reactivated to form multigrid stacks to
+ solve elliptic equations. The grid patch is the smallest unit of
+ grid points that Carpet deals with. Carpet parallelises by
+ assigning sets of grid patches to processors.
+
+ A multi-patch run is a run where more than one grid patch (of the
+ same refinement level) is assigned to a single processor. This is
+ a situation that can occur even without refinement. This is also a
+ situation that cannot occur with PUGH, so that most thorns cannot
+ handle this situation. In multi-patch runs one has to distinguish
+ between \emph{local mode}, where one has access to a single grid
+ patch, and \emph{global mode}, where one cannot access individual
+ grid patches, but can instead perfom global operations such as
+ synchronisation, interpolation, or reduction. This part of Cactus
+ is currently (2003-04-30) undergoing changes.
+
+ Carpet uses vertex-centered refinement. That is, each coarse grid
+ point coincides with a fine grid point. To \emph{regrid} means to
+ select a new set of grid patches for each refinement level. To
+ \emph{recompose} the grid hierarchy means to move data around.
+ Regridding is only about bookkeeping, while recomposing is about
+ data munging.
+
+ Each grid patch can be divided in up to four zones: the interior,
+ the outer boundary, and the ghost zone, and the refinement
+ boundary. The interior is where the actual compuations go on. The
+ outer boundary is where the users' outer boundary condition is
+ applied; from Carpet's point of view, these two are the same. (The
+ only difference is that Carpet sets \texttt{cctk\_bbox}
+ correspondingly.) The ghost zones are boundaries to other grid
+ patches on the same refinement level (that might live on a
+ different processor). The refinement boundary is the boundary of
+ the refined region in a level, and it is filled by prolongation
+ (interpolation) from the next coarser level. Both the ghost zones
+ and the prolongation boundary are filled by \emph{synchronising}.
+
+ Grid patches that are on the same refinement level never overlap
+ except with their ghost zones. Conversly, all ghost zones must
+ overlap with a non-ghost zone of another grid patch of the same
+ level. All refinement boundaries must overlap with a grid patch on
+ the next coarser level. (This is also called \emph{proper
+ nesting}.)
+
+ Except for exceptions, Carpet numbers grid point indices and time
+ levels with integers. It counts always in terms of the finest
+ grid, so that coarser grids have \emph{strides} that are powers of
+ the refinement factor. This has the advantage that different
+ refinement levels can use the same global numbering scheme.
+
+ The grid patches are described by a \emph{bounding box}
+ (abbreviated bbox, see \texttt{CarpetLib/src/bbox.*}.). This is a
+ triplet of \emph{vectors} (see \texttt{CarpetLib/src/vect.*}),
+ where each triplet specifies \emph{lower bound}, \emph{upper
+ bound}, and \emph{stride}, much as is conventional in Fortran.
+ Triplets are enclosed in round parentheses $(\cdot:\cdot:\cdot)$,
+ and vectors are enclosed in square brackets $[\cdot,\cdot,\cdots]$.
+ A typical grid patch might have a bounding box which is denoted by
+ $([0,0,0]:[20,20,20]:[2,2,2])$. This is to be read as
+ $(\textrm{lower}:\textrm{upper}:\textrm{stride})$, meaning that the
+ grid patch has one corner grid point at $[0,0,0]$, the diagonally
+ opposite corner grid point at $[20,20,20]$, and the grid points are
+ spaced two ``fine grid spacings'' apart. This grid patch contains
+ $11 \times 11 \times 11$ grid points. Empty bboxes have an upper
+ bound that is strictly lower than the lower bound. The files
+ \texttt{CarpetLib/src/vect.*} contains many useful routines to deal
+ with short vectors, and the files \texttt{CarpetLib/src/bbox.*}
+ contain routines deal with an algebra of bboxes. The files
+ \texttt{CarpetLib/src/bboxset.*} contain routines that handle sets
+ of bboxes.
+
+
+
+\section{The driver}
+
+ The driver consists of the two thorns \texttt{Carpet} and
+ \texttt{CarpetLib}. \texttt{Carpet} is the front end to
+ Cactus, while \texttt{CarpetLib} is the back end to the
+ machine. \texttt{Carpet} specifies the grid shape, decides when to
+ allocate and deallocate storage, cycles through thes schedule bins,
+ and passes all internal information in the \texttt{cGH} structure
+ to the thorns.
+
+
+
+\subsection{Specifying the grid extent}
+
+ \texttt{Carpet} defines the usual parameters necessary to specify
+ the extent of the grid. Everything that has to do with coordinates
+ and symmetries is handled elsewhere, and the driver does not know
+ about that.
+
+ The \texttt{global\_*} parameters specify the global extent of the
+ coarsest grid. Not all of this grid needs to be covered by grid
+ patches. It is conceivable to have an L-shaped simulation domain
+ without any refinement. This situation can be described to Carpet
+ by specifying a global shape that is the convex hull of the domain,
+ and then using two cuboid grid patchs to fill in the shape of
+ the~L.
+
+ The \texttt{ghost\_*} parameters specify the number of ghost zones.
+ The \texttt{periodic*} parameters are unused; they are only there
+ because some thorns look at these parameters. Carpet itself does
+ not supply periodic boundary conditions; they have to be handled by
+ another thorn. The size of the prolongation boundary is the same
+ as the number of ghost zones.
+
+ The parameter \texttt{max\_refinement\_levels} specifies the
+ maximum number of levels that can be present in a run, including
+ the base level. This parameter, together with
+ \texttt{refinement\_factor}, define the grid point numbering
+ scheme, which (see above) depends on the finest possible grid.
+ However, none of the finer levels will be activated automatically.
+ The \texttt{multigrid\_*} parameters are unused.
+
+ The parameter \texttt{base\_extents} specifies the shapes of the
+ grid patches that are present on the coarsest grid. This can be
+ used to set up e.g.\ an L-shaped domain. The parameter
+ \texttt{base\_outerbounds} specifies which of the grid patches'
+ boundaries are to be treated as outer boundaries, i.e.\ for which
+ of those \texttt{cctk\_bbox} should be set to 1.
+
+ Carpet currently ignores \texttt{enable\_all\_storage} and always
+ enables all storage. This is because it is not yet clear how
+ individual grid function can be allocated and deallocated while
+ still keeping enough data for the boundary prolongation.
+
+ Checksumming and poisoning are means to find thorns that alter grid
+ variables that should not be altered, or that fail to fill in grid
+ variables that they should fill in.
+
+ None of the above specifies anything about refined grids. Refined
+ grid are created and destroyed at run time, possibly guided by the
+ thorn \texttt{CarpetRegrid} which provides a nice user interface.
+
+
+
+\subsection{The timeline}
+
+ It is \texttt{Carpet}'s task to walk through the schedule bins and
+ call all user routines. Only some fairly fundamental
+ initialisation happens in the flesh before Carpet takes control.
+ The overall picture of what happens when is:
+\begin{enumerate}
+\item
+ Startup (see file \texttt{Carpet/src/CarpetStartup.cc}). This is
+ the only scheduled routine; everything else happens by overloading
+ and registering. This routine does nothing but registering and
+ overloading.
+\item
+ SetupGH (see file \texttt{Carpet/src/SetupGH.cc}). This routine
+ does the bulk of initialising Carpet. It sets up the internal
+ structures for all grid variables.
+\item
+ Initialise (see file \texttt{Carpet/src/Initialise.cc}). This
+ routine walks the initialisation part of the scheduling bins.
+\item
+ Evolve (see file \texttt{Carpet/src/Evolve.cc}). This routine
+ walks the evolution part of the scheduling bins. It also contains
+ the main evolution loop.
+\item
+ Shutdown (see file \texttt{Carpet/src/Shutdown.cc}). This routine
+ walks the shutdown part of the scheduling bins. Normally, nothing
+ interesting happens here.
+\end{enumerate}
+ These stages are explained in the following sections.
+
+
+
+\subsubsection{Initialisation}
+
+ (See file \texttt{Carpet/src/Initialise.cc}.) In this stage Carpet
+ initialises the simulation. This includes setting up the grids,
+ calling routines to register symmetries and boundary conditions, as
+ well as calculating the actual initial data on several refinement
+ levels. It traverses the scheduling bins in the following order:
+\begin{enumerate}
+\itemsep 0pt
+\item
+ Set \texttt{cctk\_iteration} to zero
+\item
+ Set \texttt{cctk\_time} to the initial time
+\item
+ PARAMCHECK
+\item
+ Loop over refinement levels, starting from coarsest:
+\item \quad
+ BASEGRID
+\item \quad
+ INITIAL
+\item \quad
+ POSTINITIAL
+\item \quad
+ POSTSTEP
+\item \quad
+ Regrid (possibly creating new levels)
+\item
+ End loop over refinement levels
+\item
+ Restrict from finer to coarser grids
+\item
+ If desired, perform Scott Hawley's initialisation scheme for three
+ timelevels
+\item
+ Loop over refinement levels, starting from coarsest:
+\item \quad
+ RECOVER\_VARIABLES
+\item \quad
+ CPINITIAL
+\item \quad
+ ANALYSIS
+\item \quad
+ OutputGH
+\item
+ End loop over refinement levels
+\end{enumerate}
+
+ In the beginning, only the coarsest level exists. The first loop
+ starts by initialising this level. At the end of this loop, more
+ levels are created if desired. This makes it possible to make this
+ decision depend on an automatic refinement criterion.
+
+
+
+\subsubsection{Evolution}
+
+ (See file \texttt{Carpet/src/Evolve.cc}.) In this stage Carpet
+ performs the main time evolution loop. This is further complicated
+ by the fact that finer grids need to take more and smaller time
+ steps than coarser grids. In Carpet's time step counting scheme,
+ which is based on the finest grid time steps, this means that the
+ coarser grids are skipped in the remaining time steps. Thus the
+ elegant recursive scheme is flattened out. The scheduling bins in
+ the main time evolution loop are traversed in the following order:
+\begin{enumerate}
+\itemsep 0pt
+\item
+ Advance \texttt{cctk\_iteration}
+\item
+ Loop over refinement levels, starting from coarsest:
+\item \quad
+ If the current level needs to be treated at this iteration:
+\item \quad \quad
+ Calculate current \texttt{cctk\_time}
+\item \quad \quad
+ Cycle time levels
+\item \quad \quad
+ PRESTEP
+\item \quad \quad
+ EVOL
+\item \quad \quad
+ POSTSTEP
+\item \quad \quad
+ Regrid
+\item
+ End loop over refinement levels
+\item
+ Restrict from finer to coarser grids
+\item
+ Loop over refinement levels, starting from coarsest:
+\item \quad
+ If the current level needs to be treated at this iteration:
+\item \quad \quad
+ CHECKPOINT
+\item \quad \quad
+ ANALYSIS
+\item \quad \quad
+ OutputGH
+\item
+ End loop over refinement levels
+\end{enumerate}
+
+ The condition whether a refinement level needs to be treated at the
+ current iteration is different for the two loops. In the first
+ loop, the coarse grids need to be advanced before the finer grids,
+ so the condition is $iter \,\mathrm{mod}\, stride = 1$. Here
+ $iter$ is the current iteration, and $stride$ the stride of the
+ current refinement level, i.e.\ the factor by which the finest grid
+ is finer than the current grid. In the second loop above, the
+ coarse grids need to be treated after the finer grids, so that the
+ condition reads $iter \,\mathrm{mod}\, stride = stride$.
+
+
+
+\subsection{Calling scheduled routines}
+
+ (See file \texttt{Carpet/src/CallFunction.cc}.) The process by
+ which the scheduling bins are traversed is different from the
+ process which actually calls the routines within the scheduling
+ bins. The former has to do with mesh refinement, making sure that
+ the coarse and fine grids are evolved in the right order. The
+ latter has to do with treating multiple patches, i.e.\ with local
+ mode and global mode operations, as mentioned above.
+
+ In the function \texttt{CallFunction}, all the arguments that are
+ passed to the scheduled routines have to be set up. Additionally,
+ the \texttt{cGH} structure has to be filled in. Some fields in the
+ \texttt{cGH} structure are always kept up-to-date during the
+ refinement level loops, such as the time step size and the grid
+ spacing. The file \texttt{Carpet/src/helper.cc} contains helper
+ routines that allow easy looping over refinement levels and over
+ grid patches. (Grid patches are also called \emph{compoments} in
+ Carpet. The expression component seems to be confusing, so that I
+ switched to using \emph{patch} instead. Some source code still
+ reflects the old conventsion.)
+
+ The function \texttt{CallFunction} first distinguishes between
+ global mode functions and local mode functions.
+\begin{description}
+\item[Global mode functions]
+ are called once (on each processor). They are passed all the
+ global data, such as \texttt{cctk\_gsh} and
+ \texttt{cctk\_delta\_space}, but none of the local data, such as
+ \texttt{cctk\_lsh} or \texttt{cctk\_bbox}. Grid functions are not
+ accessible, and they are passed as null pointers. However, grid
+ scalars and grid arrays are accessible. There is an untested
+ gateway to directly call local mode functions from global mode
+ functions.
+\item[Local mode functions]
+ might be called several times (on each processor), once for each
+ grid patch that is assigned to this processor. They receive the
+ global data as well as data for a single grid patch. It is illegal
+ to perform global operations, such as synchronisation,
+ interpolation, or reduction, in local mode.
+\end{description}
+
+ The distinction between global and local mode is only important for
+ multi-patch runs. For single-patch runs, the distinction does not
+ exist.
+
+ Multi-patch runs are only necessary when there are more grid
+ patches on a refinement level than there are processors. This is
+ normally not the case for fixed mesh refinement. Things are
+ different for adaptive mesh refinement, which can create many
+ refined regions.
+
+
+
+\subsection{Grid arrays and grid scalars}
+
+ Grid scalars are implemented as zero-dimensional grid arrays with
+ \texttt{DISTRIB=CONSTANT}.
+
+ Grid arrays are implemented as grid functions, where each grid
+ array group has their own refinement hierarchy that consists of a
+ single level only and is never changed at run time. Grid arrays
+ with less than 3 dimension are extended to have an extent of 1 (and
+ no ghost zones) in the remaining dimensions, so that all quantities
+ in Carpet have 3 dimensions\footnote{This is set by a compile-time
+ constant and could be changed to allow for grid functions and
+ arrays with more than 3 dimensions.}. \texttt{DISTRIB=CONSTANT} grid arrays
+ are implemented by internally enlarging the grid array in the $z$
+ direction, and then distributing this array onto the processors.
+
+
+
+\subsection{Flesh interfaces}
+
+ The flesh has many interfaces that need to be filled in by a
+ driver. These are in particular all the routines that are
+ overloaded in the SetupGH stage. Those overloaded routines as well
+ as other helper function are implemented in the following files:
+\begin{description}
+\itemsep 0pt
+\item[\texttt{Carpet/src/Checksum.cc}]
+ catching illegal changes to grid variables
+\item[\texttt{Carpet/src/Comm.cc}]
+ synchronisation, prolongation
+\item[\texttt{Carpet/src/Cycle.cc}]
+ time level handling
+\item[\texttt{Carpet/src/Poison.cc}]
+ catching uninitialised grid variables
+\item[\texttt{Carpet/src/Restrict.cc}]
+ restriction from finer to coarser grids
+\item[\texttt{Carpet/src/Storage.cc}]
+ enabling and disabling storage
+\item[\texttt{Carpet/src/helpers.cc}]
+ small low-level helper routines
+\item[\texttt{Carpet/src/variables.cc}]
+ the global variables that keep Carpet's current state (this is used
+ instead of a GH extension --- should probably be changed some time)
+\end{description}
+
+ Most of these files are fairly self-contained, and they mostly
+ marshal the actual work to \texttt{CarpetLib}.
+
+
+
+\subsection{Interfaces to other thorns}
+
+ Some other thorns, mostly from the Carpet arrangement, do need to
+ access internal data of Carpet. Carpet keeps its internal state in
+ global variables which are declared in
+ \texttt{Carpet/src/carpet\_public.hh} and defined in
+ \texttt{Carpet/src/variables.cc}. Entities that can be accessed
+ from C are declared in \texttt{Carpet/src/carpet\_public.h}; some
+ of these would be quite useful if they were provided by the flesh.
+
+
+
+\subsection{Missing parts}
+
+ \texttt{Carpet} does not handle staggered grids. \texttt{Carpet}
+ does not provide cell-centered refinement. \texttt{Carpet} always
+ enables all storage. \texttt{Carpet} does not run efficiently in
+ parallel.
+
+
+
+\section{The workhorse}
+
+ While \texttt{Carpet} provides the necessary interfaces to the
+ flesh, the grunt work is actually done by \texttt{CarpetLib}. This
+ thorn grew from an earlier mesh refinement of mine (Erik Schnetter)
+ library that was independent of Cactus. It has in the mean time
+ been thoroughly changed, and it does not make sense any more to use
+ it independent of Cactus. \texttt{CarpetLib} contains of three
+ major parts: a set of generic useful helpers, the grid hierarchy
+ and data handling, and interpolation operators. Especially the
+ latter could probably be separated out. While \texttt{CarpetLib}
+ is written in C++, the interpolators are written in
+ \textsc{Fortran77}.
+
+
+
+\subsection{The helpers}
+
+ The helpers correspond closely to Carpet's terminology. A class
+ \texttt{vect<T,D>} provides small \texttt{D}-dimensional vectors of
+ the type \texttt{T}, with all the operators that one has learned to
+ enjoy from Haskell and Fortran 90. A \texttt{vect} corresponds to
+ a grid point location. The class \texttt{bbox<T,D>} provides
+ \texttt{D}-dimensional bounding boxes using type \texttt{T} as
+ indices. A \texttt{bbox} defines the location and shape of a grid
+ patch. Finally, \texttt{bboxset<T,D>} is a collection of \texttt{bbox}es.
+ \texttt{bboxsets} are a useful extension of the algebra of bboxes, as it
+ closes the \texttt{bbox} algebra under the union operation.
+
+ The files \texttt{CarpetLib/src/defs.*} defines useful small
+ helpers and instantiates the STL templates.
+ \texttt{CarpetLib/src/dist.*} provides some routines around MPI.
+ Carpet is closely coupled to MPI and does not work without it.
+
+ (Instead of inserting switches into Carpet to make it work without
+ MPI, it would make more sense to use a dummy version of MPI. PETSc
+ does contain such a dummy version. It is also easily possible to
+ use a free MPI version such as MPICH and use that to run on a
+ single processor. However, I cannot see any real need for making
+ Carpet work without MPI.)
+
+
+
+\subsection{The grid hierarchy}
+
+ The grid hierarchy is described by a set of classes. Except for
+ the actual data, all structures and all information is replicated
+ on all processors.
+\begin{description}
+\item[\texttt{gh}]
+ is a grid hierarchy. It describes, for each refinement level, the
+ location of the grid patches. This \texttt{gh} does not contain
+ ghost zones or prolongation boundaries. There exists only one
+ common \texttt{gh} for all grid functions.
+\item[\texttt{dh}]
+ is a data hierarchy. It extends the notion of a \texttt{gh} by
+ ghost zones and prolongation boundaries. The \texttt{dh} does most
+ of the bookkeeping work, deciding which grid patches interact with
+ what other grid patches through synchronisation, prolongation,
+ restriction, and boundary prolongation. Unexpected situations are
+ often caught in one of \texttt{dh}'s many self checks. As all grid
+ functions have the same number of ghost zones, there exists also
+ only one \texttt{dh} for all grid functions.
+\item[\texttt{th}]
+ is a time hierarchy. It extends the notion of a \texttt{gh} by
+ multiple time levels. There exists one \texttt{th} per grid
+ function group. This is a small class that keeps track of the
+ current time on the different refinement levels. (Note that
+ different refinement levels usually live at different times.)
+\item[\texttt{gf}]
+ is a grid function of a certain variable type. There is one
+ instance of \texttt{gf} for every grid function, whether it has
+ storage or not. Each \texttt{gf} is associated with a \texttt{dh}
+ and a \texttt{th} and holds the storage for all levels and all
+ patches. It provides interfaces to access and modify these data,
+ either directly or through interpolation operators. \texttt{gf}
+ also handles the data movement during a regridding operation.
+\item[\texttt{ggf}]
+ is an abstract superclass of \texttt{gf} which is independent of
+ the variable type. This is necessary in C++ to prevent egregious
+ code duplication due to class templates. Most of the routines in
+ \texttt{gf} are actually declared in \texttt{ggf}, and they either
+ are virtual functions themselves, or they call virtual functions
+ that are declared in \texttt{gf}.
+\item[\texttt{data}]
+ is a container for a grid patch of a certain variable type. This is
+ a glorified multi-dimensional array that knows how to move between
+ processors. \texttt{data} is not only used to store the grid
+ patches that make up a \texttt{gf}, it is also used to move parts
+ of patches around, e.g.\ for synchronisation or prolongation.
+\item[\texttt{gdata}]
+ is an abstract superclass of \texttt{data} for much the same
+ reasons as for \texttt{ggf}. All information that is independent
+ of the variable type is kept in \texttt{gdata}.
+\end{description}
+
+
+
+\subsection{The interpolators}
+
+ There are three kinds of ``interpolators'': for prolongation, for
+ restricting, and for copying. The latter is only a glorified
+ hyperslabber that moves parts of grid patches between grid patches.
+
+ The interpolators used for restriction and prolongation are
+ different from those used for the generic interpolation interface
+ in Cactus. The reason is that interpolation is expensive, and
+ hence the interpolation operators used for restriction and
+ prolongation have to be streamlined and optimised. As one knows
+ the location of the sampling points for the interpolation, one can
+ calculate the coefficients in advance, saving much time compared to
+ calling a generic interpolation interface.
+
+
+
+\subsubsection{Restriction}
+
+ Restriction operators move data from finer to coarser grids. They
+ are typically called after both the coarse and the fine grid have
+ been advanced to the same time, and they overwrite parts of the
+ coarse grid with information from the fine grid, coupling the
+ coarse grid evolution to the fine grid evolution. In principle,
+ there could be restriction operators with different orders of
+ accuracy. Currently only a single restriction operator is
+ implemented that uses sampling.
+
+ The interface of the restriction operator (see file
+ \texttt{CarpetLib/src/restrict\_3d\_real8.F77}) is
+\begin{verbatim}
+subroutine restrict_3d_real8
+ (src, srciext, srcjext, srckext,
+ dst, dstiext, dstjext, dstkext,
+ srcbbox, dstbbox, regbbox)
+
+ integer srciext, srcjext, srckext
+ CCTK_REAL8 src(srciext,srcjext,srckext)
+ integer dstiext, dstjext, dstkext
+ CCTK_REAL8 dst(dstiext,dstjext,dstkext)
+ integer srcbbox(3,3), dstbbox(3,3), regbbox(3,3)
+\end{verbatim}
+ This interpolator assumes that space has three dimensions. The
+ arrays \texttt{src} and \texttt{dst} contain the source (fine) and
+ destination (coarse) grid patches, stored in Fortran order, as is
+ customary in Cactus. The arrays \texttt{src} and \texttt{dst} have
+ the shapes \texttt{(srciext,srcjext,srckext)} and
+ \texttt{(dstiext,dstjext,dstkext)}, respectively --- this
+ corresponds to the \texttt{cctk\_lsh} field in the \texttt{cGH}
+ structure.
+
+ The three bboxes describe the location and shape of the two arrays
+ and of the region that should be prolongated in the global grid
+ point index system. That is, while the two arrays \texttt{src} and
+ \texttt{dst} are stored as dense arrays, they correspond to grid
+ patches which in general have non-unit strides in the global index
+ system. As prolongation is an operation that is performed between
+ overlapping grids, the prolongation region is the same for both the
+ coarse and the fine grids.
+
+ A few constraints must hold for these data. For example, the
+ shapes of the arrays must be the same as the shapes defined by the
+ bounding boxes; the strides in the bounding boxes must differ by
+ the refinement factor; the bounding boxes must overlap, and the
+ region's bounding box must be contained in the arrays bounding
+ boxes, etc. Checking these constraints makes up about three
+ quarters of the restriction routine.
+
+ The bboxes themselves are here represented as Fortran arrays.
+ Their meaning is
+\begin{description}
+\itemsep 0pt
+\item[\texttt{bbox(:,1)}]
+ lower boundary (inclusive)
+\item[\texttt{bbox(:,2)}]
+ upper boundary (inclusive)
+\item[\texttt{bbox(:,3)}]
+ stride
+\end{description}
+
+
+
+\subsubsection{Prolongation}
+
+ There are many prolongation operators implemented. They differ in
+ the order of their interpolation in space (first and third, or
+ linear and cubic interpolation) and in time (first and second, or
+ linear and quadratic). The higher the order of interpolation, the
+ larger is the stencil, i.e.\ the more ghost zones and time levels
+ are necessary, and the more expensive the operation becomes.
+
+ The prolongation operators live in the files
+ \texttt{CarpetLib/src/prolongate\_3d\_real8*.F77}, and the file
+ names indicate their orders: \texttt{$n$tl} stands for $n$ time
+ levels, and \texttt{o$n$} stands for an order $n$ interpolation in
+ space (which uses a stencil that is $n+1$ grid points wide).
+
+ Apart from taking more than one \texttt{src} array argument when
+ using more than one time level, the interface to the prolongation
+ operator is equivalent to that of the restriction operator
+ described above.
+
+
+
+\section{Regridding, how and where and when}
+
+ The thorn \texttt{Carpet} provides a routine
+ \texttt{RegisterRegridRoutine} where one can register a regridding
+ routine. Such a regridding routine does not have to actually
+ regrid anything, it only has to return the new desired grid
+ hierarchy, i.e.\ basically a description of a \texttt{gh}.
+
+ Thorn \texttt{CarpetRegrid} provides a user interface to the
+ regridding routines in Carpet. All it does is take a regridding
+ specification from the user and translate that into a \texttt{gh}.
+ As usual, the parts where the computer has to listen to what a
+ human being intends are the most complicated.
+
+ As humans are usually more adept at getting used to computers than
+ the other way around, it is useful and probably necessary to get
+ acquainted with how Carpet thinks in order to make it do what is
+ intended.
+
+ Carpet does not deal with real-valued coordinates. Carpet deals
+ with integer grid point locations only, and it counts grid points
+ in terms of the finest possible grid (not the finest currently
+ existing grid). The finest possible grid is defined by the maximum
+ number of refinement levels set in \texttt{Carpet}. Changing this
+ parameter will change the meaning of many other values in parameter
+ files, such as e.g.\ iteration numbers (termination, output). The
+ only parameter that is specified in terms of the coarsest grid is
+ the shape of the coarsest grid in the \texttt{global\_*} parameters
+ of \texttt{Carpet}. I therefore suggest to set
+ \texttt{max\_refinement\_levels} to some large number (e.g.\ 10),
+ and then not changing it while experimenting with other parameter
+ settings.
+
+ Carpet also does not know about symmetries. When specifying the
+ location of a fine grid in terms of grid points, it is the
+ responsibility of the user to place the fine grid correctly. For
+ that one has to take ghost zones and symmetry zones into account.
+
+ It is also possible to specify the fine grid locations in terms of
+ real-valued coordinates. In this case, \texttt{CarpetRegrid}
+ translates these into integer grid points. A good translation is
+ quite complicated, because it has to take many user expectations
+ into account, such as the location of the origin, staggering with
+ respect to the origin, symmetry boundary conditions, the number of
+ ghost zones etc. The current translation is naive and leads to
+ unexpected results in many cases. A routine that does most of the
+ time what the user expects while being easy to understand is
+ probably important for the ease of use of Carpet, but it might be
+ some time until it is written.
+
+ \texttt{CarpetRegrid} contains also a routine that measures the
+ error, as provided in a grid function, and the automatically
+ decides where to refine. This is called AMR (adaptive mesh
+ refinement) if it works efficiently.
+
+ Much of \texttt{CarpetRegrid} is just slabbed together in an
+ attempt to find out what people need and expect. The thorn is a
+ mess, and a complete rewrite might be a good idea, once one knows
+ what exactly the rewritten thorn should do.
+
+
+
+\section{Random ramblings}
+
+ Carpet uses the STL, because the STL provides very useful container
+ classes such as vectors, sets, and lists. Writing these abstract
+ datatypes oneself does not make sense in these times. It makes
+ much more sense to politick computer administrators to upgrade
+ their software.
+
+ The STL and \texttt{CarpetLib}'s classes need to be instantiated
+ explicitly. Several compilers have several ``automatic'' schemes
+ that handle all template issues ``just fine''. Except they don't.
+ One wants to select the following: No automatic inclusion of
+ \texttt{.cc} files, no automatic template instantiation at link
+ time. Instead, most templates are instantiated explicitly by
+ \texttt{CarpetLib}. It is also necessary to specify to instantiate
+ used templates automatically. The explicit instantiations of
+ \texttt{CarpetLib}'s classes live in the \texttt{.cc} files
+ corresponding to the \texttt{.hh} file that define the templates.
+ The STL templates are instantiated in the file
+ \texttt{CarpetLib/src/defs.cc}.
+
+ Carpet makes extensive use of the \texttt{assert()} macro in C.
+ This is a quick and easy way to ensure that a certain condition
+ holds. Assert statements abort the code if the condition does not
+ hold. Although I try to provide useful error messages to the user,
+ many unexpected cases are only caught deep inside Carpet and
+ manifest themselves as assertion failures. If you report an
+ assertion failure, it is vitally important to remember
+ theaccompanying file name and line number. It would also be useful
+ to extract from the core file a stack backtrace and the values of
+ the local variables of the current stack frame.
+
+ Using symmetry boundary conditions such as octant mode is currently
+ still awkward in Carpet. There are several reasons for this:
+ \texttt{CarpetRegrid} does not know about symmetries, and hence
+ doesn't take them into account when choosing refinement regions.
+ The symmetry conditions on the finer grid might be different from
+ the conditions on the coarser grids, and the symmetry thorns cannot
+ cope with this, so this situation must be avoided: one cannot use
+ \texttt{avoid\_origin=yes}, because the finer grids all have
+ \texttt{avoid\_origin=no} due to the vertex-centred refinement.
+
+\end{document}
diff --git a/Carpet/doxygen/Doxyfile b/Carpet/doxygen/Doxyfile
new file mode 100644
index 000000000..688dc1143
--- /dev/null
+++ b/Carpet/doxygen/Doxyfile
@@ -0,0 +1,1080 @@
+# Doxyfile 1.3.4
+
+# 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
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = Carpet
+
+# 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 = doxygen
+
+# 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:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# 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
+
+# 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. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH = /home/eschnett/Calpha/Cactus/arrangements/Carpet/
+
+# 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 the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_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
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# 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
+
+# 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 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
+
+#---------------------------------------------------------------------------
+# 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 = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# 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
+
+# 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 = YES
+
+# 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
+# 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
+
+# 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 =
+
+# 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
+
+#---------------------------------------------------------------------------
+# 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
+
+# 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.
+
+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 = .
+
+# 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
+
+FILE_PATTERNS =
+
+# 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.
+
+EXCLUDE_PATTERNS =
+
+# 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.
+
+INPUT_FILTER =
+
+# 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.
+
+SOURCE_BROWSER = YES
+
+# 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 = NO
+
+# 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 = YES
+
+# 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 = YES
+
+# 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 = YES
+
+# 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 = 4
+
+# 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
+
+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 compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = 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 dir.
+
+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 = mathpple
+
+# 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 optimised 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 assigments. 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. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+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 =
+
+#---------------------------------------------------------------------------
+# 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 = YES
+
+# 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_PREDEFINED 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.
+
+PREDEFINED = CARPET_INT \
+ CARPET_REAL \
+ CARPET_COMPLEX
+
+# 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::addtions 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 superceded 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
+
+# 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 UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similiar 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 tags 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 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
+
+# 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 on 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_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# 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 a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# 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::addtions 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/Carpet/doxygen/README b/Carpet/doxygen/README
new file mode 100644
index 000000000..746fc0270
--- /dev/null
+++ b/Carpet/doxygen/README
@@ -0,0 +1,16 @@
+$Header: /home/eschnett/C/carpet/Carpet/Carpet/doxygen/README,v 1.1 2003/11/05 21:04:37 schnetter Exp $
+
+This directory contains, in CVS, the Doxygen configuration file. The
+generated documentation will also be placed here, but should not go
+into CVS.
+
+Create the Doxygen configuration by running the command
+
+ doxygen doxygen/Doxyfile
+
+from one directory up, i.e. from the Carpet arrangement directory.
+This will create html documentation in a subdirectory html, and latex
+documentation in a subdirectory latex. The latex subdirectory
+contains a makefile that creates pdf from the latex sources.
+
+-erik